FastJet 3.4.1
CDFMidPointPlugin.hh
1//FJSTARTHEADER
2// $Id$
3//
4// Copyright (c) 2005-2023, 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
39FASTJET_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//----------------------------------------------------------------------
70public:
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
165private:
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
181FASTJET_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