FastJet 3.0alpha3
MassDropTagger.hh
00001 //STARTHEADER
00002 // $Id: MassDropTagger.hh 2193 2011-06-01 11:51:06Z soyez $
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/CompositeJetStructure.hh>
00036 
00037 FASTJET_BEGIN_NAMESPACE
00038 
00039 class MassDropTagger;
00040 class MassDropStructure;
00041 
00042 //----------------------------------------------------------------------
00043 /// @ingroup tools
00044 /// \class MassDropTagger
00045 /// Class that helps perform 2-pronged boosted tagging using
00046 /// the "mass-drop" technique
00047 ///
00048 /// This implements the boosted Higgs tagger introduced by Jonathan
00049 /// Butterworth, Adam Davison, Mathieu Rubin and Gavin Salam in
00050 /// arXiv:0802.2470.
00051 ///
00052 /// The tagger proceeds as follows:
00053 ///
00054 ///  0. start from a jet obtained from with the Cambridge/Aachen
00055 ///     algorithm
00056 ///
00057 ///  1. undo the last step of the clustering step j -> j1 + j2 (label
00058 ///     them such as j1 is the most massive).
00059 ///  
00060 ///  2. if there is a mass drop, i.e. m_j1/m_j < mu_cut, and the
00061 ///     splitting is sufficiently symmetric, \f${/rm
00062 ///     min}(p_{tj1}^2,p_{tj2}^2)\Delta R_{j1,j2}^2 > y_{/rm cut}
00063 ///     m_j^2\f$, keep j as the result of the tagger (with j1 and j2
00064 ///     its 2 subjets)
00065 ///
00066 ///  3. otherwise, redefine j to be equal to j1 and return to step 1.
00067 ///
00068 /// Note that in the original proposal, j1 and j2 were both required
00069 /// to be b-tagged and a filter (with Rfilt=min(0.3,Rbb/2) and
00070 /// n_filt=3) was applied to j to obtain the final "Higgs candidate".
00071 /// This filtering technique can always be done by defining a
00072 /// FunctionOfPseudoJet to compute dynamically Rfilt and then use the
00073 /// Filter
00074 ///   RfiltDyn rfilt;
00075 ///   Filter final_filter(&rfilt, SelectorNHardest(3));
00076 /// See the filter example to see explicitly how this can be done.
00077 /// 
00078 ///
00079 /// \section desc Options
00080 /// 
00081 /// The constructor has the following arguments:
00082 ///  - The first argument is minimal mass drop required (mu_cut) [0.67
00083 ///    by default]
00084 ///  - The second argument is asymmetry cut (y_cut) [0.09 by default]
00085 ///
00086 /// \section input Input conditions
00087 /// 
00088 ///  - one must be able to succesively "uncluster" the original jet
00089 ///    using "has_parents"
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 is returned
00095 ///  - the 'mu' and 'y' values corresponding to the unclustering step
00096 ///    that passed the tagger's cuts
00097 ///
00098 class MassDropTagger : public Transformer{
00099 public:
00100   /// default ctor
00101   MassDropTagger(const double mu=0.67, const double ycut=0.09) : _mu(mu), _ycut(ycut){};
00102 
00103   /// description of the tagger
00104   virtual std::string description() const;
00105 
00106   /// the tagging itself
00107   ///  \param jet   the PseudoJet to tag
00108   virtual PseudoJet result(const PseudoJet & jet) const;
00109 
00110   /// the type of the associated structure
00111   typedef MassDropStructure StructureType;
00112 
00113 protected:
00114   double _mu, _ycut;
00115 };
00116 
00117 
00118 //------------------------------------------------------------------------
00119 /// @ingroup tools
00120 /// \class MassDropStructure
00121 /// the structure returned by the MassDropTagger transformer.
00122 ///
00123 /// See the MassDropTagger class description for the details of what
00124 /// is inside this structure
00125 ///
00126 class MassDropStructure : public CompositeJetStructure{
00127 public:
00128   /// ctor with initialisation
00129   ///  \param pieces  the pieces of the created jet
00130   ///  \param rec     the recombiner from the underlying cluster sequence
00131   MassDropStructure(const std::vector<PseudoJet> & pieces, 
00132                     const JetDefinition::Recombiner *recombiner = 0) :
00133     CompositeJetStructure(pieces, recombiner), _mu(0.0), _y(0.0){}
00134 
00135   /// the mass-drop ratio, pieces[0].m()/jet.m(), for the splitting
00136   /// that triggered the mass-drop condition
00137   inline double mu() const{return _mu;}
00138 
00139   /// The value of y = (squared kt distance) / (squared mass) for the
00140   /// splitting that triggered the mass-drop condition
00141   inline double y() const {return _y;}
00142 
00143 protected:
00144   double _mu;  ///< the value of the mass-drop parameter
00145   double _y;   ///< the value of the asymmetry parameter
00146 
00147   // allow the tagger to set these
00148   friend class MassDropTagger;
00149 };
00150 
00151 
00152 
00153 FASTJET_END_NAMESPACE
00154 
00155 #endif  //  __FASTJET_MASS_DROP_TAGGER_HH__
00156 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends