FastJet  3.4.0
CDFMidPointPlugin.hh
1 //FJSTARTHEADER
2 // $Id$
3 //
4 // Copyright (c) 2005-2021, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
5 //
6 //----------------------------------------------------------------------
7 // This file is part of FastJet.
8 //
9 // FastJet is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation; either version 2 of the License, or
12 // (at your option) any later version.
13 //
14 // The algorithms that underlie FastJet have required considerable
15 // development. They are described in the original FastJet paper,
16 // hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
17 // FastJet as part of work towards a scientific publication, please
18 // quote the version you use and include a citation to the manual and
19 // optionally also to hep-ph/0512210.
20 //
21 // FastJet is distributed in the hope that it will be useful,
22 // but WITHOUT ANY WARRANTY; without even the implied warranty of
23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 // GNU General Public License for more details.
25 //
26 // You should have received a copy of the GNU General Public License
27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>.
28 //----------------------------------------------------------------------
29 //FJENDHEADER
30 
31 #ifndef __CDFMIDPOINTPLUGIN_HH__
32 #define __CDFMIDPOINTPLUGIN_HH__
33 
34 #include "fastjet/JetDefinition.hh"
35 #include "fastjet/internal/thread_safety_helpers.hh" // helpers to write transparent code w&wo C++11 features
36 
37 // questionable whether this should be in fastjet namespace or not...
38 
39 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
40 
41 //----------------------------------------------------------------------
42 //
43 /// @ingroup plugins
44 /// \class CDFMidPointPlugin
45 /// Implementation of the MidPoint algorithm from CDF (plugin for
46 /// fastjet-v2.1 upwards)
47 ///
48 /// A plugin for fastjet-v2.1 that provides an interface to the CDF
49 /// midpoint algorithm
50 ///
51 /// CDFMidPointPlugin is a plugin for fastjet (v2.1 upwards) that
52 /// provides an interface to the CDF version of Run-II iterative cone
53 /// algorithm with midpoint seeds (also known as the Iterative Legacy
54 /// Cone Algorithm, ILCA).
55 ///
56 /// The CDF code has been taken from Joey Huston's webpage
57 /// http://www.pa.msu.edu/~huston/Les_Houches_2005/Les_Houches_SM.html
58 ///
59 /// Note that the CDF midpoint code contains options that go beyond
60 /// those described in the Tevatron run-II document (hep-ex/0005012),
61 /// notably search-cones, as described in hep-ph/0111434, and
62 /// midpoints bewteen multiplets of stable cones.
63 ///
64 /// Additionally, the version of the CDF midpoint code distributed
65 /// here has been modified by the FastJet authors, so as to allow one
66 /// to choose the scale used in the split-merge step.
67 //
68 //----------------------------------------------------------------------
70 public:
71  /// the choice of scale to be used in the split-merge step
72  // NB: just replicates what we've added to the CDF midpoint code
73  enum SplitMergeScale {SM_pt, SM_Et, SM_mt, SM_pttilde};
74 
75  ///
76  /// A CDFMidPointPlugin constructor that looks like the one provided
77  /// by CDF. Its arguments should have the following meaning:
78  ///
79  /// - seed_threshold: minimum pt for a particle to be considered
80  /// a seed of the iteration.
81  ///
82  /// - cone_radius: standard meaning
83  ///
84  /// - cone_area_fraction: stable-cones are searched for with a
85  /// radius Rsearch = R * sqrt(cone_area_fraction), and then
86  /// expanded to size R afterwards; note (hep-ph/0610012) that this
87  /// introduces IR unsafety at NLO for X+2-jet observables (where X
88  /// any hard object).
89  ///
90  /// - max_pair_size: "midpoints" can be added between pairs of
91  /// stable cones, triplets of stable cones, etc.; max_pair_size
92  /// indicates the maximum number of stable cones that are
93  /// assembled when adding midpoints.
94  ///
95  /// - max_iterations: the maximum number of iterations to carry out
96  /// when looking for a stable cone.
97  ///
98  /// - overlap_threshold: if
99  /// (overlapping_Et)/(Et_of_softer_protojet) < overlap_threshold,
100  /// overlapping jets are split, otherwise they are merged.
101  ///
102  /// - sm_scale: a choice for the scale to be used in the split-merge
103  /// step (both for ordering the momenta and quantifying the
104  /// overlap); the three options are
105  ///
106  /// . SM_pt: pt (default -- source of small IR safety issue in purely
107  /// hadronic events)
108  ///
109  /// . SM_Et: Et (not boost invariant, reduces to mt at zero rapidity and
110  /// to pt and infinite rapidity)
111  ///
112  /// . SM_mt: transverse mass = sqrt(m^2+pt^2)
113  ///
115  double seed_threshold_in ,
116  double cone_radius_in ,
117  double cone_area_fraction_in ,
118  int max_pair_size_in ,
119  int max_iterations_in ,
120  double overlap_threshold_in ,
121  SplitMergeScale sm_scale_in = SM_pt) :
122  _seed_threshold (seed_threshold_in ),
123  _cone_radius (cone_radius_in ),
124  _cone_area_fraction (cone_area_fraction_in ),
125  _max_pair_size (max_pair_size_in ),
126  _max_iterations (max_iterations_in ),
127  _overlap_threshold (overlap_threshold_in ),
128  _sm_scale (sm_scale_in) {}
129 
130  /// a compact constructor
131  ///
132  /// NB: as of version 2.4, the default value for the
133  /// overlap_threshold threshold has been removed, to avoid
134  /// misleading people into using the value of 0.5 without thinking,
135  /// which is known to have adverse effects in high-noise
136  /// environments. A recommended value is 0.75.
137  CDFMidPointPlugin (double cone_radius_in,
138  double overlap_threshold_in,// = 0.5,
139  double seed_threshold_in = 1.0,
140  double cone_area_fraction_in = 1.0) :
141  _seed_threshold (seed_threshold_in ),
142  _cone_radius (cone_radius_in ),
143  _cone_area_fraction (cone_area_fraction_in ),
144  _max_pair_size (2 ),
145  _max_iterations (100 ),
146  _overlap_threshold (overlap_threshold_in ),
147  _sm_scale (SM_pt) {}
148 
149 
150  // some functions to return info about parameters
151  double seed_threshold () const {return _seed_threshold ;}
152  double cone_radius () const {return _cone_radius ;}
153  double cone_area_fraction () const {return _cone_area_fraction ;}
154  int max_pair_size () const {return _max_pair_size ;}
155  int max_iterations () const {return _max_iterations ;}
156  double overlap_threshold () const {return _overlap_threshold ;}
157 
158 
159  // the things that are required by base class
160  virtual std::string description () const;
161  virtual void run_clustering(ClusterSequence &) const;
162  /// the plugin mechanism's standard way of accessing the jet radius
163  virtual double R() const {return cone_radius();}
164 
165 private:
166 
167  double _seed_threshold ;
168  double _cone_radius ;
169  double _cone_area_fraction;
170  int _max_pair_size ;
171  int _max_iterations ;
172  double _overlap_threshold ;
173  SplitMergeScale _sm_scale ;
174 
175  static thread_safety_helpers::FirstTimeTrue _first_time;
176 
177  /// print a banner for reference to the 3rd-party code
178  void _print_banner(std::ostream *ostr) const;
179 };
180 
181 FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh
182 
183 #endif // __CDFMIDPOINTPLUGIN_HH__
Implementation of the MidPoint algorithm from CDF (plugin for fastjet-v2.1 upwards)
SplitMergeScale
the choice of scale to be used in the split-merge step
virtual double R() const
the plugin mechanism's standard way of accessing the jet radius
CDFMidPointPlugin(double cone_radius_in, double overlap_threshold_in, double seed_threshold_in=1.0, double cone_area_fraction_in=1.0)
a compact constructor
CDFMidPointPlugin(double seed_threshold_in, double cone_radius_in, double cone_area_fraction_in, int max_pair_size_in, int max_iterations_in, double overlap_threshold_in, SplitMergeScale sm_scale_in=SM_pt)
A CDFMidPointPlugin constructor that looks like the one provided by CDF.
a class that allows a user to introduce their own "plugin" jet finder
provides an object wich will return "true" the first time () is called and false afterwards