FastJet 3.0.5
RestFrameNSubjettinessTagger.hh
00001 #ifndef __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
00002 #define __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
00003 
00004 //STARTHEADER
00005 // $Id: RestFrameNSubjettinessTagger.hh 2689 2011-11-14 14:51:06Z soyez $
00006 //
00007 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
00008 //
00009 //----------------------------------------------------------------------
00010 // This file is part of FastJet.
00011 //
00012 //  FastJet is free software; you can redistribute it and/or modify
00013 //  it under the terms of the GNU General Public License as published by
00014 //  the Free Software Foundation; either version 2 of the License, or
00015 //  (at your option) any later version.
00016 //
00017 //  The algorithms that underlie FastJet have required considerable
00018 //  development and are described in hep-ph/0512210. If you use
00019 //  FastJet as part of work towards a scientific publication, please
00020 //  include a citation to the FastJet paper.
00021 //
00022 //  FastJet is distributed in the hope that it will be useful,
00023 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
00024 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00025 //  GNU General Public License for more details.
00026 //
00027 //  You should have received a copy of the GNU General Public License
00028 //  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
00029 //----------------------------------------------------------------------
00030 //ENDHEADER
00031 
00032 #include <fastjet/PseudoJet.hh>
00033 #include <fastjet/JetDefinition.hh>
00034 #include <fastjet/CompositeJetStructure.hh>
00035 #include <fastjet/tools/Transformer.hh>
00036 
00037 FASTJET_BEGIN_NAMESPACE
00038 
00039 class RestFrameNSubjettinessTagger;
00040 class RestFrameNSubjettinessTaggerStructure;
00041 
00042 //----------------------------------------------------------------------
00043 /// @ingroup tools_taggers
00044 /// \class RestFrameNSubjettinessTagger
00045 /// Class that helps perform 2-pronged boosted tagging using
00046 /// a reclustering in the jet's rest frame, supplemented with a cut on N-subjettiness
00047 /// (and a decay angle), as discussed by Ji-Hun Kim in arXiv:1011.1493.
00048 ///
00049 /// To tag a fat jet, the tagger proceeds as follows:
00050 ///
00051 ///  - boost its constituents into the rest frame of the jet
00052 ///
00053 ///  - recluster them using another jet definition (the original
00054 ///    choice was SISCone in spherical coordinates with R=0.6 and
00055 ///    f=0.75.
00056 ///
00057 ///  - keep the 2 most energetic subjets (\f$q_{1,2}\f$) and compute
00058 ///    the 2-subjettiness
00059 ///    \f[ 
00060 ///      \tau_2^j = \frac{2}{m_{\rm jet}^2}\,
00061 ///                 \sum_{k\in {\rm jet}} {\rm min}(q_1.p_k,q_2.p_k)
00062 ///    \f]
00063 ///    where the sum runs over the constituents of the jet. 
00064 ///
00065 ///  - require \f$\tau_2^j < \tau_2^{\rm cut}\f$ [0.08 by default]
00066 ///
00067 ///  - impose that (in the rest frame of the fat jet), the angles
00068 ///    between the 2 most energetic subjets and the boost axis are
00069 ///    both large enough: \f$\cos(\theta_s)<c_\theta^{\rm cut}\f$ 
00070 ///    [0.8 by default]
00071 ///
00072 /// Note that in the original version, the jets to be tagged were reconstructed
00073 /// using SISCone with R=0.8 and f=0.75. Also, b-tagging was imposed
00074 /// on the 2 subjets found in the rest-frame tagging procedure.
00075 ///
00076 /// \section desc Options
00077 /// 
00078 /// The constructor has the following arguments:
00079 ///  - The first argument is the jet definition to be used to
00080 ///    recluster the constituents of the jet to be filtered (in the
00081 ///    rest frame of the tagged jet).
00082 ///  - The second argument is the cut on tau_2 [0.08 by default]
00083 ///  - The 3rd argument is the cut on cos(theta_s) [0.8 by default]
00084 ///  - If the 4th argument is true, 2 exclusive rest-frame jets will
00085 ///    be considered in place of the 2 most energetic inclusive jets
00086 ///
00087 /// \section input Input conditions
00088 /// 
00089 ///  - the original jet must have constituents
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
00095 ///  - the tau2 and maximal cos(theta_s) values computed during the
00096 ///    tagging can be obtained via the resulting jet's structure_of<...>() 
00097 ///    function
00098 ///
00099 class RestFrameNSubjettinessTagger : public Transformer{
00100 public:
00101   /// ctor with arguments (see the class description above)
00102   RestFrameNSubjettinessTagger(const JetDefinition subjet_def, 
00103                       const double tau2cut=0.08, 
00104                       const double costhetascut=0.8,
00105                       const bool use_exclusive = false)
00106     : _subjet_def(subjet_def), _t2cut(tau2cut), _costscut(costhetascut),
00107       _use_exclusive(use_exclusive){};
00108 
00109   /// returns a textual description of the tagger 
00110   virtual std::string description() const;
00111 
00112   /// runs the tagger on the given jet and
00113   /// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise
00114   /// (standard access is through operator()).
00115   virtual PseudoJet result(const PseudoJet & jet) const;
00116 
00117   /// the type of Structure returned
00118   typedef RestFrameNSubjettinessTaggerStructure StructureType;
00119 
00120 protected:
00121   JetDefinition _subjet_def;
00122   double _t2cut, _costscut;
00123   bool _use_exclusive;
00124 };
00125 
00126 
00127 //------------------------------------------------------------------------
00128 /// @ingroup tools_taggers
00129 /// \class RestFrameNSubjettinessTaggerStructure
00130 /// the structure returned by the RestFrameNSubjettinessTagger transformer.
00131 ///
00132 /// See the RestFrameNSubjettinessTagger class description for the details of
00133 /// what is inside this structure
00134 ///
00135 class RestFrameNSubjettinessTaggerStructure : public CompositeJetStructure{
00136 public:
00137   /// ctor with pieces initialisation
00138   RestFrameNSubjettinessTaggerStructure(const std::vector<PseudoJet> & pieces_in) :
00139     CompositeJetStructure(pieces_in), _tau2(0.0), _costhetas(1.0){}
00140 
00141   /// returns the associated N-subjettiness
00142   inline double tau2() const{return _tau2;}
00143 
00144   /// returns the associated angle with the boosted axis
00145   inline double costhetas() const {return _costhetas;}
00146 
00147 //  /// returns the original jet (before tagging)
00148 //  const PseudoJet & original() const {return _original_jet;}
00149 
00150 protected:
00151   double _tau2;      ///< the value of the N-subjettiness
00152   double _costhetas; ///< the minimal angle between the dijets
00153                      ///< and the boost axis
00154 //  PseudoJet _original_jet;  ///< the original jet (before tagging)
00155 
00156   // allow the tagger to set these
00157   friend class RestFrameNSubjettinessTagger;
00158 };
00159 
00160 FASTJET_END_NAMESPACE
00161 #endif  //  __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
00162 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends