FastJet  3.0.6
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
GhostedAreaSpec.hh
1 //STARTHEADER
2 // $Id: GhostedAreaSpec.hh 2728 2011-11-20 14:18:59Z salam $
3 //
4 // Copyright (c) 2005-2011, 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 and are described in hep-ph/0512210. If you use
16 // FastJet as part of work towards a scientific publication, please
17 // include a citation to the FastJet paper.
18 //
19 // FastJet is distributed in the hope that it will be useful,
20 // but WITHOUT ANY WARRANTY; without even the implied warranty of
21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 // GNU General Public License for more details.
23 //
24 // You should have received a copy of the GNU General Public License
25 // along with FastJet. If not, see <http://www.gnu.org/licenses/>.
26 //----------------------------------------------------------------------
27 //ENDHEADER
28 
29 
30 #ifndef __FASTJET_GHOSTEDAREASPEC_HH__
31 #define __FASTJET_GHOSTEDAREASPEC_HH__
32 
33 #include<vector>
34 #include<string>
35 #include "fastjet/PseudoJet.hh"
36 #include "fastjet/internal/BasicRandom.hh"
37 #include "fastjet/Selector.hh"
38 #include "fastjet/LimitedWarning.hh"
39 
40 //
41 #define STATIC_GENERATOR 1
42 
43 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
44 
45 /// namespace to hold default parameters for the active area spec
46 namespace gas {
47  const double def_ghost_maxrap = 6.0;
48  const int def_repeat = 1;
49  const double def_ghost_area = 0.01;
50  const double def_grid_scatter = 1.0;
51  const double def_pt_scatter = 0.1;
52  const double def_mean_ghost_pt = 1e-100;
53 }
54 
55 //----------------------------------------------------------------------
56 /// @ingroup area_classes
57 /// \class GhostedAreaSpec
58 /// Parameters to configure the computation of jet areas using ghosts
59 ///
60 /// Class that defines the parameters that go into the measurement
61 /// of active jet areas.
63 public:
64  /// default constructor
65  GhostedAreaSpec(): _ghost_maxrap (gas::def_ghost_maxrap),
66  _ghost_rap_offset(0.0),
67  _repeat (gas::def_repeat),
68  _ghost_area (gas::def_ghost_area),
69  _grid_scatter (gas::def_grid_scatter),
70  _pt_scatter (gas::def_pt_scatter),
71  _mean_ghost_pt(gas::def_mean_ghost_pt),
72  _fj2_placement(false) {_initialize();}
73 
74  /// explicit constructor
75  explicit GhostedAreaSpec(double ghost_maxrap_in,
76  int repeat_in = gas::def_repeat,
77  double ghost_area_in = gas::def_ghost_area,
78  double grid_scatter_in = gas::def_grid_scatter,
79  double pt_scatter_in = gas::def_pt_scatter,
80  double mean_ghost_pt_in = gas::def_mean_ghost_pt
81  ):
82  _ghost_maxrap(ghost_maxrap_in),
83  _ghost_rap_offset(0.0),
84  _repeat(repeat_in),
85  _ghost_area(ghost_area_in),
86  _grid_scatter(grid_scatter_in),
87  _pt_scatter(pt_scatter_in),
88  _mean_ghost_pt(mean_ghost_pt_in),
89  _fj2_placement(false) {_initialize();}
90 
91  /// explicit constructor
92  explicit GhostedAreaSpec(double ghost_minrap_in,
93  double ghost_maxrap_in,
94  int repeat_in = gas::def_repeat,
95  double ghost_area_in = gas::def_ghost_area,
96  double grid_scatter_in = gas::def_grid_scatter,
97  double pt_scatter_in = gas::def_pt_scatter,
98  double mean_ghost_pt_in = gas::def_mean_ghost_pt
99  ):
100  _ghost_maxrap (0.5*(ghost_maxrap_in - ghost_minrap_in)),
101  _ghost_rap_offset(0.5*(ghost_maxrap_in + ghost_minrap_in)),
102  _repeat(repeat_in),
103  _ghost_area(ghost_area_in),
104  _grid_scatter(grid_scatter_in),
105  _pt_scatter(pt_scatter_in),
106  _mean_ghost_pt(mean_ghost_pt_in),
107  _fj2_placement(false) {_initialize();}
108 
109 
110  /// constructor based on a Selector
111  explicit GhostedAreaSpec(const Selector & selector,
112  int repeat_in = gas::def_repeat,
113  double ghost_area_in = gas::def_ghost_area,
114  double grid_scatter_in = gas::def_grid_scatter,
115  double pt_scatter_in = gas::def_pt_scatter,
116  double mean_ghost_pt_in = gas::def_mean_ghost_pt
117  );
118 
119 
120  /// does the initialization of actual ghost parameters
121  void _initialize();
122 
123  // for accessing values set by the user
124  inline double ghost_etamax () const {return _ghost_maxrap;}
125  inline double ghost_maxrap () const {return _ghost_maxrap;}
126  inline double ghost_area () const {return _ghost_area ;}
127  inline double grid_scatter () const {return _grid_scatter;}
128  inline double pt_scatter () const {return _pt_scatter ;}
129  inline double mean_ghost_pt() const {return _mean_ghost_pt ;}
130  inline int repeat () const {return _repeat ;}
131  inline bool fj2_placement() const {return _fj2_placement;}
132 
133  inline double kt_scatter () const {return _pt_scatter ;}
134  inline double mean_ghost_kt() const {return _mean_ghost_pt ;}
135 
136  // for accessing values
137  inline double actual_ghost_area() const {return _actual_ghost_area;}
138  inline int n_ghosts() const {return _n_ghosts;}
139 
140  // when explicitly modifying values, sometimes call the initializer
141  inline void set_ghost_area (double val) {_ghost_area = val; _initialize();}
142  inline void set_ghost_etamax (double val) {_ghost_maxrap = val; _initialize();}
143  inline void set_ghost_maxrap (double val) {_ghost_maxrap = val; _initialize();}
144  inline void set_grid_scatter (double val) {_grid_scatter = val; }
145  inline void set_pt_scatter (double val) {_pt_scatter = val; }
146  inline void set_mean_ghost_pt(double val) {_mean_ghost_pt = val; }
147  inline void set_repeat (int val) {_repeat = val; }
148 
149  inline void set_kt_scatter (double val) {_pt_scatter = val; }
150  inline void set_mean_ghost_kt(double val) {_mean_ghost_pt = val; }
151 
152  /// if val is true, set ghost placement as it was in FastJet 2.X. The
153  /// main differences between FJ2 and FJ3 ghost placement are
154  ///
155  /// - in FJ2 the rapidity spacing was
156  /// ceil((maxrap-minrap)/sqrt(area)), while in FJ3 it is
157  /// int((maxrap-minrap)/sqrt(area) + 0.5) [similarly for phi].
158  /// The FJ3 option offers more stability when trying to specify a
159  /// spacing that exactly fits the extent.
160  ///
161  /// - in FJ2, the ghosts are placed at the corners of grid cells
162  /// (i.e. extending up to maxrap), while in FJ3 they are placed at
163  /// the centres of grid cells (i.e. extending roughly up to
164  /// maxrap-sqrt(area)). The FJ2 behaviour effectively skews the
165  /// total area coverage when maxrap is small, by an amount
166  /// sqrt(area)/(2*maxrap).
167  ///
168  /// FJ2 placement is now deprecated.
169  void set_fj2_placement(bool val);
170 
171  /// return nphi (ghosts layed out (-nrap, 0..nphi-1), (-nrap+1,0..nphi-1),
172  /// ... (nrap,0..nphi-1)
173  inline int nphi() const {return _nphi;}
174  inline int nrap() const {return _nrap;}
175 
176  /// get all relevant information about the status of the
177  /// random number generator, so that it can be reset subsequently
178  /// with set_random_status.
179  inline void get_random_status(std::vector<int> & __iseed) const {
180  _random_generator.get_status(__iseed);}
181 
182  /// set the status of the random number generator, as obtained
183  /// previously with get_random_status. Note that the random
184  /// generator is a static member of the class, i.e. common to all
185  /// instances of the class --- so if you modify the random for this
186  /// instance, you modify it for all instances.
187  inline void set_random_status(const std::vector<int> & __iseed) {
188  _random_generator.set_status(__iseed);}
189 
190  inline void checkpoint_random() {get_random_status(_random_checkpoint);}
191  inline void restore_checkpoint_random() {set_random_status(_random_checkpoint);}
192 
193  /// for a summary
194  std::string description() const;
195 
196  /// push a set of ghost 4-momenta onto the back of the vector of
197  /// PseudoJets
198  void add_ghosts(std::vector<PseudoJet> & ) const;
199 
200  /// very deprecated public access to a random number
201  /// from the internal generator
202  inline double random_at_own_risk() const {return _our_rand();}
203  /// very deprecated public access to the generator itself
204  inline BasicRandom<double> & generator_at_own_risk() const {
205  return _random_generator;}
206 
207 private:
208 
209  // quantities that determine nature and distribution of ghosts
210  double _ghost_maxrap;
211  double _ghost_rap_offset;
212  int _repeat ;
213  double _ghost_area ;
214  double _grid_scatter;
215  double _pt_scatter ;
216  double _mean_ghost_pt;
217  bool _fj2_placement;
218 
219  Selector _selector;
220 
221  // derived quantities
222  double _actual_ghost_area, _dphi, _drap;
223  int _n_ghosts, _nphi, _nrap;
224 
225 
226  std::vector<int> _random_checkpoint;
227  static BasicRandom<double> _random_generator;
228  //mutable BasicRandom<double> _random_generator;
229 
230  static LimitedWarning _warn_fj2_placement_deprecated;
231 
232  inline double _our_rand() const {return _random_generator();}
233 
234 };
235 
236 /// just provide a typedef for backwards compatibility with programs
237 /// based on versions 2.0 and 2.1 of fastjet. Since there is no
238 /// easy way of telling people this is deprecated at compile or run
239 /// time, we should be careful before removing this in the future.
241 
242 
243 FASTJET_END_NAMESPACE
244 
245 #endif // __FASTJET_GHOSTEDAREASPEC_HH__
int nphi() const
return nphi (ghosts layed out (-nrap, 0..nphi-1), (-nrap+1,0..nphi-1), ...
void get_random_status(std::vector< int > &__iseed) const
get all relevant information about the status of the random number generator, so that it can be reset...
BasicRandom< double > & generator_at_own_risk() const
very deprecated public access to the generator itself
GhostedAreaSpec(double ghost_maxrap_in, int repeat_in=gas::def_repeat, double ghost_area_in=gas::def_ghost_area, double grid_scatter_in=gas::def_grid_scatter, double pt_scatter_in=gas::def_pt_scatter, double mean_ghost_pt_in=gas::def_mean_ghost_pt)
explicit constructor
GhostedAreaSpec(double ghost_minrap_in, double ghost_maxrap_in, int repeat_in=gas::def_repeat, double ghost_area_in=gas::def_ghost_area, double grid_scatter_in=gas::def_grid_scatter, double pt_scatter_in=gas::def_pt_scatter, double mean_ghost_pt_in=gas::def_mean_ghost_pt)
explicit constructor
GhostedAreaSpec()
default constructor
class to provide facilities for giving warnings up to some maximum number of times and to provide glo...
Class that encodes information about cuts and other selection criteria that can be applied to PseudoJ...
Definition: Selector.hh:141
double random_at_own_risk() const
very deprecated public access to a random number from the internal generator
void set_random_status(const std::vector< int > &__iseed)
set the status of the random number generator, as obtained previously with get_random_status.
Parameters to configure the computation of jet areas using ghosts.