[35cdc46] | 1 | --------------------------------------------------------------------------------
|
---|
| 2 | Nsubjettiness Package
|
---|
| 3 | --------------------------------------------------------------------------------
|
---|
| 4 |
|
---|
| 5 | The Nsubjettiness package is based on the physics described in:
|
---|
| 6 |
|
---|
| 7 | Identifying Boosted Objects with N-subjettiness.
|
---|
| 8 | Jesse Thaler and Ken Van Tilburg.
|
---|
| 9 | JHEP 1103:015 (2011), arXiv:1011.2268.
|
---|
| 10 |
|
---|
| 11 | Maximizing Boosted Top Identification by Minimizing N-subjettiness.
|
---|
| 12 | Jesse Thaler and Ken Van Tilburg.
|
---|
| 13 | JHEP 1202:093 (2012), arXiv:1108.2701.
|
---|
| 14 |
|
---|
| 15 | New in v2.0 is the winner-take-all axis, which is described in:
|
---|
| 16 |
|
---|
| 17 | Jet Shapes with the Broadening Axis.
|
---|
| 18 | Andrew J. Larkoski, Duff Neill, and Jesse Thaler.
|
---|
| 19 | JHEP 1404:017 (2014), arXiv:1401.2158.
|
---|
| 20 |
|
---|
| 21 | as well as in unpublished work by Gavin Salam.
|
---|
| 22 |
|
---|
| 23 | --------------------------------------------------------------------------------
|
---|
| 24 | Core Classes
|
---|
| 25 | --------------------------------------------------------------------------------
|
---|
| 26 |
|
---|
| 27 | There are various ways to access N-(sub)jettiness variables, described
|
---|
| 28 | in more detail below:
|
---|
| 29 |
|
---|
| 30 | Nsubjettiness [Nsubjettiness.hh]:
|
---|
| 31 | A FunctionOfPseudoJet<double> interface to measure N-subjettiness
|
---|
| 32 | (Recommended for most users)
|
---|
| 33 | NsubjettinessRatio [Nsubjettiness.hh]:
|
---|
| 34 | A FunctionOfPseudoJet<double> interface to measure ratios of
|
---|
| 35 | two different N-subjettiness (i.e. tau3/tau2)
|
---|
| 36 | NjettinessPlugin [NjettinessPlugin.hh]:
|
---|
| 37 | A FastJet plugin for finding jets by minimizing N-jettiness
|
---|
| 38 | (Recommended for advanced users)
|
---|
| 39 | Njettiness [Njettiness.hh]:
|
---|
| 40 | Access to the core Njettiness code.
|
---|
| 41 | (Not recommended for users, since the interface might change)
|
---|
| 42 |
|
---|
| 43 | The code assumes that you have FastJet 3.
|
---|
| 44 |
|
---|
| 45 | --------------------------------------------------------------------------------
|
---|
| 46 | Basic Usage: Nsubjettiness and NsubjettinessRatio [Nsubjettiness.hh]
|
---|
| 47 | --------------------------------------------------------------------------------
|
---|
| 48 |
|
---|
| 49 | Most users will only need to use the Nsubjettiness class. The basic
|
---|
| 50 | functionality is given by:
|
---|
| 51 |
|
---|
| 52 | Nsubjettiness nSub(N, AxesDefinition, MeasureDefinition)
|
---|
| 53 | // N specifies the number of (sub) jets to measure
|
---|
| 54 | // AxesDefinition is WTA_KT_Axes, OnePass_KT_Axes, etc.
|
---|
| 55 | // MeasureDefinition is UnnormalizedMeasure(beta),
|
---|
| 56 | // NormalizedMeasure(beta,R0), etc.
|
---|
| 57 |
|
---|
| 58 | // get tau value
|
---|
| 59 | double tauN = nSub.result(PseudoJet);
|
---|
| 60 |
|
---|
| 61 | Also available are ratios of N-subjettiness values
|
---|
| 62 | NsubjettinessRatio nSubRatio(N, M, AxesDefinition,
|
---|
| 63 | MeasureDefinition)
|
---|
| 64 | // N and M give tau_N / tau_M, all other options the same
|
---|
| 65 |
|
---|
| 66 | --------------------------------------------------------------------------------
|
---|
| 67 | AxesDefinition [NjettinessDefinition.hh]
|
---|
| 68 | --------------------------------------------------------------------------------
|
---|
| 69 |
|
---|
| 70 | N-(sub)jettiness requires choosing axes as well as a measure (see below). There
|
---|
| 71 | are a number of axes choices available to the user, though modes with a (*) are
|
---|
| 72 | recommended. Arguments in parentheses are parameters that the user must set.
|
---|
| 73 |
|
---|
| 74 | Axes can be found using standard recursive clustering procedures. New is the
|
---|
| 75 | option to use the "winner-take-all" recombination scheme:
|
---|
| 76 | (*) KT_Axes // exclusive kt axes
|
---|
| 77 | CA_Axes // exclusive ca axes
|
---|
| 78 | AntiKT_Axes(R0) // inclusive hardest axes with antikt, R0 = radius
|
---|
| 79 | (*) WTA_KT_Axes // exclusive kt with winner-take-all recombination
|
---|
| 80 | WTA_CA_Axes // exclusive ca with winner-take-all recombination
|
---|
| 81 |
|
---|
| 82 | One can also run a minimization routine to find a (local) minimum of
|
---|
| 83 | N-(sub)jettiness:
|
---|
| 84 | (*) OnePass_KT_Axes // one-pass minimization from kt starting point
|
---|
| 85 | OnePass_CA_Axes // one-pass min. from ca starting point
|
---|
| 86 | OnePass_AntiKT(R0) // one-pass min. from antikt starting point,R0=rad
|
---|
| 87 | (*) OnePass_WTA_KT_Axes // one-pass min. from wta_kt starting point
|
---|
| 88 | OnePass_WTA_CA_Axes // one-pass min. from wta_ca starting point
|
---|
| 89 |
|
---|
| 90 | In general, it is difficult to finding the global minimum, but this mode
|
---|
| 91 | attempts to do so
|
---|
| 92 | MultiPass_Axes(Npass) // axes that (attempt to) minimize N-subjettiness
|
---|
| 93 | // (NPass = 100 is typical)
|
---|
| 94 |
|
---|
| 95 | Finally, one can set manual axes:
|
---|
| 96 | Manual_Axes // set your own axes with setAxes()
|
---|
| 97 | OnePass_Manual_Axes // one-pass minimization from manual starting point
|
---|
| 98 |
|
---|
| 99 | For most cases, running with OnePass_KT_Axes or OnePass_WTA_KT_Axes gives
|
---|
| 100 | reasonable results (and the results are IRC safe). Because it uses random
|
---|
| 101 | number seeds, MultiPass_Axes is not IRC safe (and the code is rather slow). Note
|
---|
| 102 | that for the minimization routines, beta = 1.1 is faster than beta = 1, with
|
---|
| 103 | comparable performance.
|
---|
| 104 |
|
---|
| 105 | --------------------------------------------------------------------------------
|
---|
| 106 | MeasureDefinition [NjettinessDefinition.hh]
|
---|
| 107 | --------------------------------------------------------------------------------
|
---|
| 108 |
|
---|
| 109 | At the moment, there are only a few measures. Note that each one has a
|
---|
| 110 | different number of parameters. The one indicated by (*)
|
---|
| 111 | is the one recommended for use by users new to Nsubjettiness.
|
---|
| 112 |
|
---|
| 113 | The original N-subjettiness measures are:
|
---|
| 114 | NormalizedMeasure(beta,R0) //default normalized measure with
|
---|
| 115 | //parameters beta and R0 (dimensionless)
|
---|
| 116 | (*) UnnormalizedMeasure(beta) //default unnormalized measure with just
|
---|
| 117 | //parameter beta (dimensionful)
|
---|
| 118 |
|
---|
| 119 | There are also measures that incorporate a radial cutoff:
|
---|
| 120 | NormalizedCutoffMeasure(beta,R0,Rcutoff) //normalized measure with
|
---|
| 121 | //additional Rcutoff
|
---|
| 122 | UnnormalizedCutoffMeasure(beta,Rcutoff) //unnormalized measure with
|
---|
| 123 | //additional Rcutoff
|
---|
| 124 |
|
---|
| 125 | In beta testing are "geometric" measures where distances are measured using the
|
---|
| 126 | Lorentz dot product (N.B. the formula for the geometric measure is likely to
|
---|
| 127 | change since there should be separate beam and jet beta factors.)
|
---|
| 128 | GeometricMeasure(beta) //geometric measure with exponent beta
|
---|
| 129 | GeometricCutoffMeasure(beta,Rcutoff) //geometric measure with Rcutoff
|
---|
| 130 |
|
---|
| 131 | --------------------------------------------------------------------------------
|
---|
| 132 | A note on beta dependence
|
---|
| 133 | --------------------------------------------------------------------------------
|
---|
| 134 |
|
---|
| 135 | The angular exponent in N-subjettiness is called beta. The original
|
---|
| 136 | N-subjettiness paper advocated beta = 1, but it is now understood that different
|
---|
| 137 | beta values can be useful in different contexts. The two main choices are:
|
---|
| 138 |
|
---|
| 139 | beta = 1: aka broadening/girth/width measure
|
---|
| 140 | wta_kt_axes are approximately the same as minimizing beta = 1 measure
|
---|
| 141 |
|
---|
| 142 | beta = 2: aka thrust/mass measure
|
---|
| 143 | kt_axes are approximately the same as minimizing beta = 2 measure
|
---|
| 144 |
|
---|
| 145 | N.B. The minimization routines are only valid for 1 < beta < 3.
|
---|
| 146 |
|
---|
| 147 | For quark/gluon discrimination with N = 1, beta~0.2 with wta_kt_axes appears
|
---|
| 148 | to be a good choice.
|
---|
| 149 |
|
---|
| 150 | --------------------------------------------------------------------------------
|
---|
| 151 | TauComponents [MeasureFunction.hh]
|
---|
| 152 | --------------------------------------------------------------------------------
|
---|
| 153 |
|
---|
| 154 | For most users, they will only need the value of N-subjettiness (i.e. tau)
|
---|
| 155 | itself. For advanced users, they can access individual tau components (i.e.
|
---|
| 156 | the individual numerator pieces, the denominator, etc.)
|
---|
| 157 |
|
---|
| 158 | TauComponents tauComp = nSub.component_result(jet);
|
---|
| 159 | vector<double> numer = tauComp.jet_pieces_numerator(); //tau for each subjet
|
---|
| 160 | double denom = tauComp.denominator(); //normalization factor
|
---|
| 161 |
|
---|
| 162 | --------------------------------------------------------------------------------
|
---|
| 163 | WinnerTakeAllRecombiner [WinnerTakeAllRecombiner.hh]
|
---|
| 164 | --------------------------------------------------------------------------------
|
---|
| 165 |
|
---|
| 166 | New for version 2.0 of Nsubjettiness are winner-take-all axes. They are found
|
---|
| 167 | with the help of the WinnerTakeAllRecombiner. This class defines a new
|
---|
| 168 | recombination scheme for clustering particles. This scheme recombines two
|
---|
| 169 | PseudoJets into a PseudoJet with pT of the sum of the two input PseudoJet pTs
|
---|
| 170 | and direction of the harder PseudoJet. This is a "recoil-free" recombination
|
---|
| 171 | scheme that guarantees that the axes is aligned with one of the input particles.
|
---|
| 172 | It is IRC safe. Axes found with the standard E-scheme recombiner at similar to
|
---|
| 173 | the beta = 2 minimization, while winner-take-all is similar to the beta = 1
|
---|
| 174 | measure.
|
---|
| 175 |
|
---|
| 176 | Note that the WinnerTakeAllRecombiner can be used outside of Nsubjettiness
|
---|
| 177 | itself for jet finding. For example, the direction of anti-kT jets found
|
---|
| 178 | with the WinnerTakeAllRecombiner is particularly robust against soft jet
|
---|
| 179 | contamination.
|
---|
| 180 |
|
---|
| 181 | --------------------------------------------------------------------------------
|
---|
| 182 | Advanced Usage: NjettinessPlugin [NjettinessPlugin.hh]
|
---|
| 183 | --------------------------------------------------------------------------------
|
---|
| 184 |
|
---|
| 185 | The Njettiness FastJet plugin represents an exclusive jet finder (yielding a
|
---|
| 186 | fixed N number of jets). The algorithm finds N axes, and jets are simply the sum
|
---|
| 187 | of particles closest to a given axis (or unclustered if they are closest to the
|
---|
| 188 | beam). The axes finding methods and measures are the same as for Nsubjettiness.
|
---|
| 189 |
|
---|
| 190 | NjettinessPlugin plugin(N, AxesDefinition, MeasureDefinition);
|
---|
| 191 | JetDefinition def(&plugin);
|
---|
| 192 | ClusterSequence cs(vector<PseudoJet>,def);
|
---|
| 193 | vector<PseudoJet> jets = cs.inclusive_jets();
|
---|
| 194 |
|
---|
| 195 | Note that despite being an exclusive jet algorithm, one finds the jets using the
|
---|
| 196 | inclusive_jets() call.
|
---|
| 197 |
|
---|
| 198 | --------------------------------------------------------------------------------
|
---|
| 199 | Very Advanced Usage: Njettiness [Njettiness.hh]
|
---|
| 200 | --------------------------------------------------------------------------------
|
---|
| 201 |
|
---|
| 202 | Most users will want to use the Nsubjettiness or NjettinessPlugin classes to
|
---|
| 203 | access N-(sub)jettiness information. For direct access to the Njettiness class,
|
---|
| 204 | one can use Njettiness.hh directly. This class is still evolving, so users who
|
---|
| 205 | wish to extend its functionality should contact the authors first.
|
---|
| 206 |
|
---|
| 207 | --------------------------------------------------------------------------------
|
---|
| 208 | Technical Details
|
---|
| 209 | --------------------------------------------------------------------------------
|
---|
| 210 |
|
---|
| 211 | In general, the user will never need access to these header files. Here is a
|
---|
| 212 | brief description about how they are used to help the calculation of
|
---|
| 213 | N-(sub)jettiness:
|
---|
| 214 |
|
---|
| 215 | AxesFinder.hh:
|
---|
| 216 |
|
---|
| 217 | The AxesFinder class (and derived classes) defines the axes used in the
|
---|
| 218 | calculation of N-(sub)jettiness. These axes can be defined from the exclusive
|
---|
| 219 | jets from a kT or CA algorithm, the hardest jets from an anti-kT algorithm,
|
---|
| 220 | manually, or from minimization of N-jettiness. In the future, the user will be
|
---|
| 221 | able to write their own axes finder, though currently the interface is still
|
---|
| 222 | evolving. At the moment, the user should stick to the options allowed by
|
---|
| 223 | AxesDefinition.
|
---|
| 224 |
|
---|
| 225 | MeasureFunction.hh:
|
---|
| 226 |
|
---|
| 227 | The MeasureFunction class (and derived classes) defines the measure by which
|
---|
| 228 | N-(sub)jettiness is calculated. This measure is calculated between each
|
---|
| 229 | particle and its corresponding axis, and then summed and normalized to
|
---|
| 230 | produce N-(sub)jettiness. The default measure for this calculation is
|
---|
| 231 | pT*dR^beta, where dR is the rapidity-azimuth distance between the particle
|
---|
| 232 | and its axis, and beta is the angular exponent. Again, in the future the user
|
---|
| 233 | will be able to write their own measures, but for the time being, only the
|
---|
| 234 | predefined MeasureDefinition values should be used.
|
---|
| 235 |
|
---|
| 236 | --------------------------------------------------------------------------------
|
---|
| 237 | Known Issues
|
---|
| 238 | --------------------------------------------------------------------------------
|
---|
| 239 |
|
---|
| 240 | -- The MultiPass_Axes mode gives different answers on different runs, since
|
---|
| 241 | random numbers are used.
|
---|
| 242 | -- In rare cases, one pass minimization can give a larger value of Njettiness
|
---|
| 243 | than without minimization.
|
---|
| 244 | -- Nsubjettiness is not thread safe, since there are mutables in Njettiness.
|
---|