FastJet 3.0beta1
|
00001 //STARTHEADER 00002 // $Id: MassDropTagger.hh 2474 2011-07-26 13:13:54Z cacciari $ 00003 // 00004 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin 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, write to the Free Software 00026 // Foundation, Inc.: 00027 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00028 //---------------------------------------------------------------------- 00029 //ENDHEADER 00030 00031 #ifndef __FASTJET_MASS_DROP_TAGGER_HH__ 00032 #define __FASTJET_MASS_DROP_TAGGER_HH__ 00033 00034 #include <fastjet/tools/Transformer.hh> 00035 #include <fastjet/internal/LimitedWarning.hh> 00036 #include <fastjet/CompositeJetStructure.hh> 00037 00038 FASTJET_BEGIN_NAMESPACE 00039 00040 class MassDropTagger; 00041 class MassDropTaggerStructure; 00042 00043 //---------------------------------------------------------------------- 00044 /// @ingroup tools_taggers 00045 /// \class MassDropTagger 00046 /// Class that helps perform 2-pronged boosted tagging using 00047 /// the "mass-drop" technique (with asymmetry cut) introduced by Jonathan 00048 /// Butterworth, Adam Davison, Mathieu Rubin and Gavin Salam in 00049 /// arXiv:0802.2470 in the context of a boosted Higgs search. 00050 /// 00051 /// The tagger proceeds as follows: 00052 /// 00053 /// 0. start from a jet obtained from with the Cambridge/Aachen 00054 /// algorithm 00055 /// 00056 /// 1. undo the last step of the clustering step j -> j1 + j2 (label 00057 /// them such as j1 is the most massive). 00058 /// 00059 /// 2. if there is a mass drop, i.e. m_j1/m_j < mu_cut, and the 00060 /// splitting is sufficiently symmetric, \f${\rm 00061 /// min}(p_{tj1}^2,p_{tj2}^2)\Delta R_{j1,j2}^2 > y_{\rm cut} 00062 /// m_j^2\f$, keep j as the result of the tagger (with j1 and j2 00063 /// its 2 subjets) 00064 /// 00065 /// 3. otherwise, redefine j to be equal to j1 and return to step 1. 00066 /// 00067 /// Note that in the original proposal, j1 and j2 are both required 00068 /// to be b-tagged and a filter (with Rfilt=min(0.3,Rbb/2) and 00069 /// n_filt=3) is also applied to j to obtain the final "Higgs candidate". 00070 /// See the example \subpage Example12 for details. 00071 /// 00072 /// \section desc Options 00073 /// 00074 /// The constructor has the following arguments: 00075 /// - The first argument is minimal mass drop required (mu_cut) [0.67 00076 /// by default] 00077 /// - The second argument is asymmetry cut (y_cut) [0.09 by default] 00078 /// 00079 /// \section input Input conditions 00080 /// 00081 /// - one must be able to successively "uncluster" the original jet 00082 /// using "has_parents" 00083 /// 00084 /// \section output Output/structure 00085 /// 00086 /// - the 2 subjets are kept as pieces if some substructure is found, 00087 /// otherwise a single 0-momentum piece is returned 00088 /// - the 'mu' and 'y' values corresponding to the unclustering step 00089 /// that passed the tagger's cuts 00090 /// 00091 /// See also \subpage Example12 for a usage example. 00092 class MassDropTagger : public Transformer{ 00093 public: 00094 /// default ctor 00095 MassDropTagger(const double mu=0.67, const double ycut=0.09) : _mu(mu), _ycut(ycut){}; 00096 00097 /// returns a textual description of the tagger 00098 virtual std::string description() const; 00099 00100 /// runs the tagger on the given jet and 00101 /// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise 00102 /// (standard access is through operator()). 00103 /// \param jet the PseudoJet to tag 00104 virtual PseudoJet result(const PseudoJet & jet) const; 00105 00106 /// the type of the associated structure 00107 typedef MassDropTaggerStructure StructureType; 00108 00109 protected: 00110 double _mu, _ycut; 00111 static LimitedWarning _warnings_nonca; 00112 }; 00113 00114 00115 //------------------------------------------------------------------------ 00116 /// @ingroup tools_taggers 00117 /// \class MassDropTaggerStructure 00118 /// the structure returned by the MassDropTagger transformer. 00119 /// 00120 /// See the MassDropTagger class description for the details of what 00121 /// is inside this structure 00122 /// 00123 class MassDropTaggerStructure : public CompositeJetStructure{ 00124 public: 00125 /// ctor with initialisation 00126 /// \param pieces the pieces of the created jet 00127 /// \param rec the recombiner from the underlying cluster sequence 00128 MassDropTaggerStructure(const std::vector<PseudoJet> & pieces, 00129 const JetDefinition::Recombiner *recombiner = 0) : 00130 CompositeJetStructure(pieces, recombiner), _mu(0.0), _y(0.0){} 00131 00132 /// returns the mass-drop ratio, pieces[0].m()/jet.m(), for the splitting 00133 /// that triggered the mass-drop condition 00134 inline double mu() const{return _mu;} 00135 00136 /// returns the value of y = (squared kt distance) / (squared mass) for the 00137 /// splitting that triggered the mass-drop condition 00138 inline double y() const {return _y;} 00139 00140 // /// returns the original jet (before tagging) 00141 // const PseudoJet & original() const {return _original_jet;} 00142 00143 protected: 00144 double _mu; ///< the value of the mass-drop parameter 00145 double _y; ///< the value of the asymmetry parameter 00146 // PseudoJet _original_jet; ///< the original jet (before tagging) 00147 00148 // allow the tagger to set these 00149 friend class MassDropTagger; 00150 }; 00151 00152 00153 00154 FASTJET_END_NAMESPACE 00155 00156 #endif // __FASTJET_MASS_DROP_TAGGER_HH__ 00157