31 #ifndef ROOT_Math_GSLRndmEngines
32 #define ROOT_Math_GSLRndmEngines
43 class GSLMCIntegrator;
65 class GSLRandomEngine {
67 friend class GSLMCIntegrator;
82 GSLRandomEngine( GSLRngWrapper * rng);
87 GSLRandomEngine(
const GSLRandomEngine & eng);
92 GSLRandomEngine & operator=(
const GSLRandomEngine & eng);
108 virtual ~GSLRandomEngine();
114 double operator() ()
const;
120 double Rndm()
const {
return (*
this)(); }
127 unsigned long RndmInt(
unsigned long max)
const;
133 unsigned long IntRndm()
const {
134 return RndmInt(MaxInt());
141 template<
class Iterator>
142 void RandomArray(Iterator begin, Iterator end)
const {
143 for ( Iterator itr = begin; itr != end; ++itr ) {
144 *itr = this->operator()();
152 void RandomArray(
double * begin,
double * end)
const;
157 std::string Name()
const;
162 unsigned int Size()
const;
168 unsigned long MinInt()
const;
174 unsigned long MaxInt()
const;
179 void SetSeed(
unsigned int seed)
const;
191 double Gaussian(
double sigma)
const;
196 double GaussianZig(
double sigma)
const;
201 double GaussianRatio(
double sigma)
const;
205 double GaussianTail(
double a,
double sigma)
const;
210 void Gaussian2D(
double sigmaX,
double sigmaY,
double rho,
double &x,
double &y)
const;
215 double Exponential(
double mu)
const;
220 double Cauchy(
double a)
const;
225 double Landau()
const;
230 double Gamma(
double a,
double b)
const;
235 double Beta(
double a,
double b)
const;
240 double LogNormal(
double zeta,
double sigma)
const;
245 double ChiSquare(
double nu)
const;
250 double FDist(
double nu1,
double nu2)
const;
255 double tDist(
double nu)
const;
260 double Rayleigh(
double sigma)
const;
265 double Logistic(
double a)
const;
270 double Pareto(
double a,
double b)
const;
275 void Dir2D(
double &x,
double &y)
const;
280 void Dir3D(
double &x,
double &y,
double &z)
const;
285 unsigned int Poisson(
double mu)
const;
290 unsigned int Binomial(
double p,
unsigned int n)
const;
295 unsigned int NegativeBinomial(
double p,
double n)
const;
300 std::vector<unsigned int> Multinomial(
unsigned int ntot,
const std::vector<double> & p )
const;
309 void SetType(GSLRngWrapper * r) {
315 GSLRngWrapper * Engine() {
321 GSLRngWrapper * fRng;
322 mutable unsigned int fCurTime;
336 class GSLRngMT :
public GSLRandomEngine {
338 typedef GSLRandomEngine BaseType;
350 class GSLRngRanLux :
public GSLRandomEngine {
352 typedef GSLRandomEngine BaseType;
364 class GSLRngRanLuxS1 :
public GSLRandomEngine {
366 typedef GSLRandomEngine BaseType;
369 typedef GSLRngRanLuxS1 GSLRngRanLux1;
379 class GSLRngRanLuxS2 :
public GSLRandomEngine {
381 typedef GSLRandomEngine BaseType;
384 typedef GSLRngRanLuxS2 GSLRngRanLux2;
394 class GSLRngRanLuxD1 :
public GSLRandomEngine {
396 typedef GSLRandomEngine BaseType;
408 class GSLRngRanLuxD2 :
public GSLRandomEngine {
410 typedef GSLRandomEngine BaseType;
413 typedef GSLRngRanLuxD2 GSLRngRanLux48;
423 class GSLRngTaus :
public GSLRandomEngine {
425 typedef GSLRandomEngine BaseType;
436 class GSLRngGFSR4 :
public GSLRandomEngine {
438 typedef GSLRandomEngine BaseType;
449 class GSLRngCMRG :
public GSLRandomEngine {
451 typedef GSLRandomEngine BaseType;
462 class GSLRngMRG :
public GSLRandomEngine {
464 typedef GSLRandomEngine BaseType;
476 class GSLRngRand :
public GSLRandomEngine {
478 typedef GSLRandomEngine BaseType;
489 class GSLRngRanMar :
public GSLRandomEngine {
491 typedef GSLRandomEngine BaseType;
502 class GSLRngMinStd :
public GSLRandomEngine {
504 typedef GSLRandomEngine BaseType;
512 class GSLRngMixMax :
public GSLRandomEngine {
514 typedef GSLRandomEngine BaseType;
516 virtual ~GSLRngMixMax();