Back to home page

EIC code displayed by LXR

 
 

    


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

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 __CDFMIDPOINTPLUGIN_HH__
0032 #define __CDFMIDPOINTPLUGIN_HH__
0033 
0034 #include "fastjet/JetDefinition.hh"
0035 #include "fastjet/internal/thread_safety_helpers.hh"  // helpers to write transparent code w&wo C++11 features
0036 
0037 // questionable whether this should be in fastjet namespace or not...
0038 
0039 FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
0040 
0041 //----------------------------------------------------------------------
0042 //
0043 /// @ingroup plugins
0044 /// \class CDFMidPointPlugin
0045 /// Implementation of the MidPoint algorithm from CDF (plugin for
0046 /// fastjet-v2.1 upwards)
0047 ///
0048 /// A plugin for fastjet-v2.1 that provides an interface to the CDF
0049 /// midpoint algorithm
0050 ///
0051 /// CDFMidPointPlugin is a plugin for fastjet (v2.1 upwards) that
0052 /// provides an interface to the CDF version of Run-II iterative cone
0053 /// algorithm with midpoint seeds (also known as the Iterative Legacy
0054 /// Cone Algorithm, ILCA).
0055 ///
0056 /// The CDF code has been taken from Joey Huston's webpage
0057 /// http://www.pa.msu.edu/~huston/Les_Houches_2005/Les_Houches_SM.html
0058 ///
0059 /// Note that the CDF midpoint code contains options that go beyond
0060 /// those described in the Tevatron run-II document (hep-ex/0005012),
0061 /// notably search-cones, as described in hep-ph/0111434, and
0062 /// midpoints bewteen multiplets of stable cones.
0063 ///
0064 /// Additionally, the version of the CDF midpoint code distributed
0065 /// here has been modified by the FastJet authors, so as to allow one
0066 /// to choose the scale used in the split-merge step.
0067 //
0068 //----------------------------------------------------------------------
0069 class CDFMidPointPlugin : public JetDefinition::Plugin {
0070 public:
0071   /// the choice of scale to be used in the split-merge step
0072   // NB: just replicates what we've added to the CDF midpoint code
0073   enum SplitMergeScale {SM_pt, SM_Et, SM_mt, SM_pttilde};
0074 
0075   ///
0076   /// A CDFMidPointPlugin constructor that looks like the one provided
0077   /// by CDF. Its arguments should have the following meaning:
0078   ///
0079   /// - seed_threshold: minimum pt for a particle to be considered 
0080   ///   a seed of the iteration.
0081   ///
0082   /// - cone_radius: standard meaning
0083   ///
0084   /// - cone_area_fraction: stable-cones are searched for with a
0085   ///   radius Rsearch = R * sqrt(cone_area_fraction), and then
0086   ///   expanded to size R afterwards; note (hep-ph/0610012) that this
0087   ///   introduces IR unsafety at NLO for X+2-jet observables (where X
0088   ///   any hard object).
0089   ///
0090   /// - max_pair_size: "midpoints" can be added between pairs of
0091   ///   stable cones, triplets of stable cones, etc.; max_pair_size
0092   ///   indicates the maximum number of stable cones that are
0093   ///   assembled when adding midpoints.
0094   ///
0095   /// - max_iterations: the maximum number of iterations to carry out
0096   ///   when looking for a stable cone.
0097   ///
0098   /// - overlap_threshold: if
0099   ///     (overlapping_Et)/(Et_of_softer_protojet) < overlap_threshold,
0100   ///   overlapping jets are split, otherwise they are merged.
0101   ///
0102   /// - sm_scale: a choice for the scale to be used in the split-merge
0103   ///   step (both for ordering the momenta and quantifying the
0104   ///   overlap); the three options are
0105   ///
0106   ///    . SM_pt: pt (default -- source of small IR safety issue in purely
0107   ///      hadronic events)
0108   ///
0109   ///    . SM_Et: Et (not boost invariant, reduces to mt at zero rapidity and
0110   ///      to pt and infinite rapidity)
0111   ///
0112   ///    . SM_mt: transverse mass = sqrt(m^2+pt^2)
0113   ///
0114   CDFMidPointPlugin (
0115                      double seed_threshold_in     ,  
0116              double cone_radius_in        ,
0117              double cone_area_fraction_in ,
0118              int    max_pair_size_in      ,
0119              int    max_iterations_in     ,
0120              double overlap_threshold_in  ,
0121                      SplitMergeScale sm_scale_in = SM_pt) :
0122     _seed_threshold     (seed_threshold_in     ),    
0123     _cone_radius        (cone_radius_in        ),
0124     _cone_area_fraction (cone_area_fraction_in ),
0125     _max_pair_size      (max_pair_size_in      ),
0126     _max_iterations     (max_iterations_in     ),
0127     _overlap_threshold  (overlap_threshold_in  ),
0128     _sm_scale           (sm_scale_in)             {}
0129 
0130   /// a compact constructor
0131   ///
0132   /// NB: as of version 2.4, the default value for the
0133   /// overlap_threshold threshold has been removed, to avoid
0134   /// misleading people into using the value of 0.5 without thinking,
0135   /// which is known to have adverse effects in high-noise
0136   /// environments. A recommended value is 0.75.
0137   CDFMidPointPlugin (double   cone_radius_in, 
0138              double   overlap_threshold_in,// = 0.5, 
0139              double   seed_threshold_in = 1.0,       
0140              double   cone_area_fraction_in = 1.0) : 
0141     _seed_threshold     (seed_threshold_in     ),    
0142     _cone_radius        (cone_radius_in        ),
0143     _cone_area_fraction (cone_area_fraction_in ),
0144     _max_pair_size      (2                     ),
0145     _max_iterations     (100                   ),
0146     _overlap_threshold  (overlap_threshold_in  ),
0147     _sm_scale           (SM_pt)                {}
0148 
0149 
0150   // some functions to return info about parameters
0151   double seed_threshold     () const {return _seed_threshold     ;}
0152   double cone_radius        () const {return _cone_radius        ;}
0153   double cone_area_fraction () const {return _cone_area_fraction ;}
0154   int    max_pair_size      () const {return _max_pair_size      ;}
0155   int    max_iterations     () const {return _max_iterations     ;}
0156   double overlap_threshold  () const {return _overlap_threshold  ;}
0157 
0158 
0159   // the things that are required by base class
0160   virtual std::string description () const;
0161   virtual void run_clustering(ClusterSequence &) const;
0162   /// the plugin mechanism's standard way of accessing the jet radius
0163   virtual double R() const {return cone_radius();}
0164                       
0165 private:
0166 
0167   double _seed_threshold    ;
0168   double _cone_radius       ;
0169   double _cone_area_fraction;
0170   int    _max_pair_size     ;
0171   int    _max_iterations    ;
0172   double _overlap_threshold ;
0173   SplitMergeScale _sm_scale ;
0174 
0175   static thread_safety_helpers::FirstTimeTrue _first_time;
0176 
0177   /// print a banner for reference to the 3rd-party code
0178   void _print_banner(std::ostream *ostr) const;
0179 };
0180 
0181 FASTJET_END_NAMESPACE      // defined in fastjet/internal/base.hh
0182 
0183 #endif // __CDFMIDPOINTPLUGIN_HH__