FastJet 3.4.1
RestFrameNSubjettinessTagger.hh
1#ifndef __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
2#define __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
3
4//FJSTARTHEADER
5// $Id$
6//
7// Copyright (c) 2005-2023, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
8//
9//----------------------------------------------------------------------
10// This file is part of FastJet.
11//
12// FastJet is free software; you can redistribute it and/or modify
13// it under the terms of the GNU General Public License as published by
14// the Free Software Foundation; either version 2 of the License, or
15// (at your option) any later version.
16//
17// The algorithms that underlie FastJet have required considerable
18// development. They are described in the original FastJet paper,
19// hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
20// FastJet as part of work towards a scientific publication, please
21// quote the version you use and include a citation to the manual and
22// optionally also to hep-ph/0512210.
23//
24// FastJet is distributed in the hope that it will be useful,
25// but WITHOUT ANY WARRANTY; without even the implied warranty of
26// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27// GNU General Public License for more details.
28//
29// You should have received a copy of the GNU General Public License
30// along with FastJet. If not, see <http://www.gnu.org/licenses/>.
31//----------------------------------------------------------------------
32//FJENDHEADER
33
34#include "fastjet/PseudoJet.hh"
35#include "fastjet/JetDefinition.hh"
36#include "fastjet/CompositeJetStructure.hh"
37#include "fastjet/tools/Transformer.hh"
38
39FASTJET_BEGIN_NAMESPACE
40
41class RestFrameNSubjettinessTagger;
42class RestFrameNSubjettinessTaggerStructure;
43
44//----------------------------------------------------------------------
45/// @ingroup tools_taggers
46/// \class RestFrameNSubjettinessTagger
47/// Class that helps perform 2-pronged boosted tagging using
48/// a reclustering in the jet's rest frame, supplemented with a cut on N-subjettiness
49/// (and a decay angle), as discussed by Ji-Hun Kim in arXiv:1011.1493.
50///
51/// To tag a fat jet, the tagger proceeds as follows:
52///
53/// - boost its constituents into the rest frame of the jet
54///
55/// - recluster them using another jet definition (the original
56/// choice was SISCone in spherical coordinates with R=0.6 and
57/// f=0.75.
58///
59/// - keep the 2 most energetic subjets (\f$q_{1,2}\f$) and compute
60/// the 2-subjettiness
61/// \f[
62/// \tau_2^j = \frac{2}{m_{\rm jet}^2}\,
63/// \sum_{k\in {\rm jet}} {\rm min}(q_1.p_k,q_2.p_k)
64/// \f]
65/// where the sum runs over the constituents of the jet.
66///
67/// - require \f$\tau_2^j < \tau_2^{\rm cut}\f$ [0.08 by default]
68///
69/// - impose that (in the rest frame of the fat jet), the angles
70/// between the 2 most energetic subjets and the boost axis are
71/// both large enough: \f$\cos(\theta_s)<c_\theta^{\rm cut}\f$
72/// [0.8 by default]
73///
74/// Note that in the original version, the jets to be tagged were reconstructed
75/// using SISCone with R=0.8 and f=0.75. Also, b-tagging was imposed
76/// on the 2 subjets found in the rest-frame tagging procedure.
77///
78/// \section desc Options
79///
80/// The constructor has the following arguments:
81/// - The first argument is the jet definition to be used to
82/// recluster the constituents of the jet to be filtered (in the
83/// rest frame of the tagged jet).
84/// - The second argument is the cut on tau_2 [0.08 by default]
85/// - The 3rd argument is the cut on cos(theta_s) [0.8 by default]
86/// - If the 4th argument is true, 2 exclusive rest-frame jets will
87/// be considered in place of the 2 most energetic inclusive jets
88///
89/// \section input Input conditions
90///
91/// - the original jet must have constituents
92///
93/// \section output Output/structure
94///
95/// - the 2 subjets are kept as pieces if some substructure is found,
96/// otherwise a single 0-momentum piece
97/// - the tau2 and maximal cos(theta_s) values computed during the
98/// tagging can be obtained via the resulting jet's structure_of<...>()
99/// function
100///
102public:
103 /// ctor with arguments (see the class description above)
105 const double tau2cut=0.08,
106 const double costhetascut=0.8,
107 const bool use_exclusive = false)
108 : _subjet_def(subjet_def), _t2cut(tau2cut), _costscut(costhetascut),
109 _use_exclusive(use_exclusive){};
110
111 /// returns a textual description of the tagger
112 virtual std::string description() const;
113
114 /// runs the tagger on the given jet and
115 /// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise
116 /// (standard access is through operator()).
117 virtual PseudoJet result(const PseudoJet & jet) const;
118
119 /// the type of Structure returned
121
122protected:
123 JetDefinition _subjet_def;
124 double _t2cut, _costscut;
125 bool _use_exclusive;
126};
127
128
129//------------------------------------------------------------------------
130/// @ingroup tools_taggers
131/// \class RestFrameNSubjettinessTaggerStructure
132/// the structure returned by the RestFrameNSubjettinessTagger transformer.
133///
134/// See the RestFrameNSubjettinessTagger class description for the details of
135/// what is inside this structure
136///
138public:
139 /// ctor with pieces initialisation
140 RestFrameNSubjettinessTaggerStructure(const std::vector<PseudoJet> & pieces_in) :
141 CompositeJetStructure(pieces_in), _tau2(0.0), _costhetas(1.0){}
142
143 /// returns the associated N-subjettiness
144 inline double tau2() const{return _tau2;}
145
146 /// returns the associated angle with the boosted axis
147 inline double costhetas() const {return _costhetas;}
148
149// /// returns the original jet (before tagging)
150// const PseudoJet & original() const {return _original_jet;}
151
152protected:
153 double _tau2; ///< the value of the N-subjettiness
154 double _costhetas; ///< the minimal angle between the dijets
155 ///< and the boost axis
156// PseudoJet _original_jet; ///< the original jet (before tagging)
157
158 // allow the tagger to set these
159 friend class RestFrameNSubjettinessTagger;
160};
161
162FASTJET_END_NAMESPACE
163#endif // __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
164
The structure for a jet made of pieces.
class that is intended to hold a full definition of the jet clusterer
Class to contain pseudojets, including minimal information of use to jet-clustering routines.
Definition: PseudoJet.hh:68
the structure returned by the RestFrameNSubjettinessTagger transformer.
double _costhetas
the minimal angle between the dijets and the boost axis
double tau2() const
returns the associated N-subjettiness
double costhetas() const
returns the associated angle with the boosted axis
RestFrameNSubjettinessTaggerStructure(const std::vector< PseudoJet > &pieces_in)
ctor with pieces initialisation
Class that helps perform 2-pronged boosted tagging using a reclustering in the jet's rest frame,...
RestFrameNSubjettinessTaggerStructure StructureType
the type of Structure returned
RestFrameNSubjettinessTagger(const JetDefinition subjet_def, const double tau2cut=0.08, const double costhetascut=0.8, const bool use_exclusive=false)
ctor with arguments (see the class description above)
Base (abstract) class for a jet transformer.
Definition: Transformer.hh:71