Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  master (d98a2936)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
RndmGenerators.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
13 #include <GaudiKernel/IRndmGen.h>
14 #include <GaudiKernel/SmartIF.h>
15 #include <vector>
16 
17 class IRndmGen;
18 class IRndmGenSvc;
19 
20 namespace Rndm {
21 
22  template <class TYPE>
23  class Generator;
24 
27  class GAUDI_API Gauss : public IRndmGen::Param {
28  protected:
30  friend class Generator<Gauss>;
32  double m_mean;
34  double m_sigma;
35 
36  public:
38  Gauss( double m, double s ) : IRndmGen::Param( IID_IRndmGauss ), m_mean( m ), m_sigma( s ) {}
40  double mean() const { return m_mean; }
42  double sigma() const { return m_sigma; }
44  static const InterfaceID& typeID() { return IID_IRndmGauss; }
46  Gauss* clone() const override { return new Gauss( m_mean, m_sigma ); }
47  };
48 
52  protected:
54  double m_mean;
55 
56  public:
58  Exponential( double m ) : IRndmGen::Param( IID_IRndmExponential ), m_mean( m ) {}
60  double mean() const { return m_mean; }
62  static const InterfaceID& typeID() { return IID_IRndmExponential; }
64  Exponential* clone() const override { return new Exponential( m_mean ); }
65  };
66 
69  class GAUDI_API Chi2 : public IRndmGen::Param {
70  friend class Generator<Chi2>;
71 
72  protected:
74  long m_nDOF;
75 
76  public:
78  Chi2( long n_dof ) : IRndmGen::Param( IID_IRndmChi2 ), m_nDOF( n_dof ) {}
80  long nDOF() const { return m_nDOF; }
82  static const InterfaceID& typeID() { return IID_IRndmChi2; }
84  Chi2* clone() const override { return new Chi2( m_nDOF ); }
85  };
86 
90  friend class Generator<BreitWigner>;
91 
92  protected:
94  double m_mean, m_gamma;
95 
96  public:
98  BreitWigner( double m, double g ) : IRndmGen::Param( IID_IRndmBreitWigner ), m_mean( m ), m_gamma( g ) {}
100  double mean() const { return m_mean; }
102  double gamma() const { return m_gamma; }
104  static const InterfaceID& typeID() { return IID_IRndmBreitWigner; }
106  BreitWigner* clone() const override { return new BreitWigner( m_mean, m_gamma ); }
107  };
108 
112  friend class Generator<Landau>;
113 
114  protected:
116  double m_mean, m_sigma;
117 
118  public:
120  Landau( double m, double s ) : IRndmGen::Param( IID_IRndmLandau ), m_mean( m ), m_sigma( s ) {}
122  double mean() const { return m_mean; }
124  double sigma() const { return m_sigma; }
126  static const InterfaceID& typeID() { return IID_IRndmLandau; }
128  Landau* clone() const override { return new Landau( m_mean, m_sigma ); }
129  };
130 
135  friend class Generator<BreitWignerCutOff>;
136 
137  protected:
139  double m_mean, m_gamma, m_cut;
140 
141  public:
143  BreitWignerCutOff( double m, double g, double c )
144  : IRndmGen::Param( IID_IRndmBreitWignerCutOff ), m_mean( m ), m_gamma( g ), m_cut( c ) {}
146  double mean() const { return m_mean; }
148  double gamma() const { return m_gamma; }
150  double cutOff() const { return m_cut; }
152  static const InterfaceID& typeID() { return IID_IRndmBreitWignerCutOff; }
154  BreitWignerCutOff* clone() const override { return new BreitWignerCutOff( m_mean, m_gamma, m_cut ); }
155  };
156 
160  friend class Generator<StudentT>;
161 
162  protected:
164  double m_aValue;
165 
166  public:
168  StudentT( double a ) : IRndmGen::Param( IID_IRndmStudentT ), m_aValue( a ) {}
170  double aValue() const { return m_aValue; }
172  static const InterfaceID& typeID() { return IID_IRndmStudentT; }
174  StudentT* clone() const override { return new StudentT( m_aValue ); }
175  };
176 
179  class GAUDI_API Gamma : public IRndmGen::Param {
180  friend class Generator<Gamma>;
181 
182  protected:
184  double m_kValue;
186  double m_lambda;
187 
188  public:
190  Gamma( double k, double l ) : IRndmGen::Param( IID_IRndmGamma ), m_kValue( k ), m_lambda( l ) {}
192  double kValue() const { return m_kValue; }
194  double lambda() const { return m_lambda; }
196  static const InterfaceID& typeID() { return IID_IRndmGamma; }
198  Gamma* clone() const override { return new Gamma( m_kValue, m_lambda ); }
199  };
200 
205  friend class Generator<Poisson>;
206 
207  protected:
209  double m_mean;
210 
211  public:
213  Poisson( double m ) : IRndmGen::Param( IID_IRndmPoisson ), m_mean( m ) {}
215  double mean() const { return m_mean; }
217  static const InterfaceID& typeID() { return IID_IRndmPoisson; }
219  Poisson* clone() const override { return new Poisson( m_mean ); }
220  };
221 
226  protected:
228  long m_nEvent;
231 
232  public:
234  Binomial( long n, double p ) : IRndmGen::Param( IID_IRndmBinomial ), m_nEvent( n ), m_probability( p ) {}
236  long nEvent() const { return m_nEvent; }
238  double probability() const { return m_probability; }
240  static const InterfaceID& typeID() { return IID_IRndmBinomial; }
242  Binomial* clone() const override { return new Binomial( m_nEvent, m_probability ); }
243  };
244 
248  class GAUDI_API Flat : public IRndmGen::Param {
249  protected:
251  double m_minimum;
253  double m_maximum;
254 
255  public:
257  Flat( double mi, double ma ) : IRndmGen::Param( IID_IRndmFlat ), m_minimum( mi ), m_maximum( ma ) {}
259  double minimum() const { return m_minimum; }
261  double maximum() const { return m_maximum; }
263  static const InterfaceID& typeID() { return IID_IRndmFlat; }
265  Flat* clone() const override { return new Flat( m_minimum, m_maximum ); }
266  };
267 
270  class GAUDI_API Bit : public IRndmGen::Param {
271  public:
273  Bit() : IRndmGen::Param( IID_IRndmBit ) {}
275  static const InterfaceID& typeID() { return IID_IRndmBit; }
277  Bit* clone() const override { return new Bit(); }
278  };
279 
297  protected:
299  std::vector<double> m_pdf;
302 
303  public:
305  DefinedPdf( const std::vector<double>& pdf, long intpol )
306  : IRndmGen::Param( IID_IRndmDefinedPdf ), m_pdf( pdf ), m_interpolation( intpol ) {}
308  std::vector<double>& pdf() { return m_pdf; }
310  long interpolation() const { return m_interpolation; }
312  static const InterfaceID& typeID() { return IID_IRndmDefinedPdf; }
314  DefinedPdf* clone() const override { return new DefinedPdf( m_pdf, m_interpolation ); }
315  };
316 
320  protected:
322  double m_cut;
324  double m_sigma;
325 
326  public:
328  GaussianTail( double a, double s ) : IRndmGen::Param( IID_IRndmGaussianTail ), m_cut( a ), m_sigma( s ) {}
330  double cut() const { return m_cut; }
332  double sigma() const { return m_sigma; }
334  static const InterfaceID& typeID() { return IID_IRndmGaussianTail; }
336  GaussianTail* clone() const override { return new GaussianTail( m_cut, m_sigma ); }
337  };
338 
355  protected:
358 
359  public:
361  Numbers() = default;
363  Numbers( const Numbers& ) = default;
365  Numbers( const SmartIF<IRndmGenSvc>& svc, const IRndmGen::Param& par );
367  virtual ~Numbers();
369  virtual StatusCode initialize( const SmartIF<IRndmGenSvc>& svc, const IRndmGen::Param& par );
371  virtual StatusCode finalize();
373  operator bool() const { return m_generator; }
375  double operator()() const { return this->shoot(); }
377  double pop() const { return this->shoot(); }
379  double shoot() const { return m_generator ? m_generator->shoot() : -1; }
381  StatusCode shootArray( std::vector<double>& array, long num, long start = 0 ) const {
382  return m_generator ? m_generator->shootArray( array, num, start ) : StatusCode::FAILURE;
383  }
384  };
385 } // namespace Rndm
Rndm::DefinedPdf::interpolation
long interpolation() const
Access interpolation type.
Definition: RndmGenerators.h:310
Rndm::Gauss::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:44
Rndm::BreitWignerCutOff::mean
double mean() const
Access mean value of the distribution.
Definition: RndmGenerators.h:146
Rndm::Flat::m_maximum
double m_maximum
Upper boundary for random numbers.
Definition: RndmGenerators.h:253
Rndm::BreitWignerCutOff::gamma
double gamma() const
Access width of the distribution.
Definition: RndmGenerators.h:148
Rndm::Poisson::mean
double mean() const
Access mean value of the distribution.
Definition: RndmGenerators.h:215
Rndm::Numbers::operator()
double operator()() const
Operator () for the use within STL.
Definition: RndmGenerators.h:375
Rndm::GaussianTail::clone
GaussianTail * clone() const override
Clone parameters.
Definition: RndmGenerators.h:336
Rndm::Chi2::m_nDOF
long m_nDOF
Number of degrees of freedom.
Definition: RndmGenerators.h:74
Rndm::Binomial::nEvent
long nEvent() const
Access number of events.
Definition: RndmGenerators.h:236
gaudirun.s
string s
Definition: gaudirun.py:346
Rndm::GaussianTail::GaussianTail
GaussianTail(double a, double s)
Standard Constructor.
Definition: RndmGenerators.h:328
Rndm::Poisson::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:217
Rndm::Gauss::m_sigma
double m_sigma
Sigma of the Gauss distribution.
Definition: RndmGenerators.h:34
Rndm::Exponential::m_mean
double m_mean
Mean value of the exponential distribution.
Definition: RndmGenerators.h:54
Rndm::Binomial::Binomial
Binomial(long n, double p)
Standard Constructor.
Definition: RndmGenerators.h:234
Rndm::DefinedPdf::DefinedPdf
DefinedPdf(const std::vector< double > &pdf, long intpol)
Standard Constructor.
Definition: RndmGenerators.h:305
Rndm::Numbers::m_generator
SmartIF< IRndmGen > m_generator
Pointer to random number generator.
Definition: RndmGenerators.h:357
Rndm::Landau::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:126
Rndm::StudentT
Parameters for the StudentT distributed random number generation.
Definition: RndmGenerators.h:159
gaudirun.c
c
Definition: gaudirun.py:525
Rndm::Gauss::m_mean
double m_mean
Mean of the Gauss distribution.
Definition: RndmGenerators.h:32
Rndm::DefinedPdf::m_interpolation
long m_interpolation
Interpolation type.
Definition: RndmGenerators.h:301
Rndm::DefinedPdf::clone
DefinedPdf * clone() const override
Clone parameters.
Definition: RndmGenerators.h:314
Rndm::GaussianTail
Parameters for the Gaussian tail number generation.
Definition: RndmGenerators.h:319
Rndm::Flat
Parameters for the flat random number generation within boundaries [minimum, maximum].
Definition: RndmGenerators.h:248
Rndm::Bit::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:275
IOTest.start
start
Definition: IOTest.py:110
Rndm::BreitWigner::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:104
Rndm::Gauss::clone
Gauss * clone() const override
Clone parameters.
Definition: RndmGenerators.h:46
Rndm::DefinedPdf::m_pdf
std::vector< double > m_pdf
Vector containing probability distribution function.
Definition: RndmGenerators.h:299
Rndm
Definition: RndmGenerators.h:20
Rndm::StudentT::aValue
double aValue() const
Access A parameter.
Definition: RndmGenerators.h:170
Rndm::Exponential::Exponential
Exponential(double m)
Standard Constructor.
Definition: RndmGenerators.h:58
Rndm::Binomial::m_nEvent
long m_nEvent
Number of events the binomial destribution corresponds to.
Definition: RndmGenerators.h:228
Rndm::Flat::maximum
double maximum() const
Access upper edge.
Definition: RndmGenerators.h:261
compareOutputFiles.par
par
Definition: compareOutputFiles.py:477
Rndm::Binomial::clone
Binomial * clone() const override
Clone parameters.
Definition: RndmGenerators.h:242
Rndm::Flat::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:263
Rndm::BreitWignerCutOff
Parameters for the BreitWigner distributed random number generation with cut off;.
Definition: RndmGenerators.h:134
SmartIF.h
Rndm::GaussianTail::m_sigma
double m_sigma
Sigma of the Gauss ditribution.
Definition: RndmGenerators.h:324
IRndmGen.h
Rndm::Landau::m_sigma
double m_sigma
Definition: RndmGenerators.h:116
Rndm::Landau
Parameters for the Landau distributed random number generation.
Definition: RndmGenerators.h:111
Rndm::GaussianTail::m_cut
double m_cut
Cut on the Gaussian tail distribution.
Definition: RndmGenerators.h:322
Rndm::Landau::Landau
Landau(double m, double s)
Standard Constructor.
Definition: RndmGenerators.h:120
Rndm::Numbers::pop
double pop() const
Pop a new number from the buffer.
Definition: RndmGenerators.h:377
StatusCode
Definition: StatusCode.h:64
Rndm::Gauss
Parameters for the Gauss random number generation.
Definition: RndmGenerators.h:27
Rndm::DefinedPdf::pdf
std::vector< double > & pdf()
Access pdf.
Definition: RndmGenerators.h:308
Rndm::Gamma::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:196
Rndm::Numbers
Random number accessor This small class encapsulates the use of the random number generator.
Definition: RndmGenerators.h:354
gaudirun.g
dictionary g
Definition: gaudirun.py:582
Rndm::Landau::sigma
double sigma() const
Access width of the distribution.
Definition: RndmGenerators.h:124
Rndm::Poisson::m_mean
double m_mean
Mean value of the Poisson distribution.
Definition: RndmGenerators.h:209
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:107
Rndm::Gamma::kValue
double kValue() const
Access K parameter.
Definition: RndmGenerators.h:192
Rndm::BreitWigner::mean
double mean() const
Access mean value of the distribution.
Definition: RndmGenerators.h:100
Rndm::BreitWigner
Parameters for the BreitWigner distributed random number generation.
Definition: RndmGenerators.h:89
Rndm::Numbers::shoot
double shoot() const
Pop a new number from the buffer.
Definition: RndmGenerators.h:379
Rndm::StudentT::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:172
Rndm::Gamma::Gamma
Gamma(double k, double l)
Standard Constructor.
Definition: RndmGenerators.h:190
IRndmGen::Param
Definition: IRndmGen.h:45
IRndmGenSvc
Definition: IRndmGenSvc.h:40
Rndm::BreitWignerCutOff::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:152
Rndm::Flat::minimum
double minimum() const
Access lower edge.
Definition: RndmGenerators.h:259
SmartIF< IRndmGen >
Rndm::Gamma
Parameters for the Gamma distributed random number generation.
Definition: RndmGenerators.h:179
Rndm::Chi2::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:82
cpluginsvc.n
n
Definition: cpluginsvc.py:234
Rndm::Exponential::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:62
Rndm::Gauss::mean
double mean() const
Access mean value of the distribution.
Definition: RndmGenerators.h:40
Rndm::Numbers::Numbers
Numbers(const Numbers &)=default
Copy constructor.
Rndm::Gamma::m_kValue
double m_kValue
k Value
Definition: RndmGenerators.h:184
Rndm::Chi2::nDOF
long nDOF() const
Access mean value of the distribution.
Definition: RndmGenerators.h:80
Rndm::Bit::Bit
Bit()
Standard Constructor.
Definition: RndmGenerators.h:273
IRndmGen
Definition: IRndmGen.h:40
Rndm::Binomial::probability
double probability() const
Access number of events.
Definition: RndmGenerators.h:238
Rndm::BreitWignerCutOff::m_mean
double m_mean
Mean, Gamma and cut off parameter of the Breit-Wigner distribution.
Definition: RndmGenerators.h:139
Rndm::Gamma::m_lambda
double m_lambda
Lambda parameter.
Definition: RndmGenerators.h:186
Rndm::BreitWigner::m_mean
double m_mean
Mean and Gamma parameter of the Breit-Wigner distribution.
Definition: RndmGenerators.h:94
Rndm::DefinedPdf::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:312
Rndm::BreitWigner::BreitWigner
BreitWigner(double m, double g)
Standard Constructor.
Definition: RndmGenerators.h:98
Containers::array
struct GAUDI_API array
Parametrisation class for redirection array - like implementation.
Definition: KeyedObjectManager.h:29
Rndm::Poisson::clone
Poisson * clone() const override
Clone parameters.
Definition: RndmGenerators.h:219
gaudirun.l
dictionary l
Definition: gaudirun.py:583
Rndm::StudentT::StudentT
StudentT(double a)
Standard Constructor.
Definition: RndmGenerators.h:168
Rndm::Landau::mean
double mean() const
Access mean value of the distribution.
Definition: RndmGenerators.h:122
Rndm::Flat::Flat
Flat(double mi, double ma)
Standard Constructor.
Definition: RndmGenerators.h:257
Rndm::Gauss::Gauss
Gauss(double m, double s)
Standard Constructor.
Definition: RndmGenerators.h:38
Rndm::Numbers::shootArray
StatusCode shootArray(std::vector< double > &array, long num, long start=0) const
Pop a new number from the buffer.
Definition: RndmGenerators.h:381
Rndm::Bit::clone
Bit * clone() const override
Clone parameters.
Definition: RndmGenerators.h:277
Rndm::Exponential::mean
double mean() const
Access mean value of the distribution.
Definition: RndmGenerators.h:60
Rndm::Flat::m_minimum
double m_minimum
Lower boundary for random numbers.
Definition: RndmGenerators.h:251
Rndm::Poisson::Poisson
Poisson(double m)
Standard Constructor.
Definition: RndmGenerators.h:213
Rndm::Gauss::sigma
double sigma() const
Access width of the distribution.
Definition: RndmGenerators.h:42
Rndm::Chi2::Chi2
Chi2(long n_dof)
Standard Constructor.
Definition: RndmGenerators.h:78
Rndm::DefinedPdf
Generate a random number Generator following generally distributed random values, given a user-define...
Definition: RndmGenerators.h:296
Rndm::BreitWigner::gamma
double gamma() const
Access width of the distribution.
Definition: RndmGenerators.h:102
Rndm::GaussianTail::sigma
double sigma() const
Access sigma of the distribution.
Definition: RndmGenerators.h:332
Rndm::Gamma::lambda
double lambda() const
Access Lambda parameter.
Definition: RndmGenerators.h:194
Rndm::Exponential
Parameters for the Gauss random number generation.
Definition: RndmGenerators.h:51
Rndm::StudentT::m_aValue
double m_aValue
StudentT distribution parameter.
Definition: RndmGenerators.h:164
Rndm::GaussianTail::cut
double cut() const
Access cut value of the distribution.
Definition: RndmGenerators.h:330
Rndm::Chi2
Parameters for the Chi2 distributed random number generation.
Definition: RndmGenerators.h:69
Rndm::Poisson
Parameters for the Poisson distributed random number generation with a given mean.
Definition: RndmGenerators.h:204
InterfaceID
Definition: IInterface.h:38
Rndm::Flat::clone
Flat * clone() const override
Clone parameters.
Definition: RndmGenerators.h:265
Rndm::BreitWignerCutOff::cutOff
double cutOff() const
Access width of the distribution.
Definition: RndmGenerators.h:150
Rndm::GaussianTail::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:334
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:100
Rndm::BreitWignerCutOff::BreitWignerCutOff
BreitWignerCutOff(double m, double g, double c)
Standard Constructor.
Definition: RndmGenerators.h:143
Rndm::Binomial::m_probability
double m_probability
And the probability for having success.
Definition: RndmGenerators.h:230
Rndm::Binomial::typeID
static const InterfaceID & typeID()
Identifier for factory.
Definition: RndmGenerators.h:240
Rndm::Binomial
Parameters for the Binomial distributed random number generation.
Definition: RndmGenerators.h:225
GAUDI_API
#define GAUDI_API
Definition: Kernel.h:49
Rndm::Bit
Parameters for the bit value generation: returns values 0 and 1.
Definition: RndmGenerators.h:270
Rndm::Generator
Definition: RndmGenerators.h:23
Rndm::Numbers::Numbers
Numbers()=default
Standard constructor.