[1f1f858] | 1 | ------------------------------------------------------------------------
|
---|
| 2 | RecursiveTools FastJet contrib
|
---|
| 3 | ------------------------------------------------------------------------
|
---|
| 4 |
|
---|
| 5 | The RecursiveTools FastJet contrib aims to provide a common contrib
|
---|
| 6 | for a number of tools that involve recursive reclustering/declustering
|
---|
| 7 | of a jet for tagging or grooming purposes.
|
---|
| 8 |
|
---|
| 9 | Currently it contains:
|
---|
| 10 |
|
---|
| 11 | - ModifiedMassDropTagger
|
---|
| 12 | This corresponds to arXiv:1307.0007 by Mrinal Dasgupta, Alessandro
|
---|
| 13 | Fregoso, Simone Marzani and Gavin P. Salam
|
---|
| 14 |
|
---|
| 15 | - SoftDrop
|
---|
| 16 | This corresponds to arXiv:1402.2657 by Andrew J. Larkoski, Simone
|
---|
| 17 | Marzani, Gregory Soyez, Jesse Thaler
|
---|
| 18 |
|
---|
| 19 | - Recluster
|
---|
| 20 | A generic tool to recluster a given jet into subjets
|
---|
| 21 | Note: this is largely based on the Filter code in FastJet v3.0 and
|
---|
| 22 | ultimately, this tool will probably be moved into FastJet
|
---|
| 23 |
|
---|
| 24 | The interface for these tools is described in more detail below, with
|
---|
| 25 | all of the available options documented in the header files.
|
---|
| 26 |
|
---|
| 27 | One note about nomenclature. A groomer is a procedure that takes a
|
---|
| 28 | PseudoJet and always returns another (non-zero) PseudoJet. A tagger is
|
---|
| 29 | a procedure that takes a PseudoJet, and either returns another PseudoJet
|
---|
| 30 | (i.e. tags it) or returns an empty PseudoJet (i.e. doesn't tag it).
|
---|
| 31 |
|
---|
| 32 | ------------------------------------------------------------------------
|
---|
| 33 | ModifiedMassDropTagger
|
---|
| 34 | ------------------------------------------------------------------------
|
---|
| 35 |
|
---|
| 36 | The Modified Mass Drop Tagger (mMDT) recursively declusters a jet,
|
---|
| 37 | following the largest pT subjet until a pair of subjets is found that
|
---|
| 38 | satisfy the symmetry condition on the energy sharing
|
---|
| 39 |
|
---|
| 40 | z > z_cut
|
---|
| 41 |
|
---|
| 42 | where z_cut is a predetermined value. By default, z is calculated as
|
---|
| 43 | the scalar pT fraction of the softest subjet. Note that larger values
|
---|
| 44 | of z_cut correspond to a more restrictive tagging criteria.
|
---|
| 45 |
|
---|
| 46 | By default, mMDT will first recluster the jet using the CA clustering
|
---|
| 47 | algorithm, which means that mMDT can be called on any jet, regardless
|
---|
| 48 | of the original jet finding measure.
|
---|
| 49 |
|
---|
| 50 | A default mMDT can be created via
|
---|
| 51 |
|
---|
| 52 | double z_cut = 0.10;
|
---|
| 53 | ModifiedMassDropTagger mMDT(z_cut);
|
---|
| 54 |
|
---|
| 55 | More options are available in the full constructor. To apply mMDT,
|
---|
| 56 | one simply calls it on the jet of interest.
|
---|
| 57 |
|
---|
| 58 | PseudoJet tagged_jet = mMDT(original_jet);
|
---|
| 59 |
|
---|
| 60 | Note that mMDT is a tagger, such that tagged_jet will only be non-zero
|
---|
| 61 | if the symmetry cut z > z_cut is satisfied by some branching of the
|
---|
| 62 | clustering tree.
|
---|
| 63 |
|
---|
| 64 | To gain additional information about the mMDT procedure, one can use
|
---|
| 65 |
|
---|
| 66 | tagged_jet.structure_of<ModifiedMassDropTagger>()
|
---|
| 67 |
|
---|
| 68 | which gives access to information about the delta_R between the tagged
|
---|
| 69 | subjets, their z value, etc.
|
---|
| 70 |
|
---|
| 71 | ------------------------------------------------------------------------
|
---|
| 72 | SoftDrop
|
---|
| 73 | ------------------------------------------------------------------------
|
---|
| 74 |
|
---|
| 75 | The SoftDrop procedure is very similar to mMDT, albeit with a
|
---|
| 76 | generalized symmetry condition:
|
---|
| 77 |
|
---|
| 78 | z > z_cut * (R / R0)^beta
|
---|
| 79 |
|
---|
| 80 | Note that larger z_cut and smaller beta correspond to more aggressive
|
---|
| 81 | grooming of the jet.
|
---|
| 82 |
|
---|
| 83 | SoftDrop is intended to be used as a groomer (instead of as a tagger),
|
---|
| 84 | such that if the symmetry condition fails throughout the whole
|
---|
| 85 | clustering tree, SoftDrop will still return a single particle in the
|
---|
| 86 | end. Apart from the tagger/groomer distinction, SoftDrop with beta=0 is
|
---|
| 87 | the same as mMDT.
|
---|
| 88 |
|
---|
| 89 | A default SoftDrop groomer can be created via:
|
---|
| 90 |
|
---|
| 91 | double z_cut = 0.10;
|
---|
| 92 | double beta = 2.0;
|
---|
| 93 | double R0 = 1.0; // this is the default value
|
---|
| 94 | SoftDrop sd(z_cut,beta,R0);
|
---|
| 95 |
|
---|
| 96 | and acts on a desired jet as
|
---|
| 97 |
|
---|
| 98 | PseudoJet groomed_jet = sd(original_jet);
|
---|
| 99 |
|
---|
| 100 | and additional information can be obtained via
|
---|
| 101 |
|
---|
| 102 | groomed_jet.structure_of<SoftDrop>()
|
---|
| 103 |
|
---|
| 104 | SoftDrop is typically called with beta > 0, though beta < 0 is still a
|
---|
| 105 | viable option. Because beta < 0 is infrared-collinear unsafe in
|
---|
| 106 | grooming mode, one probably wants to switch to tagging mode for negative
|
---|
| 107 | beta, via set_tagging_mode().
|
---|
| 108 |
|
---|
| 109 | ------------------------------------------------------------------------
|
---|
| 110 | Recluster
|
---|
| 111 | ------------------------------------------------------------------------
|
---|
| 112 |
|
---|
| 113 | The Recluster class allows the constituents of a jet to be reclustered
|
---|
| 114 | with a different recursive clustering algorithm. This is used
|
---|
| 115 | internally in the mMDT/SoftDrop code in order to recluster the jet using
|
---|
| 116 | the CA algorithm. This is achieved via
|
---|
| 117 |
|
---|
| 118 | Recluster ca_reclusterer(cambridge_algorithm,
|
---|
| 119 | JetDefinition::max_allowable_R);
|
---|
| 120 | PseudoJet reclustered_jet = ca_reclusterer(original_jet);
|
---|
| 121 |
|
---|
| 122 | Note that reclustered_jet creates a new ClusterSequence that knows to
|
---|
| 123 | delete_self_when_unused.
|
---|
| 124 |
|
---|
| 125 |
|
---|
| 126 | ------------------------------------------------------------------------
|
---|
| 127 | Changing behaviour
|
---|
| 128 | ------------------------------------------------------------------------
|
---|
| 129 |
|
---|
| 130 | The behaviour of the ModifiedMassDropTagger and SoftDrop classes can
|
---|
| 131 | be tweaked using the following options:
|
---|
| 132 |
|
---|
| 133 | SymmetryMeasure = {scalar_z,vector_z,y} [constructor argument]
|
---|
| 134 | : The definition of the energy sharing between subjets, with 0
|
---|
| 135 | corresponding to the most asymmetric
|
---|
| 136 |
|
---|
| 137 | RecursionChoice = {larger_pt,larger_mt,larger_m} [constructor argument]
|
---|
| 138 | : The path to recurse through the tree after the symmetry condition
|
---|
| 139 | fails
|
---|
| 140 |
|
---|
| 141 | mu_cut [constructor argument]
|
---|
| 142 | : An optional mass drop condition
|
---|
| 143 |
|
---|
| 144 | set_subtractor(subtractor*) [or subtracter as a constructor argument]
|
---|
| 145 | : provide a subtractor. When a subtractor is supplied, the
|
---|
| 146 | kinematic constraints are applied on subtracted 4-vectors. In
|
---|
| 147 | this case, the result of the ModifiedMassDropTagger/SoftDrop is a
|
---|
| 148 | subtracted PseudoJet, and it is assumed that
|
---|
| 149 | ModifiedMassDropTagger/SoftDrop is applied to an unsubtracted jet.
|
---|
| 150 | The latter default can be changed by calling
|
---|
| 151 | set_input_jet_is_subtracted().
|
---|
| 152 |
|
---|
| 153 | set_reclustering(bool, Recluster*)
|
---|
| 154 | : An optional setting to recluster a jet with a different jet
|
---|
| 155 | recursive jet algorithm. The code is only designed to give sensible
|
---|
| 156 | results with the CA algorithm, but other reclustering algorithm
|
---|
| 157 | (especially kT) may be appropriate in certain contexts.
|
---|
| 158 | Use at your own risk.
|
---|
| 159 |
|
---|
| 160 | set_grooming_mode()/set_tagging_mode()
|
---|
| 161 | : In grooming mode, the algorithm will return a single particle if the
|
---|
| 162 | symmetry condition fails for the whole tree. In tagging mode, the
|
---|
| 163 | algorithm will return an zero PseudoJet if no symmetry conditions
|
---|
| 164 | passes. Note that ModifiedMassDropTagger defaults to tagging mode
|
---|
| 165 | and SoftDrop defaults to grooming mode.
|
---|
| 166 |
|
---|
| 167 | ------------------------------------------------------------------------
|
---|
| 168 | Technical Details
|
---|
| 169 | ------------------------------------------------------------------------
|
---|
| 170 |
|
---|
| 171 | Both ModifiedMassDropTagger and SoftDrop inherit from
|
---|
| 172 | RecursiveSymmetryCutBase, which provides a common codebase for recursive
|
---|
| 173 | declustering of a jet with a symmetry cut condition. A generic
|
---|
| 174 | RecursiveSymmetryCutBase depends on the following (virtual) functions
|
---|
| 175 | (see header file for exact full specs, including constness):
|
---|
| 176 |
|
---|
| 177 | double symmetry_cut_fn(PseudoJet &, PseudoJet &)
|
---|
| 178 | : The function that defines the symmetry cut. This is what actually
|
---|
| 179 | defines different recursive declustering schemes, and all classes
|
---|
| 180 | that inherit from RecursiveSymmetryCutBase must define this
|
---|
| 181 | function.
|
---|
| 182 |
|
---|
| 183 | string symmetry_cut_description()
|
---|
| 184 | : the string description of the symmetry cut.
|
---|
| 185 |
|
---|
| 186 | ------------------------------------------------------------------------
|
---|