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