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