Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef __FASTJET_TOP_TAGGER_BASE_HH__
0002 #define __FASTJET_TOP_TAGGER_BASE_HH__
0003 
0004 //FJSTARTHEADER
0005 // $Id$
0006 //
0007 // Copyright (c) 2005-2021, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
0008 //
0009 //----------------------------------------------------------------------
0010 // This file is part of FastJet.
0011 //
0012 //  FastJet is free software; you can redistribute it and/or modify
0013 //  it under the terms of the GNU General Public License as published by
0014 //  the Free Software Foundation; either version 2 of the License, or
0015 //  (at your option) any later version.
0016 //
0017 //  The algorithms that underlie FastJet have required considerable
0018 //  development. They are described in the original FastJet paper,
0019 //  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
0020 //  FastJet as part of work towards a scientific publication, please
0021 //  quote the version you use and include a citation to the manual and
0022 //  optionally also to hep-ph/0512210.
0023 //
0024 //  FastJet is distributed in the hope that it will be useful,
0025 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
0026 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0027 //  GNU General Public License for more details.
0028 //
0029 //  You should have received a copy of the GNU General Public License
0030 //  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
0031 //----------------------------------------------------------------------
0032 //FJENDHEADER
0033 
0034 #include "fastjet/internal/base.hh"
0035 #include "fastjet/tools/Transformer.hh"
0036 
0037 FASTJET_BEGIN_NAMESPACE
0038 
0039 class TopTaggerBase;
0040 class TopTaggerBaseStructure;
0041 
0042 //----------------------------------------------------------------------
0043 /// @ingroup tools_taggers
0044 /// \class TopTaggerBase
0045 /// A base class that provides a common interface for top taggers
0046 /// that are able to return a W (in addition to the top itself).
0047 ///
0048 /// Top taggers that derive from this should satisfy the following 
0049 /// criteria:
0050 ///
0051 /// - their underlying structure should derive from TopTaggerBaseStructure
0052 /// - tagged tops should have two pieces, the first of which is the W candidate
0053 /// - they should apply the top and W selectors to decide if the top has been
0054 ///   tagged
0055 class TopTaggerBase : public Transformer {
0056 public:
0057   TopTaggerBase() : _top_selector(SelectorIdentity()),
0058                     _W_selector(SelectorIdentity()),
0059                     _top_selector_set(false),
0060                     _W_selector_set(false)              {}
0061 
0062   /// the type of the associated structure
0063   typedef TopTaggerBaseStructure StructureType;
0064 
0065   /// sets the selector that is applied to the top candidate
0066   void set_top_selector(const Selector & sel) {_top_selector = sel; _top_selector_set = true;}
0067   /// sets  the selector that is applied to the W candidate
0068   void set_W_selector  (const Selector & sel) {_W_selector   = sel; _W_selector_set = true;}
0069   
0070   /// returns a description of the top and W selectors
0071   virtual std::string description_of_selectors() const {
0072     std::string descr;
0073     if (_top_selector_set) descr = ", top selector: "+_top_selector.description();
0074     if (_W_selector_set) descr += ", W selector: "+_W_selector.description();
0075     return descr;
0076   }
0077 
0078 protected:
0079   /// computes the W helicity angle
0080   double _cos_theta_W(const PseudoJet & result) const;
0081 
0082   Selector _top_selector, _W_selector;
0083   bool _top_selector_set, _W_selector_set;
0084 };
0085 
0086 
0087 //----------------------------------------------------------------------
0088 /// @ingroup tools_taggers
0089 /// \class TopTaggerBaseStructure
0090 /// class that specifies the structure common to all top taggers
0091 ///
0092 /// Note that this specifies only the W, non_W part of the
0093 /// interface. An actual top tagger structure class will also need to
0094 /// derive from a PseudoJetStructureBase type class
0095 /// (e.g. CompositeJetStructure)
0096 class TopTaggerBaseStructure {
0097 public:
0098   virtual const PseudoJet & W() const = 0;
0099   virtual const PseudoJet & non_W() const = 0;
0100   virtual ~TopTaggerBaseStructure() {}
0101 };
0102 
0103 
0104 FASTJET_END_NAMESPACE
0105 
0106 #endif  //  __FASTJET_TOP_TAGGER_BASE_HH__
0107