Overlaps corrected, new shape of sectors
[u/mrichter/AliRoot.git] / EVGEN / AliGenEMlib.h
1 #ifndef ALIGENEMLIB_H
2 #define ALIGENEMLIB_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id: AliGenEMlib.h 30052 2008-11-25 14:54:18Z morsch $ */
7
8 /////////////////////////////////////////////////////////////////////////////
9 //                                                                         //
10 // Implementation of AliGenEMlib for electron, di-electron, and photon     //
11 // cocktail calculations.                                                  //
12 // It is based on AliGenGSIlib.                                            //
13 //                                                                         //
14 // Responsible: R.Averbeck@gsi.de                                          //
15 //                                                                         //
16 /////////////////////////////////////////////////////////////////////////////
17
18 #include "AliGenLib.h"
19 class TRandom;
20
21 class AliGenEMlib :public AliGenLib {
22 public:
23
24   enum Particle_t{ kPizero=0, kEta=1, kRho0=2, kOmega=3, kEtaprime=4, kPhi=5, kJpsi=6,
25                    kSigma0=7, kK0s=8, kDeltaPlPl=9, kDeltaPl=10, kDeltaMi=11, kDeltaZero=12,
26                    kRhoPl=13, kRhoMi=14, kK0star=15, kDirectRealGamma=16, kDirectVirtGamma=17 };
27   
28   enum CollisionSystem_t {kpp900GeV=0x000, kpp2760GeV=0x100, kpp7TeV=0x200, kpPb=0x300, kPbPb=0x400};
29
30   enum Centrality_t{ kpp = 0x0, k0005=0x1, k0510=0x2, k1020=0x3, k2030=0x4, k3040=0x5, k4050=0x6, k5060=0x7,
31                      k0010=0x8, k2040=0x9, k4060=0xA, k6080=0xB, k0020=0xC, k0040=0xD, k2080=0xE, k4080=0xF, kCentralities=0x10};
32   
33   enum PtParamSetPi0_t{ kPizeroParam, kPizeroParamlow, kPizeroParamhigh, kPichargedParam,
34                         kPichargedParamlow, kPichargedParamhigh, kPizeroParamAlter,
35                         kPizeroParamAlterlow, kPizeroParamAlterhigh, kNPi0Param,
36                         kPichargedParamNew, kPichargedParamOld };
37   
38   enum PtParamSetEta_t{ kEtaMtScal=0, kEtaParampp, kEtaParampplow, kEtaParampphigh,
39                         kEtaParamRatiopp, kEtaParamRatiopplow, kEtaParamRatiopphigh,
40                         kEtaParamPbPb, kEtaParamPPb };
41   
42   enum PtParamSetOmega_t{ kOmegaMtScal=0, kOmegaParampp, kOmegaParampplow, kOmegaParampphigh,
43                           kOmegaParamRatiopp, kOmegaParamRatiopplow, kOmegaParamRatiopphigh,
44                           kOmegaParamPbPb, kOmegaParamPPb };
45   
46   enum PtParamSetPhi_t{ kPhiMtScal=0, kPhiParampp, kPhiParampplow, kPhiParampphigh,
47                         kPhiParamPbPb, kPhiParamPPb };
48   
49   enum v2Sys_t{kLoV2Sys=-1, kNoV2Sys=0, kUpV2Sys=+1};
50  
51   AliGenEMlib() { } ;
52
53   static void SelectParams( Int_t collisionSystem,
54                             Int_t ptSelectPi0, 
55                             Int_t ptSelectEta, 
56                             Int_t ptSelectOmega,
57                             Int_t ptSelectPhi, 
58                             Int_t centSelect=kpp, 
59                             Int_t v2sys=kNoV2Sys) {  
60     fgSelectedCollisionsSystem = collisionSystem;
61     fgSelectedPtParamPi0=ptSelectPi0; 
62     fgSelectedPtParamEta=ptSelectEta; 
63     fgSelectedPtParamOmega=ptSelectOmega; 
64     fgSelectedPtParamPhi=ptSelectPhi; 
65     fgSelectedCentrality=centSelect; 
66     fgSelectedV2Systematic=v2sys; 
67   }
68
69   GenFunc   GetPt(Int_t param, const char * tname=0) const;
70   GenFunc   GetY(Int_t param, const char * tname=0) const;
71   GenFuncIp GetIp(Int_t param, const char * tname=0) const;    
72   GenFunc   GetV2(Int_t param, const char * tname=0) const;
73
74   //private:
75
76   // General functions
77
78   // General functions
79   static Int_t fgSelectedCollisionsSystem; // selected pT parameter
80   static Int_t fgSelectedPtParamPi0; // selected pT parameter
81   static Int_t fgSelectedPtParamEta; // selected pT parameter
82   static Int_t fgSelectedPtParamOmega; // selected pT parameter
83   static Int_t fgSelectedPtParamPhi; // selected pT parameter
84   static Int_t fgSelectedCentrality; // selected Centrality
85   static Int_t fgSelectedV2Systematic; // selected v2 systematics, usefully values: -1,0,1
86
87
88   static Double_t PtModifiedHagedornThermal(Double_t pt, 
89                                             Double_t c, 
90                                             Double_t p0, 
91                                             Double_t p1, 
92                                             Double_t n,
93                                             Double_t cT,
94                                             Double_t T);
95
96
97   
98   static Double_t PtModifiedHagedornExp(Double_t pt,
99                                         Double_t c,
100                                         Double_t p0,
101                                         Double_t p1,
102                                         Double_t p2,
103                                         Double_t n); 
104
105
106   static Double_t PtModifiedHagedornExp2(Double_t pt,
107                                          Double_t c,
108                                          Double_t a,
109                                          Double_t b,
110                                          Double_t p0,
111                                          Double_t p1,
112                                          Double_t d,
113                                          Double_t n);
114
115
116   static Double_t PtTsallis(Double_t pt,
117                             Double_t m,
118                             Double_t c,
119                             Double_t T,
120                             Double_t n);
121
122   static Double_t PtParticleRatiopp(Double_t pt,
123                                     Double_t m1,
124                                     Double_t m2,
125                                     Double_t c1,
126                                     Double_t c2,
127                                     Double_t T1,
128                                     Double_t T2,
129                                     Double_t n);
130   
131   static Double_t PtXQCD( Double_t pt,
132                           Double_t a,
133                           Double_t b,
134                           Double_t c,
135                           Double_t d,
136                           Double_t e,
137                           Double_t f);
138   
139   static Double_t PtModTsallis( Double_t pt,
140                                 Double_t a,
141                                 Double_t b,
142                                 Double_t c,
143                                 Double_t d,
144                                 Double_t e,
145                                 Double_t f,
146                                 Double_t g,
147                                 Double_t mass);
148   
149   static Double_t PtQCD( Double_t pt,
150                          Double_t a,
151                          Double_t b,
152                          Double_t c,
153                          Double_t d,
154                          Double_t e);
155
156   static Double_t PtExponential(const Double_t *pt, const Double_t *param);
157   static Double_t PtModifiedHagedornPowerlaw(const Double_t *pt, const Double_t *param);
158   static Double_t PtDoublePowerlaw(const Double_t *pt, const Double_t *param);
159   static Double_t IntegratedKrollWada(const Double_t *mh, const Double_t *);
160
161   // direct gamma
162   static Double_t PtPromptRealGamma(const Double_t *px, const Double_t *dummy);
163   static Double_t PtPromptVirtGamma(const Double_t *px, const Double_t *dummy);
164   static Double_t PtThermalRealGamma(const Double_t *px, const Double_t *dummy);
165   static Double_t PtThermalVirtGamma(const Double_t *px, const Double_t *dummy);
166
167   static Int_t    IpDirectRealGamma(TRandom *ran);
168   static Double_t PtDirectRealGamma(const Double_t *px, const Double_t *dummy);
169   static Double_t YDirectRealGamma(const Double_t *py, const Double_t *dummy);
170   static Double_t V2DirectRealGamma(const Double_t *px, const Double_t *dummy);
171
172   static Int_t    IpDirectVirtGamma(TRandom *ran);
173   static Double_t PtDirectVirtGamma(const Double_t *px, const Double_t *dummy);
174   static Double_t YDirectVirtGamma(const Double_t *py, const Double_t *dummy);
175   static Double_t V2DirectVirtGamma(const Double_t *px, const Double_t *dummy);
176
177   // Pizero
178   static Int_t    IpPizero(TRandom *ran);
179   static Double_t PtPizero(const Double_t *px, const Double_t *dummy);
180   static Double_t YPizero(const Double_t *py, const Double_t *dummy);
181   static Double_t V2Pizero(const Double_t *px, const Double_t *dummy);
182
183   // Eta
184   static Int_t    IpEta(TRandom *ran);
185   static Double_t PtEta(const Double_t *px, const Double_t *dummy);
186   static Double_t YEta(const Double_t *py, const Double_t *dummy);
187   static Double_t V2Eta(const Double_t *px, const Double_t *dummy);
188
189   // Rho
190   static Int_t    IpRho0(TRandom *ran);
191   static Double_t PtRho0(const Double_t *px, const Double_t *dummy);
192   static Double_t YRho0(const Double_t *py, const Double_t *dummy);
193   static Double_t V2Rho0(const Double_t *py, const Double_t *dummy);
194
195
196   // Omega
197   static Int_t    IpOmega(TRandom *ran);
198   static Double_t PtOmega(const Double_t *px, const Double_t *dummy);
199   static Double_t YOmega(const Double_t *py, const Double_t *dummy);
200   static Double_t V2Omega(const Double_t *py, const Double_t *dummy);
201
202   // Etaprime
203   static Int_t    IpEtaprime(TRandom *ran);
204   static Double_t PtEtaprime(const Double_t *px, const Double_t *dummy);
205   static Double_t YEtaprime(const Double_t *py, const Double_t *dummy);
206   static Double_t V2Etaprime(const Double_t *py, const Double_t *dummy);
207
208   // Phi
209   static Int_t    IpPhi(TRandom *ran);
210   static Double_t PtPhi(const Double_t *px, const Double_t *dummy);
211   static Double_t YPhi(const Double_t *py, const Double_t *dummy);
212   static Double_t V2Phi(const Double_t *py, const Double_t *dummy);
213
214   // Jpsi
215   static Int_t    IpJpsi(TRandom *ran);
216   static Double_t PtJpsi(const Double_t *px, const Double_t *dummy);
217   static Double_t YJpsi(const Double_t *py, const Double_t *dummy);
218   static Double_t V2Jpsi(const Double_t *py, const Double_t *dummy);
219
220   // Sigma
221   static Int_t    IpSigma(TRandom *ran);
222   static Double_t PtSigma( const Double_t *px, const Double_t *dummy );
223   static Double_t YSigma(const Double_t *py, const Double_t *dummy);
224   static Double_t V2Sigma0( const Double_t *px, const Double_t *dummy );
225   
226   // K0short
227   static Int_t    IpK0short(TRandom *ran);
228   static Double_t PtK0short( const Double_t *px, const Double_t *dummy );
229   static Double_t YK0short(const Double_t *py, const Double_t *dummy);
230   static Double_t V2K0sshort( const Double_t *px, const Double_t *dummy );
231
232   // Delta++
233   static Int_t    IpDeltaPlPl(TRandom *ran);
234   static Double_t PtDeltaPlPl( const Double_t *px, const Double_t *dummy );
235   static Double_t YDeltaPlPl(const Double_t *py, const Double_t *dummy);
236   static Double_t V2DeltaPlPl( const Double_t *px, const Double_t *dummy );
237   
238   // Delta+
239   static Int_t    IpDeltaPl(TRandom *ran);
240   static Double_t PtDeltaPl( const Double_t *px, const Double_t *dummy );
241   static Double_t YDeltaPl(const Double_t *py, const Double_t *dummy);
242   static Double_t V2DeltaPl( const Double_t *px, const Double_t *dummy );
243   
244   // Delta-
245   static Int_t    IpDeltaMi(TRandom *ran);
246   static Double_t PtDeltaMi( const Double_t *px, const Double_t *dummy );
247   static Double_t YDeltaMi(const Double_t *py, const Double_t *dummy);
248   static Double_t V2DeltaMi( const Double_t *px, const Double_t *dummy );
249   
250   // Delta0
251   static Int_t    IpDeltaZero(TRandom *ran);
252   static Double_t PtDeltaZero( const Double_t *px, const Double_t *dummy );
253   static Double_t YDeltaZero(const Double_t *py, const Double_t *dummy);
254   static Double_t V2DeltaZero( const Double_t *px, const Double_t *dummy );
255
256   // Rho+
257   static Int_t    IpRhoPl(TRandom *ran);
258   static Double_t PtRhoPl( const Double_t *px, const Double_t *dummy );
259   static Double_t YRhoPl(const Double_t *py, const Double_t *dummy);
260   static Double_t V2RhoPl( const Double_t *px, const Double_t *dummy );
261
262   // Rho-
263   static Int_t    IpRhoMi(TRandom *ran);
264   static Double_t PtRhoMi( const Double_t *px, const Double_t *dummy );
265   static Double_t YRhoMi(const Double_t *py, const Double_t *dummy);
266   static Double_t V2RhoMi( const Double_t *px, const Double_t *dummy );
267
268   // K0*
269   static Int_t    IpK0star(TRandom *ran);
270   static Double_t PtK0star( const Double_t *px, const Double_t *dummy );
271   static Double_t YK0star(const Double_t *py, const Double_t *dummy);
272   static Double_t V2K0star( const Double_t *px, const Double_t *dummy );
273   
274
275   // General
276   //static Double_t PtFlat(const Double_t *px, const Double_t *dummy);
277   static Double_t YFlat(Double_t y);
278   static Double_t MtScal(Double_t pt, Int_t np);
279   static Double_t V2Param(const Double_t *px, const Double_t *param);
280   static Double_t V2Flat(const Double_t *px, const Double_t *param);
281   static Double_t KEtScal(Double_t pt, Int_t np, Int_t nq=2);
282   static Double_t GetTAA(Int_t cent);
283
284   static Double_t CrossOverLc(double a, double b, double x);
285   static Double_t CrossOverRc(double a, double b, double x);
286
287   static const Double_t fgkPtParam[kCentralities][10];                     // parameters of pi pt spectrum
288   static const Double_t fgkModTsallisParamPi0PbPb[kCentralities][7];       // parameters for ModTsallis function for pi0 in PbPb 
289   static const Double_t fgkModTsallisParamPiChargedPbPb[kCentralities][7]; // parameters for ModTsallis function for pi+- in PbPb 
290   static const Double_t fgkV2param[kCentralities][16];                     // parameters of pi v2
291   static const Double_t fgkRawPtOfV2Param[kCentralities][10];              // parameters of the raw pt spectrum of v2 analysys
292   static const Double_t fgkThermPtParam[kCentralities][2];                 // parameters of thermal gamma pt
293   static const Double_t fgkHM[16];                                         // particle masses
294   static const Double_t fgkMtFactor[3][16];                                // mt scaling factor
295   static const Double_t fgkParamSetPi07TeV[kNPi0Param][7];                 // parameters for pi0 in 7 TeV
296   static const Double_t fgkParamSetPi02760GeV[kNPi0Param][7];              // parameters for pi0 in 2.76 TeV
297   static const Double_t fgkParamSetPi0900GeV[kNPi0Param][7];               // parameters for pi0 in 0.9 TeV
298
299   ClassDef(AliGenEMlib,1)
300
301 };
302
303
304 #endif