1 | //STARTHEADER |
---|
2 | // $Id: MassDropTagger.hh 2731 2011-11-21 12:15:21Z soyez $ |
---|
3 | // |
---|
4 | // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez |
---|
5 | // |
---|
6 | //---------------------------------------------------------------------- |
---|
7 | // This file is part of FastJet. |
---|
8 | // |
---|
9 | // FastJet is free software; you can redistribute it and/or modify |
---|
10 | // it under the terms of the GNU General Public License as published by |
---|
11 | // the Free Software Foundation; either version 2 of the License, or |
---|
12 | // (at your option) any later version. |
---|
13 | // |
---|
14 | // The algorithms that underlie FastJet have required considerable |
---|
15 | // development and are described in hep-ph/0512210. If you use |
---|
16 | // FastJet as part of work towards a scientific publication, please |
---|
17 | // include a citation to the FastJet paper. |
---|
18 | // |
---|
19 | // FastJet is distributed in the hope that it will be useful, |
---|
20 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
21 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
22 | // GNU General Public License for more details. |
---|
23 | // |
---|
24 | // You should have received a copy of the GNU General Public License |
---|
25 | // along with FastJet. If not, see <http://www.gnu.org/licenses/>. |
---|
26 | //---------------------------------------------------------------------- |
---|
27 | //ENDHEADER |
---|
28 | |
---|
29 | #ifndef __FASTJET_MASS_DROP_TAGGER_HH__ |
---|
30 | #define __FASTJET_MASS_DROP_TAGGER_HH__ |
---|
31 | |
---|
32 | #include <fastjet/tools/Transformer.hh> |
---|
33 | #include <fastjet/LimitedWarning.hh> |
---|
34 | #include <fastjet/WrappedStructure.hh> |
---|
35 | |
---|
36 | FASTJET_BEGIN_NAMESPACE |
---|
37 | |
---|
38 | class MassDropTagger; |
---|
39 | class MassDropTaggerStructure; |
---|
40 | |
---|
41 | //---------------------------------------------------------------------- |
---|
42 | /// @ingroup tools_taggers |
---|
43 | /// \class MassDropTagger |
---|
44 | /// Class that helps perform 2-pronged boosted tagging using |
---|
45 | /// the "mass-drop" technique (with asymmetry cut) introduced by Jonathan |
---|
46 | /// Butterworth, Adam Davison, Mathieu Rubin and Gavin Salam in |
---|
47 | /// arXiv:0802.2470 in the context of a boosted Higgs search. |
---|
48 | /// |
---|
49 | /// The tagger proceeds as follows: |
---|
50 | /// |
---|
51 | /// 0. start from a jet obtained from with the Cambridge/Aachen |
---|
52 | /// algorithm |
---|
53 | /// |
---|
54 | /// 1. undo the last step of the clustering step j -> j1 + j2 (label |
---|
55 | /// them such as j1 is the most massive). |
---|
56 | /// |
---|
57 | /// 2. if there is a mass drop, i.e. m_j1/m_j < mu_cut, and the |
---|
58 | /// splitting is sufficiently symmetric, \f${\rm |
---|
59 | /// min}(p_{tj1}^2,p_{tj2}^2)\Delta R_{j1,j2}^2 > y_{\rm cut} |
---|
60 | /// m_j^2\f$, keep j as the result of the tagger (with j1 and j2 |
---|
61 | /// its 2 subjets) |
---|
62 | /// |
---|
63 | /// 3. otherwise, redefine j to be equal to j1 and return to step 1. |
---|
64 | /// |
---|
65 | /// Note that in the original proposal, j1 and j2 are both required |
---|
66 | /// to be b-tagged and a filter (with Rfilt=min(0.3,Rbb/2) and |
---|
67 | /// n_filt=3) is also applied to j to obtain the final "Higgs candidate". |
---|
68 | /// See the example \subpage Example12 for details. |
---|
69 | /// |
---|
70 | /// \section desc Options |
---|
71 | /// |
---|
72 | /// The constructor has the following arguments: |
---|
73 | /// - The first argument is the minimal mass drop that is required (mu_cut) [0.67 |
---|
74 | /// by default] |
---|
75 | /// - The second argument is the asymmetry cut (y_cut) [0.09 by default] |
---|
76 | /// |
---|
77 | /// \section input Input conditions |
---|
78 | /// |
---|
79 | /// - one must be able to successively "uncluster" the original jet |
---|
80 | /// using "has_parents" |
---|
81 | /// |
---|
82 | /// \section output Output/structure |
---|
83 | /// |
---|
84 | /// - the 2 subjets are kept as pieces if some substructure is found, |
---|
85 | /// otherwise a single 0-momentum piece is returned |
---|
86 | /// - the 'mu' and 'y' values corresponding to the unclustering step |
---|
87 | /// that passed the tagger's cuts |
---|
88 | /// |
---|
89 | /// See also \subpage Example12 for a usage example. |
---|
90 | class MassDropTagger : public Transformer{ |
---|
91 | public: |
---|
92 | /// default ctor |
---|
93 | MassDropTagger(const double mu=0.67, const double ycut=0.09) : _mu(mu), _ycut(ycut){}; |
---|
94 | |
---|
95 | /// returns a textual description of the tagger |
---|
96 | virtual std::string description() const; |
---|
97 | |
---|
98 | /// runs the tagger on the given jet and |
---|
99 | /// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise |
---|
100 | /// (standard access is through operator()). |
---|
101 | /// \param jet the PseudoJet to tag |
---|
102 | virtual PseudoJet result(const PseudoJet & jet) const; |
---|
103 | |
---|
104 | /// the type of the associated structure |
---|
105 | typedef MassDropTaggerStructure StructureType; |
---|
106 | |
---|
107 | protected: |
---|
108 | double _mu, _ycut; |
---|
109 | static LimitedWarning _warnings_nonca; |
---|
110 | }; |
---|
111 | |
---|
112 | |
---|
113 | //------------------------------------------------------------------------ |
---|
114 | /// @ingroup tools_taggers |
---|
115 | /// \class MassDropTaggerStructure |
---|
116 | /// the structure returned by the MassDropTagger transformer. |
---|
117 | /// |
---|
118 | /// See the MassDropTagger class description for the details of what |
---|
119 | /// is inside this structure |
---|
120 | /// |
---|
121 | class MassDropTaggerStructure : public WrappedStructure{ |
---|
122 | public: |
---|
123 | /// ctor with initialisation |
---|
124 | /// \param pieces the pieces of the created jet |
---|
125 | /// \param rec the recombiner from the underlying cluster sequence |
---|
126 | MassDropTaggerStructure(const PseudoJet & result_jet) : |
---|
127 | WrappedStructure(result_jet.structure_shared_ptr()), _mu(0.0), _y(0.0){} |
---|
128 | |
---|
129 | /// returns the mass-drop ratio, pieces[0].m()/jet.m(), for the splitting |
---|
130 | /// that triggered the mass-drop condition |
---|
131 | inline double mu() const{return _mu;} |
---|
132 | |
---|
133 | /// returns the value of y = (squared kt distance) / (squared mass) for the |
---|
134 | /// splitting that triggered the mass-drop condition |
---|
135 | inline double y() const {return _y;} |
---|
136 | |
---|
137 | // /// returns the original jet (before tagging) |
---|
138 | // const PseudoJet & original() const {return _original_jet;} |
---|
139 | |
---|
140 | protected: |
---|
141 | double _mu; ///< the value of the mass-drop parameter |
---|
142 | double _y; ///< the value of the asymmetry parameter |
---|
143 | // PseudoJet _original_jet; ///< the original jet (before tagging) |
---|
144 | |
---|
145 | // allow the tagger to set these |
---|
146 | friend class MassDropTagger; |
---|
147 | }; |
---|
148 | |
---|
149 | |
---|
150 | |
---|
151 | FASTJET_END_NAMESPACE |
---|
152 | |
---|
153 | #endif // __FASTJET_MASS_DROP_TAGGER_HH__ |
---|
154 | |
---|