04-apr-2004 NvE SetMass() invoked from AliTrack::Set3Momentum to get also the energy...
[u/mrichter/AliRoot.git] / RALICE / AliRandom.h
1 #ifndef ALIRANDOM_H
2 #define ALIRANDOM_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 // $Id$
7
8 #include <math.h>
9  
10 #include "TObject.h"
11  
12 class AliRandom : public TObject
13 {
14  public:
15   AliRandom();                                 // Constructor with default sequence
16   AliRandom(Int_t seed);                       // Constructor with user defined seed
17   AliRandom(Int_t seed,Int_t cnt1,Int_t cnt2); // User defined starting point
18   virtual ~AliRandom();                        // Destructor
19   Int_t GetSeed() const;                       // Provide current seed value
20   Int_t GetCnt1() const;                       // Provide current counter value cnt1
21   Int_t GetCnt2() const;                       // Provide current counter value cnt2
22   void Data() const;                           // Print current seed, cnt1 and cnt2
23   Float_t Uniform();                           // Uniform dist. within <0,1>
24   Float_t Uniform(Float_t a,Float_t b);        // Uniform dist. within <a,b>
25   void Uniform(Float_t* vec,Int_t n);          // n uniform randoms in <0,1>
26   void Uniform(Float_t* vec,Int_t n,Float_t a,Float_t b); // see above
27   Float_t Gauss();                             // Gaussian dist. with mean=0 sigma=1
28   Float_t Gauss(Float_t mean,Float_t sigma);   // Gaussian dist. with mean and sigma
29   void Gauss(Float_t* vec,Int_t n);            // n Gaussian randoms mean=0 sigma=1
30   void Gauss(Float_t* vec,Int_t n,Float_t mean,Float_t sigma); // see above
31   Float_t Poisson(Float_t mean);               // Poisson dist. with certain mean
32   void Poisson(Float_t* vec,Int_t n,Float_t mean); // n Poisson randoms with mean
33   void SetUser(Float_t a,Float_t b,Int_t n,Float_t (*f)(Float_t)); // User dist. f(x)
34   void SetUser(Float_t* x,Float_t* y,Int_t n); // User dist. arrays
35   Float_t User(); // Provide random in [a,b] according to user distribution
36   void User(Float_t* vec,Int_t n); // n randoms in [a,b] from user dist.
37  
38  private:
39   Int_t   fI,fJ,fSeed,fCnt1,fCnt2,fClip;                       // Indices, seed and counters
40   Float_t fU[97],fC,fCd,fCm;                                   // The Fibonacci parameters
41   void Start(Int_t seed,Int_t cnt1,Int_t cnt2);                // Start at certain point
42   void Unpack(Int_t seed,Int_t& i,Int_t& j,Int_t& k,Int_t& l); // Unpack the seed
43   void Uniform(Int_t n); // n uniform randoms for quick skipping
44   Int_t fNa;             //! The number of bins of the area function
45   Float_t* fXa;          //! The binned x values of the area function
46   Float_t* fYa;          //! The corresponding y values of the area function
47   Float_t fYamin,fYamax; //! The min. and max. y values of the area function
48   Int_t* fIbins;         //! The bin numbers of the random x candidates
49  
50  ClassDef(AliRandom,3) // Generate universal random numbers on all common machines.
51 };
52 #endif