Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:57:16

0001 #ifndef __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
0002 #define __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
0003 
0004 //FJSTARTHEADER
0005 // $Id$
0006 //
0007 // Copyright (c) 2005-2021, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
0008 //
0009 //----------------------------------------------------------------------
0010 // This file is part of FastJet.
0011 //
0012 //  FastJet is free software; you can redistribute it and/or modify
0013 //  it under the terms of the GNU General Public License as published by
0014 //  the Free Software Foundation; either version 2 of the License, or
0015 //  (at your option) any later version.
0016 //
0017 //  The algorithms that underlie FastJet have required considerable
0018 //  development. They are described in the original FastJet paper,
0019 //  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
0020 //  FastJet as part of work towards a scientific publication, please
0021 //  quote the version you use and include a citation to the manual and
0022 //  optionally also to hep-ph/0512210.
0023 //
0024 //  FastJet is distributed in the hope that it will be useful,
0025 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
0026 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0027 //  GNU General Public License for more details.
0028 //
0029 //  You should have received a copy of the GNU General Public License
0030 //  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
0031 //----------------------------------------------------------------------
0032 //FJENDHEADER
0033 
0034 #include "fastjet/PseudoJet.hh"
0035 #include "fastjet/JetDefinition.hh"
0036 #include "fastjet/CompositeJetStructure.hh"
0037 #include "fastjet/tools/Transformer.hh"
0038 
0039 FASTJET_BEGIN_NAMESPACE
0040 
0041 class RestFrameNSubjettinessTagger;
0042 class RestFrameNSubjettinessTaggerStructure;
0043 
0044 //----------------------------------------------------------------------
0045 /// @ingroup tools_taggers
0046 /// \class RestFrameNSubjettinessTagger
0047 /// Class that helps perform 2-pronged boosted tagging using
0048 /// a reclustering in the jet's rest frame, supplemented with a cut on N-subjettiness
0049 /// (and a decay angle), as discussed by Ji-Hun Kim in arXiv:1011.1493.
0050 ///
0051 /// To tag a fat jet, the tagger proceeds as follows:
0052 ///
0053 ///  - boost its constituents into the rest frame of the jet
0054 ///
0055 ///  - recluster them using another jet definition (the original
0056 ///    choice was SISCone in spherical coordinates with R=0.6 and
0057 ///    f=0.75.
0058 ///
0059 ///  - keep the 2 most energetic subjets (\f$q_{1,2}\f$) and compute
0060 ///    the 2-subjettiness
0061 ///    \f[ 
0062 ///      \tau_2^j = \frac{2}{m_{\rm jet}^2}\,
0063 ///                 \sum_{k\in {\rm jet}} {\rm min}(q_1.p_k,q_2.p_k)
0064 ///    \f]
0065 ///    where the sum runs over the constituents of the jet. 
0066 ///
0067 ///  - require \f$\tau_2^j < \tau_2^{\rm cut}\f$ [0.08 by default]
0068 ///
0069 ///  - impose that (in the rest frame of the fat jet), the angles
0070 ///    between the 2 most energetic subjets and the boost axis are
0071 ///    both large enough: \f$\cos(\theta_s)<c_\theta^{\rm cut}\f$ 
0072 ///    [0.8 by default]
0073 ///
0074 /// Note that in the original version, the jets to be tagged were reconstructed
0075 /// using SISCone with R=0.8 and f=0.75. Also, b-tagging was imposed
0076 /// on the 2 subjets found in the rest-frame tagging procedure.
0077 ///
0078 /// \section desc Options
0079 /// 
0080 /// The constructor has the following arguments:
0081 ///  - The first argument is the jet definition to be used to
0082 ///    recluster the constituents of the jet to be filtered (in the
0083 ///    rest frame of the tagged jet).
0084 ///  - The second argument is the cut on tau_2 [0.08 by default]
0085 ///  - The 3rd argument is the cut on cos(theta_s) [0.8 by default]
0086 ///  - If the 4th argument is true, 2 exclusive rest-frame jets will
0087 ///    be considered in place of the 2 most energetic inclusive jets
0088 ///
0089 /// \section input Input conditions
0090 /// 
0091 ///  - the original jet must have constituents
0092 ///
0093 /// \section output Output/structure
0094 /// 
0095 ///  - the 2 subjets are kept as pieces if some substructure is found,
0096 ///    otherwise a single 0-momentum piece
0097 ///  - the tau2 and maximal cos(theta_s) values computed during the
0098 ///    tagging can be obtained via the resulting jet's structure_of<...>() 
0099 ///    function
0100 ///
0101 class RestFrameNSubjettinessTagger : public Transformer{
0102 public:
0103   /// ctor with arguments (see the class description above)
0104   RestFrameNSubjettinessTagger(const JetDefinition subjet_def, 
0105                       const double tau2cut=0.08, 
0106                       const double costhetascut=0.8,
0107                       const bool use_exclusive = false)
0108     : _subjet_def(subjet_def), _t2cut(tau2cut), _costscut(costhetascut),
0109       _use_exclusive(use_exclusive){};
0110 
0111   /// returns a textual description of the tagger 
0112   virtual std::string description() const;
0113 
0114   /// runs the tagger on the given jet and
0115   /// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise
0116   /// (standard access is through operator()).
0117   virtual PseudoJet result(const PseudoJet & jet) const;
0118 
0119   /// the type of Structure returned
0120   typedef RestFrameNSubjettinessTaggerStructure StructureType;
0121 
0122 protected:
0123   JetDefinition _subjet_def;
0124   double _t2cut, _costscut;
0125   bool _use_exclusive;
0126 };
0127 
0128 
0129 //------------------------------------------------------------------------
0130 /// @ingroup tools_taggers
0131 /// \class RestFrameNSubjettinessTaggerStructure
0132 /// the structure returned by the RestFrameNSubjettinessTagger transformer.
0133 ///
0134 /// See the RestFrameNSubjettinessTagger class description for the details of
0135 /// what is inside this structure
0136 ///
0137 class RestFrameNSubjettinessTaggerStructure : public CompositeJetStructure{
0138 public:
0139   /// ctor with pieces initialisation
0140   RestFrameNSubjettinessTaggerStructure(const std::vector<PseudoJet> & pieces_in) :
0141     CompositeJetStructure(pieces_in), _tau2(0.0), _costhetas(1.0){}
0142 
0143   /// returns the associated N-subjettiness
0144   inline double tau2() const{return _tau2;}
0145 
0146   /// returns the associated angle with the boosted axis
0147   inline double costhetas() const {return _costhetas;}
0148 
0149 //  /// returns the original jet (before tagging)
0150 //  const PseudoJet & original() const {return _original_jet;}
0151 
0152 protected:
0153   double _tau2;      ///< the value of the N-subjettiness
0154   double _costhetas; ///< the minimal angle between the dijets
0155                      ///< and the boost axis
0156 //  PseudoJet _original_jet;  ///< the original jet (before tagging)
0157 
0158   // allow the tagger to set these
0159   friend class RestFrameNSubjettinessTagger;
0160 };
0161 
0162 FASTJET_END_NAMESPACE
0163 #endif  //  __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
0164