FastJet 3.0alpha3
NSubjettinessTagger.hh
00001 //STARTHEADER
00002 // $Id: NSubjettinessTagger.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_NSUBJETTINESS_TAGGER_HH__
00032 #define __FASTJET_NSUBJETTINESS_TAGGER_HH__
00033 
00034 #include <fastjet/PseudoJet.hh>
00035 #include <fastjet/JetDefinition.hh>
00036 #include <fastjet/CompositeJetStructure.hh>
00037 #include <fastjet/tools/Transformer.hh>
00038 
00039 FASTJET_BEGIN_NAMESPACE
00040 
00041 class NSubjettinessTagger;
00042 class NSubjettinessStructure;
00043 
00044 //----------------------------------------------------------------------
00045 /// @ingroup tools
00046 /// \class NSubjettinessTagger
00047 /// Class that helps perform 2-pronged boosted tagging using
00048 /// N-subjettiness
00049 ///
00050 /// This is the implementation of the N-Subjettiness tagger introduced
00051 /// by Ji-Hun Kim in arXiv:1011.1493.
00052 ///
00053 /// To tag a fat jet, we proceed as follows:
00054 ///
00055 ///  - boost its constituents into the rest frame of the jet
00056 ///
00057 ///  - recluster them using another jet definition (the original
00058 ///    choice was SISCone in spherical coordinates with R=0.6 and
00059 ///    f=0.75.
00060 ///
00061 ///  - keep the 2 most energetic subjets (\f$q_{1,2}\f$) and compute
00062 ///    the 2-subjettiness
00063 ///    \f[
00064 ///      \tau_2^j = \frac{2}{m_{\rm jet}^2}\,
00065 ///                 \sum_{k\in {\rm jet}} {\rm min}(q_1.p_k,q_2.p_k)
00066 ///    \f]
00067 ///    where the sum runs over the constituents of the jet. 
00068 ///
00069 ///  - require \f$\tau_2^j < \tau_2^{\rm cut}\f$ [0.08 by default]
00070 ///
00071 ///  - impose that (in the rest frame of the fat jet), the angles
00072 ///    between the 2 most energetic subjets and the boost axis are
00073 ///    both large enough: \f$\cos(\theta_s)<c_\theta^{\rm cut}\f$ 
00074 ///    [0.8 by default]
00075 ///
00076 /// Note that in the original version, the jets are reconstructed
00077 /// using SISCone with R=0.8 and f=0.75. Also, b-tagging was imposed
00078 /// on the 2 subjets found in the tagging procedure.
00079 ///
00080 /// \section desc Options
00081 /// 
00082 /// The constructor has the following arguments:
00083 ///  - The first argument is the jet definition to be used to
00084 ///    recluster the constituents of the jet to be filtered (in the
00085 ///    rest frame of the tagged jet).
00086 ///  - The second argument is the cut on tau_2 [0.08 by default]
00087 ///  - The 3rd argument is the cut on cos(theta_s) [0.8 by default]
00088 ///  - If the 4th argument is true, 2 exclusive rest-frame jets will
00089 ///    be considered in place of the 2 most energetic inclusive jets
00090 ///
00091 /// \section input Input conditions
00092 /// 
00093 ///  - the original jet must have constituents
00094 ///
00095 /// \section output Output/structure
00096 /// 
00097 ///  - the 2 subjets are kept as pieces if some substructure is found,
00098 ///    otherwise a single 0-momentum piece
00099 ///  - the tau2 and maximal cos(theta_s) values computed during the
00100 ///    tagging
00101 ///
00102 class NSubjettinessTagger : public Transformer{
00103 public:
00104   /// ctor with arguments (see the class description above)
00105   NSubjettinessTagger(const JetDefinition subjet_def, 
00106                       const double tau2cut=0.08, 
00107                       const double costhetascut=0.8,
00108                       const bool use_exclusive = false)
00109     : _subjet_def(subjet_def), _t2cut(tau2cut), _costscut(costhetascut),
00110       _use_exclusive(use_exclusive){};
00111 
00112   /// tagger description
00113   virtual std::string description() const;
00114 
00115   /// action on a single jet
00116   virtual PseudoJet result(const PseudoJet & jet) const;
00117 
00118   /// the type of Structure returned
00119   typedef NSubjettinessStructure StructureType;
00120 
00121 protected:
00122   JetDefinition _subjet_def;
00123   double _t2cut, _costscut;
00124   bool _use_exclusive;
00125 };
00126 
00127 
00128 //------------------------------------------------------------------------
00129 /// @ingroup tools
00130 /// \class NSubjettinessStructure
00131 /// the structure returned by the NSubjettinessTagger transformer.
00132 ///
00133 /// See the NSubjettinessTagger class description for the details of
00134 /// what is inside this structure
00135 ///
00136 class NSubjettinessStructure : public CompositeJetStructure{
00137 public:
00138   /// ctor with pieces initialisation
00139   NSubjettinessStructure(const std::vector<PseudoJet> & pieces) :
00140     CompositeJetStructure(pieces), _tau2(0.0), _costhetas(1.0){}
00141 
00142   /// access to the associated N-subjettiness
00143   inline double tau2() const{return _tau2;}
00144 
00145   /// access to the associated angle with the boosted axis
00146   inline double costhetas() const {return _costhetas;}
00147 
00148 protected:
00149   double _tau2;      ///< the value of the N-subjettiness
00150   double _costhetas; ///< the minimal angle between the dijets
00151                      ///< and the boost axis
00152 
00153   // allow the tagger to set these
00154   friend class NSubjettinessTagger;
00155 };
00156 
00157 FASTJET_END_NAMESPACE
00158 #endif  //  __FASTJET_NSUBJETTINESS_TAGGER_HH__
00159 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends