Completely reengineered version of CMake build system (Johny)
[u/mrichter/AliRoot.git] / TUHKMgen / TUHKMgen.h
1 // This class provides an interface between the HYDJET++ Monte-Carlo model
2 // and ROOT (by inheriting from the TGenerator class).
3 // Please look into the FASTMC articles for more documentation on the 
4 // needed parameters.
5
6 #ifndef TUHKMGEN_H
7 #define TUHKMGEN_H
8
9 #ifndef ROOT_TGenerator
10 #include "TGenerator.h"
11 #endif
12
13 #ifndef INITIALSTATEHYDJET_H
14 #include "UHKM/InitialStateHydjet.h"
15 #endif
16
17 #ifndef DATABASE_PDG
18 #include "UHKM/DatabasePDG.h"
19 #endif
20
21 #include <string>
22 using namespace std;
23
24 //class DatabasePDG;
25
26 class TUHKMgen : public TGenerator {
27  
28  public:   
29   TUHKMgen();
30   virtual      ~TUHKMgen();
31   virtual void  Initialize();
32   virtual void  GenerateEvent();
33   virtual Int_t ImportParticles(TClonesArray *particles, const Option_t* option="prim");
34   virtual TObjArray* ImportParticles(const Option_t* option="prim");
35   // this function makes available the PDG info in our database 
36   virtual DatabasePDG* PDGInfo() const {return fInitialState->PDGInfo();}
37
38   // Setters
39   // set reasonable default parameters suited for central Au+Au collisions at RHIC(200GeV)
40   void SetAllParametersRHIC();
41   // set reasonable default parameters suited for central Pb+Pb collisions at LHC(5.5TeV)
42   void SetAllParametersLHC();
43
44   void SetEcms(Double_t value)             {fHydjetParams.fSqrtS = value;}          // CMS energy per nucleon [GeV] (<2.24 given temperature and ch pot are used)
45   void SetAw(Double_t value)               {fHydjetParams.fAw = value;}             // nuclei mass number
46   void SetIfb(Int_t value)                 {fHydjetParams.fIfb = value;}            //b-simulation: 0-fix,1-distributed
47   void SetBfix(Double_t value)             {fHydjetParams.fBfix = value;}           // fix impact parameter
48   void SetBmin(Double_t value)             {fHydjetParams.fBmin = value;}           // Minimum impact parameter
49   void SetBmax(Double_t value)             {fHydjetParams.fBmax = value;}           // Maximum impact parameter
50   void SetChFrzTemperature(Double_t value) {fHydjetParams.fT = value;}              // Temperature for the chemical freezeout [GeV]
51   void SetMuB(Double_t value)              {fHydjetParams.fMuB = value;}            // Baryonic chemical potential [GeV]
52   void SetMuS(Double_t value)              {fHydjetParams.fMuS = value;}            // Strangeness chemical potential [GeV]
53   void SetMuQ(Double_t value)              {fHydjetParams.fMuI3 = value;}  // Isospin chemical potential [GeV]
54   void SetThFrzTemperature(Double_t value) {fHydjetParams.fThFO = value;}           // Temperature for the thermal freezeout [GeV]
55   void SetMuPionThermal(Double_t value)    {fHydjetParams.fMu_th_pip = value;}      // Chemical potential for pi+ at thermal freezeout [GeV]
56   
57   
58   void SetSeed(Int_t value) {fHydjetParams.fSeed = value;}  //parameter to set the random nuber seed (=0 the current time is used
59   //to set the random generator seed, !=0 the value fSeed is 
60   //used to set the random generator seed and then the state of random
61   //number generator in PYTHIA MRPY(1)=fSeed
62   
63   
64   
65   void SetTauB(Double_t value)             {fHydjetParams.fTau = value;}            // Proper time for the freeze-out hypersurface [fm/c]
66   void SetSigmaTau(Double_t value)         {fHydjetParams.fSigmaTau = value;}       // Standard deviation for the proper time (emission duration) [fm/c]
67   void SetRmaxB(Double_t value)            {fHydjetParams.fR = value;}              // Maximal transverse radius [fm]
68   void SetYlMax(Double_t value)            {fHydjetParams.fYlmax = value;}          // Maximal fireball longitudinal rapidity
69   void SetEtaRMax(Double_t value)          {fHydjetParams.fUmax = value;}           // Maximal transverse velocity
70   void SetMomAsymmPar(Double_t value)      {fHydjetParams.fDelta = value;}          // Momentum asymmetry parameter
71   void SetCoordAsymmPar(Double_t value)    {fHydjetParams.fEpsilon = value;}        // Coordinate asymmetry parameter
72
73
74   void SetFlagWeakDecay(Double_t value)    {fHydjetParams.fWeakDecay = value;} //flag to switch on/off weak hadron decays <0: decays off, >0: decays on, (default: 0)
75
76
77   void SetEtaType(Int_t value)    {fHydjetParams.fEtaType = value;}     // flag to choose rapidity distribution, if fEtaType<=0, 
78                                      //then uniform rapidity distribution in [-fYlmax,fYlmax] if fEtaType>0,
79                                      //then Gaussian with dispertion = fYlmax 
80   
81
82   void SetGammaS(Double_t value)           {fHydjetParams.fCorrS = value;}          // Strangeness suppression parameter (if gamma_s<=0 then it will be calculated)
83  //not needed now  void SetHdec(Double_t value)             {fHydjetParams.fTime = value;}           // Enable/disable hadronic decays (<0 no decays, >=0 decays) 
84
85 //PYQUEN parameters 
86   void SetPyquenNhsel(Int_t value)         {fHydjetParams.fNhsel = value;}          // Flag to choose the type of event to be generated
87  
88   void SetPyquenShad(Int_t value)         {fHydjetParams.fIshad = value;}         //flag to switch on/off impact parameter dependent nuclear
89                                     // shadowing for gluons and light sea quarks (u,d,s) (0: shadowing off,
90                                     // 1: shadowing on for fAw=207, 197, 110, 40, default: 1
91  
92   void SetPyquenPtmin(Double_t value)      {fHydjetParams.fPtmin = value;}          // Pyquen input parameter for minimum Pt of parton-parton scattering (5GeV<pt<500GeV)
93                                                                                       // fNhsel = 0 --> UHKM fireball, no jets
94                                                                                       // fNhsel = 1 --> UHKM fireball, jets with no quenching
95                                                                                       // fNhsel = 2 --> UHKM fireball, jets with quenching 
96                                                                                       // fNhsel = 3 --> no UHKM fireball, jets with no quenching
97                                                                                       // fNhsel = 4 --> no UHKM fireball, jets with quenching
98
99   void SetPyquenT0(Double_t value)      {fHydjetParams.fT0 = value;}        //proper QGP formation tempereture
100   void SetPyquenTau0(Double_t value)      {fHydjetParams.fTau0 = value;}        //proper QGP formation time in fm/c (0.01<fTau0<10)
101   void SetPyquenNf(Int_t value)      {fHydjetParams.fNf = value;}           //number of active quark flavours N_f in QGP fNf=0, 1,2 or 3  
102   void SetPyquenIenglu(Int_t value)      {fHydjetParams.fIenglu = value;}      // flag to fix type of in-medium partonic energy loss 
103                                   //(0: radiative and collisional loss, 1: radiative loss only, 2:
104                                   //collisional loss only) (default: 0);  
105   void SetPyquenIanglu(Int_t value)      {fHydjetParams.fIanglu = value;}  //flag to fix type of angular distribution of in-medium emitted
106                                   // gluons (0: small-angular, 1: wide-angular, 2:collinear) (default: 0).
107   
108  
109   void SetPDGParticleFile(const Char_t *name)              {strcpy(fParticleFilename, name);}     // Set the filename containing the particle PDG info
110   void SetPDGDecayFile(const Char_t *name)                 {strcpy(fDecayFilename, name);}        // Set the filename containing the PDG decay channels info
111   void SetPDGParticleStable(Int_t pdg, Bool_t value) {                                      // Turn on/off the decay flag for a PDG particle
112     fStableFlagPDG[fStableFlagged] = pdg;
113     fStableFlagStatus[fStableFlagged++] = value;
114   } 
115   //  void SetUseCharmParticles(Bool_t flag) {fUseCharmParticles = flag;}
116   //  void SetMinimumWidth(Double_t value) {fMinWidth = value;}
117   //  void SetMaximumWidth(Double_t value) {fMaxWidth = value;}
118   //  void SetMinimumMass(Double_t value) {fMinMass = value;}
119   //  void SetMaximumMass(Double_t value) {fMaxMass = value;}
120
121   //Getters
122    
123   Double_t GetEcms() const             {return fHydjetParams.fSqrtS;}          
124   Double_t GetAw() const               {return fHydjetParams.fAw;}        
125   Double_t GetIfb() const              {return fHydjetParams.fIfb;}
126   Double_t GetBfix() const             {return fHydjetParams.fBfix;}       
127   Double_t GetBmin() const             {return fHydjetParams.fBmin;}       
128   Double_t GetBmax() const             {return fHydjetParams.fBmax;}       
129   Double_t GetChFrzTemperature() const {return fHydjetParams.fT;} 
130   Double_t GetMuB() const              {return fHydjetParams.fMuB;}
131   Double_t GetMuS() const              {return fHydjetParams.fMuS;}
132   Double_t GetMuQ() const              {return fHydjetParams.fMuI3;}
133   Double_t GetThFrzTemperature() const {return fHydjetParams.fThFO;}
134   Double_t GetMuPionThermal() const    {return fHydjetParams.fMu_th_pip;}
135   Int_t    GetSeed() const             {return fHydjetParams.fSeed;}  
136   Double_t GetTauB() const             {return fHydjetParams.fTau;}
137   Double_t GetSigmaTau() const         {return fHydjetParams.fSigmaTau;}
138   Double_t GetRmaxB() const            {return fHydjetParams.fR;}
139   Double_t GetYlMax() const            {return fHydjetParams.fYlmax;}
140   Double_t GetEtaRMax() const          {return fHydjetParams.fUmax;}
141   Double_t GetMomAsymmPar() const      {return fHydjetParams.fDelta;}
142   Double_t GetCoordAsymmPar() const    {return fHydjetParams.fEpsilon;}
143   Double_t GetFlagWeakDecay() const    {return fHydjetParams.fWeakDecay;} 
144   Int_t GetEtaType() const             {return fHydjetParams.fEtaType;}
145   Double_t GetGammaS() const           {return fHydjetParams.fCorrS;}  
146   Int_t    GetPyquenNhsel() const      {return fHydjetParams.fNhsel;}
147   Int_t    GetPyquenShad() const       {return fHydjetParams.fIshad;}
148   Double_t GetPyquenPtmin() const      {return fHydjetParams.fPtmin;}
149   Double_t GetPyquenT0() const         {return fHydjetParams.fT0;}
150   Double_t GetPyquenTau0() const       {return fHydjetParams.fTau0;}
151   Double_t GetPyquenNf() const         {return fHydjetParams.fNf;}      
152   Double_t GetPyquenIenglu() const     {return fHydjetParams.fIenglu;}     
153   Double_t GetPyquenIanglu() const     {return fHydjetParams.fIanglu;}  
154   
155   const Char_t*  GetPDGParticleFile() const  {return fParticleFilename;}
156   const Char_t*  GetPDGDecayFile() const     {return fDecayFilename;}
157   //  Bool_t   GetUseCharmParticles(){return fUseCharmParticles;}
158   //  Double_t GetMinimumWidth()     {return fMinWidth;}
159   //  Double_t GetMaximumWidth()     {return fMaxWidth;}
160   //  Double_t GetMinimumMass()      {return fMinMass;}
161   //  Double_t GetMaximumMass()      {return fMaxMass;}
162   
163   void Print(const Option_t* opt="") const;
164
165  protected:
166   InitialStateHydjet *fInitialState;     // HYDJET++ main class which handles the entire Monte-Carlo simulation
167   ParticleAllocator fAllocator;       // object which allocates/deallocates memory for the lists of particles
168   List_t fSecondariesList; // list holding the initial particles and the final state particles generated in resonance decays
169   Int_t  fNPprim;          // number of primary particles
170   Int_t  fNPsec;           // secondary particles
171   InitialParamsHydjet_t fHydjetParams;  // struct holding the list of parameters for the initial state
172   // details for the PDG database
173   Char_t fParticleFilename[256];               // particle list filename
174   Char_t fDecayFilename[256];                  // decay table filename
175   Int_t fStableFlagPDG[500];                   // array of PDG codes flagged to be stable
176   Bool_t fStableFlagStatus[500];               // array of decay flag status
177   Int_t fStableFlagged;                        // number of toggled decay flags
178   //  Bool_t fUseCharmParticles;               // flag to turn on/off the use of charm particles
179   //  Double_t fMinWidth;                      // minimum decay width for the particles to be used from the PDG database
180   //  Double_t fMaxWidth;                          // maximum ----
181   //  Double_t fMinMass;                           // minimum mass for the particles to be used from the PDG database
182   //  Double_t fMaxMass;                           // maximum ----
183
184   void SetAllParameters();
185
186  private:
187   TUHKMgen(const TUHKMgen&);
188   TUHKMgen& operator=(const TUHKMgen&);
189   
190   ClassDef(TUHKMgen, 3)  //Interface to FASTMC Event Generator
191 };
192 #endif
193
194
195
196
197
198
199