1 #include "AliGenMUONlib.h"
3 ClassImp(AliGenMUONlib)
6 Double_t AliGenMUONlib::PtPion(Double_t *px, Double_t *)
9 // PT-PARAMETERIZATION CDF, PRL 61(88) 1819
10 // POWER LAW FOR PT > 500 MEV
11 // MT SCALING BELOW (T=160 MEV)
13 const Double_t p0 = 1.3;
14 const Double_t xn = 8.28;
15 const Double_t xlim=0.5;
16 const Double_t t=0.160;
17 const Double_t xmpi=0.139;
19 Double_t y, y1, xmpi2, ynorm, a;
22 y1=TMath::Power(p0/(p0+xlim),xn);
24 ynorm=b*(TMath::Exp(-sqrt(xlim*xlim+xmpi2)/t));
27 y=a*TMath::Power(p0/(p0+x),xn);
29 y=b*TMath::Exp(-sqrt(x*x+xmpi2)/t);
35 Double_t AliGenMUONlib::YPion( Double_t *py, Double_t *)
37 const Double_t a = 7000.;
38 const Double_t dy = 4.;
40 Double_t y=TMath::Abs(*py);
42 Double_t ex = y*y/(2*dy*dy);
43 return a*TMath::Exp(-ex);
45 // particle composition
47 Int_t AliGenMUONlib::IpPion()
51 if (random[0] < 0.5) {
58 //____________________________________________________________
62 Double_t AliGenMUONlib::PtScal(Double_t pt, Int_t np)
64 // SCALING EN MASSE PAR RAPPORT A PTPI
65 // MASS PI,K,ETA,RHO,OMEGA,ETA',PHI
66 const Double_t hm[10] = {.13957,.493,.5488,.769,.7826,.958,1.02,0,0,0};
67 // VALUE MESON/PI AT 5 GEV
68 const Double_t fmax[10]={1.,0.3,0.55,1.0,1.0,1.0,1.0,0,0,0};
70 Double_t f5=TMath::Power(((sqrt(100.018215)+2.)/(sqrt(100.+hm[np]*hm[np])+2.0)),12.3);
71 Double_t fmax2=f5/fmax[np];
73 Double_t ptpion=100.*PtPion(&pt, (Double_t*) 0);
74 Double_t fmtscal=TMath::Power(((sqrt(pt*pt+0.018215)+2.)/
75 (sqrt(pt*pt+hm[np]*hm[np])+2.0)),12.3)/ fmax2;
76 return fmtscal*ptpion;
82 //____________________________________________________________
83 Double_t AliGenMUONlib::PtKaon( Double_t *px, Double_t *)
89 //____________________________________________________________
90 Double_t AliGenMUONlib::YKaon( Double_t *py, Double_t *)
92 const Double_t a = 1000.;
93 const Double_t dy = 4.;
96 Double_t y=TMath::Abs(*py);
98 Double_t ex = y*y/(2*dy*dy);
99 return a*TMath::Exp(-ex);
102 // particle composition
104 Int_t AliGenMUONlib::IpKaon()
108 if (random[0] < 0.5) {
119 //____________________________________________________________
120 Double_t AliGenMUONlib::PtJpsi( Double_t *px, Double_t *)
122 const Double_t pt0 = 4.;
123 const Double_t xn = 3.6;
126 Double_t pass1 = 1.+(x/pt0)*(x/pt0);
127 return x/TMath::Power(pass1,xn);
131 //____________________________________________________________
132 Double_t AliGenMUONlib::YJpsi(Double_t *py, Double_t *)
134 const Double_t y0 = 4.;
137 Double_t y=TMath::Abs(*py);
142 yj=b*TMath::Exp(-(y-y0)*(y-y0)/2);
145 // particle composition
147 Int_t AliGenMUONlib::IpJpsi()
156 //____________________________________________________________
157 Double_t AliGenMUONlib::PtUpsilon( Double_t *px, Double_t * )
159 const Double_t pt0 = 5.3;
160 const Double_t xn = 2.5;
163 Double_t pass1 = 1.+(x/pt0)*(x/pt0);
164 return x/TMath::Power(pass1,xn);
169 //____________________________________________________________
170 Double_t AliGenMUONlib::YUpsilon(Double_t *py, Double_t *)
172 const Double_t y0 = 3.;
175 Double_t y=TMath::Abs(*py);
180 yu=b*TMath::Exp(-(y-y0)*(y-y0)/2);
183 // particle composition
185 Int_t AliGenMUONlib::IpUpsilon()
194 // pt-distribution (by scaling of pion distribution)
195 //____________________________________________________________
196 Double_t AliGenMUONlib::PtPhi( Double_t *px, Double_t *)
198 return PtScal(*px,7);
201 Double_t AliGenMUONlib::YPhi( Double_t *px, Double_t *)
204 return YJpsi(px,dummy);
206 // particle composition
208 Int_t AliGenMUONlib::IpPhi()
218 //____________________________________________________________
219 Double_t AliGenMUONlib::PtCharm( Double_t *px, Double_t *)
221 const Double_t pt0 = 4.08;
222 const Double_t xn = 9.40;
225 Double_t pass1 = 1.+(x/pt0)*(x/pt0);
226 return x/TMath::Power(pass1,xn);
229 Double_t AliGenMUONlib::YCharm( Double_t *px, Double_t *)
232 return YJpsi(px,dummy);
235 Int_t AliGenMUONlib::IpCharm()
241 if (random[0] < 0.5) {
243 } else if (random[0] < 0.75) {
245 } else if (random[0] < 0.90) {
250 if (random[1] < 0.5) {ip=-ip;}
261 //____________________________________________________________
262 Double_t AliGenMUONlib::PtBeauty( Double_t *px, Double_t *)
264 const Double_t pt0 = 4.;
265 const Double_t xn = 3.6;
268 Double_t pass1 = 1.+(x/pt0)*(x/pt0);
269 return x/TMath::Power(pass1,xn);
272 Double_t AliGenMUONlib::YBeauty( Double_t *px, Double_t *)
275 return YJpsi(px,dummy);
278 Int_t AliGenMUONlib::IpBeauty()
283 if (random[0] < 0.5) {
285 } else if (random[0] < 0.75) {
287 } else if (random[0] < 0.90) {
292 if (random[1] < 0.5) {ip=-ip;}
297 typedef Double_t (*GenFunc) (Double_t*, Double_t*);
298 GenFunc AliGenMUONlib::GetPt(Param_t param)
326 printf("<AliGenMUONlib::GetPt> unknown parametrisation\n");
331 GenFunc AliGenMUONlib::GetY(Param_t param)
359 printf("<AliGenMUONlib::GetY> unknown parametrisation\n");
363 typedef Int_t (*GenFuncIp) ();
364 GenFuncIp AliGenMUONlib::GetIp(Param_t param)
392 printf("<AliGenMUONlib::GetIp> unknown parametrisation\n");