FastJet 3.0.6
MassDropTagger.hh
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends