1 | // $Id: ModifiedMassDropTagger.hh 1032 2017-07-31 14:20:03Z gsoyez $
|
---|
2 | //
|
---|
3 | // Copyright (c) 2014-, Gavin P. Salam
|
---|
4 | // based on arXiv:1307.007 by Mrinal Dasgupta, Simone Marzani and Gavin P. Salam
|
---|
5 | //
|
---|
6 | //----------------------------------------------------------------------
|
---|
7 | // This file is part of FastJet contrib.
|
---|
8 | //
|
---|
9 | // It is free software; you can redistribute it and/or modify it under
|
---|
10 | // the terms of the GNU General Public License as published by the
|
---|
11 | // Free Software Foundation; either version 2 of the License, or (at
|
---|
12 | // your option) any later version.
|
---|
13 | //
|
---|
14 | // It is distributed in the hope that it will be useful, but WITHOUT
|
---|
15 | // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
---|
16 | // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
---|
17 | // License for more details.
|
---|
18 | //
|
---|
19 | // You should have received a copy of the GNU General Public License
|
---|
20 | // along with this code. If not, see <http://www.gnu.org/licenses/>.
|
---|
21 | //----------------------------------------------------------------------
|
---|
22 |
|
---|
23 | #ifndef __FASTJET_CONTRIB_MODIFIEDMASSDROPTAGGER_HH__
|
---|
24 | #define __FASTJET_CONTRIB_MODIFIEDMASSDROPTAGGER_HH__
|
---|
25 |
|
---|
26 | #include "RecursiveSymmetryCutBase.hh"
|
---|
27 |
|
---|
28 | FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
|
---|
29 |
|
---|
30 | namespace contrib{
|
---|
31 |
|
---|
32 | //------------------------------------------------------------------------
|
---|
33 | /// \class ModifiedMassDropTagger
|
---|
34 | /// An implementation of the modified Mass-Drop Tagger from arXiv:1307.0007.
|
---|
35 | ///
|
---|
36 | class ModifiedMassDropTagger : public RecursiveSymmetryCutBase {
|
---|
37 | public:
|
---|
38 |
|
---|
39 | /// Simplified constructor, which takes just a symmetry cut (applied
|
---|
40 | /// on the scalar_z variable) and an optional subtractor.
|
---|
41 | ///
|
---|
42 | /// In this incarnation the ModifiedMassDropTagger is a bit of a
|
---|
43 | /// misnomer, because there is no mass-drop condition
|
---|
44 | /// applied. Recursion into the jet structure chooses the prong with
|
---|
45 | /// largest pt. (Results from arXiv:1307.0007 were based on the
|
---|
46 | /// largest mt, but this only makes a difference for values of the
|
---|
47 | /// symmetry_cut close to 1/2).
|
---|
48 | ///
|
---|
49 | /// If the (optional) pileup subtractor can be supplied, then see
|
---|
50 | /// also the documentation for the set_input_jet_is_subtracted() member
|
---|
51 | /// function.
|
---|
52 | ///
|
---|
53 | /// NB: The configuration of MMDT provided by this constructor is
|
---|
54 | /// probably the most robust for use with subtraction.
|
---|
55 | ModifiedMassDropTagger(double symmetry_cut,
|
---|
56 | const FunctionOfPseudoJet<PseudoJet> * subtractor = 0
|
---|
57 | ) :
|
---|
58 | RecursiveSymmetryCutBase(scalar_z, // the default SymmetryMeasure
|
---|
59 | std::numeric_limits<double>::infinity(), // the default is no mass drop
|
---|
60 | larger_pt, // the default RecursionChoice
|
---|
61 | subtractor),
|
---|
62 | _symmetry_cut(symmetry_cut)
|
---|
63 | {}
|
---|
64 |
|
---|
65 | /// Full constructor, which takes the following parameters:
|
---|
66 | ///
|
---|
67 | /// \param symmetry_cut the value of the cut on the symmetry measure
|
---|
68 | /// \param symmetry_measure the choice of measure to use to estimate the symmetry
|
---|
69 | /// \param mu_cut the maximal allowed value of mass drop variable mu = m_heavy/m_parent
|
---|
70 | /// \param recursion_choice the strategy used to decide which subjet to recurse into
|
---|
71 | /// \param subtractor an optional pointer to a pileup subtractor (ignored if zero)
|
---|
72 | ///
|
---|
73 | /// To obtain the mMDT as discussed in arXiv:1307.0007, use an
|
---|
74 | /// symmetry_measure that's one of the following
|
---|
75 | ///
|
---|
76 | /// - RecursiveSymmetryCutBase::y (for a cut on y)
|
---|
77 | /// - RecursiveSymmetryCutBase::scalar_z (for a cut on z)
|
---|
78 | ///
|
---|
79 | /// and use the default recursion choice of
|
---|
80 | /// RecursiveSymmetryCutBase::larger_pt (larger_mt will give something
|
---|
81 | /// very similar, while larger_m will give the behaviour of the
|
---|
82 | /// original, but now deprecated MassDropTagger)
|
---|
83 | ///
|
---|
84 | /// Notes:
|
---|
85 | ///
|
---|
86 | /// - By default the ModifiedMassDropTagger will relcuster the jets
|
---|
87 | /// with the C/A algorithm (if needed).
|
---|
88 | ///
|
---|
89 | /// - the mu_cut parameter is mostly irrelevant when it's taken
|
---|
90 | /// larger than about 1/2: the tagger is then one that cuts
|
---|
91 | /// essentially on the (a)symmetry of the jet's momentum
|
---|
92 | /// sharing. The default value of infinity turns off its use
|
---|
93 | /// entirely
|
---|
94 | ModifiedMassDropTagger(double symmetry_cut,
|
---|
95 | SymmetryMeasure symmetry_measure,
|
---|
96 | double mu_cut = std::numeric_limits<double>::infinity(),
|
---|
97 | RecursionChoice recursion_choice = larger_pt,
|
---|
98 | const FunctionOfPseudoJet<PseudoJet> * subtractor = 0
|
---|
99 | ) :
|
---|
100 | RecursiveSymmetryCutBase(symmetry_measure, mu_cut, recursion_choice, subtractor),
|
---|
101 | _symmetry_cut(symmetry_cut)
|
---|
102 | {}
|
---|
103 |
|
---|
104 | /// default destructor
|
---|
105 | virtual ~ModifiedMassDropTagger(){}
|
---|
106 |
|
---|
107 | //----------------------------------------------------------------------
|
---|
108 | // access to class info
|
---|
109 | double symmetry_cut() const { return _symmetry_cut; }
|
---|
110 |
|
---|
111 | protected:
|
---|
112 |
|
---|
113 | /// The symmetry cut function for MMDT returns just a constant, since the cut value
|
---|
114 | /// has no dependence on the subjet kinematics
|
---|
115 | virtual double symmetry_cut_fn(const PseudoJet & /* p1 */,
|
---|
116 | const PseudoJet & /* p2 */,
|
---|
117 | void *extra_parameters = 0
|
---|
118 | ) const {return _symmetry_cut;}
|
---|
119 | virtual std::string symmetry_cut_description() const;
|
---|
120 |
|
---|
121 | double _symmetry_cut;
|
---|
122 | };
|
---|
123 |
|
---|
124 | } // namespace contrib
|
---|
125 |
|
---|
126 | FASTJET_END_NAMESPACE
|
---|
127 |
|
---|
128 | #endif // __FASTJET_CONTRIB_MODIFIEDMASSDROPTAGGER_HH__
|
---|