1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 // Library class for particle pt and y distributions used for
19 // muon spectrometer simulations.
20 // To be used with AliGenParam.
21 // The following particle typed can be simulated:
22 // pi, K, phi, omega, eta, J/Psi, Upsilon, charm and beauty mesons.
24 // andreas.morsch@cern.ch
29 #include "TDatabasePDG.h"
31 #include "AliGenMUONlib.h"
33 ClassImp(AliGenMUONlib)
36 Double_t AliGenMUONlib::PtPion(const Double_t *px, const Double_t* /*dummy*/)
39 // PT-PARAMETERIZATION CDF, PRL 61(88) 1819
40 // POWER LAW FOR PT > 500 MEV
41 // MT SCALING BELOW (T=160 MEV)
43 const Double_t kp0 = 1.3;
44 const Double_t kxn = 8.28;
45 const Double_t kxlim=0.5;
46 const Double_t kt=0.160;
47 const Double_t kxmpi=0.139;
49 Double_t y, y1, xmpi2, ynorm, a;
52 y1=TMath::Power(kp0/(kp0+kxlim),kxn);
54 ynorm=kb*(TMath::Exp(-sqrt(kxlim*kxlim+xmpi2)/kt));
57 y=a*TMath::Power(kp0/(kp0+x),kxn);
59 y=kb*TMath::Exp(-sqrt(x*x+xmpi2)/kt);
65 Double_t AliGenMUONlib::YPion( const Double_t *py, const Double_t */*dummy*/)
68 Double_t y=TMath::Abs(*py);
70 const Double_t ka = 7000.;
71 const Double_t kdy = 4.;
72 Double_t ex = y*y/(2*kdy*kdy);
73 return ka*TMath::Exp(-ex);
75 return 1.16526e+04+y*-3.79886e+03+y*y*4.31130e+02;
78 // particle composition
80 Int_t AliGenMUONlib::IpPion(TRandom *ran)
83 if (ran->Rndm() < 0.5) {
90 //____________________________________________________________
94 Double_t AliGenMUONlib::PtScal(Double_t pt, Int_t np)
96 // SCALING EN MASSE PAR RAPPORT A PTPI
97 // MASS PI,K,ETA,RHO,OMEGA,ETA',PHI
98 const Double_t khm[10] = {.13957,.493,.5488,.769,.7826,.958,1.02,0,0,0};
99 // VALUE MESON/PI AT 5 GEV
100 const Double_t kfmax[10]={1.,0.3,0.55,1.0,1.0,1.0,1.0,0,0,0};
102 Double_t f5=TMath::Power(((sqrt(100.018215)+2.)/(sqrt(100.+khm[np]*khm[np])+2.0)),12.3);
103 Double_t fmax2=f5/kfmax[np];
105 Double_t ptpion=100.*PtPion(&pt, (Double_t*) 0);
106 Double_t fmtscal=TMath::Power(((sqrt(pt*pt+0.018215)+2.)/
107 (sqrt(pt*pt+khm[np]*khm[np])+2.0)),12.3)/ fmax2;
108 return fmtscal*ptpion;
114 //____________________________________________________________
115 Double_t AliGenMUONlib::PtKaon( const Double_t *px, const Double_t */*dummy*/)
118 return PtScal(*px,2);
122 //____________________________________________________________
123 Double_t AliGenMUONlib::YKaon( const Double_t *py, const Double_t */*dummy*/)
126 Double_t y=TMath::Abs(*py);
128 const Double_t ka = 1000.;
129 const Double_t kdy = 4.;
131 Double_t ex = y*y/(2*kdy*kdy);
132 return ka*TMath::Exp(-ex);
135 return 1.16526e+04+y*-3.79886e+03+y*y*4.31130e+02;
138 // particle composition
140 Int_t AliGenMUONlib::IpKaon(TRandom *ran)
143 if (ran->Rndm() < 0.5) {
154 //____________________________________________________________
155 Double_t AliGenMUONlib::PtJpsiPPdummy(Double_t x, Double_t energy)
159 // from the fit of RHIC, CDF & LHC data, see arXiv:1103.2394
161 const Double_t kpt0 = 1.04*TMath::Power(energy,0.101);
162 const Double_t kxn = 3.9;
164 Double_t pass1 = 1.+0.363*(x/kpt0)*(x/kpt0);
165 return x/TMath::Power(pass1,kxn);
168 Double_t AliGenMUONlib::PtJpsiPP7000(const Double_t *px, const Double_t */*dummy*/)
173 return PtJpsiPPdummy(*px,7000);
176 Double_t AliGenMUONlib::PtJpsiPP8000(const Double_t *px, const Double_t */*dummy*/)
181 return PtJpsiPPdummy(*px,8000);
184 Double_t AliGenMUONlib::PtJpsiPP2760(const Double_t *px, const Double_t */*dummy*/)
189 return PtJpsiPPdummy(*px,2760);
192 Double_t AliGenMUONlib::PtJpsiPP4400(const Double_t *px, const Double_t */*dummy*/)
197 return PtJpsiPPdummy(*px,4400);
200 Double_t AliGenMUONlib::PtJpsiPP5030(const Double_t *px, const Double_t */*dummy*/)
205 return PtJpsiPPdummy(*px,5030);
208 Double_t AliGenMUONlib::PtJpsiPP8800(const Double_t *px, const Double_t */*dummy*/)
213 return PtJpsiPPdummy(*px,8800);
216 Double_t AliGenMUONlib::PtJpsiPbPb2760ShFdummy(Double_t x, Int_t n)
218 // J/Psi shadowing factor vs pT for PbPb min. bias and 11 centr. bins (in 2.5<y<4)
220 // PbPb 2.76 TeV, for EKS98, minimum bias shadowing factor = 0.66 in 4pi
221 // S.Grigoryan, details presented at the PWG3-Muon meeting (05.10.2011)
222 // https://indico.cern.ch/conferenceDisplay.py?confId=157367
224 const Double_t f1[12] = {1, 1.128, 1.097, 1.037, 0.937, 0.821, 0.693, 0.558,
225 0.428, 0.317, 0.231, 0.156};
226 const Double_t f2[12] = {1, 1.313, 1.202, 1.039, 0.814, 0.593, 0.391, 0.224,
227 0.106, 0.041, 0.013, 0.002};
228 const Double_t c1[7] = {1.6077e+00, 7.6300e-02,-7.1880e-03, 3.4067e-04,
229 -9.2776e-06,1.5138e-07, 1.4652e-09};
230 const Double_t c2[7] = {6.2047e-01, 5.7653e-02,-4.1414e-03, 1.0301e-04,
231 9.6205e-07,-7.4098e-08, 5.0946e-09};
234 y1 = c1[j = 6]; y2 = c2[6];
235 while (j > 0) {y1 = y1 * x + c1[--j]; y2 = y2 * x + c2[j];}
237 y1 /= 1.+c1[6]*TMath::Power(x,6);
238 y2 /= 1.+c2[6]*TMath::Power(x,6);
240 y1 = 1 + (y1-2)*f1[n] + (y2+1-y1)*f2[n];
245 Double_t AliGenMUONlib::PtJpsiPbPb2760(const Double_t *px, const Double_t *dummy)
248 // PbPb 2.76 TeV, minimum bias 0-100 %
250 return PtJpsiPbPb2760ShFdummy(*px, 0) * PtJpsiPP2760(px, dummy);
253 Double_t AliGenMUONlib::PtJpsiPbPb2760c1(const Double_t *px, const Double_t *dummy)
256 // PbPb 2.76 TeV, 1st centrality bin 0-5 %
258 return PtJpsiPbPb2760ShFdummy(*px, 1) * PtJpsiPP2760(px, dummy);
261 Double_t AliGenMUONlib::PtJpsiPbPb2760c2(const Double_t *px, const Double_t *dummy)
264 // PbPb 2.76 TeV, 2nd centrality bin 5-10 %
266 return PtJpsiPbPb2760ShFdummy(*px, 2) * PtJpsiPP2760(px, dummy);
269 Double_t AliGenMUONlib::PtJpsiPbPb2760c3(const Double_t *px, const Double_t *dummy)
272 // PbPb 2.76 TeV, 3rd centrality bin 10-20 %
274 return PtJpsiPbPb2760ShFdummy(*px, 3) * PtJpsiPP2760(px, dummy);
277 Double_t AliGenMUONlib::PtJpsiPbPb2760c4(const Double_t *px, const Double_t *dummy)
280 // PbPb 2.76 TeV, 4th centrality bin 20-30 %
282 return PtJpsiPbPb2760ShFdummy(*px, 4) * PtJpsiPP2760(px, dummy);
285 Double_t AliGenMUONlib::PtJpsiPbPb2760c5(const Double_t *px, const Double_t *dummy)
288 // PbPb 2.76 TeV, 5th centrality bin 30-40 %
290 return PtJpsiPbPb2760ShFdummy(*px, 5) * PtJpsiPP2760(px, dummy);
293 Double_t AliGenMUONlib::PtJpsiPbPb2760c6(const Double_t *px, const Double_t *dummy)
296 // PbPb 2.76 TeV, 6th centrality bin 40-50 %
298 return PtJpsiPbPb2760ShFdummy(*px, 6) * PtJpsiPP2760(px, dummy);
301 Double_t AliGenMUONlib::PtJpsiPbPb2760c7(const Double_t *px, const Double_t *dummy)
304 // PbPb 2.76 TeV, 7th centrality bin 50-60 %
306 return PtJpsiPbPb2760ShFdummy(*px, 7) * PtJpsiPP2760(px, dummy);
309 Double_t AliGenMUONlib::PtJpsiPbPb2760c8(const Double_t *px, const Double_t *dummy)
312 // PbPb 2.76 TeV, 8th centrality bin 60-70 %
314 return PtJpsiPbPb2760ShFdummy(*px, 8) * PtJpsiPP2760(px, dummy);
317 Double_t AliGenMUONlib::PtJpsiPbPb2760c9(const Double_t *px, const Double_t *dummy)
320 // PbPb 2.76 TeV, 9th centrality bin 70-80 %
322 return PtJpsiPbPb2760ShFdummy(*px, 9) * PtJpsiPP2760(px, dummy);
325 Double_t AliGenMUONlib::PtJpsiPbPb2760c10(const Double_t *px, const Double_t *dummy)
328 // PbPb 2.76 TeV, 10th centrality bin 80-90 %
330 return PtJpsiPbPb2760ShFdummy(*px, 10) * PtJpsiPP2760(px, dummy);
333 Double_t AliGenMUONlib::PtJpsiPbPb2760c11(const Double_t *px, const Double_t *dummy)
336 // PbPb 2.76 TeV, 11th centrality bin 90-100 %
338 return PtJpsiPbPb2760ShFdummy(*px, 11) * PtJpsiPP2760(px, dummy);
341 Double_t AliGenMUONlib::PtJpsiPPb5030ShFdummy(Double_t x, Int_t n)
343 // J/Psi shadowing factor vs pT for pPb min. bias and 4 centr. bins (in 2.5<y<4)
345 // pPb 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.81 in 4pi
347 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
348 const Double_t c[7] = {6.675e-01, 1.808e-02, 2.721e-03,-7.793e-04, 7.504e-05,-3.884e-06, 5.759e-07};
352 while (j > 0) y = y * x + c[--j];
353 y /= 1 + c[6]*TMath::Power(x,6);
355 return 1 + (y-1)*f[n];
358 Double_t AliGenMUONlib::PtJpsiPPb5030(const Double_t *px, const Double_t *dummy)
361 // pPb 5.03 TeV, minimum bias 0-100 %
363 return PtJpsiPPb5030ShFdummy(*px, 0) * PtJpsiPP5030(px, dummy);
366 Double_t AliGenMUONlib::PtJpsiPPb5030c1(const Double_t *px, const Double_t *dummy)
369 // pPb 5.03 TeV, 1st centrality bin 0-20 %
371 return PtJpsiPPb5030ShFdummy(*px, 1) * PtJpsiPP5030(px, dummy);
374 Double_t AliGenMUONlib::PtJpsiPPb5030c2(const Double_t *px, const Double_t *dummy)
377 // pPb 5.03 TeV, 2nd centrality bin 20-40 %
379 return PtJpsiPPb5030ShFdummy(*px, 2) * PtJpsiPP5030(px, dummy);
382 Double_t AliGenMUONlib::PtJpsiPPb5030c3(const Double_t *px, const Double_t *dummy)
385 // pPb 5.03 TeV, 3rd centrality bin 40-60 %
387 return PtJpsiPPb5030ShFdummy(*px, 3) * PtJpsiPP5030(px, dummy);
390 Double_t AliGenMUONlib::PtJpsiPPb5030c4(const Double_t *px, const Double_t *dummy)
393 // pPb 5.03 TeV, 4th centrality bin 60-100 %
395 return PtJpsiPPb5030ShFdummy(*px, 4) * PtJpsiPP5030(px, dummy);
398 Double_t AliGenMUONlib::PtJpsiPbP5030ShFdummy(Double_t x, Int_t n)
400 // J/Psi shadowing factor vs pT for Pbp min. bias and 4 centr. bins (in 2.5<y<4)
402 // Pbp 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.81 in 4pi
404 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
405 const Double_t c[7] = {8.966e-01, 3.498e-02, 6.637e-03,-1.765e-03, 1.240e-04,-2.086e-06, 4.062e-07};
409 while (j > 0) y = y * x + c[--j];
410 y /= 1 + c[6]*TMath::Power(x,6);
412 return 1 + (y-1)*f[n];
415 Double_t AliGenMUONlib::PtJpsiPbP5030(const Double_t *px, const Double_t *dummy)
418 // Pbp 5.03 TeV, minimum bias 0-100 %
420 return PtJpsiPbP5030ShFdummy(*px, 0) * PtJpsiPP5030(px, dummy);
423 Double_t AliGenMUONlib::PtJpsiPbP5030c1(const Double_t *px, const Double_t *dummy)
426 // Pbp 5.03 TeV, 1st centrality bin 0-20 %
428 return PtJpsiPbP5030ShFdummy(*px, 1) * PtJpsiPP5030(px, dummy);
431 Double_t AliGenMUONlib::PtJpsiPbP5030c2(const Double_t *px, const Double_t *dummy)
434 // Pbp 5.03 TeV, 2nd centrality bin 20-40 %
436 return PtJpsiPbP5030ShFdummy(*px, 2) * PtJpsiPP5030(px, dummy);
439 Double_t AliGenMUONlib::PtJpsiPbP5030c3(const Double_t *px, const Double_t *dummy)
442 // Pbp 5.03 TeV, 3rd centrality bin 40-60 %
444 return PtJpsiPbP5030ShFdummy(*px, 3) * PtJpsiPP5030(px, dummy);
447 Double_t AliGenMUONlib::PtJpsiPbP5030c4(const Double_t *px, const Double_t *dummy)
450 // Pbp 5.03 TeV, 4th centrality bin 60-100 %
452 return PtJpsiPbP5030ShFdummy(*px, 4) * PtJpsiPP5030(px, dummy);
455 Double_t AliGenMUONlib::PtJpsiPPb8800ShFdummy(Double_t x, Int_t n)
457 // J/Psi shadowing factor vs pT for pPb min. bias and 4 centr. bins (in 2.5<y<4)
459 // pPb 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.78 in 4pi
461 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
462 const Double_t c[7] = {6.4922e-01, 6.4857e-03, 4.7268e-03,-9.5075e-04,
463 8.4075e-05,-4.2006e-06, 4.9970e-07};
467 while (j > 0) y = y * x + c[--j];
468 y /= 1 + c[6]*TMath::Power(x,6);
470 return 1 + (y-1)*f[n];
473 Double_t AliGenMUONlib::PtJpsiPPb8800(const Double_t *px, const Double_t *dummy)
476 // pPb 8.8 TeV, minimum bias 0-100 %
478 return PtJpsiPPb8800ShFdummy(*px, 0) * PtJpsiPP8800(px, dummy);
481 Double_t AliGenMUONlib::PtJpsiPPb8800c1(const Double_t *px, const Double_t *dummy)
484 // pPb 8.8 TeV, 1st centrality bin 0-20 %
486 return PtJpsiPPb8800ShFdummy(*px, 1) * PtJpsiPP8800(px, dummy);
489 Double_t AliGenMUONlib::PtJpsiPPb8800c2(const Double_t *px, const Double_t *dummy)
492 // pPb 8.8 TeV, 2nd centrality bin 20-40 %
494 return PtJpsiPPb8800ShFdummy(*px, 2) * PtJpsiPP8800(px, dummy);
497 Double_t AliGenMUONlib::PtJpsiPPb8800c3(const Double_t *px, const Double_t *dummy)
500 // pPb 8.8 TeV, 3rd centrality bin 40-60 %
502 return PtJpsiPPb8800ShFdummy(*px, 3) * PtJpsiPP8800(px, dummy);
505 Double_t AliGenMUONlib::PtJpsiPPb8800c4(const Double_t *px, const Double_t *dummy)
508 // pPb 8.8 TeV, 4th centrality bin 60-100 %
510 return PtJpsiPPb8800ShFdummy(*px, 4) * PtJpsiPP8800(px, dummy);
513 Double_t AliGenMUONlib::PtJpsiPbP8800ShFdummy(Double_t x, Int_t n)
515 // J/Psi shadowing factor vs pT for Pbp min. bias and 4 centr. bins (in 2.5<y<4)
517 // Pbp 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.78 in 4pi
519 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
520 const Double_t c[7] = {8.7562e-01, 2.1944e-02, 7.8509e-03,-1.3979e-03,
521 3.8513e-05, 4.2008e-06, 1.7088e-06};
525 while (j > 0) y = y * x + c[--j];
526 y /= 1 + c[6]*TMath::Power(x,6);
528 return 1 + (y-1)*f[n];
531 Double_t AliGenMUONlib::PtJpsiPbP8800(const Double_t *px, const Double_t *dummy)
534 // Pbp 8.8 TeV, minimum bias 0-100 %
536 return PtJpsiPbP8800ShFdummy(*px, 0) * PtJpsiPP8800(px, dummy);
539 Double_t AliGenMUONlib::PtJpsiPbP8800c1(const Double_t *px, const Double_t *dummy)
542 // Pbp 8.8 TeV, 1st centrality bin 0-20 %
544 return PtJpsiPbP8800ShFdummy(*px, 1) * PtJpsiPP8800(px, dummy);
547 Double_t AliGenMUONlib::PtJpsiPbP8800c2(const Double_t *px, const Double_t *dummy)
550 // Pbp 8.8 TeV, 2nd centrality bin 20-40 %
552 return PtJpsiPbP8800ShFdummy(*px, 2) * PtJpsiPP8800(px, dummy);
555 Double_t AliGenMUONlib::PtJpsiPbP8800c3(const Double_t *px, const Double_t *dummy)
558 // Pbp 8.8 TeV, 3rd centrality bin 40-60 %
560 return PtJpsiPbP8800ShFdummy(*px, 3) * PtJpsiPP8800(px, dummy);
563 Double_t AliGenMUONlib::PtJpsiPbP8800c4(const Double_t *px, const Double_t *dummy)
566 // Pbp 8.8 TeV, 4th centrality bin 60-100 %
568 return PtJpsiPbP8800ShFdummy(*px, 4) * PtJpsiPP8800(px, dummy);
571 Double_t AliGenMUONlib::PtJpsi( const Double_t *px, const Double_t */*dummy*/)
574 const Double_t kpt0 = 4.;
575 const Double_t kxn = 3.6;
578 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
579 return x/TMath::Power(pass1,kxn);
582 Double_t AliGenMUONlib::PtJpsiCDFscaled( const Double_t *px, const Double_t */*dummy*/)
587 // scaled from CDF data at 2 TeV
588 // see S.Grigoryan, PWG3 Meeting, 27th Oct 2008
590 const Double_t kpt0 = 5.100;
591 const Double_t kxn = 4.102;
594 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
595 return x/TMath::Power(pass1,kxn);
598 Double_t AliGenMUONlib::PtJpsiCDFscaledPP( const Double_t *px, const Double_t */*dummy*/)
603 // scaled from CDF data at 2 TeV
605 const Double_t kpt0 = 5.630;
606 const Double_t kxn = 4.071;
609 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
610 return x/TMath::Power(pass1,kxn);
613 Double_t AliGenMUONlib::PtJpsiCDFscaledPP10( const Double_t *px, const Double_t */*dummy*/)
618 // scaled from CDF data at 2 TeV
620 const Double_t kpt0 = 5.334;
621 const Double_t kxn = 4.071;
624 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
625 return x/TMath::Power(pass1,kxn);
628 Double_t AliGenMUONlib::PtJpsiCDFscaledPP9( const Double_t *px, const Double_t */*dummy*/)
633 // scaled from CDF data at 2 TeV
635 const Double_t kpt0 = 5.245;
636 const Double_t kxn = 4.071;
639 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
640 return x/TMath::Power(pass1,kxn);
643 Double_t AliGenMUONlib::PtJpsiCDFscaledPP7( const Double_t *px, const Double_t */*dummy*/)
648 // scaled from CDF data at 2 TeV
650 const Double_t kpt0 = 5.072;
651 const Double_t kxn = 4.071;
654 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
655 return x/TMath::Power(pass1,kxn);
658 Double_t AliGenMUONlib::PtJpsiCDFscaledPP4( const Double_t *px, const Double_t */*dummy*/)
663 // scaled from CDF data at 2 TeV
665 const Double_t kpt0 = 4.647;
666 const Double_t kxn = 4.071;
669 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
670 return x/TMath::Power(pass1,kxn);
673 Double_t AliGenMUONlib::PtJpsiCDFscaledPP3( const Double_t *px, const Double_t */*dummy*/)
678 // scaled from CDF data at 1.9 TeV
680 const Double_t kpt0 = 4.435;
681 const Double_t kxn = 4.071;
684 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
685 return x/TMath::Power(pass1,kxn);
688 Double_t AliGenMUONlib::PtJpsiCDFscaledPP2( const Double_t *px, const Double_t */*dummy*/)
693 // fit of the CDF data at 1.96 TeV
695 const Double_t kpt0 = 4.233;
696 const Double_t kxn = 4.071;
699 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
700 return x/TMath::Power(pass1,kxn);
703 Double_t AliGenMUONlib::PtJpsiCDFscaledPPb9( const Double_t *px, const Double_t *dummy)
707 // pPb 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.79
709 Double_t c[5] = {6.42774e-01, 1.86168e-02, -6.77296e-04, 8.93512e-06, 1.31586e-07};
714 while (j > 0) y = y * x + c[--j];
716 Double_t d = 1.+c[4]*TMath::Power(x,4);
717 return y/d * AliGenMUONlib::PtJpsiCDFscaledPP9(px,dummy);
720 Double_t AliGenMUONlib::PtJpsiCDFscaledPbP9( const Double_t *px, const Double_t *dummy)
724 // Pbp 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.79
726 Double_t c[5] = {8.58557e-01, 5.39791e-02, -4.75180e-03, 2.49463e-04, 5.52396e-05};
731 while (j > 0) y = y * x + c[--j];
733 Double_t d = 1.+c[4]*TMath::Power(x,4);
734 return y/d * AliGenMUONlib::PtJpsiCDFscaledPP9(px,dummy);
737 Double_t AliGenMUONlib::PtJpsiCDFscaledPbPb4( const Double_t *px, const Double_t *dummy)
741 // PbPb 3.94 TeV, for EKS98 with minimum bias shadowing factor 0.66
743 Double_t c[5] = {6.01022e-01, 4.70988e-02, -2.27917e-03, 3.09885e-05, 1.31955e-06};
748 while (j > 0) y = y * x + c[--j];
750 Double_t d = 1.+c[4]*TMath::Power(x,4);
751 return y/d * AliGenMUONlib::PtJpsiCDFscaledPP4(px,dummy);
754 Double_t AliGenMUONlib::PtJpsiFlat( const Double_t */*px*/, const Double_t */*dummy*/ )
759 Double_t AliGenMUONlib::PtJpsiPbPb( const Double_t *px, const Double_t */*dummy*/)
766 // mc = 1.4 GeV, pt-kick 1 GeV
770 -2.13098e+00, 9.46552e+00, -5.06799e+00, 1.27260e+00,
771 -1.83806e-01, 1.55853e-02, -7.23241e-04, 1.42105e-05
778 while (j > 0) y = y * x +c[--j];
779 y = x * TMath::Exp(y);
786 Double_t AliGenMUONlib::PtJpsiBPbPb( const Double_t *px, const Double_t */*dummy*/)
790 Double_t x0 = 4.0384;
794 Double_t y = x / TMath::Power((1. + (x/x0)*(x/x0)), n);
800 Double_t AliGenMUONlib::PtJpsiPP( const Double_t *px, const Double_t */*dummy*/)
807 // mc = 1.4 GeV, pt-kick 1 GeV
810 Float_t c[4] = {8.47471e+00, -1.93567e+00, 1.50271e-01, -5.51212e-03};
816 while (j > 0) y = y * x +c[--j];
817 y = x * TMath::Exp(y);
826 //____________________________________________________________
827 Double_t AliGenMUONlib::YJpsiPPdummy(Double_t x, Double_t energy)
831 // from the fit of RHIC + LHC data, see arXiv:1103.2394
833 x = x/TMath::Log(energy/3.097);
835 Double_t y = TMath::Exp(-x/0.4/0.4/2);
840 Double_t AliGenMUONlib::YJpsiPPpoly(Double_t x, Double_t energy)
844 // from the fit of RHIC + LHC data, see arXiv:1103.2394
846 x = x/TMath::Log(energy/3.097);
848 Double_t y = 1 - 6.9*x*x;
853 Double_t AliGenMUONlib::YJpsiPP7000(const Double_t *px, const Double_t */*dummy*/)
858 return YJpsiPPdummy(*px, 7000);
861 Double_t AliGenMUONlib::YJpsiPP8000(const Double_t *px, const Double_t */*dummy*/)
866 return YJpsiPPdummy(*px, 8000);
869 Double_t AliGenMUONlib::YJpsiPP2760(const Double_t *px, const Double_t */*dummy*/)
874 return YJpsiPPdummy(*px, 2760);
877 Double_t AliGenMUONlib::YJpsiPP4400(const Double_t *px, const Double_t */*dummy*/)
882 return YJpsiPPdummy(*px, 4400);
885 Double_t AliGenMUONlib::YJpsiPP5030(const Double_t *px, const Double_t */*dummy*/)
890 return YJpsiPPdummy(*px, 5030);
893 Double_t AliGenMUONlib::YJpsiPP8800(const Double_t *px, const Double_t */*dummy*/)
898 return YJpsiPPdummy(*px, 8800);
901 Double_t AliGenMUONlib::YJpsiPPpoly7000(const Double_t *px, const Double_t */*dummy*/)
906 return YJpsiPPpoly(*px, 7000);
909 Double_t AliGenMUONlib::YJpsiPPpoly2760(const Double_t *px, const Double_t */*dummy*/)
914 return YJpsiPPpoly(*px, 2760);
917 Double_t AliGenMUONlib::YJpsiPbPb2760ShFdummy(Double_t x, Int_t n)
919 // J/Psi shadowing factor vs y for PbPb min. bias and 11 centr. bins
921 // PbPb 2.76 TeV, for EKS98, minimum bias shadowing factor = 0.66 in 4pi
923 const Double_t f1[12] = {1, 1.128, 1.097, 1.037, 0.937, 0.821, 0.693, 0.558,
924 0.428, 0.317, 0.231, 0.156};
925 const Double_t f2[12] = {1, 1.313, 1.202, 1.039, 0.814, 0.593, 0.391, 0.224,
926 0.106, 0.041, 0.013, 0.002};
927 const Double_t c1[5] = {1.5591e+00, 7.5827e-03, 2.0676e-03,-1.1717e-04, 1.5237e-06};
928 const Double_t c2[5] = {6.0861e-01, 4.8854e-03, 1.3685e-03,-7.9182e-05, 1.0475e-06};
933 y1 = c1[j = 4]; y2 = c2[4];
934 while (j > 0) {y1 = y1 * x + c1[--j]; y2 = y2 * x + c2[j];}
936 y1 = 1 + (y1-2)*f1[n] + (y2+1-y1)*f2[n];
941 Double_t AliGenMUONlib::YJpsiPbPb2760(const Double_t *px, const Double_t *dummy)
944 // PbPb 2.76 TeV, minimum bias 0-100 %
946 return YJpsiPbPb2760ShFdummy(*px, 0) * YJpsiPP2760(px, dummy);
949 Double_t AliGenMUONlib::YJpsiPbPb2760c1(const Double_t *px, const Double_t *dummy)
952 // PbPb 2.76 TeV, 1st centrality bin 0-5 %
954 return YJpsiPbPb2760ShFdummy(*px, 1) * YJpsiPP2760(px, dummy);
957 Double_t AliGenMUONlib::YJpsiPbPb2760c2(const Double_t *px, const Double_t *dummy)
960 // PbPb 2.76 TeV, 2nd centrality bin 5-10 %
962 return YJpsiPbPb2760ShFdummy(*px, 2) * YJpsiPP2760(px, dummy);
965 Double_t AliGenMUONlib::YJpsiPbPb2760c3(const Double_t *px, const Double_t *dummy)
968 // PbPb 2.76 TeV, 3rd centrality bin 10-20 %
970 return YJpsiPbPb2760ShFdummy(*px, 3) * YJpsiPP2760(px, dummy);
973 Double_t AliGenMUONlib::YJpsiPbPb2760c4(const Double_t *px, const Double_t *dummy)
976 // PbPb 2.76 TeV, 4th centrality bin 20-30 %
978 return YJpsiPbPb2760ShFdummy(*px, 4) * YJpsiPP2760(px, dummy);
981 Double_t AliGenMUONlib::YJpsiPbPb2760c5(const Double_t *px, const Double_t *dummy)
984 // PbPb 2.76 TeV, 5th centrality bin 30-40 %
986 return YJpsiPbPb2760ShFdummy(*px, 5) * YJpsiPP2760(px, dummy);
989 Double_t AliGenMUONlib::YJpsiPbPb2760c6(const Double_t *px, const Double_t *dummy)
992 // PbPb 2.76 TeV, 6th centrality bin 40-50 %
994 return YJpsiPbPb2760ShFdummy(*px, 6) * YJpsiPP2760(px, dummy);
997 Double_t AliGenMUONlib::YJpsiPbPb2760c7(const Double_t *px, const Double_t *dummy)
1000 // PbPb 2.76 TeV, 7th centrality bin 50-60 %
1002 return YJpsiPbPb2760ShFdummy(*px, 7) * YJpsiPP2760(px, dummy);
1005 Double_t AliGenMUONlib::YJpsiPbPb2760c8(const Double_t *px, const Double_t *dummy)
1008 // PbPb 2.76 TeV, 8th centrality bin 60-70 %
1010 return YJpsiPbPb2760ShFdummy(*px, 8) * YJpsiPP2760(px, dummy);
1013 Double_t AliGenMUONlib::YJpsiPbPb2760c9(const Double_t *px, const Double_t *dummy)
1016 // PbPb 2.76 TeV, 9th centrality bin 70-80 %
1018 return YJpsiPbPb2760ShFdummy(*px, 9) * YJpsiPP2760(px, dummy);
1021 Double_t AliGenMUONlib::YJpsiPbPb2760c10(const Double_t *px, const Double_t *dummy)
1024 // PbPb 2.76 TeV, 10th centrality bin 80-90 %
1026 return YJpsiPbPb2760ShFdummy(*px, 10) * YJpsiPP2760(px, dummy);
1029 Double_t AliGenMUONlib::YJpsiPbPb2760c11(const Double_t *px, const Double_t *dummy)
1032 // PbPb 2.76 TeV, 11th centrality bin 90-100 %
1034 return YJpsiPbPb2760ShFdummy(*px, 11) * YJpsiPP2760(px, dummy);
1037 Double_t AliGenMUONlib::YJpsiPP5030dummy(Double_t px)
1039 return AliGenMUONlib::YJpsiPP5030(&px, (Double_t*) 0);
1042 Double_t AliGenMUONlib::YJpsiPPb5030ShFdummy(Double_t x, Int_t n)
1044 // J/Psi shadowing factor vs y for pPb min. bias and 4 centr. bins
1046 // pPb 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.81 in 4pi
1048 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1049 const Double_t c[7] = {7.641e-01, 1.611e-02, 4.109e-03, 2.818e-03, 3.359e-04,-6.376e-05,-9.717e-06};
1053 while (j > 0) y = y * x + c[--j];
1056 return 1 +(y-1)*f[n];
1059 Double_t AliGenMUONlib::YJpsiPPb5030(const Double_t *px, const Double_t */*dummy*/)
1062 // pPb 5.03 TeV, minimum bias 0-100 %
1064 Double_t x = px[0] + 0.47; // rapidity shift
1065 return YJpsiPPb5030ShFdummy(x, 0) * YJpsiPP5030dummy(x);
1068 Double_t AliGenMUONlib::YJpsiPPb5030c1(const Double_t *px, const Double_t */*dummy*/)
1071 // pPb 5.03 TeV, 1st centrality bin 0-20 %
1073 Double_t x = px[0] + 0.47; // rapidity shift
1074 return YJpsiPPb5030ShFdummy(x, 1) * YJpsiPP5030dummy(x);
1077 Double_t AliGenMUONlib::YJpsiPPb5030c2(const Double_t *px, const Double_t */*dummy*/)
1080 // pPb 5.03 TeV, 2nd centrality bin 20-40 %
1082 Double_t x = px[0] + 0.47; // rapidity shift
1083 return YJpsiPPb5030ShFdummy(x, 2) * YJpsiPP5030dummy(x);
1086 Double_t AliGenMUONlib::YJpsiPPb5030c3(const Double_t *px, const Double_t */*dummy*/)
1089 // pPb 5.03 TeV, 3rd centrality bin 40-60 %
1091 Double_t x = px[0] + 0.47; // rapidity shift
1092 return YJpsiPPb5030ShFdummy(x, 3) * YJpsiPP5030dummy(x);
1095 Double_t AliGenMUONlib::YJpsiPPb5030c4(const Double_t *px, const Double_t */*dummy*/)
1098 // pPb 5.03 TeV, 4th centrality bin 60-100 %
1100 Double_t x = px[0] + 0.47; // rapidity shift
1101 return YJpsiPPb5030ShFdummy(x, 4) * YJpsiPP5030dummy(x);
1104 Double_t AliGenMUONlib::YJpsiPbP5030(const Double_t *px, const Double_t */*dummy*/)
1107 // Pbp 5.03 TeV, minimum bias 0-100 %
1109 Double_t x = -px[0] + 0.47; // rapidity shift
1110 return YJpsiPPb5030ShFdummy(x, 0) * YJpsiPP5030dummy(x);
1113 Double_t AliGenMUONlib::YJpsiPbP5030c1(const Double_t *px, const Double_t */*dummy*/)
1116 // Pbp 5.03 TeV, 1st centrality bin 0-20 %
1118 Double_t x = -px[0] + 0.47; // rapidity shift
1119 return YJpsiPPb5030ShFdummy(x, 1) * YJpsiPP5030dummy(x);
1122 Double_t AliGenMUONlib::YJpsiPbP5030c2(const Double_t *px, const Double_t */*dummy*/)
1125 // Pbp 5.03 TeV, 2nd centrality bin 20-40 %
1127 Double_t x = -px[0] + 0.47; // rapidity shift
1128 return YJpsiPPb5030ShFdummy(x, 2) * YJpsiPP5030dummy(x);
1131 Double_t AliGenMUONlib::YJpsiPbP5030c3(const Double_t *px, const Double_t */*dummy*/)
1134 // Pbp 5.03 TeV, 3rd centrality bin 40-60 %
1136 Double_t x = -px[0] + 0.47; // rapidity shift
1137 return YJpsiPPb5030ShFdummy(x, 3) * YJpsiPP5030dummy(x);
1140 Double_t AliGenMUONlib::YJpsiPbP5030c4(const Double_t *px, const Double_t */*dummy*/)
1143 // Pbp 5.03 TeV, 4th centrality bin 60-100 %
1145 Double_t x = -px[0] + 0.47; // rapidity shift
1146 return YJpsiPPb5030ShFdummy(x, 4) * YJpsiPP5030dummy(x);
1149 Double_t AliGenMUONlib::YJpsiPP8800dummy(Double_t px)
1151 return AliGenMUONlib::YJpsiPP8800(&px, (Double_t*) 0);
1154 Double_t AliGenMUONlib::YJpsiPPb8800ShFdummy(Double_t x, Int_t n)
1156 // J/Psi shadowing factor vs y for pPb min. bias and 4 centr. bins
1158 // pPb 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.78 in 4pi
1160 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1161 const Double_t c[7] = {7.4372e-01, 2.3299e-02, 2.8678e-03, 1.9595e-03,
1162 3.2849e-04,-4.0547e-05,-7.9732e-06};
1166 while (j > 0) y = y * x + c[--j];
1169 return 1 +(y-1)*f[n];
1172 Double_t AliGenMUONlib::YJpsiPPb8800(const Double_t *px, const Double_t */*dummy*/)
1175 // pPb 8.8 TeV, minimum bias 0-100 %
1177 Double_t x = px[0] + 0.47; // rapidity shift
1178 return YJpsiPPb8800ShFdummy(x, 0) * YJpsiPP8800dummy(x);
1181 Double_t AliGenMUONlib::YJpsiPPb8800c1(const Double_t *px, const Double_t */*dummy*/)
1184 // pPb 8.8 TeV, 1st centrality bin 0-20 %
1186 Double_t x = px[0] + 0.47; // rapidity shift
1187 return YJpsiPPb8800ShFdummy(x, 1) * YJpsiPP8800dummy(x);
1190 Double_t AliGenMUONlib::YJpsiPPb8800c2(const Double_t *px, const Double_t */*dummy*/)
1193 // pPb 8.8 TeV, 2nd centrality bin 20-40 %
1195 Double_t x = px[0] + 0.47; // rapidity shift
1196 return YJpsiPPb8800ShFdummy(x, 2) * YJpsiPP8800dummy(x);
1199 Double_t AliGenMUONlib::YJpsiPPb8800c3(const Double_t *px, const Double_t */*dummy*/)
1202 // pPb 8.8 TeV, 3rd centrality bin 40-60 %
1204 Double_t x = px[0] + 0.47; // rapidity shift
1205 return YJpsiPPb8800ShFdummy(x, 3) * YJpsiPP8800dummy(x);
1208 Double_t AliGenMUONlib::YJpsiPPb8800c4(const Double_t *px, const Double_t */*dummy*/)
1211 // pPb 8.8 TeV, 4th centrality bin 60-100 %
1213 Double_t x = px[0] + 0.47; // rapidity shift
1214 return YJpsiPPb8800ShFdummy(x, 4) * YJpsiPP8800dummy(x);
1217 Double_t AliGenMUONlib::YJpsiPbP8800(const Double_t *px, const Double_t */*dummy*/)
1220 // Pbp 8.8 TeV, minimum bias 0-100 %
1222 Double_t x = -px[0] + 0.47; // rapidity shift
1223 return YJpsiPPb8800ShFdummy(x, 0) * YJpsiPP8800dummy(x);
1226 Double_t AliGenMUONlib::YJpsiPbP8800c1(const Double_t *px, const Double_t */*dummy*/)
1229 // Pbp 8.8 TeV, 1st centrality bin 0-20 %
1231 Double_t x = -px[0] + 0.47; // rapidity shift
1232 return YJpsiPPb8800ShFdummy(x, 1) * YJpsiPP8800dummy(x);
1235 Double_t AliGenMUONlib::YJpsiPbP8800c2(const Double_t *px, const Double_t */*dummy*/)
1238 // Pbp 8.8 TeV, 2nd centrality bin 20-40 %
1240 Double_t x = -px[0] + 0.47; // rapidity shift
1241 return YJpsiPPb8800ShFdummy(x, 2) * YJpsiPP8800dummy(x);
1244 Double_t AliGenMUONlib::YJpsiPbP8800c3(const Double_t *px, const Double_t */*dummy*/)
1247 // Pbp 8.8 TeV, 3rd centrality bin 40-60 %
1249 Double_t x = -px[0] + 0.47; // rapidity shift
1250 return YJpsiPPb8800ShFdummy(x, 3) * YJpsiPP8800dummy(x);
1253 Double_t AliGenMUONlib::YJpsiPbP8800c4(const Double_t *px, const Double_t */*dummy*/)
1256 // Pbp 8.8 TeV, 4th centrality bin 60-100 %
1258 Double_t x = -px[0] + 0.47; // rapidity shift
1259 return YJpsiPPb8800ShFdummy(x, 4) * YJpsiPP8800dummy(x);
1262 Double_t AliGenMUONlib::YJpsi(const Double_t *py, const Double_t */*dummy*/)
1265 const Double_t ky0 = 4.;
1266 const Double_t kb=1.;
1268 Double_t y=TMath::Abs(*py);
1273 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
1277 Double_t AliGenMUONlib::YJpsiFlat( const Double_t */*py*/, const Double_t */*dummy*/ )
1283 Double_t AliGenMUONlib::YJpsiPbPb( const Double_t *px, const Double_t */*dummy*/)
1293 // mc = 1.4 GeV, pt-kick 1 GeV
1295 Double_t c[5] = {-6.03425e+02, 4.98257e+02, -1.38794e+02, 1.62209e+01, -6.85955e-01};
1296 Double_t x = TMath::Abs(px[0]);
1304 while (j > 0) y = y * x + c[--j];
1312 Double_t AliGenMUONlib::YJpsiCDFscaled( const Double_t *px, const Double_t* dummy)
1315 return AliGenMUONlib::YJpsiPbPb(px, dummy);
1318 Double_t AliGenMUONlib::YJpsiCDFscaledPP( const Double_t *px, const Double_t* dummy)
1321 return AliGenMUONlib::YJpsiPP(px, dummy);
1324 Double_t AliGenMUONlib::YJpsiCDFscaledPP10( const Double_t *px, const Double_t */*dummy*/)
1329 // scaled from YJpsiPP(14 TeV) using 10 TeV / 14 TeV ratio of y-spectra in LO pQCD.
1330 // see S.Grigoryan, PWG3 Meeting, 27th Oct 2008
1333 Double_t c[5] = {2.46681e+01, 8.91486e+01, -3.21227e+01, 3.63075e+00, -1.32047e-01};
1335 Double_t x = TMath::Abs(px[0]);
1339 y = 98.523 - 1.3664 * x * x;
1340 } else if (x < 7.5) {
1343 while (j > 0) y = y * x + c[--j];
1353 Double_t AliGenMUONlib::YJpsiCDFscaledPP9( const Double_t *px, const Double_t */*dummy*/)
1358 // rescaling of YJpsiPP(14 TeV) using 8.8 TeV / 14 TeV ratio of y-spectra in LO QCD
1360 Double_t c[5] = {3.33882e+02, -1.30980e+02, 2.59082e+01, -3.08935e+00, 1.56375e-01};
1361 Double_t x = TMath::Abs(px[0]);
1365 y = 99.236 - 1.5498 * x * x;
1366 } else if (x < 7.4) {
1369 while (j > 0) y = y * x + c[--j];
1379 Double_t AliGenMUONlib::YJpsiCDFscaledPP9dummy(Double_t px)
1381 return AliGenMUONlib::YJpsiCDFscaledPP9(&px, (Double_t*) 0);
1384 Double_t AliGenMUONlib::YJpsiCDFscaledPP7( const Double_t *px, const Double_t */*dummy*/)
1389 // scaled from YJpsiPP(14 TeV) using 7 TeV / 14 TeV ratio of y-spectra in LO pQCD.
1392 Double_t c[5] = {6.71181e+02, -3.69240e+02, 8.89644e+01, -1.04937e+01, 4.80959e-01};
1394 Double_t x = TMath::Abs(px[0]);
1398 y = 100.78 - 1.8353 * x * x;
1399 } else if (x < 7.3) {
1402 while (j > 0) y = y * x + c[--j];
1412 Double_t AliGenMUONlib::YJpsiCDFscaledPP4( const Double_t *px, const Double_t */*dummy*/)
1417 // rescaling of YJpsiPP(14 TeV) using 3.94 TeV / 14 TeV ratio of y-spectra in LO QCD
1419 Double_t c[5] = {4.00785e+02, -1.41159e+01, -3.28599e+01, 5.53048e+00, -2.45151e-01};
1420 Double_t x = TMath::Abs(px[0]);
1424 y = 107.389 - 2.7454 * x * x;
1425 } else if (x < 7.0) {
1428 while (j > 0) y = y * x + c[--j];
1438 Double_t AliGenMUONlib::YJpsiCDFscaledPP3( const Double_t *px, const Double_t *dummy)
1441 return AliGenMUONlib::YJpsiPP2760(px, dummy);
1444 Double_t AliGenMUONlib::YJpsiCDFscaledPP2( const Double_t *px, const Double_t */*dummy*/)
1449 return YJpsiPPdummy(*px, 1960);
1452 Double_t AliGenMUONlib::YJpsiPP( const Double_t *px, const Double_t */*dummy*/)
1462 // mc = 1.4 GeV, pt-kick 1 GeV
1465 Double_t c[5] = {1.38532e+00, 1.00596e+02, -3.46378e+01, 3.94172e+00, -1.48319e-01};
1466 Double_t x = TMath::Abs(px[0]);
1470 y = 96.455 - 0.8483 * x * x;
1471 } else if (x < 7.9) {
1474 while (j > 0) y = y * x + c[--j];
1482 Double_t AliGenMUONlib::YJpsiCDFscaledPPb9( const Double_t *px, const Double_t */*dummy*/)
1486 // pPb 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.79
1488 Double_t c[7] = {7.52296e-01, 2.49917e-02, 3.36500e-03, 1.91187e-03, 2.92154e-04,
1489 -4.16509e-05,-7.62709e-06};
1491 Double_t x = px[0] + 0.47; // rapidity shift
1494 while (j > 0) y = y * x + c[--j];
1497 return y * AliGenMUONlib::YJpsiCDFscaledPP9dummy(x);
1500 Double_t AliGenMUONlib::YJpsiCDFscaledPbP9( const Double_t *px, const Double_t */*dummy*/)
1504 // Pbp 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.79
1506 Double_t c[7] = {7.52296e-01, 2.49917e-02, 3.36500e-03, 1.91187e-03, 2.92154e-04,
1507 -4.16509e-05,-7.62709e-06};
1509 Double_t x = -px[0] + 0.47; // rapidity shift
1512 while (j > 0) y = y * x + c[--j];
1515 return y * AliGenMUONlib::YJpsiCDFscaledPP9dummy(x);
1518 Double_t AliGenMUONlib::YJpsiCDFscaledPbPb4( const Double_t *px, const Double_t *dummy)
1522 // PbPb 3.94 TeV, for EKS98 with minimum bias shadowing factor 0.66
1524 Double_t c[4] = {5.95228e-01, 9.45069e-03, 2.44710e-04, -1.32894e-05};
1525 Double_t x = px[0]*px[0];
1529 while (j > 0) y = y * x + c[--j];
1532 return y * AliGenMUONlib::YJpsiCDFscaledPP4(px,dummy);
1535 Double_t AliGenMUONlib::YJpsiBPbPb( const Double_t *px, const Double_t */*dummy*/)
1539 // J/Psi from B->J/Psi X
1544 Double_t c[7] = {7.37025e-02, 0., -2.94487e-03, 0., 6.07953e-06, 0., 5.39219e-07};
1546 Double_t x = TMath::Abs(px[0]);
1554 while (j > 0) y = y * x + c[--j];
1562 // particle composition
1564 Int_t AliGenMUONlib::IpJpsi(TRandom *)
1566 // J/Psi composition
1569 Int_t AliGenMUONlib::IpPsiP(TRandom *)
1571 // Psi prime composition
1574 Int_t AliGenMUONlib::IpJpsiFamily(TRandom *)
1576 // J/Psi composition
1578 Float_t r = gRandom->Rndm();
1593 //____________________________________________________________
1594 Double_t AliGenMUONlib::PtUpsilonPPdummy(Double_t x, Double_t energy)
1598 // from the fit of CDF & LHC data, like for J/Psi in arXiv:1103.2394
1600 const Double_t kpt0 = 1.96*TMath::Power(energy,0.095);
1601 const Double_t kxn = 3.4;
1603 Double_t pass1 = 1.+0.471*(x/kpt0)*(x/kpt0);
1604 return x/TMath::Power(pass1,kxn);
1607 Double_t AliGenMUONlib::PtUpsilonPP7000(const Double_t *px, const Double_t */*dummy*/)
1612 return PtUpsilonPPdummy(*px,7000);
1615 Double_t AliGenMUONlib::PtUpsilonPP8000(const Double_t *px, const Double_t */*dummy*/)
1620 return PtUpsilonPPdummy(*px,8000);
1623 Double_t AliGenMUONlib::PtUpsilonPP2760(const Double_t *px, const Double_t */*dummy*/)
1628 return PtUpsilonPPdummy(*px,2760);
1631 Double_t AliGenMUONlib::PtUpsilonPP4400(const Double_t *px, const Double_t */*dummy*/)
1636 return PtUpsilonPPdummy(*px,4400);
1639 Double_t AliGenMUONlib::PtUpsilonPP5030(const Double_t *px, const Double_t */*dummy*/)
1644 return PtUpsilonPPdummy(*px,5030);
1647 Double_t AliGenMUONlib::PtUpsilonPP8800(const Double_t *px, const Double_t */*dummy*/)
1652 return PtUpsilonPPdummy(*px,8800);
1655 Double_t AliGenMUONlib::PtUpsilonPbPb2760ShFdummy(Double_t x, Int_t n)
1657 // Usilon shadowing factor vs pT for PbPb min. bias and 11 centr. bins (in 2.5<y<4)
1659 // PbPb 2.76 TeV, for EKS98, minimum bias shadowing factor = 0.87 in 4pi
1661 const Double_t f1[12] = {1, 1.128, 1.097, 1.037, 0.937, 0.821, 0.693, 0.558,
1662 0.428, 0.317, 0.231, 0.156};
1663 const Double_t f2[12] = {1, 1.313, 1.202, 1.039, 0.814, 0.593, 0.391, 0.224,
1664 0.106, 0.041, 0.013, 0.002};
1665 const Double_t c1[7] = {1.9089e+00, 1.2969e-03, 8.9786e-05,-5.3062e-06,
1666 -1.0046e-06,6.1446e-08, 1.0885e-09};
1667 const Double_t c2[7] = {8.8423e-01,-8.7488e-05, 5.9857e-04,-5.7959e-05,
1668 2.0059e-06,-2.7343e-08, 6.6053e-10};
1671 y1 = c1[j = 6]; y2 = c2[6];
1672 while (j > 0) {y1 = y1 * x + c1[--j]; y2 = y2 * x + c2[j];}
1674 y1 /= 1.+c1[6]*TMath::Power(x,6);
1675 y2 /= 1.+c2[6]*TMath::Power(x,6);
1677 y1 = 1 + (y1-2)*f1[n] + (y2+1-y1)*f2[n];
1682 Double_t AliGenMUONlib::PtUpsilonPbPb2760(const Double_t *px, const Double_t *dummy)
1685 // PbPb 2.76 TeV, minimum bias 0-100 %
1687 return PtUpsilonPbPb2760ShFdummy(*px, 0) * PtUpsilonPP2760(px, dummy);
1690 Double_t AliGenMUONlib::PtUpsilonPbPb2760c1(const Double_t *px, const Double_t *dummy)
1693 // PbPb 2.76 TeV, 1st centrality bin 0-5 %
1695 return PtUpsilonPbPb2760ShFdummy(*px, 1) * PtUpsilonPP2760(px, dummy);
1698 Double_t AliGenMUONlib::PtUpsilonPbPb2760c2(const Double_t *px, const Double_t *dummy)
1701 // PbPb 2.76 TeV, 2nd centrality bin 5-10 %
1703 return PtUpsilonPbPb2760ShFdummy(*px, 2) * PtUpsilonPP2760(px, dummy);
1706 Double_t AliGenMUONlib::PtUpsilonPbPb2760c3(const Double_t *px, const Double_t *dummy)
1709 // PbPb 2.76 TeV, 3rd centrality bin 10-20 %
1711 return PtUpsilonPbPb2760ShFdummy(*px, 3) * PtUpsilonPP2760(px, dummy);
1714 Double_t AliGenMUONlib::PtUpsilonPbPb2760c4(const Double_t *px, const Double_t *dummy)
1717 // PbPb 2.76 TeV, 4th centrality bin 20-30 %
1719 return PtUpsilonPbPb2760ShFdummy(*px, 4) * PtUpsilonPP2760(px, dummy);
1722 Double_t AliGenMUONlib::PtUpsilonPbPb2760c5(const Double_t *px, const Double_t *dummy)
1725 // PbPb 2.76 TeV, 5th centrality bin 30-40 %
1727 return PtUpsilonPbPb2760ShFdummy(*px, 5) * PtUpsilonPP2760(px, dummy);
1730 Double_t AliGenMUONlib::PtUpsilonPbPb2760c6(const Double_t *px, const Double_t *dummy)
1733 // PbPb 2.76 TeV, 6th centrality bin 40-50 %
1735 return PtUpsilonPbPb2760ShFdummy(*px, 6) * PtUpsilonPP2760(px, dummy);
1738 Double_t AliGenMUONlib::PtUpsilonPbPb2760c7(const Double_t *px, const Double_t *dummy)
1741 // PbPb 2.76 TeV, 7th centrality bin 50-60 %
1743 return PtUpsilonPbPb2760ShFdummy(*px, 7) * PtUpsilonPP2760(px, dummy);
1746 Double_t AliGenMUONlib::PtUpsilonPbPb2760c8(const Double_t *px, const Double_t *dummy)
1749 // PbPb 2.76 TeV, 8th centrality bin 60-70 %
1751 return PtUpsilonPbPb2760ShFdummy(*px, 8) * PtUpsilonPP2760(px, dummy);
1754 Double_t AliGenMUONlib::PtUpsilonPbPb2760c9(const Double_t *px, const Double_t *dummy)
1757 // PbPb 2.76 TeV, 9th centrality bin 70-80 %
1759 return PtUpsilonPbPb2760ShFdummy(*px, 9) * PtUpsilonPP2760(px, dummy);
1762 Double_t AliGenMUONlib::PtUpsilonPbPb2760c10(const Double_t *px, const Double_t *dummy)
1765 // PbPb 2.76 TeV, 10th centrality bin 80-90 %
1767 return PtUpsilonPbPb2760ShFdummy(*px, 10) * PtUpsilonPP2760(px, dummy);
1770 Double_t AliGenMUONlib::PtUpsilonPbPb2760c11(const Double_t *px, const Double_t *dummy)
1773 // PbPb 2.76 TeV, 11th centrality bin 90-100 %
1775 return PtUpsilonPbPb2760ShFdummy(*px, 11) * PtUpsilonPP2760(px, dummy);
1778 Double_t AliGenMUONlib::PtUpsilonPPb5030ShFdummy(Double_t x, Int_t n)
1780 // Upsilon shadowing factor vs pT for pPb min. bias and 4 centr. bins (in 2.5<y<4)
1782 // pPb 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.92 in 4pi
1784 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1785 const Double_t c[5] = {8.069e-01, 1.407e-04, 4.372e-04,-2.797e-05, 4.405e-06};
1789 while (j > 0) y = y * x + c[--j];
1790 y /= 1 + c[4]*TMath::Power(x,4);
1792 return 1 + (y-1)*f[n];
1795 Double_t AliGenMUONlib::PtUpsilonPPb5030(const Double_t *px, const Double_t *dummy)
1798 // pPb 5.03 TeV, minimum bias 0-100 %
1800 return PtUpsilonPPb5030ShFdummy(*px, 0) * PtUpsilonPP5030(px, dummy);
1803 Double_t AliGenMUONlib::PtUpsilonPPb5030c1(const Double_t *px, const Double_t *dummy)
1806 // pPb 5.03 TeV, 1st centrality bin 0-20 %
1808 return PtUpsilonPPb5030ShFdummy(*px, 1) * PtUpsilonPP5030(px, dummy);
1811 Double_t AliGenMUONlib::PtUpsilonPPb5030c2(const Double_t *px, const Double_t *dummy)
1814 // pPb 5.03 TeV, 2nd centrality bin 20-40 %
1816 return PtUpsilonPPb5030ShFdummy(*px, 2) * PtUpsilonPP5030(px, dummy);
1819 Double_t AliGenMUONlib::PtUpsilonPPb5030c3(const Double_t *px, const Double_t *dummy)
1822 // pPb 5.03 TeV, 3rd centrality bin 40-60 %
1824 return PtUpsilonPPb5030ShFdummy(*px, 3) * PtUpsilonPP5030(px, dummy);
1827 Double_t AliGenMUONlib::PtUpsilonPPb5030c4(const Double_t *px, const Double_t *dummy)
1830 // pPb 5.03 TeV, 4th centrality bin 60-100 %
1832 return PtUpsilonPPb5030ShFdummy(*px, 4) * PtUpsilonPP5030(px, dummy);
1835 Double_t AliGenMUONlib::PtUpsilonPbP5030ShFdummy(Double_t x, Int_t n)
1837 // Upsilon shadowing factor vs pT for Pbp min. bias and 4 centr. bins (in 2.5<y<4)
1839 // Pbp 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.92 in 4pi
1841 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1842 const Double_t c[5] = {1.122, 2.565e-03,-3.025e-04, 4.113e-06, 6.140e-07};
1846 while (j > 0) y = y * x + c[--j];
1847 y /= 1 + c[4]*TMath::Power(x,4);
1849 return 1 + (y-1)*f[n];
1852 Double_t AliGenMUONlib::PtUpsilonPbP5030(const Double_t *px, const Double_t *dummy)
1855 // Pbp 5.03 TeV, minimum bias 0-100 %
1857 return PtUpsilonPbP5030ShFdummy(*px, 0) * PtUpsilonPP5030(px, dummy);
1860 Double_t AliGenMUONlib::PtUpsilonPbP5030c1(const Double_t *px, const Double_t *dummy)
1863 // Pbp 5.03 TeV, 1st centrality bin 0-20 %
1865 return PtUpsilonPbP5030ShFdummy(*px, 1) * PtUpsilonPP5030(px, dummy);
1868 Double_t AliGenMUONlib::PtUpsilonPbP5030c2(const Double_t *px, const Double_t *dummy)
1871 // Pbp 5.03 TeV, 2nd centrality bin 20-40 %
1873 return PtUpsilonPbP5030ShFdummy(*px, 2) * PtUpsilonPP5030(px, dummy);
1876 Double_t AliGenMUONlib::PtUpsilonPbP5030c3(const Double_t *px, const Double_t *dummy)
1879 // Pbp 5.03 TeV, 3rd centrality bin 40-60 %
1881 return PtUpsilonPbP5030ShFdummy(*px, 3) * PtUpsilonPP5030(px, dummy);
1884 Double_t AliGenMUONlib::PtUpsilonPbP5030c4(const Double_t *px, const Double_t *dummy)
1887 // Pbp 5.03 TeV, 4th centrality bin 60-100 %
1889 return PtUpsilonPbP5030ShFdummy(*px, 4) * PtUpsilonPP5030(px, dummy);
1892 Double_t AliGenMUONlib::PtUpsilonPPb8800ShFdummy(Double_t x, Int_t n)
1894 // Upsilon shadowing factor vs pT for pPb min. bias and 4 centr. bins (in 2.5<y<4)
1896 // pPb 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.89 in 4pi
1898 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1899 const Double_t c[5] = {7.6561e-01, 1.1360e-04, 4.9596e-04,-3.0287e-05, 3.7555e-06};
1903 while (j > 0) y = y * x + c[--j];
1904 y /= 1 + c[4]*TMath::Power(x,4);
1906 return 1 + (y-1)*f[n];
1909 Double_t AliGenMUONlib::PtUpsilonPPb8800(const Double_t *px, const Double_t *dummy)
1912 // pPb 8.8 TeV, minimum bias 0-100 %
1914 return PtUpsilonPPb8800ShFdummy(*px, 0) * PtUpsilonPP8800(px, dummy);
1917 Double_t AliGenMUONlib::PtUpsilonPPb8800c1(const Double_t *px, const Double_t *dummy)
1920 // pPb 8.8 TeV, 1st centrality bin 0-20 %
1922 return PtUpsilonPPb8800ShFdummy(*px, 1) * PtUpsilonPP8800(px, dummy);
1925 Double_t AliGenMUONlib::PtUpsilonPPb8800c2(const Double_t *px, const Double_t *dummy)
1928 // pPb 8.8 TeV, 2nd centrality bin 20-40 %
1930 return PtUpsilonPPb8800ShFdummy(*px, 2) * PtUpsilonPP8800(px, dummy);
1933 Double_t AliGenMUONlib::PtUpsilonPPb8800c3(const Double_t *px, const Double_t *dummy)
1936 // pPb 8.8 TeV, 3rd centrality bin 40-60 %
1938 return PtUpsilonPPb8800ShFdummy(*px, 3) * PtUpsilonPP8800(px, dummy);
1941 Double_t AliGenMUONlib::PtUpsilonPPb8800c4(const Double_t *px, const Double_t *dummy)
1944 // pPb 8.8 TeV, 4th centrality bin 60-100 %
1946 return PtUpsilonPPb8800ShFdummy(*px, 4) * PtUpsilonPP8800(px, dummy);
1949 Double_t AliGenMUONlib::PtUpsilonPbP8800ShFdummy(Double_t x, Int_t n)
1951 // Upsilon shadowing factor vs pT for Pbp min. bias and 4 centr. bins (in 2.5<y<4)
1953 // Pbp 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.89 in 4pi
1955 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1956 const Double_t c[5] = {1.0975, 3.1905e-03,-2.0477e-04, 8.5270e-06, 2.5343e-06};
1960 while (j > 0) y = y * x + c[--j];
1961 y /= 1 + c[4]*TMath::Power(x,4);
1963 return 1 + (y-1)*f[n];
1966 Double_t AliGenMUONlib::PtUpsilonPbP8800(const Double_t *px, const Double_t *dummy)
1969 // Pbp 8.8 TeV, minimum bias 0-100 %
1971 return PtUpsilonPbP8800ShFdummy(*px, 0) * PtUpsilonPP8800(px, dummy);
1974 Double_t AliGenMUONlib::PtUpsilonPbP8800c1(const Double_t *px, const Double_t *dummy)
1977 // Pbp 8.8 TeV, 1st centrality bin 0-20 %
1979 return PtUpsilonPbP8800ShFdummy(*px, 1) * PtUpsilonPP8800(px, dummy);
1982 Double_t AliGenMUONlib::PtUpsilonPbP8800c2(const Double_t *px, const Double_t *dummy)
1985 // Pbp 8.8 TeV, 2nd centrality bin 20-40 %
1987 return PtUpsilonPbP8800ShFdummy(*px, 2) * PtUpsilonPP8800(px, dummy);
1990 Double_t AliGenMUONlib::PtUpsilonPbP8800c3(const Double_t *px, const Double_t *dummy)
1993 // Pbp 8.8 TeV, 3rd centrality bin 40-60 %
1995 return PtUpsilonPbP8800ShFdummy(*px, 3) * PtUpsilonPP8800(px, dummy);
1998 Double_t AliGenMUONlib::PtUpsilonPbP8800c4(const Double_t *px, const Double_t *dummy)
2001 // Pbp 8.8 TeV, 4th centrality bin 60-100 %
2003 return PtUpsilonPbP8800ShFdummy(*px, 4) * PtUpsilonPP8800(px, dummy);
2006 Double_t AliGenMUONlib::PtUpsilon( const Double_t *px, const Double_t */*dummy*/ )
2009 const Double_t kpt0 = 5.3;
2010 const Double_t kxn = 2.5;
2013 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2014 return x/TMath::Power(pass1,kxn);
2017 Double_t AliGenMUONlib::PtUpsilonCDFscaled( const Double_t *px, const Double_t */*dummy*/ )
2020 const Double_t kpt0 = 7.753;
2021 const Double_t kxn = 3.042;
2024 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2025 return x/TMath::Power(pass1,kxn);
2028 Double_t AliGenMUONlib::PtUpsilonCDFscaledPP( const Double_t *px, const Double_t */*dummy*/ )
2034 // scaled from CDF data at 2 TeV
2036 const Double_t kpt0 = 8.610;
2037 const Double_t kxn = 3.051;
2040 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2041 return x/TMath::Power(pass1,kxn);
2044 Double_t AliGenMUONlib::PtUpsilonCDFscaledPP10( const Double_t *px, const Double_t */*dummy*/)
2050 // scaled from CDF data at 2 TeV
2052 const Double_t kpt0 = 8.235;
2053 const Double_t kxn = 3.051;
2056 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2057 return x/TMath::Power(pass1,kxn);
2060 Double_t AliGenMUONlib::PtUpsilonCDFscaledPP9( const Double_t *px, const Double_t */*dummy*/)
2065 // scaled from CDF data at 2 TeV
2067 const Double_t kpt0 = 8.048;
2068 const Double_t kxn = 3.051;
2071 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2072 return x/TMath::Power(pass1,kxn);
2075 Double_t AliGenMUONlib::PtUpsilonCDFscaledPP7( const Double_t *px, const Double_t */*dummy*/)
2081 // scaled from CDF data at 2 TeV
2083 const Double_t kpt0 = 7.817;
2084 const Double_t kxn = 3.051;
2087 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2088 return x/TMath::Power(pass1,kxn);
2091 Double_t AliGenMUONlib::PtUpsilonCDFscaledPP4( const Double_t *px, const Double_t */*dummy*/)
2096 // scaled from CDF data at 2 TeV
2098 const Double_t kpt0 = 7.189;
2099 const Double_t kxn = 3.051;
2102 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2103 return x/TMath::Power(pass1,kxn);
2106 Double_t AliGenMUONlib::PtUpsilonCDFscaledPPb9( const Double_t *px, const Double_t *dummy)
2110 // pPb 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.89
2112 Double_t c[5] = {7.64952e-01, 1.12501e-04, 4.96038e-04, -3.03198e-05, 3.74035e-06};
2117 while (j > 0) y = y * x + c[--j];
2119 Double_t d = 1.+c[4]*TMath::Power(x,4);
2120 return y/d * AliGenMUONlib::PtUpsilonCDFscaledPP9(px,dummy);
2123 Double_t AliGenMUONlib::PtUpsilonCDFscaledPbP9( const Double_t *px, const Double_t *dummy)
2127 // Pbp 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.89
2129 Double_t c[5] = {1.09881e+00, 3.08329e-03, -2.00356e-04, 8.28991e-06, 2.52576e-06};
2134 while (j > 0) y = y * x + c[--j];
2136 Double_t d = 1.+c[4]*TMath::Power(x,4);
2137 return y/d * AliGenMUONlib::PtUpsilonCDFscaledPP9(px,dummy);
2140 Double_t AliGenMUONlib::PtUpsilonCDFscaledPbPb4( const Double_t *px, const Double_t *dummy)
2144 // PbPb 3.94 TeV, for EKS98 with minimum bias shadowing factor 0.85
2146 Double_t c[5] = {8.65872e-01, 2.05465e-03, 2.56063e-04, -1.65598e-05, 2.29209e-06};
2151 while (j > 0) y = y * x + c[--j];
2153 Double_t d = 1.+c[4]*TMath::Power(x,4);
2154 return y/d * AliGenMUONlib::PtUpsilonCDFscaledPP4(px,dummy);
2157 Double_t AliGenMUONlib::PtUpsilonFlat( const Double_t */*px*/, const Double_t */*dummy*/ )
2162 Double_t AliGenMUONlib::PtUpsilonPbPb( const Double_t *px, const Double_t */*dummy*/)
2171 // mc = 1.4 GeV, pt-kick 1 GeV
2175 -1.03488e+01, 1.28065e+01, -6.60500e+00, 1.66140e+00,
2176 -2.34293e-01, 1.86925e-02, -7.80708e-04, 1.30610e-05
2182 while (j > 0) y = y * x +c[--j];
2183 y = x * TMath::Exp(y);
2190 Double_t AliGenMUONlib::PtUpsilonPP( const Double_t *px, const Double_t */*dummy*/)
2199 // mc = 1.4 GeV, pt-kick 1 GeV
2202 Double_t c[8] = {-7.93955e+00, 1.06306e+01, -5.21392e+00, 1.19703e+00,
2203 -1.45718e-01, 8.95151e-03, -2.04806e-04, -1.13053e-06};
2209 while (j > 0) y = y * x +c[--j];
2210 y = x * TMath::Exp(y);
2220 //____________________________________________________________
2221 Double_t AliGenMUONlib::YUpsilonPPdummy(Double_t x, Double_t energy)
2225 // from the fit of CDF & LHC data, like for J/Psi in arXiv:1103.2394
2227 x = x/TMath::Log(energy/9.46);
2229 Double_t y = TMath::Exp(-x/0.4/0.4/2);
2234 Double_t AliGenMUONlib::YUpsilonPPpoly(Double_t x, Double_t energy)
2238 // from the fit of CDF & LHC data, like for J/Psi in arXiv:1103.2394
2240 x = x/TMath::Log(energy/9.46);
2242 Double_t y = 1 - 6.9*x*x;
2247 Double_t AliGenMUONlib::YUpsilonPP7000(const Double_t *px, const Double_t */*dummy*/)
2252 return YUpsilonPPdummy(*px, 7000);
2255 Double_t AliGenMUONlib::YUpsilonPP8000(const Double_t *px, const Double_t */*dummy*/)
2260 return YUpsilonPPdummy(*px, 8000);
2263 Double_t AliGenMUONlib::YUpsilonPP2760(const Double_t *px, const Double_t */*dummy*/)
2268 return YUpsilonPPdummy(*px, 2760);
2271 Double_t AliGenMUONlib::YUpsilonPP4400(const Double_t *px, const Double_t */*dummy*/)
2276 return YUpsilonPPdummy(*px, 4400);
2279 Double_t AliGenMUONlib::YUpsilonPP5030(const Double_t *px, const Double_t */*dummy*/)
2284 return YUpsilonPPdummy(*px, 5030);
2287 Double_t AliGenMUONlib::YUpsilonPP8800(const Double_t *px, const Double_t */*dummy*/)
2292 return YUpsilonPPdummy(*px, 8800);
2295 Double_t AliGenMUONlib::YUpsilonPPpoly7000(const Double_t *px, const Double_t */*dummy*/)
2300 return YUpsilonPPpoly(*px, 7000);
2303 Double_t AliGenMUONlib::YUpsilonPPpoly2760(const Double_t *px, const Double_t */*dummy*/)
2308 return YUpsilonPPpoly(*px, 2760);
2311 Double_t AliGenMUONlib::YUpsilonPbPb2760ShFdummy(Double_t x, Int_t n)
2313 // Upsilon shadowing factor vs y for PbPb min. bias and 11 centr. bins
2315 // PbPb 2.76 TeV, for EKS98, minimum bias shadowing factor = 0.87 in 4pi
2317 const Double_t f1[12] = {1, 1.128, 1.097, 1.037, 0.937, 0.821, 0.693, 0.558,
2318 0.428, 0.317, 0.231, 0.156};
2319 const Double_t f2[12] = {1, 1.313, 1.202, 1.039, 0.814, 0.593, 0.391, 0.224,
2320 0.106, 0.041, 0.013, 0.002};
2321 const Double_t c1[5] = {1.8547e+00, 1.6717e-02,-2.1285e-04,-9.7662e-05, 2.5768e-06};
2322 const Double_t c2[5] = {8.6029e-01, 1.1742e-02,-2.7944e-04,-6.7973e-05, 1.8838e-06};
2327 y1 = c1[j = 4]; y2 = c2[4];
2328 while (j > 0) {y1 = y1 * x + c1[--j]; y2 = y2 * x + c2[j];}
2330 y1 = 1 + (y1-2)*f1[n] + (y2+1-y1)*f2[n];
2335 Double_t AliGenMUONlib::YUpsilonPbPb2760(const Double_t *px, const Double_t *dummy)
2338 // PbPb 2.76 TeV, minimum bias 0-100 %
2340 return YUpsilonPbPb2760ShFdummy(*px, 0) * YUpsilonPP2760(px, dummy);
2343 Double_t AliGenMUONlib::YUpsilonPbPb2760c1(const Double_t *px, const Double_t *dummy)
2346 // PbPb 2.76 TeV, 1st centrality bin 0-5 %
2348 return YUpsilonPbPb2760ShFdummy(*px, 1) * YUpsilonPP2760(px, dummy);
2351 Double_t AliGenMUONlib::YUpsilonPbPb2760c2(const Double_t *px, const Double_t *dummy)
2354 // PbPb 2.76 TeV, 2nd centrality bin 5-10 %
2356 return YUpsilonPbPb2760ShFdummy(*px, 2) * YUpsilonPP2760(px, dummy);
2359 Double_t AliGenMUONlib::YUpsilonPbPb2760c3(const Double_t *px, const Double_t *dummy)
2362 // PbPb 2.76 TeV, 3rd centrality bin 10-20 %
2364 return YUpsilonPbPb2760ShFdummy(*px, 3) * YUpsilonPP2760(px, dummy);
2367 Double_t AliGenMUONlib::YUpsilonPbPb2760c4(const Double_t *px, const Double_t *dummy)
2370 // PbPb 2.76 TeV, 4th centrality bin 20-30 %
2372 return YUpsilonPbPb2760ShFdummy(*px, 4) * YUpsilonPP2760(px, dummy);
2375 Double_t AliGenMUONlib::YUpsilonPbPb2760c5(const Double_t *px, const Double_t *dummy)
2378 // PbPb 2.76 TeV, 5th centrality bin 30-40 %
2380 return YUpsilonPbPb2760ShFdummy(*px, 5) * YUpsilonPP2760(px, dummy);
2383 Double_t AliGenMUONlib::YUpsilonPbPb2760c6(const Double_t *px, const Double_t *dummy)
2386 // PbPb 2.76 TeV, 6th centrality bin 40-50 %
2388 return YUpsilonPbPb2760ShFdummy(*px, 6) * YUpsilonPP2760(px, dummy);
2391 Double_t AliGenMUONlib::YUpsilonPbPb2760c7(const Double_t *px, const Double_t *dummy)
2394 // PbPb 2.76 TeV, 7th centrality bin 50-60 %
2396 return YUpsilonPbPb2760ShFdummy(*px, 7) * YUpsilonPP2760(px, dummy);
2399 Double_t AliGenMUONlib::YUpsilonPbPb2760c8(const Double_t *px, const Double_t *dummy)
2402 // PbPb 2.76 TeV, 8th centrality bin 60-70 %
2404 return YUpsilonPbPb2760ShFdummy(*px, 8) * YUpsilonPP2760(px, dummy);
2407 Double_t AliGenMUONlib::YUpsilonPbPb2760c9(const Double_t *px, const Double_t *dummy)
2410 // PbPb 2.76 TeV, 9th centrality bin 70-80 %
2412 return YUpsilonPbPb2760ShFdummy(*px, 9) * YUpsilonPP2760(px, dummy);
2415 Double_t AliGenMUONlib::YUpsilonPbPb2760c10(const Double_t *px, const Double_t *dummy)
2418 // PbPb 2.76 TeV, 10th centrality bin 80-90 %
2420 return YUpsilonPbPb2760ShFdummy(*px, 10) * YUpsilonPP2760(px, dummy);
2423 Double_t AliGenMUONlib::YUpsilonPbPb2760c11(const Double_t *px, const Double_t *dummy)
2426 // PbPb 2.76 TeV, 11th centrality bin 90-100 %
2428 return YUpsilonPbPb2760ShFdummy(*px, 11) * YUpsilonPP2760(px, dummy);
2431 Double_t AliGenMUONlib::YUpsilonPP5030dummy(Double_t px)
2433 return AliGenMUONlib::YUpsilonPP5030(&px, (Double_t*) 0);
2436 Double_t AliGenMUONlib::YUpsilonPPb5030ShFdummy(Double_t x, Int_t n)
2438 // Upsilon shadowing factor vs y for pPb min. bias and 4 centr. bins
2440 // pPb 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.92 in 4pi
2442 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
2443 const Double_t c[7] = {8.885e-01, 4.620e-02, 1.158e-02, 4.959e-04,-4.422e-04,-5.345e-05, 0.};
2447 while (j > 0) y = y * x + c[--j];
2450 return 1 +(y-1)*f[n];
2453 Double_t AliGenMUONlib::YUpsilonPPb5030(const Double_t *px, const Double_t */*dummy*/)
2456 // pPb 5.03 TeV, minimum bias 0-100 %
2458 Double_t x = px[0] + 0.47; // rapidity shift
2459 return YUpsilonPPb5030ShFdummy(x, 0) * YUpsilonPP5030dummy(x);
2462 Double_t AliGenMUONlib::YUpsilonPPb5030c1(const Double_t *px, const Double_t */*dummy*/)
2465 // pPb 5.03 TeV, 1st centrality bin 0-20 %
2467 Double_t x = px[0] + 0.47; // rapidity shift
2468 return YUpsilonPPb5030ShFdummy(x, 1) * YUpsilonPP5030dummy(x);
2471 Double_t AliGenMUONlib::YUpsilonPPb5030c2(const Double_t *px, const Double_t */*dummy*/)
2474 // pPb 5.03 TeV, 2nd centrality bin 20-40 %
2476 Double_t x = px[0] + 0.47; // rapidity shift
2477 return YUpsilonPPb5030ShFdummy(x, 2) * YUpsilonPP5030dummy(x);
2480 Double_t AliGenMUONlib::YUpsilonPPb5030c3(const Double_t *px, const Double_t */*dummy*/)
2483 // pPb 5.03 TeV, 3rd centrality bin 40-60 %
2485 Double_t x = px[0] + 0.47; // rapidity shift
2486 return YUpsilonPPb5030ShFdummy(x, 3) * YUpsilonPP5030dummy(x);
2489 Double_t AliGenMUONlib::YUpsilonPPb5030c4(const Double_t *px, const Double_t */*dummy*/)
2492 // pPb 5.03 TeV, 4th centrality bin 60-100 %
2494 Double_t x = px[0] + 0.47; // rapidity shift
2495 return YUpsilonPPb5030ShFdummy(x, 4) * YUpsilonPP5030dummy(x);
2498 Double_t AliGenMUONlib::YUpsilonPbP5030(const Double_t *px, const Double_t */*dummy*/)
2501 // Pbp 5.03 TeV, minimum bias 0-100 %
2503 Double_t x = -px[0] + 0.47; // rapidity shift
2504 return YUpsilonPPb5030ShFdummy(x, 0) * YUpsilonPP5030dummy(x);
2507 Double_t AliGenMUONlib::YUpsilonPbP5030c1(const Double_t *px, const Double_t */*dummy*/)
2510 // Pbp 5.03 TeV, 1st centrality bin 0-20 %
2512 Double_t x = -px[0] + 0.47; // rapidity shift
2513 return YUpsilonPPb5030ShFdummy(x, 1) * YUpsilonPP5030dummy(x);
2516 Double_t AliGenMUONlib::YUpsilonPbP5030c2(const Double_t *px, const Double_t */*dummy*/)
2519 // Pbp 5.03 TeV, 2nd centrality bin 20-40 %
2521 Double_t x = -px[0] + 0.47; // rapidity shift
2522 return YUpsilonPPb5030ShFdummy(x, 2) * YUpsilonPP5030dummy(x);
2525 Double_t AliGenMUONlib::YUpsilonPbP5030c3(const Double_t *px, const Double_t */*dummy*/)
2528 // Pbp 5.03 TeV, 3rd centrality bin 40-60 %
2530 Double_t x = -px[0] + 0.47; // rapidity shift
2531 return YUpsilonPPb5030ShFdummy(x, 3) * YUpsilonPP5030dummy(x);
2534 Double_t AliGenMUONlib::YUpsilonPbP5030c4(const Double_t *px, const Double_t */*dummy*/)
2537 // Pbp 5.03 TeV, 4th centrality bin 60-100 %
2539 Double_t x = -px[0] + 0.47; // rapidity shift
2540 return YUpsilonPPb5030ShFdummy(x, 4) * YUpsilonPP5030dummy(x);
2543 Double_t AliGenMUONlib::YUpsilonPP8800dummy(Double_t px)
2545 return AliGenMUONlib::YUpsilonPP8800(&px, (Double_t*) 0);
2548 Double_t AliGenMUONlib::YUpsilonPPb8800ShFdummy(Double_t x, Int_t n)
2550 // Upsilon shadowing factor vs y for pPb min. bias and 4 centr. bins
2552 // pPb 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.89 in 4pi
2554 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
2555 const Double_t c[7] = {8.6581e-01, 4.6111e-02, 7.6911e-03, 8.7313e-04,
2556 -1.4700e-04,-5.0975e-05,-3.5718e-06};
2560 while (j > 0) y = y * x + c[--j];
2563 return 1 +(y-1)*f[n];
2566 Double_t AliGenMUONlib::YUpsilonPPb8800(const Double_t *px, const Double_t */*dummy*/)
2569 // pPb 8.8 TeV, minimum bias 0-100 %
2571 Double_t x = px[0] + 0.47; // rapidity shift
2572 return YUpsilonPPb8800ShFdummy(x, 0) * YUpsilonPP8800dummy(x);
2575 Double_t AliGenMUONlib::YUpsilonPPb8800c1(const Double_t *px, const Double_t */*dummy*/)
2578 // pPb 8.8 TeV, 1st centrality bin 0-20 %
2580 Double_t x = px[0] + 0.47; // rapidity shift
2581 return YUpsilonPPb8800ShFdummy(x, 1) * YUpsilonPP8800dummy(x);
2584 Double_t AliGenMUONlib::YUpsilonPPb8800c2(const Double_t *px, const Double_t */*dummy*/)
2587 // pPb 8.8 TeV, 2nd centrality bin 20-40 %
2589 Double_t x = px[0] + 0.47; // rapidity shift
2590 return YUpsilonPPb8800ShFdummy(x, 2) * YUpsilonPP8800dummy(x);
2593 Double_t AliGenMUONlib::YUpsilonPPb8800c3(const Double_t *px, const Double_t */*dummy*/)
2596 // pPb 8.8 TeV, 3rd centrality bin 40-60 %
2598 Double_t x = px[0] + 0.47; // rapidity shift
2599 return YUpsilonPPb8800ShFdummy(x, 3) * YUpsilonPP8800dummy(x);
2602 Double_t AliGenMUONlib::YUpsilonPPb8800c4(const Double_t *px, const Double_t */*dummy*/)
2605 // pPb 8.8 TeV, 4th centrality bin 60-100 %
2607 Double_t x = px[0] + 0.47; // rapidity shift
2608 return YUpsilonPPb8800ShFdummy(x, 4) * YUpsilonPP8800dummy(x);
2611 Double_t AliGenMUONlib::YUpsilonPbP8800(const Double_t *px, const Double_t */*dummy*/)
2614 // Pbp 8.8 TeV, minimum bias 0-100 %
2616 Double_t x = -px[0] + 0.47; // rapidity shift
2617 return YUpsilonPPb8800ShFdummy(x, 0) * YUpsilonPP8800dummy(x);
2620 Double_t AliGenMUONlib::YUpsilonPbP8800c1(const Double_t *px, const Double_t */*dummy*/)
2623 // Pbp 8.8 TeV, 1st centrality bin 0-20 %
2625 Double_t x = -px[0] + 0.47; // rapidity shift
2626 return YUpsilonPPb8800ShFdummy(x, 1) * YUpsilonPP8800dummy(x);
2629 Double_t AliGenMUONlib::YUpsilonPbP8800c2(const Double_t *px, const Double_t */*dummy*/)
2632 // Pbp 8.8 TeV, 2nd centrality bin 20-40 %
2634 Double_t x = -px[0] + 0.47; // rapidity shift
2635 return YUpsilonPPb8800ShFdummy(x, 2) * YUpsilonPP8800dummy(x);
2638 Double_t AliGenMUONlib::YUpsilonPbP8800c3(const Double_t *px, const Double_t */*dummy*/)
2641 // Pbp 8.8 TeV, 3rd centrality bin 40-60 %
2643 Double_t x = -px[0] + 0.47; // rapidity shift
2644 return YUpsilonPPb8800ShFdummy(x, 3) * YUpsilonPP8800dummy(x);
2647 Double_t AliGenMUONlib::YUpsilonPbP8800c4(const Double_t *px, const Double_t */*dummy*/)
2650 // Pbp 8.8 TeV, 4th centrality bin 60-100 %
2652 Double_t x = -px[0] + 0.47; // rapidity shift
2653 return YUpsilonPPb8800ShFdummy(x, 4) * YUpsilonPP8800dummy(x);
2656 Double_t AliGenMUONlib::YUpsilon(const Double_t *py, const Double_t */*dummy*/)
2659 const Double_t ky0 = 3.;
2660 const Double_t kb=1.;
2662 Double_t y=TMath::Abs(*py);
2667 yu=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
2672 Double_t AliGenMUONlib::YUpsilonPbPb( const Double_t *px, const Double_t */*dummy*/)
2682 // mc = 1.4 GeV, pt-kick 1 GeV
2685 Double_t c[7] = {3.40036e-01, -3.98882e-07, -4.48398e-03, 8.46411e-08, -6.10854e-04,
2686 -2.99753e-09, 1.28895e-05};
2687 Double_t x = TMath::Abs(px[0]);
2688 if (x > 5.55) return 0.;
2690 Double_t y = c[j = 6];
2691 while (j > 0) y = y * x +c[--j];
2695 Double_t AliGenMUONlib::YUpsilonCDFscaled( const Double_t *px, const Double_t *dummy)
2698 return AliGenMUONlib::YUpsilonPbPb(px, dummy);
2702 Double_t AliGenMUONlib::YUpsilonCDFscaledPP( const Double_t *px, const Double_t *dummy)
2705 return AliGenMUONlib::YUpsilonPP(px, dummy);
2709 Double_t AliGenMUONlib::YUpsilonFlat( const Double_t */*px*/, const Double_t */*dummy*/)
2716 Double_t AliGenMUONlib::YUpsilonCDFscaledPP10( const Double_t *px, const Double_t */*dummy*/)
2721 // scaled from YUpsilonPP(14 TeV) using 10 TeV / 14 TeV ratio of y-spectra in LO pQCD.
2722 // see S.Grigoryan, PWG3 Meeting, 27th Oct 2008
2724 Double_t c[4] = {1., -2.17877e-02, -6.52830e-04, 1.40578e-05};
2725 Double_t x = TMath::Abs(px[0]);
2726 if (x > 6.1) return 0.;
2728 Double_t y = c[j = 3];
2729 while (j > 0) y = y * x*x +c[--j];
2733 Double_t AliGenMUONlib::YUpsilonCDFscaledPP9( const Double_t *px, const Double_t */*dummy*/)
2738 // rescaling of YUpsilonPP(14 TeV) using 8.8 TeV / 14 TeV ratio of y-spectra in LO QCD
2740 Double_t c[4] = {1., -2.37621e-02, -6.29610e-04, 1.47976e-05};
2741 Double_t x = TMath::Abs(px[0]);
2742 if (x > 6.1) return 0.;
2744 Double_t y = c[j = 3];
2745 while (j > 0) y = y * x*x +c[--j];
2749 Double_t AliGenMUONlib::YUpsilonCDFscaledPP9dummy(Double_t px)
2751 return AliGenMUONlib::YUpsilonCDFscaledPP9(&px, (Double_t*) 0);
2754 Double_t AliGenMUONlib::YUpsilonCDFscaledPP7( const Double_t *px, const Double_t */*dummy*/)
2759 // scaled from YUpsilonPP(14 TeV) using 7 TeV / 14 TeV ratio of y-spectra in LO pQCD.
2761 Double_t c[4] = {1., -2.61009e-02, -6.83937e-04, 1.78451e-05};
2762 Double_t x = TMath::Abs(px[0]);
2763 if (x > 6.0) return 0.;
2765 Double_t y = c[j = 3];
2766 while (j > 0) y = y * x*x +c[--j];
2770 Double_t AliGenMUONlib::YUpsilonCDFscaledPP4( const Double_t *px, const Double_t */*dummy*/)
2775 // rescaling of YUpsilonPP(14 TeV) using 3.94 TeV / 14 TeV ratio of y-spectra in LO QCD
2777 Double_t c[4] = {1., -3.91924e-02, -4.26184e-04, 2.10914e-05};
2778 Double_t x = TMath::Abs(px[0]);
2779 if (x > 5.7) return 0.;
2781 Double_t y = c[j = 3];
2782 while (j > 0) y = y * x*x +c[--j];
2787 Double_t AliGenMUONlib::YUpsilonPP( const Double_t *px, const Double_t */*dummy*/)
2797 // mc = 1.4 GeV, pt-kick 1 GeV
2799 Double_t c[7] = {8.91936e-01, -6.46645e-07, -1.52774e-02, 4.28677e-08, -7.01517e-04,
2800 -6.20539e-10, 1.29943e-05};
2801 Double_t x = TMath::Abs(px[0]);
2802 if (x > 6.2) return 0.;
2804 Double_t y = c[j = 6];
2805 while (j > 0) y = y * x +c[--j];
2809 Double_t AliGenMUONlib::YUpsilonCDFscaledPPb9( const Double_t *px, const Double_t */*dummy*/)
2813 // pPb 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.89
2815 Double_t c[7] = {8.71829e-01, 4.77467e-02, 8.09671e-03, 6.45294e-04, -2.15730e-04,
2816 -4.67538e-05,-2.11683e-06};
2818 Double_t x = px[0] + 0.47; // rapidity shift
2821 while (j > 0) y = y * x + c[--j];
2824 return y * AliGenMUONlib::YUpsilonCDFscaledPP9dummy(x);
2827 Double_t AliGenMUONlib::YUpsilonCDFscaledPbP9( const Double_t *px, const Double_t */*dummy*/)
2831 // Pbp 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.89
2833 Double_t c[7] = {8.71829e-01, 4.77467e-02, 8.09671e-03, 6.45294e-04, -2.15730e-04,
2834 -4.67538e-05,-2.11683e-06};
2836 Double_t x = -px[0] + 0.47; // rapidity shift
2839 while (j > 0) y = y * x + c[--j];
2842 return y * AliGenMUONlib::YUpsilonCDFscaledPP9dummy(x);
2845 Double_t AliGenMUONlib::YUpsilonCDFscaledPbPb4( const Double_t *px, const Double_t *dummy)
2849 // PbPb 3.94 TeV, for EKS98 with minimum bias shadowing factor 0.85
2851 Double_t c[4] = {8.27837e-01, 1.70115e-02, -1.26046e-03, 1.52091e-05};
2852 Double_t x = px[0]*px[0];
2856 while (j > 0) y = y * x + c[--j];
2859 return y * AliGenMUONlib::YUpsilonCDFscaledPP4(px,dummy);
2863 // particle composition
2865 Int_t AliGenMUONlib::IpUpsilon(TRandom *)
2870 Int_t AliGenMUONlib::IpUpsilonP(TRandom *)
2875 Int_t AliGenMUONlib::IpUpsilonPP(TRandom *)
2880 Int_t AliGenMUONlib::IpUpsilonFamily(TRandom *)
2883 // Using the LHCb pp data at 7 TeV: CERN-PH-EP-2012-051
2884 // (L. Manceau, S. Grigoryan)
2886 Float_t r = gRandom->Rndm();
2890 } else if (r < 0.903) {
2891 // } else if (r < 0.896) {
2904 // pt-distribution (by scaling of pion distribution)
2905 //____________________________________________________________
2906 Double_t AliGenMUONlib::PtPhi( const Double_t *px, const Double_t */*dummy*/)
2909 return PtScal(*px,7);
2912 Double_t AliGenMUONlib::YPhi( const Double_t *px, const Double_t */*dummy*/)
2916 return YJpsi(px,dum);
2918 // particle composition
2920 Int_t AliGenMUONlib::IpPhi(TRandom *)
2930 // pt-distribution (by scaling of pion distribution)
2931 //____________________________________________________________
2932 Double_t AliGenMUONlib::PtOmega( const Double_t *px, const Double_t */*dummy*/)
2935 return PtScal(*px,5);
2938 Double_t AliGenMUONlib::YOmega( const Double_t *px, const Double_t */*dummy*/)
2942 return YJpsi(px,dum);
2944 // particle composition
2946 Int_t AliGenMUONlib::IpOmega(TRandom *)
2948 // Omega composition
2957 // pt-distribution (by scaling of pion distribution)
2958 //____________________________________________________________
2959 Double_t AliGenMUONlib::PtEta( const Double_t *px, const Double_t */*dummy*/)
2962 return PtScal(*px,3);
2965 Double_t AliGenMUONlib::YEta( const Double_t *px, const Double_t */*dummy*/)
2969 return YJpsi(px,dum);
2971 // particle composition
2973 Int_t AliGenMUONlib::IpEta(TRandom *)
2984 //____________________________________________________________
2985 Double_t AliGenMUONlib::PtCharm( const Double_t *px, const Double_t */*dummy*/)
2988 const Double_t kpt0 = 2.25;
2989 const Double_t kxn = 3.17;
2992 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2993 return x/TMath::Power(pass1,kxn);
2996 Double_t AliGenMUONlib::PtCharmCentral( const Double_t *px, const Double_t */*dummy*/)
2999 const Double_t kpt0 = 2.12;
3000 const Double_t kxn = 2.78;
3003 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3004 return x/TMath::Power(pass1,kxn);
3006 Double_t AliGenMUONlib::PtCharmF0M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3008 // FiMjSkPP define theoretical uncertainties around F0M0S0PP as follows:
3009 // PtCharmFiMjSkPP = PtCharmF0M0S0PP * (dN(i,j,k)/dpt / dN(0,0,0)/dpt)_MNR
3010 // i=0,1,2; j=0,1,2; k=0,1,...,6
3011 // dN(i,j,k)/dpt - spectra obtained by A.Dainese (hep-ph/0601164, p.88;
3012 // http://www-zeus.desy.de/~corradi/benchmarks) from NLO pQCD (MNR)
3013 // calculations for the following inputs:
3014 // Peterson fragmentation function (F) with \epsilon_c = 0.02, 0.002 & 0.11
3015 // for i=0,1 & 2 respectively; quark mass (M) of 1.5, 1.3 & 1.7 GeV
3016 // for j=0,1 & 2 respectively;
3017 // factorisation \mu_F = a*mt and renormalisation \mu_R = b*mt scales (S)
3018 // with a/b = 1/1, 1/0.5, 0.5/1, 0.5/0.5, 1/2, 2/1 & 2/2
3019 // for k = 0, 1, 2, 3, 4, 5 & 6 respectively; CTEQ6.1 PDF set
3020 // (PDF uncertainty not considered since is small, see hep-ph/0601164, p.89).
3021 // June 2008, Smbat.Grigoryan@cern.ch
3024 // Pythia6.214 (kCharmppMNRwmi, PDF = CTEQ5L, quark mass = 1.2 GeV, PtHard > 2.76 GeV/c)
3025 // for pp collisions at 14 TeV with one c-cbar pair per event.
3026 // Corresponding NLO total cross section is 5.68 mb
3029 const Double_t kpt0 = 2.2930;
3030 const Double_t kxn = 3.1196;
3031 Double_t c[3]={-5.2180e-01,1.8753e-01,2.8669e-02};
3034 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3035 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3037 Double_t AliGenMUONlib::PtCharmF1M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3040 // Corresponding NLO total cross section is 6.06 mb
3041 const Double_t kpt0 = 2.8669;
3042 const Double_t kxn = 3.1044;
3043 Double_t c[3]={-4.6714e-01,1.5005e-01,4.5003e-02};
3046 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3047 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3049 Double_t AliGenMUONlib::PtCharmF2M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3052 // Corresponding NLO total cross section is 6.06 mb
3053 const Double_t kpt0 = 1.8361;
3054 const Double_t kxn = 3.2966;
3055 Double_t c[3]={-6.1550e-01,2.6498e-01,1.0728e-02};
3058 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3059 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3061 Double_t AliGenMUONlib::PtCharmF0M1S0PP( const Double_t *px, const Double_t */*dummy*/)
3064 // Corresponding NLO total cross section is 7.69 mb
3065 const Double_t kpt0 = 2.1280;
3066 const Double_t kxn = 3.1397;
3067 Double_t c[3]={-5.4021e-01,2.0944e-01,2.5211e-02};
3070 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3071 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3073 Double_t AliGenMUONlib::PtCharmF0M2S0PP( const Double_t *px, const Double_t */*dummy*/)
3076 // Corresponding NLO total cross section is 4.81 mb
3077 const Double_t kpt0 = 2.4579;
3078 const Double_t kxn = 3.1095;
3079 Double_t c[3]={-5.1497e-01,1.7532e-01,3.2429e-02};
3082 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3083 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3085 Double_t AliGenMUONlib::PtCharmF0M0S1PP( const Double_t *px, const Double_t */*dummy*/)
3088 // Corresponding NLO total cross section is 14.09 mb
3089 const Double_t kpt0 = 2.1272;
3090 const Double_t kxn = 3.1904;
3091 Double_t c[3]={-4.6088e-01,2.1918e-01,2.3055e-02};
3094 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3095 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3097 Double_t AliGenMUONlib::PtCharmF0M0S2PP( const Double_t *px, const Double_t */*dummy*/)
3100 // Corresponding NLO total cross section is 1.52 mb
3101 const Double_t kpt0 = 2.8159;
3102 const Double_t kxn = 3.0857;
3103 Double_t c[3]={-6.4691e-01,2.0289e-01,2.4922e-02};
3106 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3107 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3109 Double_t AliGenMUONlib::PtCharmF0M0S3PP( const Double_t *px, const Double_t */*dummy*/)
3112 // Corresponding NLO total cross section is 3.67 mb
3113 const Double_t kpt0 = 2.7297;
3114 const Double_t kxn = 3.3019;
3115 Double_t c[3]={-6.2216e-01,1.9031e-01,1.5341e-02};
3118 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3119 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3121 Double_t AliGenMUONlib::PtCharmF0M0S4PP( const Double_t *px, const Double_t */*dummy*/)
3124 // Corresponding NLO total cross section is 3.38 mb
3125 const Double_t kpt0 = 2.3894;
3126 const Double_t kxn = 3.1075;
3127 Double_t c[3]={-4.9742e-01,1.7032e-01,2.5994e-02};
3130 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3131 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3133 Double_t AliGenMUONlib::PtCharmF0M0S5PP( const Double_t *px, const Double_t */*dummy*/)
3136 // Corresponding NLO total cross section is 10.37 mb
3137 const Double_t kpt0 = 2.0187;
3138 const Double_t kxn = 3.3011;
3139 Double_t c[3]={-3.9869e-01,2.9248e-01,1.1763e-02};
3142 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3143 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3145 Double_t AliGenMUONlib::PtCharmF0M0S6PP( const Double_t *px, const Double_t */*dummy*/)
3148 // Corresponding NLO total cross section is 7.22 mb
3149 const Double_t kpt0 = 2.1089;
3150 const Double_t kxn = 3.1848;
3151 Double_t c[3]={-4.6275e-01,1.8114e-01,2.1363e-02};
3154 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3155 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3159 Double_t AliGenMUONlib::YCharm( const Double_t *px, const Double_t */*dummy*/)
3161 // Charm y :: Carrer & Dainese : ALICE-INT-2003-019 v.3 (hep-ph/0311225)
3162 // Pythia tuned to reproduce the distribution given by the HVQMNR program based on NLO calculations (pQCD)
3163 // shadowing + kt broadening
3166 Double_t c[2]={-2.42985e-03,-2.31001e-04};
3167 Double_t y=1+(c[0]*TMath::Power(x,2))+(c[1]*TMath::Power(x,4));
3170 if (TMath::Abs(x)>8) {
3174 ycharm=TMath::Power(y,3);
3179 Double_t AliGenMUONlib::YCharmF0M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3181 // FiMjSkPP define theoretical uncertainties around F0M0S0PP as follows:
3182 // YCharmFiMjSkPP = YCharmF0M0S0PP * (dN(i,j,k)/dy / dN(0,0,0)/dy)_MNR
3183 // i=0,1,2; j=0,1,2; k=0,1,...,6
3184 // dN(i,j,k)/dy - spectra obtained by A.Dainese (hep-ph/0601164, p.88;
3185 // http://www-zeus.desy.de/~corradi/benchmarks) from NLO pQCD (MNR)
3186 // calculations for the following inputs:
3187 // Peterson fragmentation function (F) with \epsilon_c = 0.02, 0.002 & 0.11
3188 // for i=0,1 & 2 respectively; quark mass (M) of 1.5, 1.3 & 1.7 GeV
3189 // for j=0,1 & 2 respectively;
3190 // factorisation \mu_F = a*mt and renormalisation \mu_R = b*mt scales (S)
3191 // with a/b = 1/1,1/0.5, 0.5/1, 0.5/0.5, 1/2, 2/1 & 2/2 for
3192 // k = 0, 1, 2, 3, 4, 5 & 6 respectively; CTEQ6.1 PDF set
3193 // (PDF uncertainty not considered since is small, see hep-ph/0601164, p.89).
3194 // June 2008, Smbat.Grigoryan@cern.ch
3197 // Pythia6.214 (kCharmppMNRwmi, PDF = CTEQ5L, quark mass = 1.2 GeV, PtHard > 2.76 GeV/c)
3198 // for pp collisions at 14 TeV with one c-cbar pair per event.
3199 // Corresponding NLO total cross section is 5.68 mb
3202 Double_t c[2]={7.0909e-03,6.1967e-05};
3203 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3206 if (TMath::Abs(x)>9) {
3210 ycharm=TMath::Power(y,3);
3215 Double_t AliGenMUONlib::YCharmF1M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3218 // Corresponding NLO total cross section is 6.06 mb
3220 Double_t c[2]={6.9707e-03,6.0971e-05};
3221 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3224 if (TMath::Abs(x)>9) {
3228 ycharm=TMath::Power(y,3);
3233 Double_t AliGenMUONlib::YCharmF2M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3236 // Corresponding NLO total cross section is 6.06 mb
3238 Double_t c[2]={7.1687e-03,6.5303e-05};
3239 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3242 if (TMath::Abs(x)>9) {
3246 ycharm=TMath::Power(y,3);
3251 Double_t AliGenMUONlib::YCharmF0M1S0PP( const Double_t *px, const Double_t */*dummy*/)
3254 // Corresponding NLO total cross section is 7.69 mb
3256 Double_t c[2]={5.9090e-03,7.1854e-05};
3257 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3260 if (TMath::Abs(x)>9) {
3264 ycharm=TMath::Power(y,3);
3269 Double_t AliGenMUONlib::YCharmF0M2S0PP( const Double_t *px, const Double_t */*dummy*/)
3272 // Corresponding NLO total cross section is 4.81 mb
3274 Double_t c[2]={8.0882e-03,5.5872e-05};
3275 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3278 if (TMath::Abs(x)>9) {
3282 ycharm=TMath::Power(y,3);
3287 Double_t AliGenMUONlib::YCharmF0M0S1PP( const Double_t *px, const Double_t */*dummy*/)
3290 // Corresponding NLO total cross section is 14.09 mb
3292 Double_t c[2]={7.2520e-03,6.2691e-05};
3293 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3296 if (TMath::Abs(x)>9) {
3300 ycharm=TMath::Power(y,3);
3305 Double_t AliGenMUONlib::YCharmF0M0S2PP( const Double_t *px, const Double_t */*dummy*/)
3308 // Corresponding NLO total cross section is 1.52 mb
3310 Double_t c[2]={1.1040e-04,1.4498e-04};
3311 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3314 if (TMath::Abs(x)>9) {
3318 ycharm=TMath::Power(y,3);
3323 Double_t AliGenMUONlib::YCharmF0M0S3PP( const Double_t *px, const Double_t */*dummy*/)
3326 // Corresponding NLO total cross section is 3.67 mb
3328 Double_t c[2]={-3.1328e-03,1.8270e-04};
3329 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3332 if (TMath::Abs(x)>9) {
3336 ycharm=TMath::Power(y,3);
3341 Double_t AliGenMUONlib::YCharmF0M0S4PP( const Double_t *px, const Double_t */*dummy*/)
3344 // Corresponding NLO total cross section is 3.38 mb
3346 Double_t c[2]={7.0865e-03,6.2532e-05};
3347 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3350 if (TMath::Abs(x)>9) {
3354 ycharm=TMath::Power(y,3);
3359 Double_t AliGenMUONlib::YCharmF0M0S5PP( const Double_t *px, const Double_t */*dummy*/)
3362 // Corresponding NLO total cross section is 10.37 mb
3364 Double_t c[2]={7.7070e-03,5.3533e-05};
3365 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3368 if (TMath::Abs(x)>9) {
3372 ycharm=TMath::Power(y,3);
3377 Double_t AliGenMUONlib::YCharmF0M0S6PP( const Double_t *px, const Double_t */*dummy*/)
3380 // Corresponding NLO total cross section is 7.22 mb
3382 Double_t c[2]={7.9195e-03,5.3823e-05};
3383 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3386 if (TMath::Abs(x)>9) {
3390 ycharm=TMath::Power(y,3);
3397 Int_t AliGenMUONlib::IpCharm(TRandom *ran)
3399 // Charm composition
3403 random = ran->Rndm();
3404 // Taux de production Carrer & Dainese : ALICE-INT-2003-019 v.3
3405 // >>>>> cf. tab 4 p 11
3407 if (random < 0.30) {
3409 } else if (random < 0.60) {
3411 } else if (random < 0.70) {
3413 } else if (random < 0.80) {
3415 } else if (random < 0.86) {
3417 } else if (random < 0.92) {
3419 } else if (random < 0.96) {
3433 //____________________________________________________________
3434 Double_t AliGenMUONlib::PtBeauty( const Double_t *px, const Double_t */*dummy*/)
3437 const Double_t kpt0 = 6.53;
3438 const Double_t kxn = 3.59;
3441 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3442 return x/TMath::Power(pass1,kxn);
3445 Double_t AliGenMUONlib::PtBeautyCentral( const Double_t *px, const Double_t */*dummy*/)
3448 const Double_t kpt0 = 6.14;
3449 const Double_t kxn = 2.93;
3452 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3453 return x/TMath::Power(pass1,kxn);
3455 Double_t AliGenMUONlib::PtBeautyF0M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3457 // FiMjSkPP define theoretical uncertainties around F0M0S0PP as follows:
3458 // PtBeautyFiMjSkPP = PtBeautyF0M0S0PP * (dN(i,j,k)/dpt / dN(0,0,0)/dpt)_MNR
3459 // i=0,1,2; j=0,1,2; k=0,1,...,6
3460 // dN(i,j,k)/dpt - spectra obtained by A.Dainese (hep-ph/0601164, p.88;
3461 // http://www-zeus.desy.de/~corradi/benchmarks) from NLO pQCD (MNR)
3462 // calculations for the following inputs:
3463 // Peterson fragmentation function (F) with \epsilon_b = 0.001, 0.0002 & 0.004
3464 // for i=0,1 & 2 respectively; quark mass (M) of 4.75, 4.5 & 5.0 GeV
3465 // for j=0,1 & 2 respectively;
3466 // factorisation \mu_F = a*mt and renormalisation \mu_R = b*mt scales (S)
3467 // with a/b = 1/1, 1/0.5, 0.5/1, 0.5/0.5, 1/2, 2/1 & 2/2 for
3468 // k = 0, 1, 2, 3, 4, 5 & 6 respectively; CTEQ6.1 PDF set
3469 // (PDF uncertainty not considered since is small, see hep-ph/0601164, p.89).
3470 // June 2008, Smbat.Grigoryan@cern.ch
3473 // Pythia6.214 (kBeautyppMNRwmi, PDF = CTEQ5L, quark mass = 4.75 GeV, PtHard > 2.76 GeV/c)
3474 // for pp collisions at 14 TeV with one b-bbar pair per event.
3475 // Corresponding NLO total cross section is 0.494 mb
3477 const Double_t kpt0 = 8.0575;
3478 const Double_t kxn = 3.1921;
3481 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3482 return x/TMath::Power(pass1,kxn);
3484 Double_t AliGenMUONlib::PtBeautyF1M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3487 // Corresponding NLO total cross section is 0.445 mb
3488 const Double_t kpt0 = 8.6239;
3489 const Double_t kxn = 3.2911;
3492 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3493 return x/TMath::Power(pass1,kxn);
3495 Double_t AliGenMUONlib::PtBeautyF2M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3498 // Corresponding NLO total cross section is 0.445 mb
3499 const Double_t kpt0 = 7.3367;
3500 const Double_t kxn = 3.0692;
3503 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3504 return x/TMath::Power(pass1,kxn);
3506 Double_t AliGenMUONlib::PtBeautyF0M1S0PP( const Double_t *px, const Double_t */*dummy*/)
3509 // Corresponding NLO total cross section is 0.518 mb
3510 const Double_t kpt0 = 7.6409;
3511 const Double_t kxn = 3.1364;
3514 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3515 return x/TMath::Power(pass1,kxn);
3517 Double_t AliGenMUONlib::PtBeautyF0M2S0PP( const Double_t *px, const Double_t */*dummy*/)
3520 // Corresponding NLO total cross section is 0.384 mb
3521 const Double_t kpt0 = 8.4948;
3522 const Double_t kxn = 3.2546;
3525 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3526 return x/TMath::Power(pass1,kxn);
3528 Double_t AliGenMUONlib::PtBeautyF0M0S1PP( const Double_t *px, const Double_t */*dummy*/)
3531 // Corresponding NLO total cross section is 0.648 mb
3532 const Double_t kpt0 = 7.6631;
3533 const Double_t kxn = 3.1621;
3536 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3537 return x/TMath::Power(pass1,kxn);
3539 Double_t AliGenMUONlib::PtBeautyF0M0S2PP( const Double_t *px, const Double_t */*dummy*/)
3542 // Corresponding NLO total cross section is 0.294 mb
3543 const Double_t kpt0 = 8.7245;
3544 const Double_t kxn = 3.2213;
3547 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3548 return x/TMath::Power(pass1,kxn);
3550 Double_t AliGenMUONlib::PtBeautyF0M0S3PP( const Double_t *px, const Double_t */*dummy*/)
3553 // Corresponding NLO total cross section is 0.475 mb
3554 const Double_t kpt0 = 8.5296;
3555 const Double_t kxn = 3.2187;
3558 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3559 return x/TMath::Power(pass1,kxn);
3561 Double_t AliGenMUONlib::PtBeautyF0M0S4PP( const Double_t *px, const Double_t */*dummy*/)
3564 // Corresponding NLO total cross section is 0.324 mb
3565 const Double_t kpt0 = 7.9440;
3566 const Double_t kxn = 3.1614;
3569 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3570 return x/TMath::Power(pass1,kxn);
3572 Double_t AliGenMUONlib::PtBeautyF0M0S5PP( const Double_t *px, const Double_t */*dummy*/)
3575 // Corresponding NLO total cross section is 0.536 mb
3576 const Double_t kpt0 = 8.2408;
3577 const Double_t kxn = 3.3029;
3580 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3581 return x/TMath::Power(pass1,kxn);
3583 Double_t AliGenMUONlib::PtBeautyF0M0S6PP( const Double_t *px, const Double_t */*dummy*/)
3586 // Corresponding NLO total cross section is 0.420 mb
3587 const Double_t kpt0 = 7.8041;
3588 const Double_t kxn = 3.2094;
3591 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3592 return x/TMath::Power(pass1,kxn);
3596 Double_t AliGenMUONlib::YBeauty( const Double_t *px, const Double_t */*dummy*/)
3598 // Beauty y :: Carrer & Dainese : ALICE-INT-2003-019 v.3 (hep-ph/0311225)
3599 // Pythia tuned to reproduce the distribution given by the HVQMNR program based on NLO calculations (pQCD)
3600 // shadowing + kt broadening
3603 Double_t c[2]={-1.27590e-02,-2.42731e-04};
3604 Double_t y=1+c[0]*TMath::Power(x,2)+c[1]*TMath::Power(x,4);
3607 if (TMath::Abs(x)>6) {
3611 ybeauty=TMath::Power(y,3);
3616 Double_t AliGenMUONlib::YBeautyF0M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3618 // FiMjSkPP define theoretical uncertainties around F0M0S0PP as follows:
3619 // YBeautyFiMjSkPP = YBeautyF0M0S0PP * (dN(i,j,k)/dy / dN(0,0,0)/dy)_MNR
3620 // i=0,1,2; j=0,1,2; k=0,1,...,6
3621 // dN(i,j,k)/dy - spectra obtained by A.Dainese (hep-ph/0601164, p.88;
3622 // http://www-zeus.desy.de/~corradi/benchmarks) from NLO pQCD (MNR)
3623 // calculations for the following inputs:
3624 // Peterson fragmentation function (F) with \epsilon_b = 0.001, 0.0002 & 0.004
3625 // for i=0,1 & 2 respectively; quark mass (M) of 4.75, 4.5 & 5.0 GeV
3626 // for j=0,1 & 2 respectively;
3627 // factorisation \mu_F = a*mt and renormalisation \mu_R = b*mt scales (S)
3628 // with a/b = 1/1, 1/0.5, 0.5/1, 0.5/0.5, 1/2, 2/1 & 2/2
3629 // for k = 0, 1, 2, 3, 4, 5 & 6 respectively; CTEQ6.1 PDF set
3630 // (PDF uncertainty not considered since is small, see hep-ph/0601164, p.89).
3631 // June 2008, Smbat.Grigoryan@cern.ch
3634 // Pythia6.214 (kBeautyppMNRwmi, PDF = CTEQ5L, quark mass = 4.75 GeV, PtHard > 2.76 GeV/c)
3635 // for pp collisions at 14 TeV with one b-bbar pair per event.
3636 // Corresponding NLO total cross section is 0.494 mb
3640 Double_t c[2]={1.2350e-02,9.2667e-05};
3641 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3644 if (TMath::Abs(x)>7.6) {
3648 ybeauty=TMath::Power(y,3);
3653 Double_t AliGenMUONlib::YBeautyF1M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3656 // Corresponding NLO total cross section is 0.445 mb
3658 Double_t c[2]={1.2292e-02,9.1847e-05};
3659 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3662 if (TMath::Abs(x)>7.6) {
3666 ybeauty=TMath::Power(y,3);
3671 Double_t AliGenMUONlib::YBeautyF2M0S0PP( const Double_t *px, const Double_t */*dummy*/)
3674 // Corresponding NLO total cross section is 0.445 mb
3676 Double_t c[2]={1.2436e-02,9.3709e-05};
3677 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3680 if (TMath::Abs(x)>7.6) {
3684 ybeauty=TMath::Power(y,3);
3689 Double_t AliGenMUONlib::YBeautyF0M1S0PP( const Double_t *px, const Double_t */*dummy*/)
3692 // Corresponding NLO total cross section is 0.518 mb
3694 Double_t c[2]={1.1714e-02,1.0068e-04};
3695 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3698 if (TMath::Abs(x)>7.6) {
3702 ybeauty=TMath::Power(y,3);
3707 Double_t AliGenMUONlib::YBeautyF0M2S0PP( const Double_t *px, const Double_t */*dummy*/)
3710 // Corresponding NLO total cross section is 0.384 mb
3712 Double_t c[2]={1.2944e-02,8.5500e-05};
3713 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3716 if (TMath::Abs(x)>7.6) {
3720 ybeauty=TMath::Power(y,3);
3725 Double_t AliGenMUONlib::YBeautyF0M0S1PP( const Double_t *px, const Double_t */*dummy*/)
3728 // Corresponding NLO total cross section is 0.648 mb
3730 Double_t c[2]={1.2455e-02,9.2713e-05};
3731 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3734 if (TMath::Abs(x)>7.6) {
3738 ybeauty=TMath::Power(y,3);
3743 Double_t AliGenMUONlib::YBeautyF0M0S2PP( const Double_t *px, const Double_t */*dummy*/)
3746 // Corresponding NLO total cross section is 0.294 mb
3748 Double_t c[2]={1.0897e-02,1.1878e-04};
3749 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3752 if (TMath::Abs(x)>7.6) {
3756 ybeauty=TMath::Power(y,3);
3761 Double_t AliGenMUONlib::YBeautyF0M0S3PP( const Double_t *px, const Double_t */*dummy*/)
3764 // Corresponding NLO total cross section is 0.475 mb
3766 Double_t c[2]={1.0912e-02,1.1858e-04};
3767 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3770 if (TMath::Abs(x)>7.6) {
3774 ybeauty=TMath::Power(y,3);
3779 Double_t AliGenMUONlib::YBeautyF0M0S4PP( const Double_t *px, const Double_t */*dummy*/)
3782 // Corresponding NLO total cross section is 0.324 mb
3784 Double_t c[2]={1.2378e-02,9.2490e-05};
3785 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3788 if (TMath::Abs(x)>7.6) {
3792 ybeauty=TMath::Power(y,3);
3797 Double_t AliGenMUONlib::YBeautyF0M0S5PP( const Double_t *px, const Double_t */*dummy*/)
3800 // Corresponding NLO total cross section is 0.536 mb
3802 Double_t c[2]={1.2886e-02,8.2912e-05};
3803 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3806 if (TMath::Abs(x)>7.6) {
3810 ybeauty=TMath::Power(y,3);
3815 Double_t AliGenMUONlib::YBeautyF0M0S6PP( const Double_t *px, const Double_t */*dummy*/)
3818 // Corresponding NLO total cross section is 0.420 mb
3820 Double_t c[2]={1.3106e-02,8.0115e-05};
3821 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3824 if (TMath::Abs(x)>7.6) {
3828 ybeauty=TMath::Power(y,3);
3834 Int_t AliGenMUONlib::IpBeauty(TRandom *ran)
3836 // Beauty Composition
3839 random = ran->Rndm();
3841 // Taux de production Carrer & Dainese : ALICE-INT-2003-019 v.3
3842 // >>>>> cf. tab 4 p 11
3844 if (random < 0.20) {
3846 } else if (random < 0.40) {
3848 } else if (random < 0.605) {
3850 } else if (random < 0.81) {
3852 } else if (random < 0.87) {
3854 } else if (random < 0.93) {
3856 } else if (random < 0.965) {
3866 typedef Double_t (*GenFunc) (const Double_t*, const Double_t*);
3867 GenFunc AliGenMUONlib::GetPt(Int_t param, const char* tname) const
3869 // Return pointer to pT parameterisation
3870 TString sname = TString(tname);
3888 if (sname == "Vogt" || sname == "Vogt PbPb") {
3890 } else if (sname == "Vogt pp") {
3892 } else if (sname == "pp 7") {
3894 } else if (sname == "pp 8") {
3896 } else if (sname == "pp 2.76") {
3898 } else if (sname == "pp 4.4") {
3900 } else if (sname == "pp 5.03") {
3902 } else if (sname == "pp 8.8") {
3904 } else if (sname == "pp 7 poly") {
3906 } else if (sname == "pp 2.76 poly") {
3908 } else if (sname == "PbPb 2.76") {
3909 func=PtJpsiPbPb2760;
3910 } else if (sname == "PbPb 2.76c1") {
3911 func=PtJpsiPbPb2760c1;
3912 } else if (sname == "PbPb 2.76c2") {
3913 func=PtJpsiPbPb2760c2;
3914 } else if (sname == "PbPb 2.76c3") {
3915 func=PtJpsiPbPb2760c3;
3916 } else if (sname == "PbPb 2.76c4") {
3917 func=PtJpsiPbPb2760c4;
3918 } else if (sname == "PbPb 2.76c5") {
3919 func=PtJpsiPbPb2760c5;
3920 } else if (sname == "PbPb 2.76c6") {
3921 func=PtJpsiPbPb2760c6;
3922 } else if (sname == "PbPb 2.76c7") {
3923 func=PtJpsiPbPb2760c7;
3924 } else if (sname == "PbPb 2.76c8") {
3925 func=PtJpsiPbPb2760c8;
3926 } else if (sname == "PbPb 2.76c9") {
3927 func=PtJpsiPbPb2760c9;
3928 } else if (sname == "PbPb 2.76c10") {
3929 func=PtJpsiPbPb2760c10;
3930 } else if (sname == "PbPb 2.76c11") {
3931 func=PtJpsiPbPb2760c11;
3932 } else if (sname == "pPb 5.03") {
3934 } else if (sname == "pPb 5.03c1") {
3935 func=PtJpsiPPb5030c1;
3936 } else if (sname == "pPb 5.03c2") {
3937 func=PtJpsiPPb5030c2;
3938 } else if (sname == "pPb 5.03c3") {
3939 func=PtJpsiPPb5030c3;
3940 } else if (sname == "pPb 5.03c4") {
3941 func=PtJpsiPPb5030c4;
3942 } else if (sname == "Pbp 5.03") {
3944 } else if (sname == "Pbp 5.03c1") {
3945 func=PtJpsiPbP5030c1;
3946 } else if (sname == "Pbp 5.03c2") {
3947 func=PtJpsiPbP5030c2;
3948 } else if (sname == "Pbp 5.03c3") {
3949 func=PtJpsiPbP5030c3;
3950 } else if (sname == "Pbp 5.03c4") {
3951 func=PtJpsiPbP5030c4;
3952 } else if (sname == "pPb 8.8") {
3954 } else if (sname == "pPb 8.8c1") {
3955 func=PtJpsiPPb8800c1;
3956 } else if (sname == "pPb 8.8c2") {
3957 func=PtJpsiPPb8800c2;
3958 } else if (sname == "pPb 8.8c3") {
3959 func=PtJpsiPPb8800c3;
3960 } else if (sname == "pPb 8.8c4") {
3961 func=PtJpsiPPb8800c4;
3962 } else if (sname == "Pbp 8.8") {
3964 } else if (sname == "Pbp 8.8c1") {
3965 func=PtJpsiPbP8800c1;
3966 } else if (sname == "Pbp 8.8c2") {
3967 func=PtJpsiPbP8800c2;
3968 } else if (sname == "Pbp 8.8c3") {
3969 func=PtJpsiPbP8800c3;
3970 } else if (sname == "Pbp 8.8c4") {
3971 func=PtJpsiPbP8800c4;
3972 } else if (sname == "CDF scaled") {
3973 func=PtJpsiCDFscaled;
3974 } else if (sname == "CDF pp") {
3975 func=PtJpsiCDFscaledPP;
3976 } else if (sname == "CDF pp 10") {
3977 func=PtJpsiCDFscaledPP10;
3978 } else if (sname == "CDF pp 8.8") {
3979 func=PtJpsiCDFscaledPP9;
3980 } else if (sname == "CDF pp 7" || sname == "CDF pp 7 flat y") {
3981 func=PtJpsiCDFscaledPP7;
3982 } else if (sname == "CDF pp 3.94") {
3983 func=PtJpsiCDFscaledPP4;
3984 } else if (sname == "CDF pp 2.76") {
3985 func=PtJpsiCDFscaledPP3;
3986 } else if (sname == "CDF pp 1.9") {
3987 func=PtJpsiCDFscaledPP2;
3988 } else if (sname == "CDF pPb 8.8") {
3989 func=PtJpsiCDFscaledPPb9;
3990 } else if (sname == "CDF Pbp 8.8") {
3991 func=PtJpsiCDFscaledPbP9;
3992 } else if (sname == "CDF PbPb 3.94") {
3993 func=PtJpsiCDFscaledPbPb4;
3994 } else if (sname == "Flat" || sname == "CDF pp 7 flat pt") {
4003 case kUpsilonFamily:
4007 if (sname == "Vogt" || sname == "Vogt PbPb") {
4009 } else if (sname == "Vogt pp") {
4011 } else if (sname == "pp 7") {
4012 func=PtUpsilonPP7000;
4013 } else if (sname == "pp 8") {
4014 func=PtUpsilonPP8000;
4015 } else if (sname == "pp 2.76") {
4016 func=PtUpsilonPP2760;
4017 } else if (sname == "pp 4.4") {
4018 func=PtUpsilonPP4400;
4019 } else if (sname == "pp 5.03") {
4020 func=PtUpsilonPP5030;
4021 } else if (sname == "pp 8.8") {
4022 func=PtUpsilonPP8800;
4023 } else if (sname == "pp 7 poly") {
4024 func=PtUpsilonPP7000;
4025 } else if (sname == "pp 2.76 poly") {
4026 func=PtUpsilonPP2760;
4027 } else if (sname == "PbPb 2.76") {
4028 func=PtUpsilonPbPb2760;
4029 } else if (sname == "PbPb 2.76c1") {
4030 func=PtUpsilonPbPb2760c1;
4031 } else if (sname == "PbPb 2.76c2") {
4032 func=PtUpsilonPbPb2760c2;
4033 } else if (sname == "PbPb 2.76c3") {
4034 func=PtUpsilonPbPb2760c3;
4035 } else if (sname == "PbPb 2.76c4") {
4036 func=PtUpsilonPbPb2760c4;
4037 } else if (sname == "PbPb 2.76c5") {
4038 func=PtUpsilonPbPb2760c5;
4039 } else if (sname == "PbPb 2.76c6") {
4040 func=PtUpsilonPbPb2760c6;
4041 } else if (sname == "PbPb 2.76c7") {
4042 func=PtUpsilonPbPb2760c7;
4043 } else if (sname == "PbPb 2.76c8") {
4044 func=PtUpsilonPbPb2760c8;
4045 } else if (sname == "PbPb 2.76c9") {
4046 func=PtUpsilonPbPb2760c9;
4047 } else if (sname == "PbPb 2.76c10") {
4048 func=PtUpsilonPbPb2760c10;
4049 } else if (sname == "PbPb 2.76c11") {
4050 func=PtUpsilonPbPb2760c11;
4051 } else if (sname == "pPb 5.03") {
4052 func=PtUpsilonPPb5030;
4053 } else if (sname == "pPb 5.03c1") {
4054 func=PtUpsilonPPb5030c1;
4055 } else if (sname == "pPb 5.03c2") {
4056 func=PtUpsilonPPb5030c2;
4057 } else if (sname == "pPb 5.03c3") {
4058 func=PtUpsilonPPb5030c3;
4059 } else if (sname == "pPb 5.03c4") {
4060 func=PtUpsilonPPb5030c4;
4061 } else if (sname == "Pbp 5.03") {
4062 func=PtUpsilonPbP5030;
4063 } else if (sname == "Pbp 5.03c1") {
4064 func=PtUpsilonPbP5030c1;
4065 } else if (sname == "Pbp 5.03c2") {
4066 func=PtUpsilonPbP5030c2;
4067 } else if (sname == "Pbp 5.03c3") {
4068 func=PtUpsilonPbP5030c3;
4069 } else if (sname == "Pbp 5.03c4") {
4070 func=PtUpsilonPbP5030c4;
4071 } else if (sname == "pPb 8.8") {
4072 func=PtUpsilonPPb8800;
4073 } else if (sname == "pPb 8.8c1") {
4074 func=PtUpsilonPPb8800c1;
4075 } else if (sname == "pPb 8.8c2") {
4076 func=PtUpsilonPPb8800c2;
4077 } else if (sname == "pPb 8.8c3") {
4078 func=PtUpsilonPPb8800c3;
4079 } else if (sname == "pPb 8.8c4") {
4080 func=PtUpsilonPPb8800c4;
4081 } else if (sname == "Pbp 8.8") {
4082 func=PtUpsilonPbP8800;
4083 } else if (sname == "Pbp 8.8c1") {
4084 func=PtUpsilonPbP8800c1;
4085 } else if (sname == "Pbp 8.8c2") {
4086 func=PtUpsilonPbP8800c2;
4087 } else if (sname == "Pbp 8.8c3") {
4088 func=PtUpsilonPbP8800c3;
4089 } else if (sname == "Pbp 8.8c4") {
4090 func=PtUpsilonPbP8800c4;
4091 } else if (sname == "CDF scaled") {
4092 func=PtUpsilonCDFscaled;
4093 } else if (sname == "CDF pp") {
4094 func=PtUpsilonCDFscaledPP;
4095 } else if (sname == "CDF pp 10") {
4096 func=PtUpsilonCDFscaledPP10;
4097 } else if (sname == "CDF pp 8.8") {
4098 func=PtUpsilonCDFscaledPP9;
4099 } else if (sname == "CDF pp 7") {
4100 func=PtUpsilonCDFscaledPP7;
4101 } else if (sname == "CDF pp 3.94") {
4102 func=PtUpsilonCDFscaledPP4;
4103 } else if (sname == "CDF pPb 8.8") {
4104 func=PtUpsilonCDFscaledPPb9;
4105 } else if (sname == "CDF Pbp 8.8") {
4106 func=PtUpsilonCDFscaledPbP9;
4107 } else if (sname == "CDF PbPb 3.94") {
4108 func=PtUpsilonCDFscaledPbPb4;
4109 } else if (sname == "Flat") {
4116 if (sname == "F0M0S0 pp") {
4117 func=PtCharmF0M0S0PP;
4118 } else if (sname == "F1M0S0 pp") {
4119 func=PtCharmF1M0S0PP;
4120 } else if (sname == "F2M0S0 pp") {
4121 func=PtCharmF2M0S0PP;
4122 } else if (sname == "F0M1S0 pp") {
4123 func=PtCharmF0M1S0PP;
4124 } else if (sname == "F0M2S0 pp") {
4125 func=PtCharmF0M2S0PP;
4126 } else if (sname == "F0M0S1 pp") {
4127 func=PtCharmF0M0S1PP;
4128 } else if (sname == "F0M0S2 pp") {
4129 func=PtCharmF0M0S2PP;
4130 } else if (sname == "F0M0S3 pp") {
4131 func=PtCharmF0M0S3PP;
4132 } else if (sname == "F0M0S4 pp") {
4133 func=PtCharmF0M0S4PP;
4134 } else if (sname == "F0M0S5 pp") {
4135 func=PtCharmF0M0S5PP;
4136 } else if (sname == "F0M0S6 pp") {
4137 func=PtCharmF0M0S6PP;
4138 } else if (sname == "central") {
4139 func=PtCharmCentral;
4145 if (sname == "F0M0S0 pp") {
4146 func=PtBeautyF0M0S0PP;
4147 } else if (sname == "F1M0S0 pp") {
4148 func=PtBeautyF1M0S0PP;
4149 } else if (sname == "F2M0S0 pp") {
4150 func=PtBeautyF2M0S0PP;
4151 } else if (sname == "F0M1S0 pp") {
4152 func=PtBeautyF0M1S0PP;
4153 } else if (sname == "F0M2S0 pp") {
4154 func=PtBeautyF0M2S0PP;
4155 } else if (sname == "F0M0S1 pp") {
4156 func=PtBeautyF0M0S1PP;
4157 } else if (sname == "F0M0S2 pp") {
4158 func=PtBeautyF0M0S2PP;
4159 } else if (sname == "F0M0S3 pp") {
4160 func=PtBeautyF0M0S3PP;
4161 } else if (sname == "F0M0S4 pp") {
4162 func=PtBeautyF0M0S4PP;
4163 } else if (sname == "F0M0S5 pp") {
4164 func=PtBeautyF0M0S5PP;
4165 } else if (sname == "F0M0S6 pp") {
4166 func=PtBeautyF0M0S6PP;
4167 } else if (sname == "central") {
4168 func=PtBeautyCentral;
4174 if (sname == "2010 Pos PP") {
4175 func=PtPionPos2010PP;
4176 } else if (sname == "2010 Neg PP") {
4177 func=PtPionNeg2010PP;
4183 if (sname == "2010 Pos PP") {
4184 func=PtKaonPos2010PP;
4185 } else if (sname == "2010 Neg PP") {
4186 func=PtKaonNeg2010PP;
4199 printf("<AliGenMUONlib::GetPt> unknown parametrisation\n");
4204 GenFunc AliGenMUONlib::GetY(Int_t param, const char* tname) const
4207 // Return pointer to y- parameterisation
4209 TString sname = TString(tname);
4227 if (sname == "Vogt" || sname == "Vogt PbPb") {
4229 } else if (sname == "Vogt pp"){
4231 } else if (sname == "pp 7") {
4233 } else if (sname == "pp 8") {
4235 } else if (sname == "pp 2.76") {
4237 } else if (sname == "pp 4.4") {
4239 } else if (sname == "pp 5.03") {
4241 } else if (sname == "pp 8.8") {
4243 } else if (sname == "pp 7 poly") {
4244 func=YJpsiPPpoly7000;
4245 } else if (sname == "pp 2.76 poly") {
4246 func=YJpsiPPpoly2760;
4247 } else if (sname == "PbPb 2.76") {
4249 } else if (sname == "PbPb 2.76c1") {
4250 func=YJpsiPbPb2760c1;
4251 } else if (sname == "PbPb 2.76c2") {
4252 func=YJpsiPbPb2760c2;
4253 } else if (sname == "PbPb 2.76c3") {
4254 func=YJpsiPbPb2760c3;
4255 } else if (sname == "PbPb 2.76c4") {
4256 func=YJpsiPbPb2760c4;
4257 } else if (sname == "PbPb 2.76c5") {
4258 func=YJpsiPbPb2760c5;
4259 } else if (sname == "PbPb 2.76c6") {
4260 func=YJpsiPbPb2760c6;
4261 } else if (sname == "PbPb 2.76c7") {
4262 func=YJpsiPbPb2760c7;
4263 } else if (sname == "PbPb 2.76c8") {
4264 func=YJpsiPbPb2760c8;
4265 } else if (sname == "PbPb 2.76c9") {
4266 func=YJpsiPbPb2760c9;
4267 } else if (sname == "PbPb 2.76c10") {
4268 func=YJpsiPbPb2760c10;
4269 } else if (sname == "PbPb 2.76c11") {
4270 func=YJpsiPbPb2760c11;
4271 } else if (sname == "pPb 5.03") {
4273 } else if (sname == "pPb 5.03c1") {
4274 func=YJpsiPPb5030c1;
4275 } else if (sname == "pPb 5.03c2") {
4276 func=YJpsiPPb5030c2;
4277 } else if (sname == "pPb 5.03c3") {
4278 func=YJpsiPPb5030c3;
4279 } else if (sname == "pPb 5.03c4") {
4280 func=YJpsiPPb5030c4;
4281 } else if (sname == "Pbp 5.03") {
4283 } else if (sname == "Pbp 5.03c1") {
4284 func=YJpsiPbP5030c1;
4285 } else if (sname == "Pbp 5.03c2") {
4286 func=YJpsiPbP5030c2;
4287 } else if (sname == "Pbp 5.03c3") {
4288 func=YJpsiPbP5030c3;
4289 } else if (sname == "Pbp 5.03c4") {
4290 func=YJpsiPbP5030c4;
4291 } else if (sname == "pPb 8.8") {
4293 } else if (sname == "pPb 8.8c1") {
4294 func=YJpsiPPb8800c1;
4295 } else if (sname == "pPb 8.8c2") {
4296 func=YJpsiPPb8800c2;
4297 } else if (sname == "pPb 8.8c3") {
4298 func=YJpsiPPb8800c3;
4299 } else if (sname == "pPb 8.8c4") {
4300 func=YJpsiPPb8800c4;
4301 } else if (sname == "Pbp 8.8") {
4303 } else if (sname == "Pbp 8.8c1") {
4304 func=YJpsiPbP8800c1;
4305 } else if (sname == "Pbp 8.8c2") {
4306 func=YJpsiPbP8800c2;
4307 } else if (sname == "Pbp 8.8c3") {
4308 func=YJpsiPbP8800c3;
4309 } else if (sname == "Pbp 8.8c4") {
4310 func=YJpsiPbP8800c4;
4311 } else if (sname == "CDF scaled") {
4312 func=YJpsiCDFscaled;
4313 } else if (sname == "CDF pp") {
4314 func=YJpsiCDFscaledPP;
4315 } else if (sname == "CDF pp 10") {
4316 func=YJpsiCDFscaledPP10;
4317 } else if (sname == "CDF pp 8.8") {
4318 func=YJpsiCDFscaledPP9;
4319 } else if (sname == "CDF pp 7" || sname == "CDF pp 7 flat pt") {
4320 func=YJpsiCDFscaledPP7;
4321 } else if (sname == "CDF pp 3.94") {
4322 func=YJpsiCDFscaledPP4;
4323 } else if (sname == "CDF pp 2.76") {
4324 func=YJpsiCDFscaledPP3;
4325 } else if (sname == "CDF pp 1.9") {
4326 func=YJpsiCDFscaledPP2;
4327 } else if (sname == "CDF pPb 8.8") {
4328 func=YJpsiCDFscaledPPb9;
4329 } else if (sname == "CDF Pbp 8.8") {
4330 func=YJpsiCDFscaledPbP9;
4331 } else if (sname == "CDF PbPb 3.94") {
4332 func=YJpsiCDFscaledPbPb4;
4333 } else if (sname == "Flat" || sname == "CDF pp 7 flat y") {
4342 case kUpsilonFamily:
4346 if (sname == "Vogt" || sname == "Vogt PbPb") {
4348 } else if (sname == "Vogt pp") {
4350 } else if (sname == "pp 7") {
4351 func=YUpsilonPP7000;
4352 } else if (sname == "pp 8") {
4353 func=YUpsilonPP8000;
4354 } else if (sname == "pp 2.76") {
4355 func=YUpsilonPP2760;
4356 } else if (sname == "pp 4.4") {
4357 func=YUpsilonPP4400;
4358 } else if (sname == "pp 5.03") {
4359 func=YUpsilonPP5030;
4360 } else if (sname == "pp 8.8") {
4361 func=YUpsilonPP8800;
4362 } else if (sname == "pp 7 poly") {
4363 func=YUpsilonPPpoly7000;
4364 } else if (sname == "pp 2.76 poly") {
4365 func=YUpsilonPPpoly2760;
4366 } else if (sname == "PbPb 2.76") {
4367 func=YUpsilonPbPb2760;
4368 } else if (sname == "PbPb 2.76c1") {
4369 func=YUpsilonPbPb2760c1;
4370 } else if (sname == "PbPb 2.76c2") {
4371 func=YUpsilonPbPb2760c2;
4372 } else if (sname == "PbPb 2.76c3") {
4373 func=YUpsilonPbPb2760c3;
4374 } else if (sname == "PbPb 2.76c4") {
4375 func=YUpsilonPbPb2760c4;
4376 } else if (sname == "PbPb 2.76c5") {
4377 func=YUpsilonPbPb2760c5;
4378 } else if (sname == "PbPb 2.76c6") {
4379 func=YUpsilonPbPb2760c6;
4380 } else if (sname == "PbPb 2.76c7") {
4381 func=YUpsilonPbPb2760c7;
4382 } else if (sname == "PbPb 2.76c8") {
4383 func=YUpsilonPbPb2760c8;
4384 } else if (sname == "PbPb 2.76c9") {
4385 func=YUpsilonPbPb2760c9;
4386 } else if (sname == "PbPb 2.76c10") {
4387 func=YUpsilonPbPb2760c10;
4388 } else if (sname == "PbPb 2.76c11") {
4389 func=YUpsilonPbPb2760c11;
4390 } else if (sname == "pPb 5.03") {
4391 func=YUpsilonPPb5030;
4392 } else if (sname == "pPb 5.03c1") {
4393 func=YUpsilonPPb5030c1;
4394 } else if (sname == "pPb 5.03c2") {
4395 func=YUpsilonPPb5030c2;
4396 } else if (sname == "pPb 5.03c3") {
4397 func=YUpsilonPPb5030c3;
4398 } else if (sname == "pPb 5.03c4") {
4399 func=YUpsilonPPb5030c4;
4400 } else if (sname == "Pbp 5.03") {
4401 func=YUpsilonPbP5030;
4402 } else if (sname == "Pbp 5.03c1") {
4403 func=YUpsilonPbP5030c1;
4404 } else if (sname == "Pbp 5.03c2") {
4405 func=YUpsilonPbP5030c2;
4406 } else if (sname == "Pbp 5.03c3") {
4407 func=YUpsilonPbP5030c3;
4408 } else if (sname == "Pbp 5.03c4") {
4409 func=YUpsilonPbP5030c4;
4410 } else if (sname == "pPb 8.8") {
4411 func=YUpsilonPPb8800;
4412 } else if (sname == "pPb 8.8c1") {
4413 func=YUpsilonPPb8800c1;
4414 } else if (sname == "pPb 8.8c2") {
4415 func=YUpsilonPPb8800c2;
4416 } else if (sname == "pPb 8.8c3") {
4417 func=YUpsilonPPb8800c3;
4418 } else if (sname == "pPb 8.8c4") {
4419 func=YUpsilonPPb8800c4;
4420 } else if (sname == "Pbp 8.8") {
4421 func=YUpsilonPbP8800;
4422 } else if (sname == "Pbp 8.8c1") {
4423 func=YUpsilonPbP8800c1;
4424 } else if (sname == "Pbp 8.8c2") {
4425 func=YUpsilonPbP8800c2;
4426 } else if (sname == "Pbp 8.8c3") {
4427 func=YUpsilonPbP8800c3;
4428 } else if (sname == "Pbp 8.8c4") {
4429 func=YUpsilonPbP8800c4;
4430 } else if (sname == "CDF scaled") {
4431 func=YUpsilonCDFscaled;
4432 } else if (sname == "CDF pp") {
4433 func=YUpsilonCDFscaledPP;
4434 } else if (sname == "CDF pp 10") {
4435 func=YUpsilonCDFscaledPP10;
4436 } else if (sname == "CDF pp 8.8") {
4437 func=YUpsilonCDFscaledPP9;
4438 } else if (sname == "CDF pp 7") {
4439 func=YUpsilonCDFscaledPP7;
4440 } else if (sname == "CDF pp 3.94") {
4441 func=YUpsilonCDFscaledPP4;
4442 } else if (sname == "CDF pPb 8.8") {
4443 func=YUpsilonCDFscaledPPb9;
4444 } else if (sname == "CDF Pbp 8.8") {
4445 func=YUpsilonCDFscaledPbP9;
4446 } else if (sname == "CDF PbPb 3.94") {
4447 func=YUpsilonCDFscaledPbPb4;
4448 } else if (sname == "Flat") {
4455 if (sname == "F0M0S0 pp") {
4456 func=YCharmF0M0S0PP;
4457 } else if (sname == "F1M0S0 pp") {
4458 func=YCharmF1M0S0PP;
4459 } else if (sname == "F2M0S0 pp") {
4460 func=YCharmF2M0S0PP;
4461 } else if (sname == "F0M1S0 pp") {
4462 func=YCharmF0M1S0PP;
4463 } else if (sname == "F0M2S0 pp") {
4464 func=YCharmF0M2S0PP;
4465 } else if (sname == "F0M0S1 pp") {
4466 func=YCharmF0M0S1PP;
4467 } else if (sname == "F0M0S2 pp") {
4468 func=YCharmF0M0S2PP;
4469 } else if (sname == "F0M0S3 pp") {
4470 func=YCharmF0M0S3PP;
4471 } else if (sname == "F0M0S4 pp") {
4472 func=YCharmF0M0S4PP;
4473 } else if (sname == "F0M0S5 pp") {
4474 func=YCharmF0M0S5PP;
4475 } else if (sname == "F0M0S6 pp") {
4476 func=YCharmF0M0S6PP;
4482 if (sname == "F0M0S0 pp") {
4483 func=YBeautyF0M0S0PP;
4484 } else if (sname == "F1M0S0 pp") {
4485 func=YBeautyF1M0S0PP;
4486 } else if (sname == "F2M0S0 pp") {
4487 func=YBeautyF2M0S0PP;
4488 } else if (sname == "F0M1S0 pp") {
4489 func=YBeautyF0M1S0PP;
4490 } else if (sname == "F0M2S0 pp") {
4491 func=YBeautyF0M2S0PP;
4492 } else if (sname == "F0M0S1 pp") {
4493 func=YBeautyF0M0S1PP;
4494 } else if (sname == "F0M0S2 pp") {
4495 func=YBeautyF0M0S2PP;
4496 } else if (sname == "F0M0S3 pp") {
4497 func=YBeautyF0M0S3PP;
4498 } else if (sname == "F0M0S4 pp") {
4499 func=YBeautyF0M0S4PP;
4500 } else if (sname == "F0M0S5 pp") {
4501 func=YBeautyF0M0S5PP;
4502 } else if (sname == "F0M0S6 pp") {
4503 func=YBeautyF0M0S6PP;
4509 if (sname == "2010 Pos PP") {
4510 func=YKaonPion2010PP;
4511 } else if (sname == "2010 Neg PP") {
4512 func=YKaonPion2010PP;
4518 if (sname == "2010 Pos PP") {
4519 func=YKaonPion2010PP;
4520 } else if (sname == "2010 Neg PP") {
4521 func=YKaonPion2010PP;
4534 printf("<AliGenMUONlib::GetY> unknown parametrisation\n");
4544 //____________________________________________________________
4545 Double_t AliGenMUONlib::PtChic0( const Double_t *px, const Double_t */*dummy*/)
4548 const Double_t kpt0 = 4.;
4549 const Double_t kxn = 3.6;
4552 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
4553 return x/TMath::Power(pass1,kxn);
4555 Double_t AliGenMUONlib::PtChic1( const Double_t *px, const Double_t */*dummy*/)
4558 const Double_t kpt0 = 4.;
4559 const Double_t kxn = 3.6;
4562 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
4563 return x/TMath::Power(pass1,kxn);
4565 Double_t AliGenMUONlib::PtChic2( const Double_t *px, const Double_t */*dummy*/)
4568 const Double_t kpt0 = 4.;
4569 const Double_t kxn = 3.6;
4572 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
4573 return x/TMath::Power(pass1,kxn);
4575 Double_t AliGenMUONlib::PtChic( const Double_t *px, const Double_t */*dummy*/)
4578 const Double_t kpt0 = 4.;
4579 const Double_t kxn = 3.6;
4582 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
4583 return x/TMath::Power(pass1,kxn);
4588 //____________________________________________________________
4589 Double_t AliGenMUONlib::YChic0(const Double_t *py, const Double_t */*dummy*/)
4592 const Double_t ky0 = 4.;
4593 const Double_t kb=1.;
4595 Double_t y=TMath::Abs(*py);
4600 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
4604 Double_t AliGenMUONlib::YChic1(const Double_t *py, const Double_t */*dummy*/)
4607 const Double_t ky0 = 4.;
4608 const Double_t kb=1.;
4610 Double_t y=TMath::Abs(*py);
4615 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
4619 Double_t AliGenMUONlib::YChic2(const Double_t *py, const Double_t */*dummy*/)
4622 const Double_t ky0 = 4.;
4623 const Double_t kb=1.;
4625 Double_t y=TMath::Abs(*py);
4630 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
4634 Double_t AliGenMUONlib::YChic(const Double_t *py, const Double_t */*dummy*/)
4637 const Double_t ky0 = 4.;
4638 const Double_t kb=1.;
4640 Double_t y=TMath::Abs(*py);
4645 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
4649 // particle composition
4651 Int_t AliGenMUONlib::IpChic0(TRandom *)
4657 Int_t AliGenMUONlib::IpChic1(TRandom *)
4662 Int_t AliGenMUONlib::IpChic2(TRandom *)
4664 // Chi_c2 prime composition
4667 Int_t AliGenMUONlib::IpChic(TRandom *)
4671 Float_t r = gRandom->Rndm();
4674 } else if( r < 0.377 ) {
4683 //_____________________________________________________________
4685 typedef Int_t (*GenFuncIp) (TRandom *);
4686 GenFuncIp AliGenMUONlib::GetIp(Int_t param, const char* tname) const
4688 // Return pointer to particle type parameterisation
4689 TString sname = TString(tname);
4715 case kUpsilonFamily:
4716 func=IpUpsilonFamily;
4731 if (sname == "2010 Pos PP") {
4733 } else if (sname == "2010 Neg PP") {
4740 if (sname == "2010 Pos PP") {
4742 } else if (sname == "2010 Neg PP") {
4762 printf("<AliGenMUONlib::GetIp> unknown parametrisation\n");
4769 Float_t AliGenMUONlib::Interpolate(Float_t x, Float_t* y, Float_t x0,
4774 // Neville's alorithm for interpolation
4780 // n: number of data points
4781 // no: order of polynom
4783 Float_t* c = new Float_t[n];
4784 Float_t* d = new Float_t[n];
4786 for (i = 0; i < n; i++) {
4791 Int_t ns = int((x - x0)/dx);
4795 for (m = 0; m < no; m++) {
4796 for (i = 0; i < n-m; i++) {
4797 Float_t ho = x0 + Float_t(i) * dx - x;
4798 Float_t hp = x0 + Float_t(i+m+1) * dx - x;
4799 Float_t w = c[i+1] - d[i];
4800 Float_t den = ho-hp;
4807 if (2*ns < (n-m-1)) {
4819 //=============================================================================
4820 Double_t AliGenMUONlib::PtPionPos2010PP(const Double_t *px, const Double_t* /*dummy*/)
4823 const Double_t par[3] = {2.27501, 0.116141, 5.59591};
4824 Double_t pt = px[0];
4825 Double_t m0 = TDatabasePDG::Instance()->GetParticle(211)->Mass();
4826 Double_t mt = TMath::Sqrt(m0*m0 + pt*pt);
4827 Double_t nc = par[1]*par[2];
4828 Double_t t1 = (par[2]-1.)/nc/(nc/(par[2]-2.)+m0);
4829 Double_t t2 = TMath::Power(1.+(mt-m0)/nc, -1.*par[2]);
4830 Double_t fn = par[0] * pt * t1 * t2;
4834 //=============================================================================
4835 Double_t AliGenMUONlib::PtPionNeg2010PP(const Double_t *px, const Double_t* /*dummy*/)
4838 const Double_t par[3] = {2.25188, 0.12176, 5.91166};
4839 Double_t pt = px[0];
4840 Double_t m0 = TDatabasePDG::Instance()->GetParticle(211)->Mass();
4841 Double_t mt = TMath::Sqrt(m0*m0 + pt*pt);
4842 Double_t nc = par[1]*par[2];
4843 Double_t t1 = (par[2]-1.)/nc/(nc/(par[2]-2.)+m0);
4844 Double_t t2 = TMath::Power(1.+(mt-m0)/nc, -1.*par[2]);
4845 Double_t fn = par[0] * pt * t1 * t2;
4849 //=============================================================================
4850 Double_t AliGenMUONlib::PtKaonPos2010PP(const Double_t *px, const Double_t* /*dummy*/)
4853 const Double_t par[3] = {0.279386, 0.195466, 6.59587};
4854 Double_t pt = px[0];
4855 Double_t m0 = TDatabasePDG::Instance()->GetParticle(321)->Mass();
4856 Double_t mt = TMath::Sqrt(m0*m0 + pt*pt);
4857 Double_t nc = par[1]*par[2];
4858 Double_t t1 = (par[2]-1.)/nc/(nc/(par[2]-2.)+m0);
4859 Double_t t2 = TMath::Power(1.+(mt-m0)/nc, -1.*par[2]);
4860 Double_t fn = par[0] * pt * t1 * t2;
4864 //=============================================================================
4865 Double_t AliGenMUONlib::PtKaonNeg2010PP(const Double_t *px, const Double_t* /*dummy*/)
4868 const Double_t par[3] = {0.278927, 0.189049, 6.43006};
4869 Double_t pt = px[0];
4870 Double_t m0 = TDatabasePDG::Instance()->GetParticle(321)->Mass();
4871 Double_t mt = TMath::Sqrt(m0*m0 + pt*pt);
4872 Double_t nc = par[1]*par[2];
4873 Double_t t1 = (par[2]-1.)/nc/(nc/(par[2]-2.)+m0);
4874 Double_t t2 = TMath::Power(1.+(mt-m0)/nc, -1.*par[2]);
4875 Double_t fn = par[0] * pt * t1 * t2;
4879 //=============================================================================
4880 Double_t AliGenMUONlib::YKaonPion2010PP(const Double_t *px, const Double_t* /*dummy*/)
4884 Double_t sigma = 2.35;
4885 Double_t kernal = y/2./sigma;
4886 Double_t fxn = TMath::Exp(-1.*kernal*kernal);
4890 //=============================================================================
4891 Int_t AliGenMUONlib::IpPionPos(TRandom *)
4897 //=============================================================================
4898 Int_t AliGenMUONlib::IpPionNeg(TRandom *)
4904 //=============================================================================
4905 Int_t AliGenMUONlib::IpKaonPos(TRandom *)
4911 //=============================================================================
4912 Int_t AliGenMUONlib::IpKaonNeg(TRandom *)