The Gaudi Framework  v32r2 (46d42edc)
RndmGenerators.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_RNDMGENGENERATORS_H
2 #define GAUDIKERNEL_RNDMGENGENERATORS_H
3 
4 // STL include files
5 #include <vector>
6 
7 // Framework include files
8 #include "GaudiKernel/IRndmGen.h"
9 #include "GaudiKernel/SmartIF.h"
10 
11 // Forward declarations
12 class IRndmGen;
13 class IRndmGenSvc;
14 
15 namespace Rndm {
16 
17  template <class TYPE>
18  class Generator;
19 
22  class GAUDI_API Gauss : public IRndmGen::Param {
23  protected:
25  friend class Generator<Gauss>;
27  double m_mean;
29  double m_sigma;
30 
31  public:
33  Gauss( double m, double s ) : IRndmGen::Param( IID_IRndmGauss ), m_mean( m ), m_sigma( s ) {}
35  double mean() const { return m_mean; }
37  double sigma() const { return m_sigma; }
39  static const InterfaceID& typeID() { return IID_IRndmGauss; }
41  Gauss* clone() const override { return new Gauss( m_mean, m_sigma ); }
42  };
43 
47  protected:
49  double m_mean;
50 
51  public:
53  Exponential( double m ) : IRndmGen::Param( IID_IRndmExponential ), m_mean( m ) {}
55  double mean() const { return m_mean; }
57  static const InterfaceID& typeID() { return IID_IRndmExponential; }
59  Exponential* clone() const override { return new Exponential( m_mean ); }
60  };
61 
64  class GAUDI_API Chi2 : public IRndmGen::Param {
65  friend class Generator<Chi2>;
66 
67  protected:
69  long m_nDOF;
70 
71  public:
73  Chi2( long n_dof ) : IRndmGen::Param( IID_IRndmChi2 ), m_nDOF( n_dof ) {}
75  long nDOF() const { return m_nDOF; }
77  static const InterfaceID& typeID() { return IID_IRndmChi2; }
79  Chi2* clone() const override { return new Chi2( m_nDOF ); }
80  };
81 
85  friend class Generator<BreitWigner>;
86 
87  protected:
89  double m_mean, m_gamma;
90 
91  public:
93  BreitWigner( double m, double g ) : IRndmGen::Param( IID_IRndmBreitWigner ), m_mean( m ), m_gamma( g ) {}
95  double mean() const { return m_mean; }
97  double gamma() const { return m_gamma; }
99  static const InterfaceID& typeID() { return IID_IRndmBreitWigner; }
101  BreitWigner* clone() const override { return new BreitWigner( m_mean, m_gamma ); }
102  };
103 
107  friend class Generator<Landau>;
108 
109  protected:
111  double m_mean, m_sigma;
112 
113  public:
115  Landau( double m, double s ) : IRndmGen::Param( IID_IRndmLandau ), m_mean( m ), m_sigma( s ) {}
117  double mean() const { return m_mean; }
119  double sigma() const { return m_sigma; }
121  static const InterfaceID& typeID() { return IID_IRndmLandau; }
123  Landau* clone() const override { return new Landau( m_mean, m_sigma ); }
124  };
125 
131 
132  protected:
134  double m_mean, m_gamma, m_cut;
135 
136  public:
138  BreitWignerCutOff( double m, double g, double c )
139  : IRndmGen::Param( IID_IRndmBreitWignerCutOff ), m_mean( m ), m_gamma( g ), m_cut( c ) {}
141  double mean() const { return m_mean; }
143  double gamma() const { return m_gamma; }
145  double cutOff() const { return m_cut; }
147  static const InterfaceID& typeID() { return IID_IRndmBreitWignerCutOff; }
149  BreitWignerCutOff* clone() const override { return new BreitWignerCutOff( m_mean, m_gamma, m_cut ); }
150  };
151 
155  friend class Generator<StudentT>;
156 
157  protected:
159  double m_aValue;
160 
161  public:
163  StudentT( double a ) : IRndmGen::Param( IID_IRndmStudentT ), m_aValue( a ) {}
165  double aValue() const { return m_aValue; }
167  static const InterfaceID& typeID() { return IID_IRndmStudentT; }
169  StudentT* clone() const override { return new StudentT( m_aValue ); }
170  };
171 
174  class GAUDI_API Gamma : public IRndmGen::Param {
175  friend class Generator<Gamma>;
176 
177  protected:
179  double m_kValue;
181  double m_lambda;
182 
183  public:
185  Gamma( double k, double l ) : IRndmGen::Param( IID_IRndmGamma ), m_kValue( k ), m_lambda( l ) {}
187  double kValue() const { return m_kValue; }
189  double lambda() const { return m_lambda; }
191  static const InterfaceID& typeID() { return IID_IRndmGamma; }
193  Gamma* clone() const override { return new Gamma( m_kValue, m_lambda ); }
194  };
195 
200  friend class Generator<Poisson>;
201 
202  protected:
204  double m_mean;
205 
206  public:
208  Poisson( double m ) : IRndmGen::Param( IID_IRndmPoisson ), m_mean( m ) {}
210  double mean() const { return m_mean; }
212  static const InterfaceID& typeID() { return IID_IRndmPoisson; }
214  Poisson* clone() const override { return new Poisson( m_mean ); }
215  };
216 
221  protected:
223  long m_nEvent;
226 
227  public:
229  Binomial( long n, double p ) : IRndmGen::Param( IID_IRndmBinomial ), m_nEvent( n ), m_probability( p ) {}
231  long nEvent() const { return m_nEvent; }
233  double probability() const { return m_probability; }
235  static const InterfaceID& typeID() { return IID_IRndmBinomial; }
237  Binomial* clone() const override { return new Binomial( m_nEvent, m_probability ); }
238  };
239 
243  class GAUDI_API Flat : public IRndmGen::Param {
244  protected:
246  double m_minimum;
248  double m_maximum;
249 
250  public:
252  Flat( double mi, double ma ) : IRndmGen::Param( IID_IRndmFlat ), m_minimum( mi ), m_maximum( ma ) {}
254  double minimum() const { return m_minimum; }
256  double maximum() const { return m_maximum; }
258  static const InterfaceID& typeID() { return IID_IRndmFlat; }
260  Flat* clone() const override { return new Flat( m_minimum, m_maximum ); }
261  };
262 
265  class GAUDI_API Bit : public IRndmGen::Param {
266  public:
268  Bit() : IRndmGen::Param( IID_IRndmBit ) {}
270  static const InterfaceID& typeID() { return IID_IRndmBit; }
272  Bit* clone() const override { return new Bit(); }
273  };
274 
292  protected:
297 
298  public:
300  DefinedPdf( const std::vector<double>& pdf, long intpol )
301  : IRndmGen::Param( IID_IRndmDefinedPdf ), m_pdf( pdf ), m_interpolation( intpol ) {}
303  std::vector<double>& pdf() { return m_pdf; }
305  long interpolation() const { return m_interpolation; }
307  static const InterfaceID& typeID() { return IID_IRndmDefinedPdf; }
309  DefinedPdf* clone() const override { return new DefinedPdf( m_pdf, m_interpolation ); }
310  };
311 
315  protected:
317  double m_cut;
319  double m_sigma;
320 
321  public:
323  GaussianTail( double a, double s ) : IRndmGen::Param( IID_IRndmGaussianTail ), m_cut( a ), m_sigma( s ) {}
325  double cut() const { return m_cut; }
327  double sigma() const { return m_sigma; }
329  static const InterfaceID& typeID() { return IID_IRndmGaussianTail; }
331  GaussianTail* clone() const override { return new GaussianTail( m_cut, m_sigma ); }
332  };
333 
350  protected:
353 
354  public:
356  Numbers() = default;
358  Numbers( const Numbers& ) = default;
360  Numbers( const SmartIF<IRndmGenSvc>& svc, const IRndmGen::Param& par );
362  virtual ~Numbers();
364  virtual StatusCode initialize( const SmartIF<IRndmGenSvc>& svc, const IRndmGen::Param& par );
365 #if !defined( GAUDI_V22_API ) || defined( G22_NEW_SVCLOCATOR )
366  Numbers( IRndmGenSvc* svc, const IRndmGen::Param& par );
369  virtual StatusCode initialize( IRndmGenSvc* svc, const IRndmGen::Param& par );
370 #endif
371  virtual StatusCode finalize();
374  operator bool() const { return m_generator; }
376  double operator()() { return this->shoot(); }
378  double pop() { return this->shoot(); }
380  double shoot() { return m_generator ? m_generator->shoot() : -1; }
383  return m_generator ? m_generator->shootArray( array, num, start ) : StatusCode::FAILURE;
384  }
385  };
386 } // namespace Rndm
387 #endif // GAUDIKERNEL_RNDMGENGENERATORS_H
double cut() const
Access cut value of the distribution.
double lambda() const
Access Lambda parameter.
static const InterfaceID & typeID()
Identifier for factory.
Parameters for the bit value generation: returns values 0 and 1.
double mean() const
Access mean value of the distribution.
double m_mean
Mean, Gamma and cut off parameter of the Breit-Wigner distribution.
Exponential * clone() const override
Clone parameters.
static const InterfaceID & typeID()
Identifier for factory.
GaussianTail(double a, double s)
Standard Constructor.
double m_kValue
k Value
double kValue() const
Access K parameter.
double m_minimum
Lower boundary for random numbers.
static const InterfaceID & typeID()
Identifier for factory.
Parameters for the Poisson distributed random number generation with a given mean.
Definition of a interface for a generic random number generators.
Definition: IRndmGen.h:34
double mean() const
Access mean value of the distribution.
SmartIF< IRndmGen > m_generator
Pointer to random number generator.
double m_probability
And the probability for having success.
static const InterfaceID & typeID()
Identifier for factory.
double operator()()
Operator () for the use within STL.
double m_sigma
Sigma of the Gauss ditribution.
BreitWigner * clone() const override
Clone parameters.
static const InterfaceID & typeID()
Identifier for factory.
GaussianTail * clone() const override
Clone parameters.
Parameters for the Gauss random number generation.
Gauss(double m, double s)
Standard Constructor.
double cutOff() const
Access width of the distribution.
Landau * clone() const override
Clone parameters.
Flat(double mi, double ma)
Standard Constructor.
def start
Definition: IOTest.py:98
double shoot()
Pop a new number from the buffer.
long m_nEvent
Number of events the binomial destribution corresponds to.
double m_mean
Mean value of the exponential distribution.
double mean() const
Access mean value of the distribution.
BreitWigner(double m, double g)
Standard Constructor.
double probability() const
Access number of events.
Landau(double m, double s)
Standard Constructor.
long nDOF() const
Access mean value of the distribution.
double m_mean
Mean value of the Poisson distribution.
Random number accessor This small class encapsulates the use of the random number generator.
Interface ID class.
Definition: IInterface.h:29
double gamma() const
Access width of the distribution.
Bit()
Standard Constructor.
Chi2 * clone() const override
Clone parameters.
DefinedPdf(const std::vector< double > &pdf, long intpol)
Standard Constructor.
Random Generator service interface definition Definition of a interface for a service to access rando...
Definition: IRndmGenSvc.h:35
double m_cut
Cut on the Gaussian tail distribution.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
double mean() const
Access mean value of the distribution.
constexpr double m
Definition: SystemOfUnits.h:92
double minimum() const
Access lower edge.
static const InterfaceID & typeID()
Identifier for factory.
Parameters for the flat random number generation within boundaries [minimum, maximum].
double m_maximum
Upper boundary for random numbers.
std::vector< double > m_pdf
Vector containing probability distribution function.
static const InterfaceID & typeID()
Identifier for factory.
long interpolation() const
Access interpolation type.
StudentT(double a)
Standard Constructor.
StudentT * clone() const override
Clone parameters.
double gamma() const
Access width of the distribution.
static const InterfaceID & typeID()
Identifier for factory.
double m_mean
Mean of the Gauss distribution.
long m_interpolation
Interpolation type.
static const InterfaceID & typeID()
Identifier for factory.
Gauss * clone() const override
Clone parameters.
Parameters for the StudentT distributed random number generation.
double m_lambda
Lambda parameter.
static const InterfaceID & typeID()
Identifier for factory.
Flat * clone() const override
Clone parameters.
dictionary l
Definition: gaudirun.py:523
Parameters for the Binomial distributed random number generation.
double aValue() const
Access A parameter.
StatusCode shootArray(std::vector< double > &array, long num, long start=0)
Pop a new number from the buffer.
virtual double shoot() const =0
Single shot returning single random number according to specified distribution.
Parameters for the Landau distributed random number generation.
struct GAUDI_API array
Parametrisation class for redirection array - like implementation.
Parameters for the Chi2 distributed random number generation.
double pop()
Pop a new number from the buffer.
Binomial * clone() const override
Clone parameters.
double m_sigma
Sigma of the Gauss distribution.
static const InterfaceID & typeID()
Identifier for factory.
Parameters for the BreitWigner distributed random number generation with cut off;.
double maximum() const
Access upper edge.
virtual StatusCode shootArray(std::vector< double > &array, long howmany, long start=0) const =0
Multiple shots returning vector with random number according to specified distribution.
double sigma() const
Access width of the distribution.
Parameters for the Gamma distributed random number generation.
double sigma() const
Access width of the distribution.
BreitWignerCutOff * clone() const override
Clone parameters.
long nEvent() const
Access number of events.
Poisson * clone() const override
Clone parameters.
dictionary g
Definition: gaudirun.py:522
string s
Definition: gaudirun.py:318
BreitWignerCutOff(double m, double g, double c)
Standard Constructor.
constexpr static const auto FAILURE
Definition: StatusCode.h:86
static const InterfaceID & typeID()
Identifier for factory.
Gamma * clone() const override
Clone parameters.
Gamma(double k, double l)
Standard Constructor.
Binomial(long n, double p)
Standard Constructor.
double m_aValue
StudentT distribution parameter.
double sigma() const
Access sigma of the distribution.
Chi2(long n_dof)
Standard Constructor.
double mean() const
Access mean value of the distribution.
Parameters for the Gaussian tail number generation.
Generate a random number Generator following generally distributed random values, given a user-define...
Parameters for the Gauss random number generation.
#define GAUDI_API
Definition: Kernel.h:71
Bit * clone() const override
Clone parameters.
DefinedPdf * clone() const override
Clone parameters.
long m_nDOF
Number of degrees of freedom.
double mean() const
Access mean value of the distribution.
Parameters for the BreitWigner distributed random number generation.
Poisson(double m)
Standard Constructor.
static const InterfaceID & typeID()
Identifier for factory.
double m_mean
Mean and Gamma parameter of the Breit-Wigner distribution.
Exponential(double m)
Standard Constructor.
std::vector< double > & pdf()
Access pdf.
static const InterfaceID & typeID()
Identifier for factory.