The JetsWithoutJets package is based on the physics described in:
Jet Observables Without Jet Algorithms
Daniele Bertolini, Tucker Chan, and Jesse Thaler
arXiv: 13xx.xxxx
---
----------------------
Shape Trimming
----------------------
* Shape trimming is implemented as a Selector, in analogy with other grooming procedures in FastJet. SelectorShapeTrimming takes four arguments in its constructor.
* The trimmer works by taking every particle i, and only keeping particles that satisfy the criteria pTi,Rsub > fcut * pTi,Rjet. Here, pTi,R is the radiation contained within a radius R of particle i.
----------------------
Jet-like Event Shapes
----------------------
* The various event shapes described in the physics paper derive from JetLikeEventShape. The included examples are:
ShapeJetMultiplicity: "counts" the number of jets
ShapeScalarPt: a.k.a. HT = sum_i pTjet_i
ShapeScalarPtToN: sum_i (pTjet_i)^N
ShapeSummedMass: Sum of invariant masses
ShapeSummedMassSquared: Sum of invariant mass-squared
ShapeMissingPt: Magnitude of missing transverse momentum
ShapeTrimmedSubjetMultiplicity: "counts" number of kept trimmed subjets
Other functions will be added upon request.
* All of the JetLikeEventShapes can be called using two constructors, one that gives the default version of the event shape that only has a jet radius Rjet and pT threshold pTcut:
Once constructed they can be used using the () or result() command acting on a vector<PseudoJet>.
* Note that Nj_trim(inputs) is not the same as Nj(trimmer(input)). In the case of the built-in trimming, the trimming criteria are implemented as theta functions in the event shape, so quantities like pTi,R are untrimmed. In the case of the external trimmer, particles are removed prior to calculating pT values, so pTi,R is already trimmed. We have left in both versions of the algorithm, since it is not clear a priori which method will be better when combined with area subtraction.
----------------------
Variable pT and variable R
----------------------
* As described in the physics paper, it is possible to vary the pT or R values without having to fully recalculate the event shapes. At the moment, only variable pT cuts have been implemented as a general class JetLikeEventShape_VariablePtCut. After using the set_input() function on a vector<PseudoJet>, you can find the eventShapeFor() a given value of the pT cut, or the ptCutFor() a given value of the event shape. It is also possible to get the full array of pTcut and eventShape values.
* For the case of jet multiplicity, there is a pre-built class for ShapeJetMultiplicity_VariablePtCut. This includes an offset value by default, such that ptCutFor(n) gives the value of the event shape at (n - 0.5), as explained in the physics paper. This offset can be changed in the constructor.
* The only variable R event shape at the moment is ShapeJetMultiplicity_VariableR. For this class, there is only eventShapeFor() a given value of pT cut, because the inverse function is not single-valued. One can still get the full array of R and eventShape values. Because of the computational costs of doing the variable R procedure, we have not implemented this as a general class.
----------------------
Technical Details
----------------------
* All of the jet-like event shapes ultimately derive from "MyFunctionOfVectorOfPseudoJets". This class is similar to fastjet::FunctionOfPseudoJet, except it returns the result() acting on a vector<PseudoJet>. We anticipate that this functionality will be added to FastJet in the future, hence the "My" prefix to avoid naming conflicts in the future.
* To build one's own JetLikeEventShape, all one needs to write is a function acting on the constituents of a jet, written as a functor derived from MyFunctionOfVectorOfPseudoJets<double>. For example, FunctorJetCount was used to build ShapeJetMultiplicity.
* At present, JetLikeEventShape only returns a double. This means that cases like ShapeMissingPt (which are fundamentally based on a transverse vector) have to be coded separately. In the future, we may add the option for JetLikeEventShape to return an arbitrary class.