Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:57:16

0001 //FJSTARTHEADER
0002 // $Id$
0003 //
0004 // Copyright (c) 2005-2021, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
0005 //
0006 //----------------------------------------------------------------------
0007 // This file is part of FastJet.
0008 //
0009 //  FastJet is free software; you can redistribute it and/or modify
0010 //  it under the terms of the GNU General Public License as published by
0011 //  the Free Software Foundation; either version 2 of the License, or
0012 //  (at your option) any later version.
0013 //
0014 //  The algorithms that underlie FastJet have required considerable
0015 //  development. They are described in the original FastJet paper,
0016 //  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
0017 //  FastJet as part of work towards a scientific publication, please
0018 //  quote the version you use and include a citation to the manual and
0019 //  optionally also to hep-ph/0512210.
0020 //
0021 //  FastJet is distributed in the hope that it will be useful,
0022 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
0023 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0024 //  GNU General Public License for more details.
0025 //
0026 //  You should have received a copy of the GNU General Public License
0027 //  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
0028 //----------------------------------------------------------------------
0029 //FJENDHEADER
0030 
0031 #ifndef __FASTJET_MASS_DROP_TAGGER_HH__
0032 #define __FASTJET_MASS_DROP_TAGGER_HH__
0033 
0034 #include "fastjet/tools/Transformer.hh"
0035 #include "fastjet/LimitedWarning.hh"
0036 #include "fastjet/WrappedStructure.hh"
0037 
0038 FASTJET_BEGIN_NAMESPACE
0039 
0040 class MassDropTagger;
0041 class MassDropTaggerStructure;
0042 
0043 //----------------------------------------------------------------------
0044 /// @ingroup tools_taggers
0045 /// \class MassDropTagger
0046 /// Class that helps perform 2-pronged boosted tagging using
0047 /// the "mass-drop" technique (with asymmetry cut) introduced by Jonathan
0048 /// Butterworth, Adam Davison, Mathieu Rubin and Gavin Salam in
0049 /// arXiv:0802.2470 in the context of a boosted Higgs search.
0050 ///
0051 /// The tagger proceeds as follows:
0052 ///
0053 ///  0. start from a jet obtained from with the Cambridge/Aachen
0054 ///     algorithm
0055 ///
0056 ///  1. undo the last step of the clustering step j -> j1 + j2 (label
0057 ///     them such as j1 is the most massive).
0058 ///  
0059 ///  2. if there is a mass drop, i.e. m_j1/m_j < mu_cut, and the
0060 ///     splitting is sufficiently symmetric, \f${\rm
0061 ///     min}(p_{tj1}^2,p_{tj2}^2)\Delta R_{j1,j2}^2 > y_{\rm cut}
0062 ///     m_j^2\f$, keep j as the result of the tagger (with j1 and j2
0063 ///     its 2 subjets)
0064 ///
0065 ///  3. otherwise, redefine j to be equal to j1 and return to step 1.
0066 ///
0067 /// Note that in the original proposal, j1 and j2 are both required
0068 /// to be b-tagged and a filter (with Rfilt=min(0.3,Rbb/2) and
0069 /// n_filt=3) is also applied to j to obtain the final "Higgs candidate".
0070 /// See the example \subpage Example12 for details.
0071 ///
0072 /// \section desc Options
0073 /// 
0074 /// The constructor has the following arguments:
0075 ///  - The first argument is the minimal mass drop that is required (mu_cut) [0.67
0076 ///    by default]
0077 ///  - The second argument is the asymmetry cut (y_cut) [0.09 by default]
0078 ///
0079 /// \section input Input conditions
0080 /// 
0081 ///  - one must be able to successively "uncluster" the original jet
0082 ///    using "has_parents"
0083 ///
0084 /// \section output Output/structure
0085 /// 
0086 ///  - the 2 subjets are kept as pieces if some substructure is found,
0087 ///    otherwise a single 0-momentum piece is returned
0088 ///  - the 'mu' and 'y' values corresponding to the unclustering step
0089 ///    that passed the tagger's cuts
0090 ///
0091 /// See also \subpage Example12  for a usage example.
0092 class MassDropTagger : public Transformer{
0093 public:
0094   /// default ctor
0095   MassDropTagger(const double mu=0.67, const double ycut=0.09) : _mu(mu), _ycut(ycut){};
0096 
0097   /// returns a textual description of the tagger
0098   virtual std::string description() const;
0099 
0100   /// runs the tagger on the given jet and
0101   /// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise
0102   /// (standard access is through operator()).
0103   ///  \param jet   the PseudoJet to tag
0104   virtual PseudoJet result(const PseudoJet & jet) const;
0105 
0106   /// the type of the associated structure
0107   typedef MassDropTaggerStructure StructureType;
0108 
0109 protected:
0110   double _mu, _ycut;
0111   static LimitedWarning _warnings_nonca;
0112   static LimitedWarning _negative_mass_warning;
0113 };
0114 
0115 
0116 //------------------------------------------------------------------------
0117 /// @ingroup tools_taggers
0118 /// \class MassDropTaggerStructure
0119 /// the structure returned by the MassDropTagger transformer.
0120 ///
0121 /// See the MassDropTagger class description for the details of what
0122 /// is inside this structure
0123 ///
0124 class MassDropTaggerStructure : public WrappedStructure{
0125 public:
0126   /// ctor with initialisation
0127   ///  \param pieces  the pieces of the created jet
0128   ///  \param rec     the recombiner from the underlying cluster sequence
0129   MassDropTaggerStructure(const PseudoJet & result_jet) :
0130     WrappedStructure(result_jet.structure_shared_ptr()), _mu(0.0), _y(0.0){}
0131 
0132   /// returns the mass-drop ratio, pieces[0].m()/jet.m(), for the splitting
0133   /// that triggered the mass-drop condition
0134   inline double mu() const{return _mu;}
0135 
0136   /// returns the value of y = (squared kt distance) / (squared mass) for the
0137   /// splitting that triggered the mass-drop condition
0138   inline double y() const {return _y;}
0139 
0140 //  /// returns the original jet (before tagging)
0141 //  const PseudoJet & original() const {return _original_jet;}
0142 
0143 protected:
0144   double _mu;              ///< the value of the mass-drop parameter
0145   double _y;               ///< the value of the asymmetry parameter
0146 //  PseudoJet _original_jet; ///< the original jet (before tagging)
0147 
0148   // allow the tagger to set these
0149   friend class MassDropTagger;
0150 };
0151 
0152 
0153 
0154 FASTJET_END_NAMESPACE
0155 
0156 #endif  //  __FASTJET_MASS_DROP_TAGGER_HH__
0157