FastJet 3.0.2
|
00001 //STARTHEADER 00002 // $Id: MassDropTagger.hh 2731 2011-11-21 12:15:21Z soyez $ 00003 // 00004 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 00005 // 00006 //---------------------------------------------------------------------- 00007 // This file is part of FastJet. 00008 // 00009 // FastJet is free software; you can redistribute it and/or modify 00010 // it under the terms of the GNU General Public License as published by 00011 // the Free Software Foundation; either version 2 of the License, or 00012 // (at your option) any later version. 00013 // 00014 // The algorithms that underlie FastJet have required considerable 00015 // development and are described in hep-ph/0512210. If you use 00016 // FastJet as part of work towards a scientific publication, please 00017 // include a citation to the FastJet paper. 00018 // 00019 // FastJet is distributed in the hope that it will be useful, 00020 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00021 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00022 // GNU General Public License for more details. 00023 // 00024 // You should have received a copy of the GNU General Public License 00025 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 00026 //---------------------------------------------------------------------- 00027 //ENDHEADER 00028 00029 #ifndef __FASTJET_MASS_DROP_TAGGER_HH__ 00030 #define __FASTJET_MASS_DROP_TAGGER_HH__ 00031 00032 #include <fastjet/tools/Transformer.hh> 00033 #include <fastjet/LimitedWarning.hh> 00034 #include <fastjet/WrappedStructure.hh> 00035 00036 FASTJET_BEGIN_NAMESPACE 00037 00038 class MassDropTagger; 00039 class MassDropTaggerStructure; 00040 00041 //---------------------------------------------------------------------- 00042 /// @ingroup tools_taggers 00043 /// \class MassDropTagger 00044 /// Class that helps perform 2-pronged boosted tagging using 00045 /// the "mass-drop" technique (with asymmetry cut) introduced by Jonathan 00046 /// Butterworth, Adam Davison, Mathieu Rubin and Gavin Salam in 00047 /// arXiv:0802.2470 in the context of a boosted Higgs search. 00048 /// 00049 /// The tagger proceeds as follows: 00050 /// 00051 /// 0. start from a jet obtained from with the Cambridge/Aachen 00052 /// algorithm 00053 /// 00054 /// 1. undo the last step of the clustering step j -> j1 + j2 (label 00055 /// them such as j1 is the most massive). 00056 /// 00057 /// 2. if there is a mass drop, i.e. m_j1/m_j < mu_cut, and the 00058 /// splitting is sufficiently symmetric, \f${\rm 00059 /// min}(p_{tj1}^2,p_{tj2}^2)\Delta R_{j1,j2}^2 > y_{\rm cut} 00060 /// m_j^2\f$, keep j as the result of the tagger (with j1 and j2 00061 /// its 2 subjets) 00062 /// 00063 /// 3. otherwise, redefine j to be equal to j1 and return to step 1. 00064 /// 00065 /// Note that in the original proposal, j1 and j2 are both required 00066 /// to be b-tagged and a filter (with Rfilt=min(0.3,Rbb/2) and 00067 /// n_filt=3) is also applied to j to obtain the final "Higgs candidate". 00068 /// See the example \subpage Example12 for details. 00069 /// 00070 /// \section desc Options 00071 /// 00072 /// The constructor has the following arguments: 00073 /// - The first argument is the minimal mass drop that is required (mu_cut) [0.67 00074 /// by default] 00075 /// - The second argument is the asymmetry cut (y_cut) [0.09 by default] 00076 /// 00077 /// \section input Input conditions 00078 /// 00079 /// - one must be able to successively "uncluster" the original jet 00080 /// using "has_parents" 00081 /// 00082 /// \section output Output/structure 00083 /// 00084 /// - the 2 subjets are kept as pieces if some substructure is found, 00085 /// otherwise a single 0-momentum piece is returned 00086 /// - the 'mu' and 'y' values corresponding to the unclustering step 00087 /// that passed the tagger's cuts 00088 /// 00089 /// See also \subpage Example12 for a usage example. 00090 class MassDropTagger : public Transformer{ 00091 public: 00092 /// default ctor 00093 MassDropTagger(const double mu=0.67, const double ycut=0.09) : _mu(mu), _ycut(ycut){}; 00094 00095 /// returns a textual description of the tagger 00096 virtual std::string description() const; 00097 00098 /// runs the tagger on the given jet and 00099 /// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise 00100 /// (standard access is through operator()). 00101 /// \param jet the PseudoJet to tag 00102 virtual PseudoJet result(const PseudoJet & jet) const; 00103 00104 /// the type of the associated structure 00105 typedef MassDropTaggerStructure StructureType; 00106 00107 protected: 00108 double _mu, _ycut; 00109 static LimitedWarning _warnings_nonca; 00110 }; 00111 00112 00113 //------------------------------------------------------------------------ 00114 /// @ingroup tools_taggers 00115 /// \class MassDropTaggerStructure 00116 /// the structure returned by the MassDropTagger transformer. 00117 /// 00118 /// See the MassDropTagger class description for the details of what 00119 /// is inside this structure 00120 /// 00121 class MassDropTaggerStructure : public WrappedStructure{ 00122 public: 00123 /// ctor with initialisation 00124 /// \param pieces the pieces of the created jet 00125 /// \param rec the recombiner from the underlying cluster sequence 00126 MassDropTaggerStructure(const PseudoJet & result_jet) : 00127 WrappedStructure(result_jet.structure_shared_ptr()), _mu(0.0), _y(0.0){} 00128 00129 /// returns the mass-drop ratio, pieces[0].m()/jet.m(), for the splitting 00130 /// that triggered the mass-drop condition 00131 inline double mu() const{return _mu;} 00132 00133 /// returns the value of y = (squared kt distance) / (squared mass) for the 00134 /// splitting that triggered the mass-drop condition 00135 inline double y() const {return _y;} 00136 00137 // /// returns the original jet (before tagging) 00138 // const PseudoJet & original() const {return _original_jet;} 00139 00140 protected: 00141 double _mu; ///< the value of the mass-drop parameter 00142 double _y; ///< the value of the asymmetry parameter 00143 // PseudoJet _original_jet; ///< the original jet (before tagging) 00144 00145 // allow the tagger to set these 00146 friend class MassDropTagger; 00147 }; 00148 00149 00150 00151 FASTJET_END_NAMESPACE 00152 00153 #endif // __FASTJET_MASS_DROP_TAGGER_HH__ 00154