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