FastJet 3.0.2
|
00001 #ifndef __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__ 00002 #define __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__ 00003 00004 //STARTHEADER 00005 // $Id: RestFrameNSubjettinessTagger.hh 2689 2011-11-14 14:51:06Z soyez $ 00006 // 00007 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 00008 // 00009 //---------------------------------------------------------------------- 00010 // This file is part of FastJet. 00011 // 00012 // FastJet is free software; you can redistribute it and/or modify 00013 // it under the terms of the GNU General Public License as published by 00014 // the Free Software Foundation; either version 2 of the License, or 00015 // (at your option) any later version. 00016 // 00017 // The algorithms that underlie FastJet have required considerable 00018 // development and are described in hep-ph/0512210. If you use 00019 // FastJet as part of work towards a scientific publication, please 00020 // include a citation to the FastJet paper. 00021 // 00022 // FastJet is distributed in the hope that it will be useful, 00023 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00024 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00025 // GNU General Public License for more details. 00026 // 00027 // You should have received a copy of the GNU General Public License 00028 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 00029 //---------------------------------------------------------------------- 00030 //ENDHEADER 00031 00032 #include <fastjet/PseudoJet.hh> 00033 #include <fastjet/JetDefinition.hh> 00034 #include <fastjet/CompositeJetStructure.hh> 00035 #include <fastjet/tools/Transformer.hh> 00036 00037 FASTJET_BEGIN_NAMESPACE 00038 00039 class RestFrameNSubjettinessTagger; 00040 class RestFrameNSubjettinessTaggerStructure; 00041 00042 //---------------------------------------------------------------------- 00043 /// @ingroup tools_taggers 00044 /// \class RestFrameNSubjettinessTagger 00045 /// Class that helps perform 2-pronged boosted tagging using 00046 /// a reclustering in the jet's rest frame, supplemented with a cut on N-subjettiness 00047 /// (and a decay angle), as discussed by Ji-Hun Kim in arXiv:1011.1493. 00048 /// 00049 /// To tag a fat jet, the tagger proceeds as follows: 00050 /// 00051 /// - boost its constituents into the rest frame of the jet 00052 /// 00053 /// - recluster them using another jet definition (the original 00054 /// choice was SISCone in spherical coordinates with R=0.6 and 00055 /// f=0.75. 00056 /// 00057 /// - keep the 2 most energetic subjets (\f$q_{1,2}\f$) and compute 00058 /// the 2-subjettiness 00059 /// \f[ 00060 /// \tau_2^j = \frac{2}{m_{\rm jet}^2}\, 00061 /// \sum_{k\in {\rm jet}} {\rm min}(q_1.p_k,q_2.p_k) 00062 /// \f] 00063 /// where the sum runs over the constituents of the jet. 00064 /// 00065 /// - require \f$\tau_2^j < \tau_2^{\rm cut}\f$ [0.08 by default] 00066 /// 00067 /// - impose that (in the rest frame of the fat jet), the angles 00068 /// between the 2 most energetic subjets and the boost axis are 00069 /// both large enough: \f$\cos(\theta_s)<c_\theta^{\rm cut}\f$ 00070 /// [0.8 by default] 00071 /// 00072 /// Note that in the original version, the jets to be tagged were reconstructed 00073 /// using SISCone with R=0.8 and f=0.75. Also, b-tagging was imposed 00074 /// on the 2 subjets found in the rest-frame tagging procedure. 00075 /// 00076 /// \section desc Options 00077 /// 00078 /// The constructor has the following arguments: 00079 /// - The first argument is the jet definition to be used to 00080 /// recluster the constituents of the jet to be filtered (in the 00081 /// rest frame of the tagged jet). 00082 /// - The second argument is the cut on tau_2 [0.08 by default] 00083 /// - The 3rd argument is the cut on cos(theta_s) [0.8 by default] 00084 /// - If the 4th argument is true, 2 exclusive rest-frame jets will 00085 /// be considered in place of the 2 most energetic inclusive jets 00086 /// 00087 /// \section input Input conditions 00088 /// 00089 /// - the original jet must have constituents 00090 /// 00091 /// \section output Output/structure 00092 /// 00093 /// - the 2 subjets are kept as pieces if some substructure is found, 00094 /// otherwise a single 0-momentum piece 00095 /// - the tau2 and maximal cos(theta_s) values computed during the 00096 /// tagging can be obtained via the resulting jet's structure_of<...>() 00097 /// function 00098 /// 00099 class RestFrameNSubjettinessTagger : public Transformer{ 00100 public: 00101 /// ctor with arguments (see the class description above) 00102 RestFrameNSubjettinessTagger(const JetDefinition subjet_def, 00103 const double tau2cut=0.08, 00104 const double costhetascut=0.8, 00105 const bool use_exclusive = false) 00106 : _subjet_def(subjet_def), _t2cut(tau2cut), _costscut(costhetascut), 00107 _use_exclusive(use_exclusive){}; 00108 00109 /// returns a textual description of the tagger 00110 virtual std::string description() const; 00111 00112 /// runs the tagger on the given jet and 00113 /// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise 00114 /// (standard access is through operator()). 00115 virtual PseudoJet result(const PseudoJet & jet) const; 00116 00117 /// the type of Structure returned 00118 typedef RestFrameNSubjettinessTaggerStructure StructureType; 00119 00120 protected: 00121 JetDefinition _subjet_def; 00122 double _t2cut, _costscut; 00123 bool _use_exclusive; 00124 }; 00125 00126 00127 //------------------------------------------------------------------------ 00128 /// @ingroup tools_taggers 00129 /// \class RestFrameNSubjettinessTaggerStructure 00130 /// the structure returned by the RestFrameNSubjettinessTagger transformer. 00131 /// 00132 /// See the RestFrameNSubjettinessTagger class description for the details of 00133 /// what is inside this structure 00134 /// 00135 class RestFrameNSubjettinessTaggerStructure : public CompositeJetStructure{ 00136 public: 00137 /// ctor with pieces initialisation 00138 RestFrameNSubjettinessTaggerStructure(const std::vector<PseudoJet> & pieces_in) : 00139 CompositeJetStructure(pieces_in), _tau2(0.0), _costhetas(1.0){} 00140 00141 /// returns the associated N-subjettiness 00142 inline double tau2() const{return _tau2;} 00143 00144 /// returns the associated angle with the boosted axis 00145 inline double costhetas() const {return _costhetas;} 00146 00147 // /// returns the original jet (before tagging) 00148 // const PseudoJet & original() const {return _original_jet;} 00149 00150 protected: 00151 double _tau2; ///< the value of the N-subjettiness 00152 double _costhetas; ///< the minimal angle between the dijets 00153 ///< and the boost axis 00154 // PseudoJet _original_jet; ///< the original jet (before tagging) 00155 00156 // allow the tagger to set these 00157 friend class RestFrameNSubjettinessTagger; 00158 }; 00159 00160 FASTJET_END_NAMESPACE 00161 #endif // __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__ 00162