]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVGEN/AliGenMUONlib.cxx
Change the pt spectrum shape of the Lc
[u/mrichter/AliRoot.git] / EVGEN / AliGenMUONlib.cxx
CommitLineData
4c039060 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
88cb7938 16/* $Id$ */
4c039060 17
53904666 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.
23//
24// andreas.morsch@cern.ch
25//
26
65fb704d 27#include "TMath.h"
28#include "TRandom.h"
f9a1ce31 29#include "TDatabasePDG.h"
65fb704d 30
fe4da5cc 31#include "AliGenMUONlib.h"
5c3fd7ea 32
fe4da5cc 33ClassImp(AliGenMUONlib)
34//
35// Pions
75e0cc59 36Double_t AliGenMUONlib::PtPion(const Double_t *px, const Double_t* /*dummy*/)
fe4da5cc 37{
38//
39// PT-PARAMETERIZATION CDF, PRL 61(88) 1819
40// POWER LAW FOR PT > 500 MEV
41// MT SCALING BELOW (T=160 MEV)
42//
d90f80fd 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;
48 const Double_t kb=1.;
fe4da5cc 49 Double_t y, y1, xmpi2, ynorm, a;
50 Double_t x=*px;
51 //
d90f80fd 52 y1=TMath::Power(kp0/(kp0+kxlim),kxn);
53 xmpi2=kxmpi*kxmpi;
54 ynorm=kb*(TMath::Exp(-sqrt(kxlim*kxlim+xmpi2)/kt));
fe4da5cc 55 a=ynorm/y1;
d90f80fd 56 if (x > kxlim)
57 y=a*TMath::Power(kp0/(kp0+x),kxn);
fe4da5cc 58 else
d90f80fd 59 y=kb*TMath::Exp(-sqrt(x*x+xmpi2)/kt);
fe4da5cc 60 return y*x;
61}
753690b0 62//
63// y-distribution
64//
75e0cc59 65Double_t AliGenMUONlib::YPion( const Double_t *py, const Double_t */*dummy*/)
753690b0 66{
d90f80fd 67// Pion y
2280e6af 68 Double_t y=TMath::Abs(*py);
69/*
d90f80fd 70 const Double_t ka = 7000.;
71 const Double_t kdy = 4.;
d90f80fd 72 Double_t ex = y*y/(2*kdy*kdy);
73 return ka*TMath::Exp(-ex);
2280e6af 74*/
75 return 1.16526e+04+y*-3.79886e+03+y*y*4.31130e+02;
76
753690b0 77}
78// particle composition
79//
65fb704d 80Int_t AliGenMUONlib::IpPion(TRandom *ran)
753690b0 81{
d90f80fd 82// Pion composition
65fb704d 83 if (ran->Rndm() < 0.5) {
753690b0 84 return 211;
85 } else {
86 return -211;
87 }
88}
fe4da5cc 89
90//____________________________________________________________
91//
92// Mt-scaling
93
94Double_t AliGenMUONlib::PtScal(Double_t pt, Int_t np)
95{
96 // SCALING EN MASSE PAR RAPPORT A PTPI
97 // MASS PI,K,ETA,RHO,OMEGA,ETA',PHI
d90f80fd 98 const Double_t khm[10] = {.13957,.493,.5488,.769,.7826,.958,1.02,0,0,0};
fe4da5cc 99 // VALUE MESON/PI AT 5 GEV
d90f80fd 100 const Double_t kfmax[10]={1.,0.3,0.55,1.0,1.0,1.0,1.0,0,0,0};
a4f206bf 101 np--;
d90f80fd 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];
fe4da5cc 104 // PIONS
105 Double_t ptpion=100.*PtPion(&pt, (Double_t*) 0);
106 Double_t fmtscal=TMath::Power(((sqrt(pt*pt+0.018215)+2.)/
d90f80fd 107 (sqrt(pt*pt+khm[np]*khm[np])+2.0)),12.3)/ fmax2;
fe4da5cc 108 return fmtscal*ptpion;
109}
110//
753690b0 111// kaon
112//
113// pt-distribution
114//____________________________________________________________
75e0cc59 115Double_t AliGenMUONlib::PtKaon( const Double_t *px, const Double_t */*dummy*/)
753690b0 116{
d90f80fd 117// Kaon pT
a4f206bf 118 return PtScal(*px,2);
753690b0 119}
120
121// y-distribution
fe4da5cc 122//____________________________________________________________
75e0cc59 123Double_t AliGenMUONlib::YKaon( const Double_t *py, const Double_t */*dummy*/)
fe4da5cc 124{
d90f80fd 125// Kaon y
2280e6af 126 Double_t y=TMath::Abs(*py);
127/*
d90f80fd 128 const Double_t ka = 1000.;
129 const Double_t kdy = 4.;
fe4da5cc 130 //
d90f80fd 131 Double_t ex = y*y/(2*kdy*kdy);
132 return ka*TMath::Exp(-ex);
2280e6af 133*/
134
135 return 1.16526e+04+y*-3.79886e+03+y*y*4.31130e+02;
753690b0 136}
137
138// particle composition
139//
65fb704d 140Int_t AliGenMUONlib::IpKaon(TRandom *ran)
753690b0 141{
d90f80fd 142// Kaon composition
65fb704d 143 if (ran->Rndm() < 0.5) {
753690b0 144 return 321;
145 } else {
146 return -321;
147 }
fe4da5cc 148}
753690b0 149
fe4da5cc 150// J/Psi
151//
152//
153// pt-distribution
154//____________________________________________________________
7455632e 155Double_t AliGenMUONlib::PtJpsiPPdummy(Double_t x, Double_t energy)
a4f206bf 156{
157// J/Psi pT
7455632e 158// pp
159// from the fit of RHIC, CDF & LHC data, see arXiv:1103.2394
a4f206bf 160//
7455632e 161 const Double_t kpt0 = 1.04*TMath::Power(energy,0.101);
a4f206bf 162 const Double_t kxn = 3.9;
a4f206bf 163 //
7455632e 164 Double_t pass1 = 1.+0.363*(x/kpt0)*(x/kpt0);
a4f206bf 165 return x/TMath::Power(pass1,kxn);
166}
167
7455632e 168Double_t AliGenMUONlib::PtJpsiPP7000(const Double_t *px, const Double_t */*dummy*/)
a4f206bf 169{
170// J/Psi pT
7455632e 171// pp 7 TeV
a4f206bf 172//
7455632e 173 return PtJpsiPPdummy(*px,7000);
174}
175
755104c5 176Double_t AliGenMUONlib::PtJpsiPP8000(const Double_t *px, const Double_t */*dummy*/)
177{
178// J/Psi pT
179// pp 7 TeV
180//
181 return PtJpsiPPdummy(*px,8000);
182}
183
7455632e 184Double_t AliGenMUONlib::PtJpsiPP2760(const Double_t *px, const Double_t */*dummy*/)
185{
186// J/Psi pT
a4f206bf 187// pp 2.76 TeV
7455632e 188//
189 return PtJpsiPPdummy(*px,2760);
190}
a4f206bf 191
4bac9bd3 192Double_t AliGenMUONlib::PtJpsiPP4400(const Double_t *px, const Double_t */*dummy*/)
193{
194// J/Psi pT
195// pp 4.4 TeV
196//
197 return PtJpsiPPdummy(*px,4400);
198}
199
200Double_t AliGenMUONlib::PtJpsiPP5030(const Double_t *px, const Double_t */*dummy*/)
201{
202// J/Psi pT
203// pp 5.03 TeV
204//
205 return PtJpsiPPdummy(*px,5030);
206}
207
7455632e 208Double_t AliGenMUONlib::PtJpsiPP8800(const Double_t *px, const Double_t */*dummy*/)
209{
210// J/Psi pT
211// pp 8.8 TeV
212//
213 return PtJpsiPPdummy(*px,8800);
214}
215
216Double_t AliGenMUONlib::PtJpsiPbPb2760ShFdummy(Double_t x, Int_t n)
217{
218// J/Psi shadowing factor vs pT for PbPb min. bias and 11 centr. bins (in 2.5<y<4)
219//
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
223//
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};
232 Double_t y1, y2;
233 Int_t j;
234 y1 = c1[j = 6]; y2 = c2[6];
235 while (j > 0) {y1 = y1 * x + c1[--j]; y2 = y2 * x + c2[j];}
236
237 y1 /= 1.+c1[6]*TMath::Power(x,6);
238 y2 /= 1.+c2[6]*TMath::Power(x,6);
239 //
240 y1 = 1 + (y1-2)*f1[n] + (y2+1-y1)*f2[n];
241 if(y1<0) y1=0;
242 return y1;
243}
244
245Double_t AliGenMUONlib::PtJpsiPbPb2760(const Double_t *px, const Double_t *dummy)
246{
247// J/Psi pT
248// PbPb 2.76 TeV, minimum bias 0-100 %
249//
250 return PtJpsiPbPb2760ShFdummy(*px, 0) * PtJpsiPP2760(px, dummy);
a4f206bf 251}
252
7455632e 253Double_t AliGenMUONlib::PtJpsiPbPb2760c1(const Double_t *px, const Double_t *dummy)
a4f206bf 254{
255// J/Psi pT
7455632e 256// PbPb 2.76 TeV, 1st centrality bin 0-5 %
a4f206bf 257//
7455632e 258 return PtJpsiPbPb2760ShFdummy(*px, 1) * PtJpsiPP2760(px, dummy);
259}
260
261Double_t AliGenMUONlib::PtJpsiPbPb2760c2(const Double_t *px, const Double_t *dummy)
262{
263// J/Psi pT
264// PbPb 2.76 TeV, 2nd centrality bin 5-10 %
a4f206bf 265//
7455632e 266 return PtJpsiPbPb2760ShFdummy(*px, 2) * PtJpsiPP2760(px, dummy);
267}
268
269Double_t AliGenMUONlib::PtJpsiPbPb2760c3(const Double_t *px, const Double_t *dummy)
270{
271// J/Psi pT
272// PbPb 2.76 TeV, 3rd centrality bin 10-20 %
273//
274 return PtJpsiPbPb2760ShFdummy(*px, 3) * PtJpsiPP2760(px, dummy);
275}
276
277Double_t AliGenMUONlib::PtJpsiPbPb2760c4(const Double_t *px, const Double_t *dummy)
278{
279// J/Psi pT
280// PbPb 2.76 TeV, 4th centrality bin 20-30 %
281//
282 return PtJpsiPbPb2760ShFdummy(*px, 4) * PtJpsiPP2760(px, dummy);
283}
284
285Double_t AliGenMUONlib::PtJpsiPbPb2760c5(const Double_t *px, const Double_t *dummy)
286{
287// J/Psi pT
288// PbPb 2.76 TeV, 5th centrality bin 30-40 %
289//
290 return PtJpsiPbPb2760ShFdummy(*px, 5) * PtJpsiPP2760(px, dummy);
291}
292
293Double_t AliGenMUONlib::PtJpsiPbPb2760c6(const Double_t *px, const Double_t *dummy)
294{
295// J/Psi pT
296// PbPb 2.76 TeV, 6th centrality bin 40-50 %
297//
298 return PtJpsiPbPb2760ShFdummy(*px, 6) * PtJpsiPP2760(px, dummy);
299}
300
301Double_t AliGenMUONlib::PtJpsiPbPb2760c7(const Double_t *px, const Double_t *dummy)
302{
303// J/Psi pT
304// PbPb 2.76 TeV, 7th centrality bin 50-60 %
305//
306 return PtJpsiPbPb2760ShFdummy(*px, 7) * PtJpsiPP2760(px, dummy);
307}
308
309Double_t AliGenMUONlib::PtJpsiPbPb2760c8(const Double_t *px, const Double_t *dummy)
310{
311// J/Psi pT
312// PbPb 2.76 TeV, 8th centrality bin 60-70 %
313//
314 return PtJpsiPbPb2760ShFdummy(*px, 8) * PtJpsiPP2760(px, dummy);
315}
316
317Double_t AliGenMUONlib::PtJpsiPbPb2760c9(const Double_t *px, const Double_t *dummy)
318{
319// J/Psi pT
320// PbPb 2.76 TeV, 9th centrality bin 70-80 %
321//
322 return PtJpsiPbPb2760ShFdummy(*px, 9) * PtJpsiPP2760(px, dummy);
323}
324
325Double_t AliGenMUONlib::PtJpsiPbPb2760c10(const Double_t *px, const Double_t *dummy)
326{
327// J/Psi pT
328// PbPb 2.76 TeV, 10th centrality bin 80-90 %
329//
330 return PtJpsiPbPb2760ShFdummy(*px, 10) * PtJpsiPP2760(px, dummy);
331}
332
333Double_t AliGenMUONlib::PtJpsiPbPb2760c11(const Double_t *px, const Double_t *dummy)
334{
335// J/Psi pT
336// PbPb 2.76 TeV, 11th centrality bin 90-100 %
337//
338 return PtJpsiPbPb2760ShFdummy(*px, 11) * PtJpsiPP2760(px, dummy);
339}
340
4bac9bd3 341Double_t AliGenMUONlib::PtJpsiPPb5030ShFdummy(Double_t x, Int_t n)
342{
343// J/Psi shadowing factor vs pT for pPb min. bias and 4 centr. bins (in 2.5<y<4)
344//
345// pPb 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.81 in 4pi
346//
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};
349 Double_t y;
350 Int_t j;
351 y = c[j = 6];
352 while (j > 0) y = y * x + c[--j];
353 y /= 1 + c[6]*TMath::Power(x,6);
354 //
355 return 1 + (y-1)*f[n];
356}
357
358Double_t AliGenMUONlib::PtJpsiPPb5030(const Double_t *px, const Double_t *dummy)
359{
360// J/Psi pT
361// pPb 5.03 TeV, minimum bias 0-100 %
362//
363 return PtJpsiPPb5030ShFdummy(*px, 0) * PtJpsiPP5030(px, dummy);
364}
365
366Double_t AliGenMUONlib::PtJpsiPPb5030c1(const Double_t *px, const Double_t *dummy)
367{
368// J/Psi pT
369// pPb 5.03 TeV, 1st centrality bin 0-20 %
370//
371 return PtJpsiPPb5030ShFdummy(*px, 1) * PtJpsiPP5030(px, dummy);
372}
373
374Double_t AliGenMUONlib::PtJpsiPPb5030c2(const Double_t *px, const Double_t *dummy)
375{
376// J/Psi pT
377// pPb 5.03 TeV, 2nd centrality bin 20-40 %
378//
379 return PtJpsiPPb5030ShFdummy(*px, 2) * PtJpsiPP5030(px, dummy);
380}
381
382Double_t AliGenMUONlib::PtJpsiPPb5030c3(const Double_t *px, const Double_t *dummy)
383{
384// J/Psi pT
385// pPb 5.03 TeV, 3rd centrality bin 40-60 %
386//
387 return PtJpsiPPb5030ShFdummy(*px, 3) * PtJpsiPP5030(px, dummy);
388}
389
390Double_t AliGenMUONlib::PtJpsiPPb5030c4(const Double_t *px, const Double_t *dummy)
391{
392// J/Psi pT
393// pPb 5.03 TeV, 4th centrality bin 60-100 %
394//
395 return PtJpsiPPb5030ShFdummy(*px, 4) * PtJpsiPP5030(px, dummy);
396}
397
398Double_t AliGenMUONlib::PtJpsiPbP5030ShFdummy(Double_t x, Int_t n)
399{
400// J/Psi shadowing factor vs pT for Pbp min. bias and 4 centr. bins (in 2.5<y<4)
401//
402// Pbp 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.81 in 4pi
403//
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};
406 Double_t y;
407 Int_t j;
408 y = c[j = 6];
409 while (j > 0) y = y * x + c[--j];
410 y /= 1 + c[6]*TMath::Power(x,6);
411 //
412 return 1 + (y-1)*f[n];
413}
414
415Double_t AliGenMUONlib::PtJpsiPbP5030(const Double_t *px, const Double_t *dummy)
416{
417// J/Psi pT
418// Pbp 5.03 TeV, minimum bias 0-100 %
419//
420 return PtJpsiPbP5030ShFdummy(*px, 0) * PtJpsiPP5030(px, dummy);
421}
422
423Double_t AliGenMUONlib::PtJpsiPbP5030c1(const Double_t *px, const Double_t *dummy)
424{
425// J/Psi pT
426// Pbp 5.03 TeV, 1st centrality bin 0-20 %
427//
428 return PtJpsiPbP5030ShFdummy(*px, 1) * PtJpsiPP5030(px, dummy);
429}
430
431Double_t AliGenMUONlib::PtJpsiPbP5030c2(const Double_t *px, const Double_t *dummy)
432{
433// J/Psi pT
434// Pbp 5.03 TeV, 2nd centrality bin 20-40 %
435//
436 return PtJpsiPbP5030ShFdummy(*px, 2) * PtJpsiPP5030(px, dummy);
437}
438
439Double_t AliGenMUONlib::PtJpsiPbP5030c3(const Double_t *px, const Double_t *dummy)
440{
441// J/Psi pT
442// Pbp 5.03 TeV, 3rd centrality bin 40-60 %
443//
444 return PtJpsiPbP5030ShFdummy(*px, 3) * PtJpsiPP5030(px, dummy);
445}
446
447Double_t AliGenMUONlib::PtJpsiPbP5030c4(const Double_t *px, const Double_t *dummy)
448{
449// J/Psi pT
450// Pbp 5.03 TeV, 4th centrality bin 60-100 %
451//
452 return PtJpsiPbP5030ShFdummy(*px, 4) * PtJpsiPP5030(px, dummy);
453}
454
7455632e 455Double_t AliGenMUONlib::PtJpsiPPb8800ShFdummy(Double_t x, Int_t n)
456{
457// J/Psi shadowing factor vs pT for pPb min. bias and 4 centr. bins (in 2.5<y<4)
458//
459// pPb 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.78 in 4pi
460//
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};
a4f206bf 464 Double_t y;
465 Int_t j;
7455632e 466 y = c[j = 6];
a4f206bf 467 while (j > 0) y = y * x + c[--j];
7455632e 468 y /= 1 + c[6]*TMath::Power(x,6);
a4f206bf 469 //
7455632e 470 return 1 + (y-1)*f[n];
471}
472
473Double_t AliGenMUONlib::PtJpsiPPb8800(const Double_t *px, const Double_t *dummy)
474{
475// J/Psi pT
476// pPb 8.8 TeV, minimum bias 0-100 %
477//
478 return PtJpsiPPb8800ShFdummy(*px, 0) * PtJpsiPP8800(px, dummy);
479}
480
481Double_t AliGenMUONlib::PtJpsiPPb8800c1(const Double_t *px, const Double_t *dummy)
482{
483// J/Psi pT
484// pPb 8.8 TeV, 1st centrality bin 0-20 %
485//
486 return PtJpsiPPb8800ShFdummy(*px, 1) * PtJpsiPP8800(px, dummy);
487}
488
489Double_t AliGenMUONlib::PtJpsiPPb8800c2(const Double_t *px, const Double_t *dummy)
490{
491// J/Psi pT
492// pPb 8.8 TeV, 2nd centrality bin 20-40 %
493//
494 return PtJpsiPPb8800ShFdummy(*px, 2) * PtJpsiPP8800(px, dummy);
495}
496
497Double_t AliGenMUONlib::PtJpsiPPb8800c3(const Double_t *px, const Double_t *dummy)
498{
499// J/Psi pT
500// pPb 8.8 TeV, 3rd centrality bin 40-60 %
501//
502 return PtJpsiPPb8800ShFdummy(*px, 3) * PtJpsiPP8800(px, dummy);
503}
504
505Double_t AliGenMUONlib::PtJpsiPPb8800c4(const Double_t *px, const Double_t *dummy)
506{
507// J/Psi pT
508// pPb 8.8 TeV, 4th centrality bin 60-100 %
509//
510 return PtJpsiPPb8800ShFdummy(*px, 4) * PtJpsiPP8800(px, dummy);
511}
512
513Double_t AliGenMUONlib::PtJpsiPbP8800ShFdummy(Double_t x, Int_t n)
514{
515// J/Psi shadowing factor vs pT for Pbp min. bias and 4 centr. bins (in 2.5<y<4)
516//
517// Pbp 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.78 in 4pi
518//
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};
522 Double_t y;
523 Int_t j;
524 y = c[j = 6];
525 while (j > 0) y = y * x + c[--j];
526 y /= 1 + c[6]*TMath::Power(x,6);
527 //
528 return 1 + (y-1)*f[n];
529}
530
531Double_t AliGenMUONlib::PtJpsiPbP8800(const Double_t *px, const Double_t *dummy)
532{
533// J/Psi pT
534// Pbp 8.8 TeV, minimum bias 0-100 %
535//
536 return PtJpsiPbP8800ShFdummy(*px, 0) * PtJpsiPP8800(px, dummy);
537}
538
539Double_t AliGenMUONlib::PtJpsiPbP8800c1(const Double_t *px, const Double_t *dummy)
540{
541// J/Psi pT
542// Pbp 8.8 TeV, 1st centrality bin 0-20 %
543//
544 return PtJpsiPbP8800ShFdummy(*px, 1) * PtJpsiPP8800(px, dummy);
545}
546
547Double_t AliGenMUONlib::PtJpsiPbP8800c2(const Double_t *px, const Double_t *dummy)
548{
549// J/Psi pT
550// Pbp 8.8 TeV, 2nd centrality bin 20-40 %
551//
552 return PtJpsiPbP8800ShFdummy(*px, 2) * PtJpsiPP8800(px, dummy);
553}
554
555Double_t AliGenMUONlib::PtJpsiPbP8800c3(const Double_t *px, const Double_t *dummy)
556{
557// J/Psi pT
558// Pbp 8.8 TeV, 3rd centrality bin 40-60 %
559//
560 return PtJpsiPbP8800ShFdummy(*px, 3) * PtJpsiPP8800(px, dummy);
561}
562
563Double_t AliGenMUONlib::PtJpsiPbP8800c4(const Double_t *px, const Double_t *dummy)
564{
565// J/Psi pT
566// Pbp 8.8 TeV, 4th centrality bin 60-100 %
567//
568 return PtJpsiPbP8800ShFdummy(*px, 4) * PtJpsiPP8800(px, dummy);
a4f206bf 569}
570
75e0cc59 571Double_t AliGenMUONlib::PtJpsi( const Double_t *px, const Double_t */*dummy*/)
fe4da5cc 572{
d90f80fd 573// J/Psi pT
574 const Double_t kpt0 = 4.;
575 const Double_t kxn = 3.6;
fe4da5cc 576 Double_t x=*px;
577 //
d90f80fd 578 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
579 return x/TMath::Power(pass1,kxn);
fe4da5cc 580}
05932df6 581
75e0cc59 582Double_t AliGenMUONlib::PtJpsiCDFscaled( const Double_t *px, const Double_t */*dummy*/)
0e137c25 583{
584// J/Psi pT
9e9ae065 585//
586// PbPb 5.5 TeV
587// scaled from CDF data at 2 TeV
588// see S.Grigoryan, PWG3 Meeting, 27th Oct 2008
589
590 const Double_t kpt0 = 5.100;
591 const Double_t kxn = 4.102;
592 Double_t x=*px;
593 //
594 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
595 return x/TMath::Power(pass1,kxn);
596}
597
75e0cc59 598Double_t AliGenMUONlib::PtJpsiCDFscaledPP( const Double_t *px, const Double_t */*dummy*/)
9ff13849 599{
600// J/Psi pT
601//
602// pp 14 TeV
9ff13849 603// scaled from CDF data at 2 TeV
604
9e9ae065 605 const Double_t kpt0 = 5.630;
606 const Double_t kxn = 4.071;
607 Double_t x=*px;
608 //
609 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
610 return x/TMath::Power(pass1,kxn);
611}
612
75e0cc59 613Double_t AliGenMUONlib::PtJpsiCDFscaledPP10( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 614{
615// J/Psi pT
616//
617// pp 10 TeV
618// scaled from CDF data at 2 TeV
619
620 const Double_t kpt0 = 5.334;
621 const Double_t kxn = 4.071;
622 Double_t x=*px;
623 //
624 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
625 return x/TMath::Power(pass1,kxn);
626}
627
9fd56238 628Double_t AliGenMUONlib::PtJpsiCDFscaledPP9( const Double_t *px, const Double_t */*dummy*/)
629{
630// J/Psi pT
631//
632// pp 8.8 TeV
633// scaled from CDF data at 2 TeV
634//
635 const Double_t kpt0 = 5.245;
636 const Double_t kxn = 4.071;
637 Double_t x=*px;
638 //
639 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
640 return x/TMath::Power(pass1,kxn);
641}
642
643Double_t AliGenMUONlib::PtJpsiCDFscaledPP7( const Double_t *px, const Double_t */*dummy*/)
644{
645// J/Psi pT
646//
647// pp 7 TeV
648// scaled from CDF data at 2 TeV
649
650 const Double_t kpt0 = 5.072;
651 const Double_t kxn = 4.071;
652 Double_t x=*px;
653 //
654 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
655 return x/TMath::Power(pass1,kxn);
656}
657
658Double_t AliGenMUONlib::PtJpsiCDFscaledPP4( const Double_t *px, const Double_t */*dummy*/)
659{
660// J/Psi pT
661//
662// pp 3.94 TeV
663// scaled from CDF data at 2 TeV
664//
665 const Double_t kpt0 = 4.647;
666 const Double_t kxn = 4.071;
667 Double_t x=*px;
668 //
669 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
670 return x/TMath::Power(pass1,kxn);
671}
672
a4f206bf 673Double_t AliGenMUONlib::PtJpsiCDFscaledPP3( const Double_t *px, const Double_t */*dummy*/)
674{
675// J/Psi pT
676//
677// pp 2.76 TeV
678// scaled from CDF data at 1.9 TeV
679//
680 const Double_t kpt0 = 4.435;
681 const Double_t kxn = 4.071;
682 Double_t x=*px;
683 //
684 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
685 return x/TMath::Power(pass1,kxn);
686}
687
688Double_t AliGenMUONlib::PtJpsiCDFscaledPP2( const Double_t *px, const Double_t */*dummy*/)
689{
690// J/Psi pT
691//
7455632e 692// pp 1.96 TeV
693// fit of the CDF data at 1.96 TeV
a4f206bf 694//
695 const Double_t kpt0 = 4.233;
696 const Double_t kxn = 4.071;
697 Double_t x=*px;
698 //
699 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
700 return x/TMath::Power(pass1,kxn);
701}
702
9fd56238 703Double_t AliGenMUONlib::PtJpsiCDFscaledPPb9( const Double_t *px, const Double_t *dummy)
704{
705// J/Psi pT
706//
7455632e 707// pPb 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.79
9fd56238 708//
709 Double_t c[5] = {6.42774e-01, 1.86168e-02, -6.77296e-04, 8.93512e-06, 1.31586e-07};
710 Double_t x=*px;
711 Double_t y;
712 Int_t j;
713 y = c[j = 4];
714 while (j > 0) y = y * x + c[--j];
715 //
716 Double_t d = 1.+c[4]*TMath::Power(x,4);
717 return y/d * AliGenMUONlib::PtJpsiCDFscaledPP9(px,dummy);
718}
719
720Double_t AliGenMUONlib::PtJpsiCDFscaledPbP9( const Double_t *px, const Double_t *dummy)
721{
722// J/Psi pT
723//
7455632e 724// Pbp 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.79
9fd56238 725//
726 Double_t c[5] = {8.58557e-01, 5.39791e-02, -4.75180e-03, 2.49463e-04, 5.52396e-05};
727 Double_t x=*px;
728 Double_t y;
729 Int_t j;
730 y = c[j = 4];
731 while (j > 0) y = y * x + c[--j];
732 //
733 Double_t d = 1.+c[4]*TMath::Power(x,4);
734 return y/d * AliGenMUONlib::PtJpsiCDFscaledPP9(px,dummy);
735}
736
737Double_t AliGenMUONlib::PtJpsiCDFscaledPbPb4( const Double_t *px, const Double_t *dummy)
738{
739// J/Psi pT
740//
741// PbPb 3.94 TeV, for EKS98 with minimum bias shadowing factor 0.66
742//
743 Double_t c[5] = {6.01022e-01, 4.70988e-02, -2.27917e-03, 3.09885e-05, 1.31955e-06};
744 Double_t x=*px;
745 Double_t y;
746 Int_t j;
747 y = c[j = 4];
748 while (j > 0) y = y * x + c[--j];
749 //
750 Double_t d = 1.+c[4]*TMath::Power(x,4);
751 return y/d * AliGenMUONlib::PtJpsiCDFscaledPP4(px,dummy);
752}
753
75e0cc59 754Double_t AliGenMUONlib::PtJpsiFlat( const Double_t */*px*/, const Double_t */*dummy*/ )
4ca8d070 755{
756 return 1.;
757}
758
75e0cc59 759Double_t AliGenMUONlib::PtJpsiPbPb( const Double_t *px, const Double_t */*dummy*/)
05932df6 760{
1af7144e 761// J/Psi pT spectrum
05932df6 762//
763// R. Vogt 2002
764// PbPb 5.5 TeV
765// MRST HO
766// mc = 1.4 GeV, pt-kick 1 GeV
767//
1af7144e 768 Float_t x = px[0];
769 Float_t c[8] = {
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
05932df6 772 };
1af7144e 773
3d905dd7 774 Double_t y;
36349df1 775 if (x < 10.) {
3d905dd7 776 Int_t j;
777 y = c[j = 7];
778 while (j > 0) y = y * x +c[--j];
779 y = x * TMath::Exp(y);
780 } else {
781 y = 0.;
782 }
1af7144e 783 return y;
05932df6 784}
17d28ba5 785
75e0cc59 786Double_t AliGenMUONlib::PtJpsiBPbPb( const Double_t *px, const Double_t */*dummy*/)
17d28ba5 787{
788// J/Psi pT spectrum
789// B -> J/Psi X
790 Double_t x0 = 4.0384;
791 Double_t n = 3.0288;
792
793 Double_t x = px[0];
794 Double_t y = x / TMath::Power((1. + (x/x0)*(x/x0)), n);
795
796 return y;
797}
798
799
75e0cc59 800Double_t AliGenMUONlib::PtJpsiPP( const Double_t *px, const Double_t */*dummy*/)
bb6e81ac 801{
802// J/Psi pT spectrum
803//
804// R. Vogt 2002
805// pp 14 TeV
806// MRST HO
807// mc = 1.4 GeV, pt-kick 1 GeV
808//
809 Float_t x = px[0];
810 Float_t c[4] = {8.47471e+00, -1.93567e+00, 1.50271e-01, -5.51212e-03};
811
812 Double_t y;
813 if (x < 10.) {
814 Int_t j;
815 y = c[j = 3];
816 while (j > 0) y = y * x +c[--j];
817 y = x * TMath::Exp(y);
818 } else {
819 y = 0.;
820 }
821 return y;
822}
823
fe4da5cc 824//
825// y-distribution
826//____________________________________________________________
7455632e 827Double_t AliGenMUONlib::YJpsiPPdummy(Double_t x, Double_t energy)
a4f206bf 828{
829// J/Psi y
7455632e 830// pp
a4f206bf 831// from the fit of RHIC + LHC data, see arXiv:1103.2394
832//
7455632e 833 x = x/TMath::Log(energy/3.097);
a4f206bf 834 x = x*x;
7455632e 835 Double_t y = TMath::Exp(-x/0.4/0.4/2);
a4f206bf 836 if(x > 1) y=0;
837 return y;
838}
839
7455632e 840Double_t AliGenMUONlib::YJpsiPPpoly(Double_t x, Double_t energy)
a4f206bf 841{
842// J/Psi y
7455632e 843// pp
a4f206bf 844// from the fit of RHIC + LHC data, see arXiv:1103.2394
845//
7455632e 846 x = x/TMath::Log(energy/3.097);
a4f206bf 847 x = x*x;
7455632e 848 Double_t y = 1 - 6.9*x*x;
849 if(y < 0) y=0;
a4f206bf 850 return y;
851}
852
7455632e 853Double_t AliGenMUONlib::YJpsiPP7000(const Double_t *px, const Double_t */*dummy*/)
a4f206bf 854{
855// J/Psi y
7455632e 856// pp 7 TeV
a4f206bf 857//
7455632e 858 return YJpsiPPdummy(*px, 7000);
859}
860
755104c5 861Double_t AliGenMUONlib::YJpsiPP8000(const Double_t *px, const Double_t */*dummy*/)
862{
863// J/Psi y
864// pp 7 TeV
865//
866 return YJpsiPPdummy(*px, 8000);
867}
868
7455632e 869Double_t AliGenMUONlib::YJpsiPP2760(const Double_t *px, const Double_t */*dummy*/)
870{
871// J/Psi y
872// pp 2.76 TeV
a4f206bf 873//
7455632e 874 return YJpsiPPdummy(*px, 2760);
875}
876
4bac9bd3 877Double_t AliGenMUONlib::YJpsiPP4400(const Double_t *px, const Double_t */*dummy*/)
878{
879// J/Psi y
880// pp 4.4 TeV
881//
882 return YJpsiPPdummy(*px, 4400);
883}
884
885Double_t AliGenMUONlib::YJpsiPP5030(const Double_t *px, const Double_t */*dummy*/)
886{
887// J/Psi y
888// pp 5.03 TeV
889//
890 return YJpsiPPdummy(*px, 5030);
891}
892
7455632e 893Double_t AliGenMUONlib::YJpsiPP8800(const Double_t *px, const Double_t */*dummy*/)
894{
895// J/Psi y
896// pp 8.8 TeV
897//
898 return YJpsiPPdummy(*px, 8800);
899}
900
901Double_t AliGenMUONlib::YJpsiPPpoly7000(const Double_t *px, const Double_t */*dummy*/)
902{
903// J/Psi y
904// pp 7 TeV
905//
906 return YJpsiPPpoly(*px, 7000);
907}
908
909Double_t AliGenMUONlib::YJpsiPPpoly2760(const Double_t *px, const Double_t */*dummy*/)
910{
911// J/Psi y
912// pp 2.76 TeV
913//
914 return YJpsiPPpoly(*px, 2760);
915}
916
917Double_t AliGenMUONlib::YJpsiPbPb2760ShFdummy(Double_t x, Int_t n)
918{
919// J/Psi shadowing factor vs y for PbPb min. bias and 11 centr. bins
920//
921// PbPb 2.76 TeV, for EKS98, minimum bias shadowing factor = 0.66 in 4pi
922//
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};
929
930 x = x*x;
931 Double_t y1, y2;
932 Int_t j;
933 y1 = c1[j = 4]; y2 = c2[4];
934 while (j > 0) {y1 = y1 * x + c1[--j]; y2 = y2 * x + c2[j];}
935
936 y1 = 1 + (y1-2)*f1[n] + (y2+1-y1)*f2[n];
937 if(y1<0) y1=0;
938 return y1;
939}
940
941Double_t AliGenMUONlib::YJpsiPbPb2760(const Double_t *px, const Double_t *dummy)
942{
943// J/Psi y
944// PbPb 2.76 TeV, minimum bias 0-100 %
945//
946 return YJpsiPbPb2760ShFdummy(*px, 0) * YJpsiPP2760(px, dummy);
947}
948
949Double_t AliGenMUONlib::YJpsiPbPb2760c1(const Double_t *px, const Double_t *dummy)
950{
951// J/Psi y
952// PbPb 2.76 TeV, 1st centrality bin 0-5 %
953//
954 return YJpsiPbPb2760ShFdummy(*px, 1) * YJpsiPP2760(px, dummy);
955}
956
957Double_t AliGenMUONlib::YJpsiPbPb2760c2(const Double_t *px, const Double_t *dummy)
958{
959// J/Psi y
960// PbPb 2.76 TeV, 2nd centrality bin 5-10 %
961//
962 return YJpsiPbPb2760ShFdummy(*px, 2) * YJpsiPP2760(px, dummy);
963}
964
965Double_t AliGenMUONlib::YJpsiPbPb2760c3(const Double_t *px, const Double_t *dummy)
966{
967// J/Psi y
968// PbPb 2.76 TeV, 3rd centrality bin 10-20 %
969//
970 return YJpsiPbPb2760ShFdummy(*px, 3) * YJpsiPP2760(px, dummy);
971}
972
973Double_t AliGenMUONlib::YJpsiPbPb2760c4(const Double_t *px, const Double_t *dummy)
974{
975// J/Psi y
976// PbPb 2.76 TeV, 4th centrality bin 20-30 %
977//
978 return YJpsiPbPb2760ShFdummy(*px, 4) * YJpsiPP2760(px, dummy);
979}
980
981Double_t AliGenMUONlib::YJpsiPbPb2760c5(const Double_t *px, const Double_t *dummy)
982{
983// J/Psi y
984// PbPb 2.76 TeV, 5th centrality bin 30-40 %
985//
986 return YJpsiPbPb2760ShFdummy(*px, 5) * YJpsiPP2760(px, dummy);
987}
988
989Double_t AliGenMUONlib::YJpsiPbPb2760c6(const Double_t *px, const Double_t *dummy)
990{
991// J/Psi y
992// PbPb 2.76 TeV, 6th centrality bin 40-50 %
993//
994 return YJpsiPbPb2760ShFdummy(*px, 6) * YJpsiPP2760(px, dummy);
995}
996
997Double_t AliGenMUONlib::YJpsiPbPb2760c7(const Double_t *px, const Double_t *dummy)
998{
999// J/Psi y
1000// PbPb 2.76 TeV, 7th centrality bin 50-60 %
1001//
1002 return YJpsiPbPb2760ShFdummy(*px, 7) * YJpsiPP2760(px, dummy);
1003}
1004
1005Double_t AliGenMUONlib::YJpsiPbPb2760c8(const Double_t *px, const Double_t *dummy)
1006{
1007// J/Psi y
1008// PbPb 2.76 TeV, 8th centrality bin 60-70 %
1009//
1010 return YJpsiPbPb2760ShFdummy(*px, 8) * YJpsiPP2760(px, dummy);
1011}
1012
1013Double_t AliGenMUONlib::YJpsiPbPb2760c9(const Double_t *px, const Double_t *dummy)
1014{
1015// J/Psi y
1016// PbPb 2.76 TeV, 9th centrality bin 70-80 %
1017//
1018 return YJpsiPbPb2760ShFdummy(*px, 9) * YJpsiPP2760(px, dummy);
1019}
1020
1021Double_t AliGenMUONlib::YJpsiPbPb2760c10(const Double_t *px, const Double_t *dummy)
1022{
1023// J/Psi y
1024// PbPb 2.76 TeV, 10th centrality bin 80-90 %
1025//
1026 return YJpsiPbPb2760ShFdummy(*px, 10) * YJpsiPP2760(px, dummy);
1027}
1028
1029Double_t AliGenMUONlib::YJpsiPbPb2760c11(const Double_t *px, const Double_t *dummy)
1030{
1031// J/Psi y
1032// PbPb 2.76 TeV, 11th centrality bin 90-100 %
1033//
1034 return YJpsiPbPb2760ShFdummy(*px, 11) * YJpsiPP2760(px, dummy);
1035}
1036
4bac9bd3 1037Double_t AliGenMUONlib::YJpsiPP5030dummy(Double_t px)
1038{
1039 return AliGenMUONlib::YJpsiPP5030(&px, (Double_t*) 0);
1040}
1041
1042Double_t AliGenMUONlib::YJpsiPPb5030ShFdummy(Double_t x, Int_t n)
1043{
1044// J/Psi shadowing factor vs y for pPb min. bias and 4 centr. bins
1045//
1046// pPb 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.81 in 4pi
1047//
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};
1050 Double_t y;
1051 Int_t j;
1052 y = c[j = 6];
1053 while (j > 0) y = y * x + c[--j];
1054 if(y<0) y=0;
1055 //
1056 return 1 +(y-1)*f[n];
1057}
1058
1059Double_t AliGenMUONlib::YJpsiPPb5030(const Double_t *px, const Double_t */*dummy*/)
1060{
1061// J/Psi y
1062// pPb 5.03 TeV, minimum bias 0-100 %
1063//
1064 Double_t x = px[0] + 0.47; // rapidity shift
1065 return YJpsiPPb5030ShFdummy(x, 0) * YJpsiPP5030dummy(x);
1066}
1067
1068Double_t AliGenMUONlib::YJpsiPPb5030c1(const Double_t *px, const Double_t */*dummy*/)
1069{
1070// J/Psi y
1071// pPb 5.03 TeV, 1st centrality bin 0-20 %
1072//
1073 Double_t x = px[0] + 0.47; // rapidity shift
1074 return YJpsiPPb5030ShFdummy(x, 1) * YJpsiPP5030dummy(x);
1075}
1076
1077Double_t AliGenMUONlib::YJpsiPPb5030c2(const Double_t *px, const Double_t */*dummy*/)
1078{
1079// J/Psi y
1080// pPb 5.03 TeV, 2nd centrality bin 20-40 %
1081//
1082 Double_t x = px[0] + 0.47; // rapidity shift
1083 return YJpsiPPb5030ShFdummy(x, 2) * YJpsiPP5030dummy(x);
1084}
1085
1086Double_t AliGenMUONlib::YJpsiPPb5030c3(const Double_t *px, const Double_t */*dummy*/)
1087{
1088// J/Psi y
1089// pPb 5.03 TeV, 3rd centrality bin 40-60 %
1090//
1091 Double_t x = px[0] + 0.47; // rapidity shift
1092 return YJpsiPPb5030ShFdummy(x, 3) * YJpsiPP5030dummy(x);
1093}
1094
1095Double_t AliGenMUONlib::YJpsiPPb5030c4(const Double_t *px, const Double_t */*dummy*/)
1096{
1097// J/Psi y
1098// pPb 5.03 TeV, 4th centrality bin 60-100 %
1099//
1100 Double_t x = px[0] + 0.47; // rapidity shift
1101 return YJpsiPPb5030ShFdummy(x, 4) * YJpsiPP5030dummy(x);
1102}
1103
1104Double_t AliGenMUONlib::YJpsiPbP5030(const Double_t *px, const Double_t */*dummy*/)
1105{
1106// J/Psi y
1107// Pbp 5.03 TeV, minimum bias 0-100 %
1108//
1109 Double_t x = -px[0] + 0.47; // rapidity shift
1110 return YJpsiPPb5030ShFdummy(x, 0) * YJpsiPP5030dummy(x);
1111}
1112
1113Double_t AliGenMUONlib::YJpsiPbP5030c1(const Double_t *px, const Double_t */*dummy*/)
1114{
1115// J/Psi y
1116// Pbp 5.03 TeV, 1st centrality bin 0-20 %
1117//
1118 Double_t x = -px[0] + 0.47; // rapidity shift
1119 return YJpsiPPb5030ShFdummy(x, 1) * YJpsiPP5030dummy(x);
1120}
1121
1122Double_t AliGenMUONlib::YJpsiPbP5030c2(const Double_t *px, const Double_t */*dummy*/)
1123{
1124// J/Psi y
1125// Pbp 5.03 TeV, 2nd centrality bin 20-40 %
1126//
1127 Double_t x = -px[0] + 0.47; // rapidity shift
1128 return YJpsiPPb5030ShFdummy(x, 2) * YJpsiPP5030dummy(x);
1129}
1130
1131Double_t AliGenMUONlib::YJpsiPbP5030c3(const Double_t *px, const Double_t */*dummy*/)
1132{
1133// J/Psi y
1134// Pbp 5.03 TeV, 3rd centrality bin 40-60 %
1135//
1136 Double_t x = -px[0] + 0.47; // rapidity shift
1137 return YJpsiPPb5030ShFdummy(x, 3) * YJpsiPP5030dummy(x);
1138}
1139
1140Double_t AliGenMUONlib::YJpsiPbP5030c4(const Double_t *px, const Double_t */*dummy*/)
1141{
1142// J/Psi y
1143// Pbp 5.03 TeV, 4th centrality bin 60-100 %
1144//
1145 Double_t x = -px[0] + 0.47; // rapidity shift
1146 return YJpsiPPb5030ShFdummy(x, 4) * YJpsiPP5030dummy(x);
1147}
1148
7455632e 1149Double_t AliGenMUONlib::YJpsiPP8800dummy(Double_t px)
1150{
1151 return AliGenMUONlib::YJpsiPP8800(&px, (Double_t*) 0);
1152}
1153
1154Double_t AliGenMUONlib::YJpsiPPb8800ShFdummy(Double_t x, Int_t n)
1155{
1156// J/Psi shadowing factor vs y for pPb min. bias and 4 centr. bins
1157//
1158// pPb 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.78 in 4pi
1159//
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};
a4f206bf 1163 Double_t y;
1164 Int_t j;
7455632e 1165 y = c[j = 6];
1166 while (j > 0) y = y * x + c[--j];
a4f206bf 1167 if(y<0) y=0;
7455632e 1168 //
1169 return 1 +(y-1)*f[n];
1170}
1171
1172Double_t AliGenMUONlib::YJpsiPPb8800(const Double_t *px, const Double_t */*dummy*/)
1173{
1174// J/Psi y
1175// pPb 8.8 TeV, minimum bias 0-100 %
1176//
1177 Double_t x = px[0] + 0.47; // rapidity shift
1178 return YJpsiPPb8800ShFdummy(x, 0) * YJpsiPP8800dummy(x);
1179}
1180
1181Double_t AliGenMUONlib::YJpsiPPb8800c1(const Double_t *px, const Double_t */*dummy*/)
1182{
1183// J/Psi y
1184// pPb 8.8 TeV, 1st centrality bin 0-20 %
1185//
1186 Double_t x = px[0] + 0.47; // rapidity shift
1187 return YJpsiPPb8800ShFdummy(x, 1) * YJpsiPP8800dummy(x);
1188}
1189
1190Double_t AliGenMUONlib::YJpsiPPb8800c2(const Double_t *px, const Double_t */*dummy*/)
1191{
1192// J/Psi y
1193// pPb 8.8 TeV, 2nd centrality bin 20-40 %
1194//
1195 Double_t x = px[0] + 0.47; // rapidity shift
1196 return YJpsiPPb8800ShFdummy(x, 2) * YJpsiPP8800dummy(x);
1197}
1198
1199Double_t AliGenMUONlib::YJpsiPPb8800c3(const Double_t *px, const Double_t */*dummy*/)
1200{
1201// J/Psi y
1202// pPb 8.8 TeV, 3rd centrality bin 40-60 %
1203//
1204 Double_t x = px[0] + 0.47; // rapidity shift
1205 return YJpsiPPb8800ShFdummy(x, 3) * YJpsiPP8800dummy(x);
1206}
1207
1208Double_t AliGenMUONlib::YJpsiPPb8800c4(const Double_t *px, const Double_t */*dummy*/)
1209{
1210// J/Psi y
1211// pPb 8.8 TeV, 4th centrality bin 60-100 %
1212//
1213 Double_t x = px[0] + 0.47; // rapidity shift
1214 return YJpsiPPb8800ShFdummy(x, 4) * YJpsiPP8800dummy(x);
1215}
a4f206bf 1216
7455632e 1217Double_t AliGenMUONlib::YJpsiPbP8800(const Double_t *px, const Double_t */*dummy*/)
1218{
1219// J/Psi y
1220// Pbp 8.8 TeV, minimum bias 0-100 %
1221//
1222 Double_t x = -px[0] + 0.47; // rapidity shift
1223 return YJpsiPPb8800ShFdummy(x, 0) * YJpsiPP8800dummy(x);
1224}
1225
1226Double_t AliGenMUONlib::YJpsiPbP8800c1(const Double_t *px, const Double_t */*dummy*/)
1227{
1228// J/Psi y
1229// Pbp 8.8 TeV, 1st centrality bin 0-20 %
1230//
1231 Double_t x = -px[0] + 0.47; // rapidity shift
1232 return YJpsiPPb8800ShFdummy(x, 1) * YJpsiPP8800dummy(x);
1233}
1234
1235Double_t AliGenMUONlib::YJpsiPbP8800c2(const Double_t *px, const Double_t */*dummy*/)
1236{
1237// J/Psi y
1238// Pbp 8.8 TeV, 2nd centrality bin 20-40 %
1239//
1240 Double_t x = -px[0] + 0.47; // rapidity shift
1241 return YJpsiPPb8800ShFdummy(x, 2) * YJpsiPP8800dummy(x);
1242}
1243
1244Double_t AliGenMUONlib::YJpsiPbP8800c3(const Double_t *px, const Double_t */*dummy*/)
1245{
1246// J/Psi y
1247// Pbp 8.8 TeV, 3rd centrality bin 40-60 %
1248//
1249 Double_t x = -px[0] + 0.47; // rapidity shift
1250 return YJpsiPPb8800ShFdummy(x, 3) * YJpsiPP8800dummy(x);
1251}
1252
1253Double_t AliGenMUONlib::YJpsiPbP8800c4(const Double_t *px, const Double_t */*dummy*/)
1254{
1255// J/Psi y
1256// Pbp 8.8 TeV, 4th centrality bin 60-100 %
1257//
1258 Double_t x = -px[0] + 0.47; // rapidity shift
1259 return YJpsiPPb8800ShFdummy(x, 4) * YJpsiPP8800dummy(x);
a4f206bf 1260}
1261
75e0cc59 1262Double_t AliGenMUONlib::YJpsi(const Double_t *py, const Double_t */*dummy*/)
fe4da5cc 1263{
d90f80fd 1264// J/psi y
1265 const Double_t ky0 = 4.;
1266 const Double_t kb=1.;
fe4da5cc 1267 Double_t yj;
1268 Double_t y=TMath::Abs(*py);
1269 //
d90f80fd 1270 if (y < ky0)
1271 yj=kb;
fe4da5cc 1272 else
d90f80fd 1273 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
fe4da5cc 1274 return yj;
1275}
05932df6 1276
75e0cc59 1277Double_t AliGenMUONlib::YJpsiFlat( const Double_t */*py*/, const Double_t */*dummy*/ )
4ca8d070 1278{
1279 return 1.;
1280}
1281
05932df6 1282
75e0cc59 1283Double_t AliGenMUONlib::YJpsiPbPb( const Double_t *px, const Double_t */*dummy*/)
05932df6 1284{
1285
1286//
1287// J/Psi y
1288//
1289//
1290// R. Vogt 2002
1291// PbPb 5.5 TeV
1292// MRST HO
1293// mc = 1.4 GeV, pt-kick 1 GeV
1294//
1af7144e 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]);
1297 Double_t y;
1298
1299 if (x < 4.) {
1300 y = 31.754;
1301 } else if (x < 6) {
1302 Int_t j;
1303 y = c[j = 4];
1304 while (j > 0) y = y * x + c[--j];
1305 } else {
1306 y =0.;
1307 }
1308
1309 return y;
05932df6 1310}
1311
75e0cc59 1312Double_t AliGenMUONlib::YJpsiCDFscaled( const Double_t *px, const Double_t* dummy)
0e137c25 1313{
1314 // J/Psi y
1315 return AliGenMUONlib::YJpsiPbPb(px, dummy);
1316}
1317
75e0cc59 1318Double_t AliGenMUONlib::YJpsiCDFscaledPP( const Double_t *px, const Double_t* dummy)
9ff13849 1319{
1320 // J/Psi y
1321 return AliGenMUONlib::YJpsiPP(px, dummy);
1322}
0e137c25 1323
75e0cc59 1324Double_t AliGenMUONlib::YJpsiCDFscaledPP10( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 1325{
9e9ae065 1326// J/Psi y
1327//
1328// pp 10 TeV
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
1331//
1332
1333 Double_t c[5] = {2.46681e+01, 8.91486e+01, -3.21227e+01, 3.63075e+00, -1.32047e-01};
1334
1335 Double_t x = TMath::Abs(px[0]);
1336 Double_t y;
1337
1338 if (x < 3.2) {
1339 y = 98.523 - 1.3664 * x * x;
1340 } else if (x < 7.5) {
1341 Int_t j;
1342 y = c[j = 4];
1343 while (j > 0) y = y * x + c[--j];
1344 } else {
1345 y =0.;
1346 }
1347
1348 if(y<0) y=0;
1349
1350 return y;
1351}
1352
9fd56238 1353Double_t AliGenMUONlib::YJpsiCDFscaledPP9( const Double_t *px, const Double_t */*dummy*/)
1354{
1355// J/Psi y
1356//
1357// pp 8.8 TeV
1358// rescaling of YJpsiPP(14 TeV) using 8.8 TeV / 14 TeV ratio of y-spectra in LO QCD
1359//
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]);
1362 Double_t y;
1363
1364 if (x < 3.7) {
1365 y = 99.236 - 1.5498 * x * x;
1366 } else if (x < 7.4) {
1367 Int_t j;
1368 y = c[j = 4];
1369 while (j > 0) y = y * x + c[--j];
1370 } else {
1371 y =0.;
1372 }
1373
1374 if(y<0) y=0;
1375
1376 return y;
1377}
1378
1379Double_t AliGenMUONlib::YJpsiCDFscaledPP9dummy(Double_t px)
1380{
1381 return AliGenMUONlib::YJpsiCDFscaledPP9(&px, (Double_t*) 0);
1382}
1383
1384Double_t AliGenMUONlib::YJpsiCDFscaledPP7( const Double_t *px, const Double_t */*dummy*/)
1385{
1386// J/Psi y
1387//
1388// pp 7 TeV
1389// scaled from YJpsiPP(14 TeV) using 7 TeV / 14 TeV ratio of y-spectra in LO pQCD.
1390//
1391
1392 Double_t c[5] = {6.71181e+02, -3.69240e+02, 8.89644e+01, -1.04937e+01, 4.80959e-01};
1393
1394 Double_t x = TMath::Abs(px[0]);
1395 Double_t y;
1396
1397 if (x < 4.0) {
1398 y = 100.78 - 1.8353 * x * x;
1399 } else if (x < 7.3) {
1400 Int_t j;
1401 y = c[j = 4];
1402 while (j > 0) y = y * x + c[--j];
1403 } else {
1404 y =0.;
1405 }
1406
1407 if(y<0) y=0;
1408
1409 return y;
1410}
1411
1412Double_t AliGenMUONlib::YJpsiCDFscaledPP4( const Double_t *px, const Double_t */*dummy*/)
1413{
1414// J/Psi y
1415//
1416// pp 3.94 TeV
1417// rescaling of YJpsiPP(14 TeV) using 3.94 TeV / 14 TeV ratio of y-spectra in LO QCD
1418//
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]);
1421 Double_t y;
1422
1423 if (x < 5.5) {
1424 y = 107.389 - 2.7454 * x * x;
1425 } else if (x < 7.0) {
1426 Int_t j;
1427 y = c[j = 4];
1428 while (j > 0) y = y * x + c[--j];
1429 } else {
1430 y =0.;
1431 }
1432
1433 if(y<0) y=0;
1434
1435 return y;
1436}
1437
a4f206bf 1438Double_t AliGenMUONlib::YJpsiCDFscaledPP3( const Double_t *px, const Double_t *dummy)
1439{
1440// J/Psi y
1441 return AliGenMUONlib::YJpsiPP2760(px, dummy);
1442}
1443
1444Double_t AliGenMUONlib::YJpsiCDFscaledPP2( const Double_t *px, const Double_t */*dummy*/)
1445{
1446// J/Psi y
7455632e 1447// pp 1.96 TeV
a4f206bf 1448//
7455632e 1449 return YJpsiPPdummy(*px, 1960);
a4f206bf 1450}
1451
75e0cc59 1452Double_t AliGenMUONlib::YJpsiPP( const Double_t *px, const Double_t */*dummy*/)
bb6e81ac 1453{
1454
1455//
1456// J/Psi y
1457//
1458//
1459// R. Vogt 2002
1460// pp 14 TeV
1461// MRST HO
1462// mc = 1.4 GeV, pt-kick 1 GeV
1463//
1464
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]);
1467 Double_t y;
1468
1469 if (x < 2.5) {
1470 y = 96.455 - 0.8483 * x * x;
1471 } else if (x < 7.9) {
1472 Int_t j;
1473 y = c[j = 4];
1474 while (j > 0) y = y * x + c[--j];
1475 } else {
1476 y =0.;
1477 }
1478
1479 return y;
1480}
1481
9fd56238 1482Double_t AliGenMUONlib::YJpsiCDFscaledPPb9( const Double_t *px, const Double_t */*dummy*/)
1483{
1484// J/Psi y
1485//
7455632e 1486// pPb 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.79
9fd56238 1487//
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};
1490 Double_t y;
1491 Double_t x = px[0] + 0.47; // rapidity shift
1492 Int_t j;
1493 y = c[j = 6];
1494 while (j > 0) y = y * x + c[--j];
1495 if(y<0) y=0;
1496
1497 return y * AliGenMUONlib::YJpsiCDFscaledPP9dummy(x);
1498}
1499
1500Double_t AliGenMUONlib::YJpsiCDFscaledPbP9( const Double_t *px, const Double_t */*dummy*/)
1501{
1502// J/Psi y
1503//
7455632e 1504// Pbp 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.79
9fd56238 1505//
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};
1508 Double_t y;
1509 Double_t x = -px[0] + 0.47; // rapidity shift
1510 Int_t j;
1511 y = c[j = 6];
1512 while (j > 0) y = y * x + c[--j];
1513 if(y<0) y=0;
1514
1515 return y * AliGenMUONlib::YJpsiCDFscaledPP9dummy(x);
1516}
1517
1518Double_t AliGenMUONlib::YJpsiCDFscaledPbPb4( const Double_t *px, const Double_t *dummy)
1519{
1520// J/Psi y
1521//
1522// PbPb 3.94 TeV, for EKS98 with minimum bias shadowing factor 0.66
1523//
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];
1526 Double_t y;
1527 Int_t j;
1528 y = c[j = 3];
1529 while (j > 0) y = y * x + c[--j];
1530 if(y<0) y=0;
1531
1532 return y * AliGenMUONlib::YJpsiCDFscaledPP4(px,dummy);
1533}
1534
7455632e 1535Double_t AliGenMUONlib::YJpsiBPbPb( const Double_t *px, const Double_t */*dummy*/)
1536{
1537
1538//
1539// J/Psi from B->J/Psi X
1540//
1541//
1542
1543
1544 Double_t c[7] = {7.37025e-02, 0., -2.94487e-03, 0., 6.07953e-06, 0., 5.39219e-07};
1545
1546 Double_t x = TMath::Abs(px[0]);
1547 Double_t y;
1548
1549 if (x > 6.) {
1550 y = 0.;
1551 } else {
1552 Int_t j;
1553 y = c[j = 6];
1554 while (j > 0) y = y * x + c[--j];
1555 }
1556
1557 return y;
1558}
1559
1560
1561
1562// particle composition
1563//
1564Int_t AliGenMUONlib::IpJpsi(TRandom *)
1565{
1566// J/Psi composition
1567 return 443;
1568}
1569Int_t AliGenMUONlib::IpPsiP(TRandom *)
1570{
1571// Psi prime composition
1572 return 100443;
1573}
1574Int_t AliGenMUONlib::IpJpsiFamily(TRandom *)
1575{
1576// J/Psi composition
1577 Int_t ip;
1578 Float_t r = gRandom->Rndm();
1579 if (r < 0.98) {
1580 ip = 443;
1581 } else {
1582 ip = 100443;
1583 }
1584 return ip;
1585}
1586
1587
1588
1589// Upsilon
1590//
1591//
1592// pt-distribution
1593//____________________________________________________________
1594Double_t AliGenMUONlib::PtUpsilonPPdummy(Double_t x, Double_t energy)
1595{
1596// Upsilon pT
1597// pp
1598// from the fit of CDF & LHC data, like for J/Psi in arXiv:1103.2394
1599//
1600 const Double_t kpt0 = 1.96*TMath::Power(energy,0.095);
1601 const Double_t kxn = 3.4;
1602 //
1603 Double_t pass1 = 1.+0.471*(x/kpt0)*(x/kpt0);
1604 return x/TMath::Power(pass1,kxn);
1605}
1606
1607Double_t AliGenMUONlib::PtUpsilonPP7000(const Double_t *px, const Double_t */*dummy*/)
1608{
1609// Upsilon pT
1610// pp 7 TeV
1611//
1612 return PtUpsilonPPdummy(*px,7000);
1613}
1614
1615Double_t AliGenMUONlib::PtUpsilonPP2760(const Double_t *px, const Double_t */*dummy*/)
1616{
1617// Upsilon pT
1618// pp 2.76 TeV
1619//
1620 return PtUpsilonPPdummy(*px,2760);
1621}
1622
4bac9bd3 1623Double_t AliGenMUONlib::PtUpsilonPP4400(const Double_t *px, const Double_t */*dummy*/)
1624{
1625// Upsilon pT
1626// pp 4.4 TeV
1627//
1628 return PtUpsilonPPdummy(*px,4400);
1629}
1630
1631Double_t AliGenMUONlib::PtUpsilonPP5030(const Double_t *px, const Double_t */*dummy*/)
1632{
1633// Upsilon pT
1634// pp 5.03 TeV
1635//
1636 return PtUpsilonPPdummy(*px,5030);
1637}
1638
7455632e 1639Double_t AliGenMUONlib::PtUpsilonPP8800(const Double_t *px, const Double_t */*dummy*/)
1640{
1641// Upsilon pT
1642// pp 8.8 TeV
1643//
1644 return PtUpsilonPPdummy(*px,8800);
1645}
1646
1647Double_t AliGenMUONlib::PtUpsilonPbPb2760ShFdummy(Double_t x, Int_t n)
1648{
1649// Usilon shadowing factor vs pT for PbPb min. bias and 11 centr. bins (in 2.5<y<4)
1650//
1651// PbPb 2.76 TeV, for EKS98, minimum bias shadowing factor = 0.87 in 4pi
1652//
1653 const Double_t f1[12] = {1, 1.128, 1.097, 1.037, 0.937, 0.821, 0.693, 0.558,
1654 0.428, 0.317, 0.231, 0.156};
1655 const Double_t f2[12] = {1, 1.313, 1.202, 1.039, 0.814, 0.593, 0.391, 0.224,
1656 0.106, 0.041, 0.013, 0.002};
1657 const Double_t c1[7] = {1.9089e+00, 1.2969e-03, 8.9786e-05,-5.3062e-06,
1658 -1.0046e-06,6.1446e-08, 1.0885e-09};
1659 const Double_t c2[7] = {8.8423e-01,-8.7488e-05, 5.9857e-04,-5.7959e-05,
1660 2.0059e-06,-2.7343e-08, 6.6053e-10};
1661 Double_t y1, y2;
1662 Int_t j;
1663 y1 = c1[j = 6]; y2 = c2[6];
1664 while (j > 0) {y1 = y1 * x + c1[--j]; y2 = y2 * x + c2[j];}
1665
1666 y1 /= 1.+c1[6]*TMath::Power(x,6);
1667 y2 /= 1.+c2[6]*TMath::Power(x,6);
1668 //
1669 y1 = 1 + (y1-2)*f1[n] + (y2+1-y1)*f2[n];
1670 if(y1<0) y1=0;
1671 return y1;
1672}
1673
1674Double_t AliGenMUONlib::PtUpsilonPbPb2760(const Double_t *px, const Double_t *dummy)
1675{
1676// Upsilon pT
1677// PbPb 2.76 TeV, minimum bias 0-100 %
1678//
1679 return PtUpsilonPbPb2760ShFdummy(*px, 0) * PtUpsilonPP2760(px, dummy);
1680}
1681
1682Double_t AliGenMUONlib::PtUpsilonPbPb2760c1(const Double_t *px, const Double_t *dummy)
1683{
1684// Upsilon pT
1685// PbPb 2.76 TeV, 1st centrality bin 0-5 %
1686//
1687 return PtUpsilonPbPb2760ShFdummy(*px, 1) * PtUpsilonPP2760(px, dummy);
1688}
1689
1690Double_t AliGenMUONlib::PtUpsilonPbPb2760c2(const Double_t *px, const Double_t *dummy)
1691{
1692// Upsilon pT
1693// PbPb 2.76 TeV, 2nd centrality bin 5-10 %
1694//
1695 return PtUpsilonPbPb2760ShFdummy(*px, 2) * PtUpsilonPP2760(px, dummy);
1696}
1697
1698Double_t AliGenMUONlib::PtUpsilonPbPb2760c3(const Double_t *px, const Double_t *dummy)
1699{
1700// Upsilon pT
1701// PbPb 2.76 TeV, 3rd centrality bin 10-20 %
1702//
1703 return PtUpsilonPbPb2760ShFdummy(*px, 3) * PtUpsilonPP2760(px, dummy);
1704}
1705
1706Double_t AliGenMUONlib::PtUpsilonPbPb2760c4(const Double_t *px, const Double_t *dummy)
1707{
1708// Upsilon pT
1709// PbPb 2.76 TeV, 4th centrality bin 20-30 %
1710//
1711 return PtUpsilonPbPb2760ShFdummy(*px, 4) * PtUpsilonPP2760(px, dummy);
1712}
1713
1714Double_t AliGenMUONlib::PtUpsilonPbPb2760c5(const Double_t *px, const Double_t *dummy)
1715{
1716// Upsilon pT
1717// PbPb 2.76 TeV, 5th centrality bin 30-40 %
1718//
1719 return PtUpsilonPbPb2760ShFdummy(*px, 5) * PtUpsilonPP2760(px, dummy);
1720}
1721
1722Double_t AliGenMUONlib::PtUpsilonPbPb2760c6(const Double_t *px, const Double_t *dummy)
1723{
1724// Upsilon pT
1725// PbPb 2.76 TeV, 6th centrality bin 40-50 %
1726//
1727 return PtUpsilonPbPb2760ShFdummy(*px, 6) * PtUpsilonPP2760(px, dummy);
1728}
1729
1730Double_t AliGenMUONlib::PtUpsilonPbPb2760c7(const Double_t *px, const Double_t *dummy)
1731{
1732// Upsilon pT
1733// PbPb 2.76 TeV, 7th centrality bin 50-60 %
1734//
1735 return PtUpsilonPbPb2760ShFdummy(*px, 7) * PtUpsilonPP2760(px, dummy);
1736}
1737
1738Double_t AliGenMUONlib::PtUpsilonPbPb2760c8(const Double_t *px, const Double_t *dummy)
1739{
1740// Upsilon pT
1741// PbPb 2.76 TeV, 8th centrality bin 60-70 %
1742//
1743 return PtUpsilonPbPb2760ShFdummy(*px, 8) * PtUpsilonPP2760(px, dummy);
1744}
1745
1746Double_t AliGenMUONlib::PtUpsilonPbPb2760c9(const Double_t *px, const Double_t *dummy)
1747{
1748// Upsilon pT
1749// PbPb 2.76 TeV, 9th centrality bin 70-80 %
1750//
1751 return PtUpsilonPbPb2760ShFdummy(*px, 9) * PtUpsilonPP2760(px, dummy);
1752}
1753
1754Double_t AliGenMUONlib::PtUpsilonPbPb2760c10(const Double_t *px, const Double_t *dummy)
1755{
1756// Upsilon pT
1757// PbPb 2.76 TeV, 10th centrality bin 80-90 %
1758//
1759 return PtUpsilonPbPb2760ShFdummy(*px, 10) * PtUpsilonPP2760(px, dummy);
1760}
1761
1762Double_t AliGenMUONlib::PtUpsilonPbPb2760c11(const Double_t *px, const Double_t *dummy)
1763{
1764// Upsilon pT
1765// PbPb 2.76 TeV, 11th centrality bin 90-100 %
1766//
1767 return PtUpsilonPbPb2760ShFdummy(*px, 11) * PtUpsilonPP2760(px, dummy);
1768}
1769
4bac9bd3 1770Double_t AliGenMUONlib::PtUpsilonPPb5030ShFdummy(Double_t x, Int_t n)
1771{
1772// Upsilon shadowing factor vs pT for pPb min. bias and 4 centr. bins (in 2.5<y<4)
1773//
1774// pPb 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.92 in 4pi
1775//
1776 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1777 const Double_t c[5] = {8.069e-01, 1.407e-04, 4.372e-04,-2.797e-05, 4.405e-06};
1778 Double_t y;
1779 Int_t j;
1780 y = c[j = 4];
1781 while (j > 0) y = y * x + c[--j];
1782 y /= 1 + c[4]*TMath::Power(x,4);
1783 //
1784 return 1 + (y-1)*f[n];
1785}
1786
1787Double_t AliGenMUONlib::PtUpsilonPPb5030(const Double_t *px, const Double_t *dummy)
1788{
1789// Upsilon pT
1790// pPb 5.03 TeV, minimum bias 0-100 %
1791//
1792 return PtUpsilonPPb5030ShFdummy(*px, 0) * PtUpsilonPP5030(px, dummy);
1793}
1794
1795Double_t AliGenMUONlib::PtUpsilonPPb5030c1(const Double_t *px, const Double_t *dummy)
1796{
1797// Upsilon pT
1798// pPb 5.03 TeV, 1st centrality bin 0-20 %
1799//
1800 return PtUpsilonPPb5030ShFdummy(*px, 1) * PtUpsilonPP5030(px, dummy);
1801}
1802
1803Double_t AliGenMUONlib::PtUpsilonPPb5030c2(const Double_t *px, const Double_t *dummy)
1804{
1805// Upsilon pT
1806// pPb 5.03 TeV, 2nd centrality bin 20-40 %
1807//
1808 return PtUpsilonPPb5030ShFdummy(*px, 2) * PtUpsilonPP5030(px, dummy);
1809}
1810
1811Double_t AliGenMUONlib::PtUpsilonPPb5030c3(const Double_t *px, const Double_t *dummy)
1812{
1813// Upsilon pT
1814// pPb 5.03 TeV, 3rd centrality bin 40-60 %
1815//
1816 return PtUpsilonPPb5030ShFdummy(*px, 3) * PtUpsilonPP5030(px, dummy);
1817}
1818
1819Double_t AliGenMUONlib::PtUpsilonPPb5030c4(const Double_t *px, const Double_t *dummy)
1820{
1821// Upsilon pT
1822// pPb 5.03 TeV, 4th centrality bin 60-100 %
1823//
1824 return PtUpsilonPPb5030ShFdummy(*px, 4) * PtUpsilonPP5030(px, dummy);
1825}
1826
1827Double_t AliGenMUONlib::PtUpsilonPbP5030ShFdummy(Double_t x, Int_t n)
1828{
1829// Upsilon shadowing factor vs pT for Pbp min. bias and 4 centr. bins (in 2.5<y<4)
1830//
1831// Pbp 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.92 in 4pi
1832//
1833 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1834 const Double_t c[5] = {1.122, 2.565e-03,-3.025e-04, 4.113e-06, 6.140e-07};
1835 Double_t y;
1836 Int_t j;
1837 y = c[j = 4];
1838 while (j > 0) y = y * x + c[--j];
1839 y /= 1 + c[4]*TMath::Power(x,4);
1840 //
1841 return 1 + (y-1)*f[n];
1842}
1843
1844Double_t AliGenMUONlib::PtUpsilonPbP5030(const Double_t *px, const Double_t *dummy)
1845{
1846// Upsilon pT
1847// Pbp 5.03 TeV, minimum bias 0-100 %
1848//
1849 return PtUpsilonPbP5030ShFdummy(*px, 0) * PtUpsilonPP5030(px, dummy);
1850}
1851
1852Double_t AliGenMUONlib::PtUpsilonPbP5030c1(const Double_t *px, const Double_t *dummy)
1853{
1854// Upsilon pT
1855// Pbp 5.03 TeV, 1st centrality bin 0-20 %
1856//
1857 return PtUpsilonPbP5030ShFdummy(*px, 1) * PtUpsilonPP5030(px, dummy);
1858}
1859
1860Double_t AliGenMUONlib::PtUpsilonPbP5030c2(const Double_t *px, const Double_t *dummy)
1861{
1862// Upsilon pT
1863// Pbp 5.03 TeV, 2nd centrality bin 20-40 %
1864//
1865 return PtUpsilonPbP5030ShFdummy(*px, 2) * PtUpsilonPP5030(px, dummy);
1866}
1867
1868Double_t AliGenMUONlib::PtUpsilonPbP5030c3(const Double_t *px, const Double_t *dummy)
1869{
1870// Upsilon pT
1871// Pbp 5.03 TeV, 3rd centrality bin 40-60 %
1872//
1873 return PtUpsilonPbP5030ShFdummy(*px, 3) * PtUpsilonPP5030(px, dummy);
1874}
1875
1876Double_t AliGenMUONlib::PtUpsilonPbP5030c4(const Double_t *px, const Double_t *dummy)
1877{
1878// Upsilon pT
1879// Pbp 5.03 TeV, 4th centrality bin 60-100 %
1880//
1881 return PtUpsilonPbP5030ShFdummy(*px, 4) * PtUpsilonPP5030(px, dummy);
1882}
1883
7455632e 1884Double_t AliGenMUONlib::PtUpsilonPPb8800ShFdummy(Double_t x, Int_t n)
1885{
1886// Upsilon shadowing factor vs pT for pPb min. bias and 4 centr. bins (in 2.5<y<4)
1887//
1888// pPb 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.89 in 4pi
1889//
1890 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1891 const Double_t c[5] = {7.6561e-01, 1.1360e-04, 4.9596e-04,-3.0287e-05, 3.7555e-06};
1892 Double_t y;
1893 Int_t j;
1894 y = c[j = 4];
1895 while (j > 0) y = y * x + c[--j];
1896 y /= 1 + c[4]*TMath::Power(x,4);
1897 //
1898 return 1 + (y-1)*f[n];
1899}
1900
1901Double_t AliGenMUONlib::PtUpsilonPPb8800(const Double_t *px, const Double_t *dummy)
1902{
1903// Upsilon pT
1904// pPb 8.8 TeV, minimum bias 0-100 %
1905//
1906 return PtUpsilonPPb8800ShFdummy(*px, 0) * PtUpsilonPP8800(px, dummy);
1907}
1908
1909Double_t AliGenMUONlib::PtUpsilonPPb8800c1(const Double_t *px, const Double_t *dummy)
1910{
1911// Upsilon pT
1912// pPb 8.8 TeV, 1st centrality bin 0-20 %
1913//
1914 return PtUpsilonPPb8800ShFdummy(*px, 1) * PtUpsilonPP8800(px, dummy);
1915}
1916
1917Double_t AliGenMUONlib::PtUpsilonPPb8800c2(const Double_t *px, const Double_t *dummy)
1918{
1919// Upsilon pT
1920// pPb 8.8 TeV, 2nd centrality bin 20-40 %
1921//
1922 return PtUpsilonPPb8800ShFdummy(*px, 2) * PtUpsilonPP8800(px, dummy);
1923}
1924
1925Double_t AliGenMUONlib::PtUpsilonPPb8800c3(const Double_t *px, const Double_t *dummy)
17d28ba5 1926{
7455632e 1927// Upsilon pT
1928// pPb 8.8 TeV, 3rd centrality bin 40-60 %
1929//
1930 return PtUpsilonPPb8800ShFdummy(*px, 3) * PtUpsilonPP8800(px, dummy);
1931}
17d28ba5 1932
7455632e 1933Double_t AliGenMUONlib::PtUpsilonPPb8800c4(const Double_t *px, const Double_t *dummy)
1934{
1935// Upsilon pT
1936// pPb 8.8 TeV, 4th centrality bin 60-100 %
17d28ba5 1937//
7455632e 1938 return PtUpsilonPPb8800ShFdummy(*px, 4) * PtUpsilonPP8800(px, dummy);
1939}
1940
1941Double_t AliGenMUONlib::PtUpsilonPbP8800ShFdummy(Double_t x, Int_t n)
1942{
1943// Upsilon shadowing factor vs pT for Pbp min. bias and 4 centr. bins (in 2.5<y<4)
17d28ba5 1944//
7455632e 1945// Pbp 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.89 in 4pi
17d28ba5 1946//
7455632e 1947 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
1948 const Double_t c[5] = {1.0975, 3.1905e-03,-2.0477e-04, 8.5270e-06, 2.5343e-06};
1949 Double_t y;
1950 Int_t j;
1951 y = c[j = 4];
1952 while (j > 0) y = y * x + c[--j];
1953 y /= 1 + c[4]*TMath::Power(x,4);
1954 //
1955 return 1 + (y-1)*f[n];
17d28ba5 1956}
1957
7455632e 1958Double_t AliGenMUONlib::PtUpsilonPbP8800(const Double_t *px, const Double_t *dummy)
fe4da5cc 1959{
7455632e 1960// Upsilon pT
1961// Pbp 8.8 TeV, minimum bias 0-100 %
1962//
1963 return PtUpsilonPbP8800ShFdummy(*px, 0) * PtUpsilonPP8800(px, dummy);
fe4da5cc 1964}
7455632e 1965
1966Double_t AliGenMUONlib::PtUpsilonPbP8800c1(const Double_t *px, const Double_t *dummy)
88e5db43 1967{
7455632e 1968// Upsilon pT
1969// Pbp 8.8 TeV, 1st centrality bin 0-20 %
1970//
1971 return PtUpsilonPbP8800ShFdummy(*px, 1) * PtUpsilonPP8800(px, dummy);
88e5db43 1972}
7455632e 1973
1974Double_t AliGenMUONlib::PtUpsilonPbP8800c2(const Double_t *px, const Double_t *dummy)
0ad09590 1975{
7455632e 1976// Upsilon pT
1977// Pbp 8.8 TeV, 2nd centrality bin 20-40 %
1978//
1979 return PtUpsilonPbP8800ShFdummy(*px, 2) * PtUpsilonPP8800(px, dummy);
0ad09590 1980}
1981
7455632e 1982Double_t AliGenMUONlib::PtUpsilonPbP8800c3(const Double_t *px, const Double_t *dummy)
1983{
1984// Upsilon pT
1985// Pbp 8.8 TeV, 3rd centrality bin 40-60 %
fe4da5cc 1986//
7455632e 1987 return PtUpsilonPbP8800ShFdummy(*px, 3) * PtUpsilonPP8800(px, dummy);
1988}
1989
1990Double_t AliGenMUONlib::PtUpsilonPbP8800c4(const Double_t *px, const Double_t *dummy)
1991{
1992// Upsilon pT
1993// Pbp 8.8 TeV, 4th centrality bin 60-100 %
fe4da5cc 1994//
7455632e 1995 return PtUpsilonPbP8800ShFdummy(*px, 4) * PtUpsilonPP8800(px, dummy);
1996}
1997
75e0cc59 1998Double_t AliGenMUONlib::PtUpsilon( const Double_t *px, const Double_t */*dummy*/ )
fe4da5cc 1999{
d90f80fd 2000// Upsilon pT
2001 const Double_t kpt0 = 5.3;
2002 const Double_t kxn = 2.5;
fe4da5cc 2003 Double_t x=*px;
2004 //
d90f80fd 2005 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2006 return x/TMath::Power(pass1,kxn);
fe4da5cc 2007}
05932df6 2008
75e0cc59 2009Double_t AliGenMUONlib::PtUpsilonCDFscaled( const Double_t *px, const Double_t */*dummy*/ )
0e137c25 2010{
2011// Upsilon pT
48416d65 2012 const Double_t kpt0 = 7.753;
2013 const Double_t kxn = 3.042;
0e137c25 2014 Double_t x=*px;
2015 //
2016 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2017 return x/TMath::Power(pass1,kxn);
2018}
2019
75e0cc59 2020Double_t AliGenMUONlib::PtUpsilonCDFscaledPP( const Double_t *px, const Double_t */*dummy*/ )
9ff13849 2021{
2022// Upsilon pT
2023//
2024// pp 14 TeV
2025//
2026// scaled from CDF data at 2 TeV
2027
2028 const Double_t kpt0 = 8.610;
2029 const Double_t kxn = 3.051;
2030 Double_t x=*px;
2031 //
2032 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2033 return x/TMath::Power(pass1,kxn);
2034}
2035
b33adf51 2036Double_t AliGenMUONlib::PtUpsilonCDFscaledPP10( const Double_t *px, const Double_t */*dummy*/)
2037{
2038// Upsilon pT
2039//
2040// pp 10 TeV
2041//
2042// scaled from CDF data at 2 TeV
2043
2044 const Double_t kpt0 = 8.235;
2045 const Double_t kxn = 3.051;
2046 Double_t x=*px;
2047 //
2048 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2049 return x/TMath::Power(pass1,kxn);
2050}
2051
9fd56238 2052Double_t AliGenMUONlib::PtUpsilonCDFscaledPP9( const Double_t *px, const Double_t */*dummy*/)
2053{
2054// Upsilon pT
2055//
2056// pp 8.8 TeV
2057// scaled from CDF data at 2 TeV
2058//
2059 const Double_t kpt0 = 8.048;
2060 const Double_t kxn = 3.051;
2061 Double_t x=*px;
2062 //
2063 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2064 return x/TMath::Power(pass1,kxn);
2065}
2066
2067Double_t AliGenMUONlib::PtUpsilonCDFscaledPP7( const Double_t *px, const Double_t */*dummy*/)
2068{
2069// Upsilon pT
2070//
2071// pp 7 TeV
2072//
2073// scaled from CDF data at 2 TeV
2074
2075 const Double_t kpt0 = 7.817;
2076 const Double_t kxn = 3.051;
2077 Double_t x=*px;
2078 //
2079 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2080 return x/TMath::Power(pass1,kxn);
2081}
2082
2083Double_t AliGenMUONlib::PtUpsilonCDFscaledPP4( const Double_t *px, const Double_t */*dummy*/)
2084{
2085// Upsilon pT
2086//
2087// pp 3.94 TeV
2088// scaled from CDF data at 2 TeV
2089//
2090 const Double_t kpt0 = 7.189;
2091 const Double_t kxn = 3.051;
2092 Double_t x=*px;
2093 //
2094 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2095 return x/TMath::Power(pass1,kxn);
2096}
2097
2098Double_t AliGenMUONlib::PtUpsilonCDFscaledPPb9( const Double_t *px, const Double_t *dummy)
2099{
2100// Upsilon pT
2101//
7455632e 2102// pPb 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.89
9fd56238 2103//
2104 Double_t c[5] = {7.64952e-01, 1.12501e-04, 4.96038e-04, -3.03198e-05, 3.74035e-06};
2105 Double_t x=*px;
2106 Double_t y;
2107 Int_t j;
2108 y = c[j = 4];
2109 while (j > 0) y = y * x + c[--j];
2110 //
2111 Double_t d = 1.+c[4]*TMath::Power(x,4);
2112 return y/d * AliGenMUONlib::PtUpsilonCDFscaledPP9(px,dummy);
2113}
2114
2115Double_t AliGenMUONlib::PtUpsilonCDFscaledPbP9( const Double_t *px, const Double_t *dummy)
2116{
2117// Upsilon pT
2118//
7455632e 2119// Pbp 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.89
9fd56238 2120//
2121 Double_t c[5] = {1.09881e+00, 3.08329e-03, -2.00356e-04, 8.28991e-06, 2.52576e-06};
2122 Double_t x=*px;
2123 Double_t y;
2124 Int_t j;
2125 y = c[j = 4];
2126 while (j > 0) y = y * x + c[--j];
2127 //
2128 Double_t d = 1.+c[4]*TMath::Power(x,4);
2129 return y/d * AliGenMUONlib::PtUpsilonCDFscaledPP9(px,dummy);
2130}
2131
2132Double_t AliGenMUONlib::PtUpsilonCDFscaledPbPb4( const Double_t *px, const Double_t *dummy)
2133{
2134// Upsilon pT
2135//
2136// PbPb 3.94 TeV, for EKS98 with minimum bias shadowing factor 0.85
2137//
2138 Double_t c[5] = {8.65872e-01, 2.05465e-03, 2.56063e-04, -1.65598e-05, 2.29209e-06};
2139 Double_t x=*px;
2140 Double_t y;
2141 Int_t j;
2142 y = c[j = 4];
2143 while (j > 0) y = y * x + c[--j];
2144 //
2145 Double_t d = 1.+c[4]*TMath::Power(x,4);
2146 return y/d * AliGenMUONlib::PtUpsilonCDFscaledPP4(px,dummy);
2147}
2148
75e0cc59 2149Double_t AliGenMUONlib::PtUpsilonFlat( const Double_t */*px*/, const Double_t */*dummy*/ )
4ca8d070 2150{
2151 return 1.;
2152}
2153
75e0cc59 2154Double_t AliGenMUONlib::PtUpsilonPbPb( const Double_t *px, const Double_t */*dummy*/)
05932df6 2155{
05932df6 2156//
2157// Upsilon pT
2158//
2159//
2160// R. Vogt 2002
2161// PbPb 5.5 TeV
2162// MRST HO
2163// mc = 1.4 GeV, pt-kick 1 GeV
2164//
1af7144e 2165 Float_t x = px[0];
2166 Double_t c[8] = {
2167 -1.03488e+01, 1.28065e+01, -6.60500e+00, 1.66140e+00,
2168 -2.34293e-01, 1.86925e-02, -7.80708e-04, 1.30610e-05
2169 };
3d905dd7 2170 Double_t y;
2171 if (x < 10.) {
2172 Int_t j;
2173 y = c[j = 7];
2174 while (j > 0) y = y * x +c[--j];
2175 y = x * TMath::Exp(y);
2176 } else {
2177 y = 0.;
2178 }
1af7144e 2179 return y;
05932df6 2180}
2181
75e0cc59 2182Double_t AliGenMUONlib::PtUpsilonPP( const Double_t *px, const Double_t */*dummy*/)
bb6e81ac 2183{
bb6e81ac 2184//
2185// Upsilon pT
2186//
2187//
2188// R. Vogt 2002
2189// pp 14 TeV
2190// MRST HO
2191// mc = 1.4 GeV, pt-kick 1 GeV
2192//
2193 Float_t x = px[0];
2194 Double_t c[8] = {-7.93955e+00, 1.06306e+01, -5.21392e+00, 1.19703e+00,
2195 -1.45718e-01, 8.95151e-03, -2.04806e-04, -1.13053e-06};
2196
2197 Double_t y;
2198 if (x < 10.) {
2199 Int_t j;
2200 y = c[j = 7];
2201 while (j > 0) y = y * x +c[--j];
2202 y = x * TMath::Exp(y);
2203 } else {
2204 y = 0.;
2205 }
2206 return y;
2207}
2208
fe4da5cc 2209//
2210// y-distribution
2211//
2212//____________________________________________________________
7455632e 2213Double_t AliGenMUONlib::YUpsilonPPdummy(Double_t x, Double_t energy)
2214{
2215// Upsilon y
2216// pp
2217// from the fit of CDF & LHC data, like for J/Psi in arXiv:1103.2394
2218//
2219 x = x/TMath::Log(energy/9.46);
2220 x = x*x;
2221 Double_t y = TMath::Exp(-x/0.4/0.4/2);
2222 if(x > 1) y=0;
2223 return y;
2224}
2225
2226Double_t AliGenMUONlib::YUpsilonPPpoly(Double_t x, Double_t energy)
2227{
2228// Upsilon y
2229// pp
2230// from the fit of CDF & LHC data, like for J/Psi in arXiv:1103.2394
2231//
2232 x = x/TMath::Log(energy/9.46);
2233 x = x*x;
2234 Double_t y = 1 - 6.9*x*x;
2235 if(y < 0) y=0;
2236 return y;
2237}
2238
2239Double_t AliGenMUONlib::YUpsilonPP7000(const Double_t *px, const Double_t */*dummy*/)
2240{
2241// Upsilon y
2242// pp 7 TeV
2243//
2244 return YUpsilonPPdummy(*px, 7000);
2245}
2246
2247Double_t AliGenMUONlib::YUpsilonPP2760(const Double_t *px, const Double_t */*dummy*/)
2248{
2249// Upsilon y
2250// pp 2.76 TeV
2251//
2252 return YUpsilonPPdummy(*px, 2760);
2253}
2254
4bac9bd3 2255Double_t AliGenMUONlib::YUpsilonPP4400(const Double_t *px, const Double_t */*dummy*/)
2256{
2257// Upsilon y
2258// pp 4.4 TeV
2259//
2260 return YUpsilonPPdummy(*px, 4400);
2261}
2262
2263Double_t AliGenMUONlib::YUpsilonPP5030(const Double_t *px, const Double_t */*dummy*/)
2264{
2265// Upsilon y
2266// pp 5.03 TeV
2267//
2268 return YUpsilonPPdummy(*px, 5030);
2269}
2270
7455632e 2271Double_t AliGenMUONlib::YUpsilonPP8800(const Double_t *px, const Double_t */*dummy*/)
2272{
2273// Upsilon y
2274// pp 8.8 TeV
2275//
2276 return YUpsilonPPdummy(*px, 8800);
2277}
2278
2279Double_t AliGenMUONlib::YUpsilonPPpoly7000(const Double_t *px, const Double_t */*dummy*/)
2280{
2281// Upsilon y
2282// pp 7 TeV
2283//
2284 return YUpsilonPPpoly(*px, 7000);
2285}
2286
2287Double_t AliGenMUONlib::YUpsilonPPpoly2760(const Double_t *px, const Double_t */*dummy*/)
2288{
2289// Upsilon y
2290// pp 2.76 TeV
2291//
2292 return YUpsilonPPpoly(*px, 2760);
2293}
2294
2295Double_t AliGenMUONlib::YUpsilonPbPb2760ShFdummy(Double_t x, Int_t n)
2296{
2297// Upsilon shadowing factor vs y for PbPb min. bias and 11 centr. bins
2298//
2299// PbPb 2.76 TeV, for EKS98, minimum bias shadowing factor = 0.87 in 4pi
2300//
2301 const Double_t f1[12] = {1, 1.128, 1.097, 1.037, 0.937, 0.821, 0.693, 0.558,
2302 0.428, 0.317, 0.231, 0.156};
2303 const Double_t f2[12] = {1, 1.313, 1.202, 1.039, 0.814, 0.593, 0.391, 0.224,
2304 0.106, 0.041, 0.013, 0.002};
2305 const Double_t c1[5] = {1.8547e+00, 1.6717e-02,-2.1285e-04,-9.7662e-05, 2.5768e-06};
2306 const Double_t c2[5] = {8.6029e-01, 1.1742e-02,-2.7944e-04,-6.7973e-05, 1.8838e-06};
2307
2308 x = x*x;
2309 Double_t y1, y2;
2310 Int_t j;
2311 y1 = c1[j = 4]; y2 = c2[4];
2312 while (j > 0) {y1 = y1 * x + c1[--j]; y2 = y2 * x + c2[j];}
2313
2314 y1 = 1 + (y1-2)*f1[n] + (y2+1-y1)*f2[n];
2315 if(y1<0) y1=0;
2316 return y1;
2317}
2318
2319Double_t AliGenMUONlib::YUpsilonPbPb2760(const Double_t *px, const Double_t *dummy)
2320{
2321// Upsilon y
2322// PbPb 2.76 TeV, minimum bias 0-100 %
2323//
2324 return YUpsilonPbPb2760ShFdummy(*px, 0) * YUpsilonPP2760(px, dummy);
2325}
2326
2327Double_t AliGenMUONlib::YUpsilonPbPb2760c1(const Double_t *px, const Double_t *dummy)
2328{
2329// Upsilon y
2330// PbPb 2.76 TeV, 1st centrality bin 0-5 %
2331//
2332 return YUpsilonPbPb2760ShFdummy(*px, 1) * YUpsilonPP2760(px, dummy);
2333}
2334
2335Double_t AliGenMUONlib::YUpsilonPbPb2760c2(const Double_t *px, const Double_t *dummy)
2336{
2337// Upsilon y
2338// PbPb 2.76 TeV, 2nd centrality bin 5-10 %
2339//
2340 return YUpsilonPbPb2760ShFdummy(*px, 2) * YUpsilonPP2760(px, dummy);
2341}
2342
2343Double_t AliGenMUONlib::YUpsilonPbPb2760c3(const Double_t *px, const Double_t *dummy)
2344{
2345// Upsilon y
2346// PbPb 2.76 TeV, 3rd centrality bin 10-20 %
2347//
2348 return YUpsilonPbPb2760ShFdummy(*px, 3) * YUpsilonPP2760(px, dummy);
2349}
2350
2351Double_t AliGenMUONlib::YUpsilonPbPb2760c4(const Double_t *px, const Double_t *dummy)
2352{
2353// Upsilon y
2354// PbPb 2.76 TeV, 4th centrality bin 20-30 %
2355//
2356 return YUpsilonPbPb2760ShFdummy(*px, 4) * YUpsilonPP2760(px, dummy);
2357}
2358
2359Double_t AliGenMUONlib::YUpsilonPbPb2760c5(const Double_t *px, const Double_t *dummy)
2360{
2361// Upsilon y
2362// PbPb 2.76 TeV, 5th centrality bin 30-40 %
2363//
2364 return YUpsilonPbPb2760ShFdummy(*px, 5) * YUpsilonPP2760(px, dummy);
2365}
2366
2367Double_t AliGenMUONlib::YUpsilonPbPb2760c6(const Double_t *px, const Double_t *dummy)
2368{
2369// Upsilon y
2370// PbPb 2.76 TeV, 6th centrality bin 40-50 %
2371//
2372 return YUpsilonPbPb2760ShFdummy(*px, 6) * YUpsilonPP2760(px, dummy);
2373}
2374
2375Double_t AliGenMUONlib::YUpsilonPbPb2760c7(const Double_t *px, const Double_t *dummy)
2376{
2377// Upsilon y
2378// PbPb 2.76 TeV, 7th centrality bin 50-60 %
2379//
2380 return YUpsilonPbPb2760ShFdummy(*px, 7) * YUpsilonPP2760(px, dummy);
2381}
2382
2383Double_t AliGenMUONlib::YUpsilonPbPb2760c8(const Double_t *px, const Double_t *dummy)
2384{
2385// Upsilon y
2386// PbPb 2.76 TeV, 8th centrality bin 60-70 %
2387//
2388 return YUpsilonPbPb2760ShFdummy(*px, 8) * YUpsilonPP2760(px, dummy);
2389}
2390
2391Double_t AliGenMUONlib::YUpsilonPbPb2760c9(const Double_t *px, const Double_t *dummy)
2392{
2393// Upsilon y
2394// PbPb 2.76 TeV, 9th centrality bin 70-80 %
2395//
2396 return YUpsilonPbPb2760ShFdummy(*px, 9) * YUpsilonPP2760(px, dummy);
2397}
2398
2399Double_t AliGenMUONlib::YUpsilonPbPb2760c10(const Double_t *px, const Double_t *dummy)
2400{
2401// Upsilon y
2402// PbPb 2.76 TeV, 10th centrality bin 80-90 %
2403//
2404 return YUpsilonPbPb2760ShFdummy(*px, 10) * YUpsilonPP2760(px, dummy);
2405}
2406
2407Double_t AliGenMUONlib::YUpsilonPbPb2760c11(const Double_t *px, const Double_t *dummy)
2408{
2409// Upsilon y
2410// PbPb 2.76 TeV, 11th centrality bin 90-100 %
2411//
2412 return YUpsilonPbPb2760ShFdummy(*px, 11) * YUpsilonPP2760(px, dummy);
2413}
2414
4bac9bd3 2415Double_t AliGenMUONlib::YUpsilonPP5030dummy(Double_t px)
2416{
2417 return AliGenMUONlib::YUpsilonPP5030(&px, (Double_t*) 0);
2418}
2419
2420Double_t AliGenMUONlib::YUpsilonPPb5030ShFdummy(Double_t x, Int_t n)
2421{
2422// Upsilon shadowing factor vs y for pPb min. bias and 4 centr. bins
2423//
2424// pPb 5.03 TeV, for EPS09-LO, minimum bias shadowing factor = 0.92 in 4pi
2425//
2426 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
2427 const Double_t c[7] = {8.885e-01, 4.620e-02, 1.158e-02, 4.959e-04,-4.422e-04,-5.345e-05, 0.};
2428 Double_t y;
2429 Int_t j;
2430 y = c[j = 6];
2431 while (j > 0) y = y * x + c[--j];
2432 if(y<0) y=0;
2433 //
2434 return 1 +(y-1)*f[n];
2435}
2436
2437Double_t AliGenMUONlib::YUpsilonPPb5030(const Double_t *px, const Double_t */*dummy*/)
2438{
2439// Upsilon y
2440// pPb 5.03 TeV, minimum bias 0-100 %
2441//
2442 Double_t x = px[0] + 0.47; // rapidity shift
2443 return YUpsilonPPb5030ShFdummy(x, 0) * YUpsilonPP5030dummy(x);
2444}
2445
2446Double_t AliGenMUONlib::YUpsilonPPb5030c1(const Double_t *px, const Double_t */*dummy*/)
2447{
2448// Upsilon y
2449// pPb 5.03 TeV, 1st centrality bin 0-20 %
2450//
2451 Double_t x = px[0] + 0.47; // rapidity shift
2452 return YUpsilonPPb5030ShFdummy(x, 1) * YUpsilonPP5030dummy(x);
2453}
2454
2455Double_t AliGenMUONlib::YUpsilonPPb5030c2(const Double_t *px, const Double_t */*dummy*/)
2456{
2457// Upsilon y
2458// pPb 5.03 TeV, 2nd centrality bin 20-40 %
2459//
2460 Double_t x = px[0] + 0.47; // rapidity shift
2461 return YUpsilonPPb5030ShFdummy(x, 2) * YUpsilonPP5030dummy(x);
2462}
2463
2464Double_t AliGenMUONlib::YUpsilonPPb5030c3(const Double_t *px, const Double_t */*dummy*/)
2465{
2466// Upsilon y
2467// pPb 5.03 TeV, 3rd centrality bin 40-60 %
2468//
2469 Double_t x = px[0] + 0.47; // rapidity shift
2470 return YUpsilonPPb5030ShFdummy(x, 3) * YUpsilonPP5030dummy(x);
2471}
2472
2473Double_t AliGenMUONlib::YUpsilonPPb5030c4(const Double_t *px, const Double_t */*dummy*/)
2474{
2475// Upsilon y
2476// pPb 5.03 TeV, 4th centrality bin 60-100 %
2477//
2478 Double_t x = px[0] + 0.47; // rapidity shift
2479 return YUpsilonPPb5030ShFdummy(x, 4) * YUpsilonPP5030dummy(x);
2480}
2481
2482Double_t AliGenMUONlib::YUpsilonPbP5030(const Double_t *px, const Double_t */*dummy*/)
2483{
2484// Upsilon y
2485// Pbp 5.03 TeV, minimum bias 0-100 %
2486//
2487 Double_t x = -px[0] + 0.47; // rapidity shift
2488 return YUpsilonPPb5030ShFdummy(x, 0) * YUpsilonPP5030dummy(x);
2489}
2490
2491Double_t AliGenMUONlib::YUpsilonPbP5030c1(const Double_t *px, const Double_t */*dummy*/)
2492{
2493// Upsilon y
2494// Pbp 5.03 TeV, 1st centrality bin 0-20 %
2495//
2496 Double_t x = -px[0] + 0.47; // rapidity shift
2497 return YUpsilonPPb5030ShFdummy(x, 1) * YUpsilonPP5030dummy(x);
2498}
2499
2500Double_t AliGenMUONlib::YUpsilonPbP5030c2(const Double_t *px, const Double_t */*dummy*/)
2501{
2502// Upsilon y
2503// Pbp 5.03 TeV, 2nd centrality bin 20-40 %
2504//
2505 Double_t x = -px[0] + 0.47; // rapidity shift
2506 return YUpsilonPPb5030ShFdummy(x, 2) * YUpsilonPP5030dummy(x);
2507}
2508
2509Double_t AliGenMUONlib::YUpsilonPbP5030c3(const Double_t *px, const Double_t */*dummy*/)
2510{
2511// Upsilon y
2512// Pbp 5.03 TeV, 3rd centrality bin 40-60 %
2513//
2514 Double_t x = -px[0] + 0.47; // rapidity shift
2515 return YUpsilonPPb5030ShFdummy(x, 3) * YUpsilonPP5030dummy(x);
2516}
2517
2518Double_t AliGenMUONlib::YUpsilonPbP5030c4(const Double_t *px, const Double_t */*dummy*/)
2519{
2520// Upsilon y
2521// Pbp 5.03 TeV, 4th centrality bin 60-100 %
2522//
2523 Double_t x = -px[0] + 0.47; // rapidity shift
2524 return YUpsilonPPb5030ShFdummy(x, 4) * YUpsilonPP5030dummy(x);
2525}
2526
7455632e 2527Double_t AliGenMUONlib::YUpsilonPP8800dummy(Double_t px)
2528{
2529 return AliGenMUONlib::YUpsilonPP8800(&px, (Double_t*) 0);
2530}
2531
2532Double_t AliGenMUONlib::YUpsilonPPb8800ShFdummy(Double_t x, Int_t n)
2533{
2534// Upsilon shadowing factor vs y for pPb min. bias and 4 centr. bins
2535//
2536// pPb 8.8 TeV, for EKS98, minimum bias shadowing factor = 0.89 in 4pi
2537//
2538 const Double_t f[5] = {1, 1.33, 1.05, 0.67, 0.23};
2539 const Double_t c[7] = {8.6581e-01, 4.6111e-02, 7.6911e-03, 8.7313e-04,
2540 -1.4700e-04,-5.0975e-05,-3.5718e-06};
2541 Double_t y;
2542 Int_t j;
2543 y = c[j = 6];
2544 while (j > 0) y = y * x + c[--j];
2545 if(y<0) y=0;
2546 //
2547 return 1 +(y-1)*f[n];
2548}
2549
2550Double_t AliGenMUONlib::YUpsilonPPb8800(const Double_t *px, const Double_t */*dummy*/)
2551{
2552// Upsilon y
2553// pPb 8.8 TeV, minimum bias 0-100 %
2554//
2555 Double_t x = px[0] + 0.47; // rapidity shift
2556 return YUpsilonPPb8800ShFdummy(x, 0) * YUpsilonPP8800dummy(x);
2557}
2558
2559Double_t AliGenMUONlib::YUpsilonPPb8800c1(const Double_t *px, const Double_t */*dummy*/)
2560{
2561// Upsilon y
2562// pPb 8.8 TeV, 1st centrality bin 0-20 %
2563//
2564 Double_t x = px[0] + 0.47; // rapidity shift
2565 return YUpsilonPPb8800ShFdummy(x, 1) * YUpsilonPP8800dummy(x);
2566}
2567
2568Double_t AliGenMUONlib::YUpsilonPPb8800c2(const Double_t *px, const Double_t */*dummy*/)
2569{
2570// Upsilon y
2571// pPb 8.8 TeV, 2nd centrality bin 20-40 %
2572//
2573 Double_t x = px[0] + 0.47; // rapidity shift
2574 return YUpsilonPPb8800ShFdummy(x, 2) * YUpsilonPP8800dummy(x);
2575}
2576
2577Double_t AliGenMUONlib::YUpsilonPPb8800c3(const Double_t *px, const Double_t */*dummy*/)
2578{
2579// Upsilon y
2580// pPb 8.8 TeV, 3rd centrality bin 40-60 %
2581//
2582 Double_t x = px[0] + 0.47; // rapidity shift
2583 return YUpsilonPPb8800ShFdummy(x, 3) * YUpsilonPP8800dummy(x);
2584}
2585
2586Double_t AliGenMUONlib::YUpsilonPPb8800c4(const Double_t *px, const Double_t */*dummy*/)
2587{
2588// Upsilon y
2589// pPb 8.8 TeV, 4th centrality bin 60-100 %
2590//
2591 Double_t x = px[0] + 0.47; // rapidity shift
2592 return YUpsilonPPb8800ShFdummy(x, 4) * YUpsilonPP8800dummy(x);
2593}
2594
2595Double_t AliGenMUONlib::YUpsilonPbP8800(const Double_t *px, const Double_t */*dummy*/)
2596{
2597// Upsilon y
2598// Pbp 8.8 TeV, minimum bias 0-100 %
2599//
2600 Double_t x = -px[0] + 0.47; // rapidity shift
2601 return YUpsilonPPb8800ShFdummy(x, 0) * YUpsilonPP8800dummy(x);
2602}
2603
2604Double_t AliGenMUONlib::YUpsilonPbP8800c1(const Double_t *px, const Double_t */*dummy*/)
2605{
2606// Upsilon y
2607// Pbp 8.8 TeV, 1st centrality bin 0-20 %
2608//
2609 Double_t x = -px[0] + 0.47; // rapidity shift
2610 return YUpsilonPPb8800ShFdummy(x, 1) * YUpsilonPP8800dummy(x);
2611}
2612
2613Double_t AliGenMUONlib::YUpsilonPbP8800c2(const Double_t *px, const Double_t */*dummy*/)
2614{
2615// Upsilon y
2616// Pbp 8.8 TeV, 2nd centrality bin 20-40 %
2617//
2618 Double_t x = -px[0] + 0.47; // rapidity shift
2619 return YUpsilonPPb8800ShFdummy(x, 2) * YUpsilonPP8800dummy(x);
2620}
2621
2622Double_t AliGenMUONlib::YUpsilonPbP8800c3(const Double_t *px, const Double_t */*dummy*/)
2623{
2624// Upsilon y
2625// Pbp 8.8 TeV, 3rd centrality bin 40-60 %
2626//
2627 Double_t x = -px[0] + 0.47; // rapidity shift
2628 return YUpsilonPPb8800ShFdummy(x, 3) * YUpsilonPP8800dummy(x);
2629}
2630
2631Double_t AliGenMUONlib::YUpsilonPbP8800c4(const Double_t *px, const Double_t */*dummy*/)
2632{
2633// Upsilon y
2634// Pbp 8.8 TeV, 4th centrality bin 60-100 %
2635//
2636 Double_t x = -px[0] + 0.47; // rapidity shift
2637 return YUpsilonPPb8800ShFdummy(x, 4) * YUpsilonPP8800dummy(x);
2638}
2639
75e0cc59 2640Double_t AliGenMUONlib::YUpsilon(const Double_t *py, const Double_t */*dummy*/)
fe4da5cc 2641{
d90f80fd 2642// Upsilon y
2643 const Double_t ky0 = 3.;
2644 const Double_t kb=1.;
fe4da5cc 2645 Double_t yu;
2646 Double_t y=TMath::Abs(*py);
2647 //
d90f80fd 2648 if (y < ky0)
2649 yu=kb;
fe4da5cc 2650 else
d90f80fd 2651 yu=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
fe4da5cc 2652 return yu;
2653}
05932df6 2654
2655
75e0cc59 2656Double_t AliGenMUONlib::YUpsilonPbPb( const Double_t *px, const Double_t */*dummy*/)
05932df6 2657{
2658
2659//
2660// Upsilon y
2661//
2662//
2663// R. Vogt 2002
2664// PbPb 5.5 TeV
2665// MRST HO
2666// mc = 1.4 GeV, pt-kick 1 GeV
2667//
2668
1af7144e 2669 Double_t c[7] = {3.40036e-01, -3.98882e-07, -4.48398e-03, 8.46411e-08, -6.10854e-04,
2670 -2.99753e-09, 1.28895e-05};
b33adf51 2671 Double_t x = TMath::Abs(px[0]);
2672 if (x > 5.55) return 0.;
1af7144e 2673 Int_t j;
2674 Double_t y = c[j = 6];
2675 while (j > 0) y = y * x +c[--j];
2676 return y;
05932df6 2677}
2678
75e0cc59 2679Double_t AliGenMUONlib::YUpsilonCDFscaled( const Double_t *px, const Double_t *dummy)
0e137c25 2680{
2681 // Upsilon y
2682 return AliGenMUONlib::YUpsilonPbPb(px, dummy);
2683
4ca8d070 2684}
9ff13849 2685
75e0cc59 2686Double_t AliGenMUONlib::YUpsilonCDFscaledPP( const Double_t *px, const Double_t *dummy)
9ff13849 2687{
2688 // Upsilon y
2689 return AliGenMUONlib::YUpsilonPP(px, dummy);
2690
2691}
2692
75e0cc59 2693Double_t AliGenMUONlib::YUpsilonFlat( const Double_t */*px*/, const Double_t */*dummy*/)
4ca8d070 2694{
2695 // Upsilon y
2696 return 1.;
2697
0e137c25 2698}
2699
b33adf51 2700Double_t AliGenMUONlib::YUpsilonCDFscaledPP10( const Double_t *px, const Double_t */*dummy*/)
2701{
b33adf51 2702// Upsilon y
2703//
2704// pp 10 TeV
2705// scaled from YUpsilonPP(14 TeV) using 10 TeV / 14 TeV ratio of y-spectra in LO pQCD.
2706// see S.Grigoryan, PWG3 Meeting, 27th Oct 2008
2707//
9fd56238 2708 Double_t c[4] = {1., -2.17877e-02, -6.52830e-04, 1.40578e-05};
2709 Double_t x = TMath::Abs(px[0]);
2710 if (x > 6.1) return 0.;
2711 Int_t j;
2712 Double_t y = c[j = 3];
2713 while (j > 0) y = y * x*x +c[--j];
2714 return y;
2715}
2716
2717Double_t AliGenMUONlib::YUpsilonCDFscaledPP9( const Double_t *px, const Double_t */*dummy*/)
2718{
2719// Upsilon y
2720//
2721// pp 8.8 TeV
2722// rescaling of YUpsilonPP(14 TeV) using 8.8 TeV / 14 TeV ratio of y-spectra in LO QCD
2723//
2724 Double_t c[4] = {1., -2.37621e-02, -6.29610e-04, 1.47976e-05};
b33adf51 2725 Double_t x = TMath::Abs(px[0]);
2726 if (x > 6.1) return 0.;
2727 Int_t j;
2728 Double_t y = c[j = 3];
2729 while (j > 0) y = y * x*x +c[--j];
2730 return y;
2731}
2732
9fd56238 2733Double_t AliGenMUONlib::YUpsilonCDFscaledPP9dummy(Double_t px)
2734{
2735 return AliGenMUONlib::YUpsilonCDFscaledPP9(&px, (Double_t*) 0);
2736}
2737
2738Double_t AliGenMUONlib::YUpsilonCDFscaledPP7( const Double_t *px, const Double_t */*dummy*/)
2739{
2740// Upsilon y
2741//
2742// pp 7 TeV
2743// scaled from YUpsilonPP(14 TeV) using 7 TeV / 14 TeV ratio of y-spectra in LO pQCD.
2744//
2745 Double_t c[4] = {1., -2.61009e-02, -6.83937e-04, 1.78451e-05};
2746 Double_t x = TMath::Abs(px[0]);
2747 if (x > 6.0) return 0.;
2748 Int_t j;
2749 Double_t y = c[j = 3];
2750 while (j > 0) y = y * x*x +c[--j];
2751 return y;
2752}
2753
2754Double_t AliGenMUONlib::YUpsilonCDFscaledPP4( const Double_t *px, const Double_t */*dummy*/)
2755{
2756// Upsilon y
2757//
2758// pp 3.94 TeV
2759// rescaling of YUpsilonPP(14 TeV) using 3.94 TeV / 14 TeV ratio of y-spectra in LO QCD
2760//
2761 Double_t c[4] = {1., -3.91924e-02, -4.26184e-04, 2.10914e-05};
2762 Double_t x = TMath::Abs(px[0]);
2763 if (x > 5.7) return 0.;
2764 Int_t j;
2765 Double_t y = c[j = 3];
2766 while (j > 0) y = y * x*x +c[--j];
2767
2768 return y;
2769}
2770
75e0cc59 2771Double_t AliGenMUONlib::YUpsilonPP( const Double_t *px, const Double_t */*dummy*/)
bb6e81ac 2772{
2773
2774//
2775// Upsilon y
2776//
2777//
2778// R. Vogt 2002
2779// p p 14. TeV
2780// MRST HO
2781// mc = 1.4 GeV, pt-kick 1 GeV
2782//
2783 Double_t c[7] = {8.91936e-01, -6.46645e-07, -1.52774e-02, 4.28677e-08, -7.01517e-04,
2784 -6.20539e-10, 1.29943e-05};
b33adf51 2785 Double_t x = TMath::Abs(px[0]);
2786 if (x > 6.2) return 0.;
bb6e81ac 2787 Int_t j;
2788 Double_t y = c[j = 6];
2789 while (j > 0) y = y * x +c[--j];
2790 return y;
2791}
2792
9fd56238 2793Double_t AliGenMUONlib::YUpsilonCDFscaledPPb9( const Double_t *px, const Double_t */*dummy*/)
2794{
2795// Upsilon y
2796//
7455632e 2797// pPb 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.89
9fd56238 2798//
2799 Double_t c[7] = {8.71829e-01, 4.77467e-02, 8.09671e-03, 6.45294e-04, -2.15730e-04,
2800 -4.67538e-05,-2.11683e-06};
2801 Double_t y;
2802 Double_t x = px[0] + 0.47; // rapidity shift
2803 Int_t j;
2804 y = c[j = 6];
2805 while (j > 0) y = y * x + c[--j];
2806 if(y<0) y=0;
2807
2808 return y * AliGenMUONlib::YUpsilonCDFscaledPP9dummy(x);
2809}
2810
2811Double_t AliGenMUONlib::YUpsilonCDFscaledPbP9( const Double_t *px, const Double_t */*dummy*/)
2812{
2813// Upsilon y
2814//
7455632e 2815// Pbp 8.8 TeV, for EKS98 with minimum bias shadowing factor 0.89
9fd56238 2816//
2817 Double_t c[7] = {8.71829e-01, 4.77467e-02, 8.09671e-03, 6.45294e-04, -2.15730e-04,
2818 -4.67538e-05,-2.11683e-06};
2819 Double_t y;
2820 Double_t x = -px[0] + 0.47; // rapidity shift
2821 Int_t j;
2822 y = c[j = 6];
2823 while (j > 0) y = y * x + c[--j];
2824 if(y<0) y=0;
2825
2826 return y * AliGenMUONlib::YUpsilonCDFscaledPP9dummy(x);
2827}
2828
2829Double_t AliGenMUONlib::YUpsilonCDFscaledPbPb4( const Double_t *px, const Double_t *dummy)
2830{
2831// Upsilon y
2832//
2833// PbPb 3.94 TeV, for EKS98 with minimum bias shadowing factor 0.85
2834//
2835 Double_t c[4] = {8.27837e-01, 1.70115e-02, -1.26046e-03, 1.52091e-05};
2836 Double_t x = px[0]*px[0];
2837 Double_t y;
2838 Int_t j;
2839 y = c[j = 3];
2840 while (j > 0) y = y * x + c[--j];
2841 if(y<0) y=0;
2842
2843 return y * AliGenMUONlib::YUpsilonCDFscaledPP4(px,dummy);
2844}
2845
2846
fe4da5cc 2847// particle composition
2848//
65fb704d 2849Int_t AliGenMUONlib::IpUpsilon(TRandom *)
fe4da5cc 2850{
d90f80fd 2851// y composition
88cb7938 2852 return 553;
fe4da5cc 2853}
88e5db43 2854Int_t AliGenMUONlib::IpUpsilonP(TRandom *)
2855{
2856// y composition
2857 return 100553;
2858}
2859Int_t AliGenMUONlib::IpUpsilonPP(TRandom *)
2860{
2861// y composition
2862 return 200553;
2863}
0ad09590 2864Int_t AliGenMUONlib::IpUpsilonFamily(TRandom *)
2865{
2866// y composition
4bac9bd3 2867 // Using the LHCb pp data at 7 TeV: CERN-PH-EP-2012-051
2868 // (L. Manceau, S. Grigoryan)
0ad09590 2869 Int_t ip;
4bac9bd3 2870 Float_t r = gRandom->Rndm();
2871 if (r < 0.687) {
2872 // if (r < 0.712) {
0ad09590 2873 ip = 553;
4bac9bd3 2874 } else if (r < 0.903) {
2875 // } else if (r < 0.896) {
0ad09590 2876 ip = 100553;
2877 } else {
2878 ip = 200553;
2879 }
2880 return ip;
2881}
fe4da5cc 2882
88e5db43 2883
fe4da5cc 2884//
2885// Phi
2886//
2887//
2888// pt-distribution (by scaling of pion distribution)
2889//____________________________________________________________
75e0cc59 2890Double_t AliGenMUONlib::PtPhi( const Double_t *px, const Double_t */*dummy*/)
fe4da5cc 2891{
d90f80fd 2892// Phi pT
a4f206bf 2893 return PtScal(*px,7);
fe4da5cc 2894}
2895// y-distribution
75e0cc59 2896Double_t AliGenMUONlib::YPhi( const Double_t *px, const Double_t */*dummy*/)
fe4da5cc 2897{
d90f80fd 2898// Phi y
2899 Double_t *dum=0;
2900 return YJpsi(px,dum);
fe4da5cc 2901}
2902// particle composition
2903//
65fb704d 2904Int_t AliGenMUONlib::IpPhi(TRandom *)
fe4da5cc 2905{
d90f80fd 2906// Phi composition
89512a3b 2907 return 333;
2908}
2909
2910//
2911// omega
2912//
2913//
2914// pt-distribution (by scaling of pion distribution)
2915//____________________________________________________________
75e0cc59 2916Double_t AliGenMUONlib::PtOmega( const Double_t *px, const Double_t */*dummy*/)
89512a3b 2917{
2918// Omega pT
a4f206bf 2919 return PtScal(*px,5);
89512a3b 2920}
2921// y-distribution
75e0cc59 2922Double_t AliGenMUONlib::YOmega( const Double_t *px, const Double_t */*dummy*/)
89512a3b 2923{
2924// Omega y
2925 Double_t *dum=0;
2926 return YJpsi(px,dum);
2927}
2928// particle composition
2929//
2930Int_t AliGenMUONlib::IpOmega(TRandom *)
2931{
2932// Omega composition
2933 return 223;
2934}
2935
2936
2937//
2938// Eta
2939//
2940//
2941// pt-distribution (by scaling of pion distribution)
2942//____________________________________________________________
75e0cc59 2943Double_t AliGenMUONlib::PtEta( const Double_t *px, const Double_t */*dummy*/)
89512a3b 2944{
2945// Eta pT
a4f206bf 2946 return PtScal(*px,3);
89512a3b 2947}
2948// y-distribution
75e0cc59 2949Double_t AliGenMUONlib::YEta( const Double_t *px, const Double_t */*dummy*/)
89512a3b 2950{
2951// Eta y
2952 Double_t *dum=0;
2953 return YJpsi(px,dum);
2954}
2955// particle composition
2956//
2957Int_t AliGenMUONlib::IpEta(TRandom *)
2958{
2959// Eta composition
2960 return 221;
fe4da5cc 2961}
2962
2963//
2964// Charm
2965//
2966//
2967// pt-distribution
2968//____________________________________________________________
75e0cc59 2969Double_t AliGenMUONlib::PtCharm( const Double_t *px, const Double_t */*dummy*/)
fe4da5cc 2970{
d90f80fd 2971// Charm pT
bd0276a8 2972 const Double_t kpt0 = 2.25;
2973 const Double_t kxn = 3.17;
fe4da5cc 2974 Double_t x=*px;
2975 //
bd0276a8 2976 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
2977 return x/TMath::Power(pass1,kxn);
2978}
2979
75e0cc59 2980Double_t AliGenMUONlib::PtCharmCentral( const Double_t *px, const Double_t */*dummy*/)
bd0276a8 2981{
2982// Charm pT
2983 const Double_t kpt0 = 2.12;
2984 const Double_t kxn = 2.78;
bd0276a8 2985 Double_t x=*px;
2986 //
2987 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
d90f80fd 2988 return x/TMath::Power(pass1,kxn);
fe4da5cc 2989}
75e0cc59 2990Double_t AliGenMUONlib::PtCharmF0M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 2991{
2992// FiMjSkPP define theoretical uncertainties around F0M0S0PP as follows:
2993// PtCharmFiMjSkPP = PtCharmF0M0S0PP * (dN(i,j,k)/dpt / dN(0,0,0)/dpt)_MNR
2994// i=0,1,2; j=0,1,2; k=0,1,...,6
2995// dN(i,j,k)/dpt - spectra obtained by A.Dainese (hep-ph/0601164, p.88;
2996// http://www-zeus.desy.de/~corradi/benchmarks) from NLO pQCD (MNR)
2997// calculations for the following inputs:
2998// Peterson fragmentation function (F) with \epsilon_c = 0.02, 0.002 & 0.11
2999// for i=0,1 & 2 respectively; quark mass (M) of 1.5, 1.3 & 1.7 GeV
3000// for j=0,1 & 2 respectively;
3001// factorisation \mu_F = a*mt and renormalisation \mu_R = b*mt scales (S)
3002// with a/b = 1/1, 1/0.5, 0.5/1, 0.5/0.5, 1/2, 2/1 & 2/2
3003// for k = 0, 1, 2, 3, 4, 5 & 6 respectively; CTEQ6.1 PDF set
3004// (PDF uncertainty not considered since is small, see hep-ph/0601164, p.89).
3005// June 2008, Smbat.Grigoryan@cern.ch
3006
3007// Charm pT
3008// Pythia6.214 (kCharmppMNRwmi, PDF = CTEQ5L, quark mass = 1.2 GeV, PtHard > 2.76 GeV/c)
3009// for pp collisions at 14 TeV with one c-cbar pair per event.
3010// Corresponding NLO total cross section is 5.68 mb
3011
3012
3013 const Double_t kpt0 = 2.2930;
3014 const Double_t kxn = 3.1196;
3015 Double_t c[3]={-5.2180e-01,1.8753e-01,2.8669e-02};
3016 Double_t x=*px;
3017 //
3018 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3019 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3020}
75e0cc59 3021Double_t AliGenMUONlib::PtCharmF1M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3022{
3023// Charm pT
3024// Corresponding NLO total cross section is 6.06 mb
3025 const Double_t kpt0 = 2.8669;
3026 const Double_t kxn = 3.1044;
3027 Double_t c[3]={-4.6714e-01,1.5005e-01,4.5003e-02};
3028 Double_t x=*px;
3029 //
3030 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3031 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3032}
75e0cc59 3033Double_t AliGenMUONlib::PtCharmF2M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3034{
3035// Charm pT
3036// Corresponding NLO total cross section is 6.06 mb
3037 const Double_t kpt0 = 1.8361;
3038 const Double_t kxn = 3.2966;
3039 Double_t c[3]={-6.1550e-01,2.6498e-01,1.0728e-02};
3040 Double_t x=*px;
3041 //
3042 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3043 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3044}
75e0cc59 3045Double_t AliGenMUONlib::PtCharmF0M1S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3046{
3047// Charm pT
3048// Corresponding NLO total cross section is 7.69 mb
3049 const Double_t kpt0 = 2.1280;
3050 const Double_t kxn = 3.1397;
3051 Double_t c[3]={-5.4021e-01,2.0944e-01,2.5211e-02};
3052 Double_t x=*px;
3053 //
3054 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3055 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3056}
75e0cc59 3057Double_t AliGenMUONlib::PtCharmF0M2S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3058{
3059// Charm pT
3060// Corresponding NLO total cross section is 4.81 mb
3061 const Double_t kpt0 = 2.4579;
3062 const Double_t kxn = 3.1095;
3063 Double_t c[3]={-5.1497e-01,1.7532e-01,3.2429e-02};
3064 Double_t x=*px;
3065 //
3066 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3067 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3068}
75e0cc59 3069Double_t AliGenMUONlib::PtCharmF0M0S1PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3070{
3071// Charm pT
3072// Corresponding NLO total cross section is 14.09 mb
3073 const Double_t kpt0 = 2.1272;
3074 const Double_t kxn = 3.1904;
3075 Double_t c[3]={-4.6088e-01,2.1918e-01,2.3055e-02};
3076 Double_t x=*px;
3077 //
3078 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3079 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3080}
75e0cc59 3081Double_t AliGenMUONlib::PtCharmF0M0S2PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3082{
3083// Charm pT
3084// Corresponding NLO total cross section is 1.52 mb
3085 const Double_t kpt0 = 2.8159;
3086 const Double_t kxn = 3.0857;
3087 Double_t c[3]={-6.4691e-01,2.0289e-01,2.4922e-02};
3088 Double_t x=*px;
3089 //
3090 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3091 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3092}
75e0cc59 3093Double_t AliGenMUONlib::PtCharmF0M0S3PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3094{
3095// Charm pT
3096// Corresponding NLO total cross section is 3.67 mb
3097 const Double_t kpt0 = 2.7297;
3098 const Double_t kxn = 3.3019;
3099 Double_t c[3]={-6.2216e-01,1.9031e-01,1.5341e-02};
3100 Double_t x=*px;
3101 //
3102 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3103 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3104}
75e0cc59 3105Double_t AliGenMUONlib::PtCharmF0M0S4PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3106{
3107// Charm pT
3108// Corresponding NLO total cross section is 3.38 mb
3109 const Double_t kpt0 = 2.3894;
3110 const Double_t kxn = 3.1075;
3111 Double_t c[3]={-4.9742e-01,1.7032e-01,2.5994e-02};
3112 Double_t x=*px;
3113 //
3114 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3115 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3116}
75e0cc59 3117Double_t AliGenMUONlib::PtCharmF0M0S5PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3118{
3119// Charm pT
3120// Corresponding NLO total cross section is 10.37 mb
3121 const Double_t kpt0 = 2.0187;
3122 const Double_t kxn = 3.3011;
3123 Double_t c[3]={-3.9869e-01,2.9248e-01,1.1763e-02};
3124 Double_t x=*px;
3125 //
3126 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3127 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3128}
75e0cc59 3129Double_t AliGenMUONlib::PtCharmF0M0S6PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3130{
3131// Charm pT
3132// Corresponding NLO total cross section is 7.22 mb
3133 const Double_t kpt0 = 2.1089;
3134 const Double_t kxn = 3.1848;
3135 Double_t c[3]={-4.6275e-01,1.8114e-01,2.1363e-02};
3136 Double_t x=*px;
3137 //
3138 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3139 return x/TMath::Power(pass1,kxn)*(1.+c[0]*x+c[1]*x*x)/(1.+c[2]*x*x);
3140}
3141
fe4da5cc 3142// y-distribution
75e0cc59 3143Double_t AliGenMUONlib::YCharm( const Double_t *px, const Double_t */*dummy*/)
fe4da5cc 3144{
ec772ba2 3145// Charm y :: Carrer & Dainese : ALICE-INT-2003-019 v.3 (hep-ph/0311225)
3146// Pythia tuned to reproduce the distribution given by the HVQMNR program based on NLO calculations (pQCD)
3147// shadowing + kt broadening
3148
3149 Double_t x=px[0];
3150 Double_t c[2]={-2.42985e-03,-2.31001e-04};
3151 Double_t y=1+(c[0]*TMath::Power(x,2))+(c[1]*TMath::Power(x,4));
3152 Double_t ycharm;
3153
3154 if (TMath::Abs(x)>8) {
3155 ycharm=0.;
3156 }
3157 else {
3158 ycharm=TMath::Power(y,3);
3159 }
3160
3161 return ycharm;
fe4da5cc 3162}
75e0cc59 3163Double_t AliGenMUONlib::YCharmF0M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3164{
3165// FiMjSkPP define theoretical uncertainties around F0M0S0PP as follows:
3166// YCharmFiMjSkPP = YCharmF0M0S0PP * (dN(i,j,k)/dy / dN(0,0,0)/dy)_MNR
3167// i=0,1,2; j=0,1,2; k=0,1,...,6
3168// dN(i,j,k)/dy - spectra obtained by A.Dainese (hep-ph/0601164, p.88;
3169// http://www-zeus.desy.de/~corradi/benchmarks) from NLO pQCD (MNR)
3170// calculations for the following inputs:
3171// Peterson fragmentation function (F) with \epsilon_c = 0.02, 0.002 & 0.11
3172// for i=0,1 & 2 respectively; quark mass (M) of 1.5, 1.3 & 1.7 GeV
3173// for j=0,1 & 2 respectively;
3174// factorisation \mu_F = a*mt and renormalisation \mu_R = b*mt scales (S)
3175// with a/b = 1/1,1/0.5, 0.5/1, 0.5/0.5, 1/2, 2/1 & 2/2 for
3176// k = 0, 1, 2, 3, 4, 5 & 6 respectively; CTEQ6.1 PDF set
3177// (PDF uncertainty not considered since is small, see hep-ph/0601164, p.89).
3178// June 2008, Smbat.Grigoryan@cern.ch
3179
3180// Charm y
3181// Pythia6.214 (kCharmppMNRwmi, PDF = CTEQ5L, quark mass = 1.2 GeV, PtHard > 2.76 GeV/c)
3182// for pp collisions at 14 TeV with one c-cbar pair per event.
3183// Corresponding NLO total cross section is 5.68 mb
3184
3185 Double_t x=px[0];
3186 Double_t c[2]={7.0909e-03,6.1967e-05};
3187 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3188 Double_t ycharm;
3189
3190 if (TMath::Abs(x)>9) {
3191 ycharm=0.;
3192 }
3193 else {
3194 ycharm=TMath::Power(y,3);
3195 }
3196
3197 return ycharm;
3198}
75e0cc59 3199Double_t AliGenMUONlib::YCharmF1M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3200{
3201// Charm y
3202// Corresponding NLO total cross section is 6.06 mb
3203 Double_t x=px[0];
3204 Double_t c[2]={6.9707e-03,6.0971e-05};
3205 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3206 Double_t ycharm;
3207
3208 if (TMath::Abs(x)>9) {
3209 ycharm=0.;
3210 }
3211 else {
3212 ycharm=TMath::Power(y,3);
3213 }
3214
3215 return ycharm;
3216}
75e0cc59 3217Double_t AliGenMUONlib::YCharmF2M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3218{
3219// Charm y
3220// Corresponding NLO total cross section is 6.06 mb
3221 Double_t x=px[0];
3222 Double_t c[2]={7.1687e-03,6.5303e-05};
3223 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3224 Double_t ycharm;
3225
3226 if (TMath::Abs(x)>9) {
3227 ycharm=0.;
3228 }
3229 else {
3230 ycharm=TMath::Power(y,3);
3231 }
3232
3233 return ycharm;
3234}
75e0cc59 3235Double_t AliGenMUONlib::YCharmF0M1S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3236{
3237// Charm y
3238// Corresponding NLO total cross section is 7.69 mb
3239 Double_t x=px[0];
3240 Double_t c[2]={5.9090e-03,7.1854e-05};
3241 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3242 Double_t ycharm;
3243
3244 if (TMath::Abs(x)>9) {
3245 ycharm=0.;
3246 }
3247 else {
3248 ycharm=TMath::Power(y,3);
3249 }
3250
3251 return ycharm;
3252}
75e0cc59 3253Double_t AliGenMUONlib::YCharmF0M2S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3254{
3255// Charm y
3256// Corresponding NLO total cross section is 4.81 mb
3257 Double_t x=px[0];
3258 Double_t c[2]={8.0882e-03,5.5872e-05};
3259 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3260 Double_t ycharm;
3261
3262 if (TMath::Abs(x)>9) {
3263 ycharm=0.;
3264 }
3265 else {
3266 ycharm=TMath::Power(y,3);
3267 }
3268
3269 return ycharm;
3270}
75e0cc59 3271Double_t AliGenMUONlib::YCharmF0M0S1PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3272{
3273// Charm y
3274// Corresponding NLO total cross section is 14.09 mb
3275 Double_t x=px[0];
3276 Double_t c[2]={7.2520e-03,6.2691e-05};
3277 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3278 Double_t ycharm;
3279
3280 if (TMath::Abs(x)>9) {
3281 ycharm=0.;
3282 }
3283 else {
3284 ycharm=TMath::Power(y,3);
3285 }
3286
3287 return ycharm;
3288}
75e0cc59 3289Double_t AliGenMUONlib::YCharmF0M0S2PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3290{
3291// Charm y
3292// Corresponding NLO total cross section is 1.52 mb
3293 Double_t x=px[0];
3294 Double_t c[2]={1.1040e-04,1.4498e-04};
3295 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3296 Double_t ycharm;
3297
3298 if (TMath::Abs(x)>9) {
3299 ycharm=0.;
3300 }
3301 else {
3302 ycharm=TMath::Power(y,3);
3303 }
3304
3305 return ycharm;
3306}
75e0cc59 3307Double_t AliGenMUONlib::YCharmF0M0S3PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3308{
3309// Charm y
3310// Corresponding NLO total cross section is 3.67 mb
3311 Double_t x=px[0];
3312 Double_t c[2]={-3.1328e-03,1.8270e-04};
3313 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3314 Double_t ycharm;
3315
3316 if (TMath::Abs(x)>9) {
3317 ycharm=0.;
3318 }
3319 else {
3320 ycharm=TMath::Power(y,3);
3321 }
3322
3323 return ycharm;
3324}
75e0cc59 3325Double_t AliGenMUONlib::YCharmF0M0S4PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3326{
3327// Charm y
3328// Corresponding NLO total cross section is 3.38 mb
3329 Double_t x=px[0];
3330 Double_t c[2]={7.0865e-03,6.2532e-05};
3331 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3332 Double_t ycharm;
3333
3334 if (TMath::Abs(x)>9) {
3335 ycharm=0.;
3336 }
3337 else {
3338 ycharm=TMath::Power(y,3);
3339 }
3340
3341 return ycharm;
3342}
75e0cc59 3343Double_t AliGenMUONlib::YCharmF0M0S5PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3344{
3345// Charm y
3346// Corresponding NLO total cross section is 10.37 mb
3347 Double_t x=px[0];
3348 Double_t c[2]={7.7070e-03,5.3533e-05};
3349 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3350 Double_t ycharm;
3351
3352 if (TMath::Abs(x)>9) {
3353 ycharm=0.;
3354 }
3355 else {
3356 ycharm=TMath::Power(y,3);
3357 }
3358
3359 return ycharm;
3360}
75e0cc59 3361Double_t AliGenMUONlib::YCharmF0M0S6PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3362{
3363// Charm y
3364// Corresponding NLO total cross section is 7.22 mb
3365 Double_t x=px[0];
3366 Double_t c[2]={7.9195e-03,5.3823e-05};
3367 Double_t y=1-(c[0]*TMath::Power(x,2))-(c[1]*TMath::Power(x,4));
3368 Double_t ycharm;
3369
3370 if (TMath::Abs(x)>9) {
3371 ycharm=0.;
3372 }
3373 else {
3374 ycharm=TMath::Power(y,3);
3375 }
3376
3377 return ycharm;
3378}
fe4da5cc 3379
ec772ba2 3380
65fb704d 3381Int_t AliGenMUONlib::IpCharm(TRandom *ran)
fe4da5cc 3382{
d90f80fd 3383// Charm composition
65fb704d 3384 Float_t random;
fe4da5cc 3385 Int_t ip;
3386// 411,421,431,4122
65fb704d 3387 random = ran->Rndm();
ec772ba2 3388// Taux de production Carrer & Dainese : ALICE-INT-2003-019 v.3
3389// >>>>> cf. tab 4 p 11
3390
3391 if (random < 0.30) {
3392 ip=421;
3393 } else if (random < 0.60) {
3394 ip=-421;
3395 } else if (random < 0.70) {
3396 ip=411;
3397 } else if (random < 0.80) {
3398 ip=-411;
3399 } else if (random < 0.86) {
3400 ip=431;
3401 } else if (random < 0.92) {
3402 ip=-431;
3403 } else if (random < 0.96) {
3404 ip=4122;
fe4da5cc 3405 } else {
ec772ba2 3406 ip=-4122;
fe4da5cc 3407 }
fe4da5cc 3408
3409 return ip;
3410}
3411
fe4da5cc 3412//
3413// Beauty
3414//
3415//
3416// pt-distribution
3417//____________________________________________________________
75e0cc59 3418Double_t AliGenMUONlib::PtBeauty( const Double_t *px, const Double_t */*dummy*/)
fe4da5cc 3419{
d90f80fd 3420// Beauty pT
bd0276a8 3421 const Double_t kpt0 = 6.53;
3422 const Double_t kxn = 3.59;
3423 Double_t x=*px;
3424 //
3425 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3426 return x/TMath::Power(pass1,kxn);
3427}
3428
75e0cc59 3429Double_t AliGenMUONlib::PtBeautyCentral( const Double_t *px, const Double_t */*dummy*/)
bd0276a8 3430{
3431// Beauty pT
3432 const Double_t kpt0 = 6.14;
3433 const Double_t kxn = 2.93;
fe4da5cc 3434 Double_t x=*px;
3435 //
d90f80fd 3436 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3437 return x/TMath::Power(pass1,kxn);
fe4da5cc 3438}
75e0cc59 3439Double_t AliGenMUONlib::PtBeautyF0M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3440{
3441// FiMjSkPP define theoretical uncertainties around F0M0S0PP as follows:
3442// PtBeautyFiMjSkPP = PtBeautyF0M0S0PP * (dN(i,j,k)/dpt / dN(0,0,0)/dpt)_MNR
3443// i=0,1,2; j=0,1,2; k=0,1,...,6
3444// dN(i,j,k)/dpt - spectra obtained by A.Dainese (hep-ph/0601164, p.88;
3445// http://www-zeus.desy.de/~corradi/benchmarks) from NLO pQCD (MNR)
3446// calculations for the following inputs:
3447// Peterson fragmentation function (F) with \epsilon_b = 0.001, 0.0002 & 0.004
3448// for i=0,1 & 2 respectively; quark mass (M) of 4.75, 4.5 & 5.0 GeV
3449// for j=0,1 & 2 respectively;
3450// factorisation \mu_F = a*mt and renormalisation \mu_R = b*mt scales (S)
3451// with a/b = 1/1, 1/0.5, 0.5/1, 0.5/0.5, 1/2, 2/1 & 2/2 for
3452// k = 0, 1, 2, 3, 4, 5 & 6 respectively; CTEQ6.1 PDF set
3453// (PDF uncertainty not considered since is small, see hep-ph/0601164, p.89).
3454// June 2008, Smbat.Grigoryan@cern.ch
3455
3456// Beauty pT
3457// Pythia6.214 (kBeautyppMNRwmi, PDF = CTEQ5L, quark mass = 4.75 GeV, PtHard > 2.76 GeV/c)
3458// for pp collisions at 14 TeV with one b-bbar pair per event.
3459// Corresponding NLO total cross section is 0.494 mb
3460
3461 const Double_t kpt0 = 8.0575;
3462 const Double_t kxn = 3.1921;
3463 Double_t x=*px;
3464 //
3465 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3466 return x/TMath::Power(pass1,kxn);
3467}
75e0cc59 3468Double_t AliGenMUONlib::PtBeautyF1M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3469{
3470// Beauty pT
3471// Corresponding NLO total cross section is 0.445 mb
3472 const Double_t kpt0 = 8.6239;
3473 const Double_t kxn = 3.2911;
3474 Double_t x=*px;
3475 //
3476 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3477 return x/TMath::Power(pass1,kxn);
3478}
75e0cc59 3479Double_t AliGenMUONlib::PtBeautyF2M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3480{
3481// Beauty pT
3482// Corresponding NLO total cross section is 0.445 mb
3483 const Double_t kpt0 = 7.3367;
3484 const Double_t kxn = 3.0692;
3485 Double_t x=*px;
3486 //
3487 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3488 return x/TMath::Power(pass1,kxn);
3489}
75e0cc59 3490Double_t AliGenMUONlib::PtBeautyF0M1S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3491{
3492// Beauty pT
3493// Corresponding NLO total cross section is 0.518 mb
3494 const Double_t kpt0 = 7.6409;
3495 const Double_t kxn = 3.1364;
3496 Double_t x=*px;
3497 //
3498 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3499 return x/TMath::Power(pass1,kxn);
3500}
75e0cc59 3501Double_t AliGenMUONlib::PtBeautyF0M2S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3502{
3503// Beauty pT
3504// Corresponding NLO total cross section is 0.384 mb
3505 const Double_t kpt0 = 8.4948;
3506 const Double_t kxn = 3.2546;
3507 Double_t x=*px;
3508 //
3509 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3510 return x/TMath::Power(pass1,kxn);
3511}
75e0cc59 3512Double_t AliGenMUONlib::PtBeautyF0M0S1PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3513{
3514// Beauty pT
3515// Corresponding NLO total cross section is 0.648 mb
3516 const Double_t kpt0 = 7.6631;
3517 const Double_t kxn = 3.1621;
3518 Double_t x=*px;
3519 //
3520 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3521 return x/TMath::Power(pass1,kxn);
3522}
75e0cc59 3523Double_t AliGenMUONlib::PtBeautyF0M0S2PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3524{
3525// Beauty pT
3526// Corresponding NLO total cross section is 0.294 mb
3527 const Double_t kpt0 = 8.7245;
3528 const Double_t kxn = 3.2213;
3529 Double_t x=*px;
3530 //
3531 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3532 return x/TMath::Power(pass1,kxn);
3533}
75e0cc59 3534Double_t AliGenMUONlib::PtBeautyF0M0S3PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3535{
3536// Beauty pT
3537// Corresponding NLO total cross section is 0.475 mb
3538 const Double_t kpt0 = 8.5296;
3539 const Double_t kxn = 3.2187;
3540 Double_t x=*px;
3541 //
3542 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3543 return x/TMath::Power(pass1,kxn);
3544}
75e0cc59 3545Double_t AliGenMUONlib::PtBeautyF0M0S4PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3546{
3547// Beauty pT
3548// Corresponding NLO total cross section is 0.324 mb
3549 const Double_t kpt0 = 7.9440;
3550 const Double_t kxn = 3.1614;
3551 Double_t x=*px;
3552 //
3553 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3554 return x/TMath::Power(pass1,kxn);
3555}
75e0cc59 3556Double_t AliGenMUONlib::PtBeautyF0M0S5PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3557{
3558// Beauty pT
3559// Corresponding NLO total cross section is 0.536 mb
3560 const Double_t kpt0 = 8.2408;
3561 const Double_t kxn = 3.3029;
3562 Double_t x=*px;
3563 //
3564 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3565 return x/TMath::Power(pass1,kxn);
3566}
75e0cc59 3567Double_t AliGenMUONlib::PtBeautyF0M0S6PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3568{
3569// Beauty pT
3570// Corresponding NLO total cross section is 0.420 mb
3571 const Double_t kpt0 = 7.8041;
3572 const Double_t kxn = 3.2094;
3573 Double_t x=*px;
3574 //
3575 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
3576 return x/TMath::Power(pass1,kxn);
3577}
3578
fe4da5cc 3579// y-distribution
75e0cc59 3580Double_t AliGenMUONlib::YBeauty( const Double_t *px, const Double_t */*dummy*/)
fe4da5cc 3581{
ec772ba2 3582// Beauty y :: Carrer & Dainese : ALICE-INT-2003-019 v.3 (hep-ph/0311225)
3583// Pythia tuned to reproduce the distribution given by the HVQMNR program based on NLO calculations (pQCD)
3584// shadowing + kt broadening
3585
3586 Double_t x=px[0];
3587 Double_t c[2]={-1.27590e-02,-2.42731e-04};
3588 Double_t y=1+c[0]*TMath::Power(x,2)+c[1]*TMath::Power(x,4);
3589 Double_t ybeauty;
3590
3591 if (TMath::Abs(x)>6) {
3592 ybeauty=0.;
3593 }
3594 else {
3595 ybeauty=TMath::Power(y,3);
3596 }
3597
3598 return ybeauty;
fe4da5cc 3599}
75e0cc59 3600Double_t AliGenMUONlib::YBeautyF0M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3601{
3602// FiMjSkPP define theoretical uncertainties around F0M0S0PP as follows:
3603// YBeautyFiMjSkPP = YBeautyF0M0S0PP * (dN(i,j,k)/dy / dN(0,0,0)/dy)_MNR
3604// i=0,1,2; j=0,1,2; k=0,1,...,6
3605// dN(i,j,k)/dy - spectra obtained by A.Dainese (hep-ph/0601164, p.88;
3606// http://www-zeus.desy.de/~corradi/benchmarks) from NLO pQCD (MNR)
3607// calculations for the following inputs:
3608// Peterson fragmentation function (F) with \epsilon_b = 0.001, 0.0002 & 0.004
3609// for i=0,1 & 2 respectively; quark mass (M) of 4.75, 4.5 & 5.0 GeV
3610// for j=0,1 & 2 respectively;
3611// factorisation \mu_F = a*mt and renormalisation \mu_R = b*mt scales (S)
3612// with a/b = 1/1, 1/0.5, 0.5/1, 0.5/0.5, 1/2, 2/1 & 2/2
3613// for k = 0, 1, 2, 3, 4, 5 & 6 respectively; CTEQ6.1 PDF set
3614// (PDF uncertainty not considered since is small, see hep-ph/0601164, p.89).
3615// June 2008, Smbat.Grigoryan@cern.ch
3616
3617// Beauty y
3618// Pythia6.214 (kBeautyppMNRwmi, PDF = CTEQ5L, quark mass = 4.75 GeV, PtHard > 2.76 GeV/c)
3619// for pp collisions at 14 TeV with one b-bbar pair per event.
3620// Corresponding NLO total cross section is 0.494 mb
3621
fe4da5cc 3622
9e9ae065 3623 Double_t x=px[0];
3624 Double_t c[2]={1.2350e-02,9.2667e-05};
3625 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3626 Double_t ybeauty;
3627
3628 if (TMath::Abs(x)>7.6) {
3629 ybeauty=0.;
3630 }
3631 else {
3632 ybeauty=TMath::Power(y,3);
3633 }
3634
3635 return ybeauty;
3636}
75e0cc59 3637Double_t AliGenMUONlib::YBeautyF1M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3638{
3639// Beauty y
3640// Corresponding NLO total cross section is 0.445 mb
3641 Double_t x=px[0];
3642 Double_t c[2]={1.2292e-02,9.1847e-05};
3643 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3644 Double_t ybeauty;
3645
3646 if (TMath::Abs(x)>7.6) {
3647 ybeauty=0.;
3648 }
3649 else {
3650 ybeauty=TMath::Power(y,3);
3651 }
3652
3653 return ybeauty;
3654}
75e0cc59 3655Double_t AliGenMUONlib::YBeautyF2M0S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3656{
3657// Beauty y
3658// Corresponding NLO total cross section is 0.445 mb
3659 Double_t x=px[0];
3660 Double_t c[2]={1.2436e-02,9.3709e-05};
3661 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3662 Double_t ybeauty;
3663
3664 if (TMath::Abs(x)>7.6) {
3665 ybeauty=0.;
3666 }
3667 else {
3668 ybeauty=TMath::Power(y,3);
3669 }
3670
3671 return ybeauty;
3672}
75e0cc59 3673Double_t AliGenMUONlib::YBeautyF0M1S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3674{
3675// Beauty y
3676// Corresponding NLO total cross section is 0.518 mb
3677 Double_t x=px[0];
3678 Double_t c[2]={1.1714e-02,1.0068e-04};
3679 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3680 Double_t ybeauty;
3681
3682 if (TMath::Abs(x)>7.6) {
3683 ybeauty=0.;
3684 }
3685 else {
3686 ybeauty=TMath::Power(y,3);
3687 }
3688
3689 return ybeauty;
3690}
75e0cc59 3691Double_t AliGenMUONlib::YBeautyF0M2S0PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3692{
3693// Beauty y
3694// Corresponding NLO total cross section is 0.384 mb
3695 Double_t x=px[0];
3696 Double_t c[2]={1.2944e-02,8.5500e-05};
3697 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3698 Double_t ybeauty;
3699
3700 if (TMath::Abs(x)>7.6) {
3701 ybeauty=0.;
3702 }
3703 else {
3704 ybeauty=TMath::Power(y,3);
3705 }
3706
3707 return ybeauty;
3708}
75e0cc59 3709Double_t AliGenMUONlib::YBeautyF0M0S1PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3710{
3711// Beauty y
3712// Corresponding NLO total cross section is 0.648 mb
3713 Double_t x=px[0];
3714 Double_t c[2]={1.2455e-02,9.2713e-05};
3715 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3716 Double_t ybeauty;
3717
3718 if (TMath::Abs(x)>7.6) {
3719 ybeauty=0.;
3720 }
3721 else {
3722 ybeauty=TMath::Power(y,3);
3723 }
3724
3725 return ybeauty;
3726}
75e0cc59 3727Double_t AliGenMUONlib::YBeautyF0M0S2PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3728{
3729// Beauty y
3730// Corresponding NLO total cross section is 0.294 mb
3731 Double_t x=px[0];
3732 Double_t c[2]={1.0897e-02,1.1878e-04};
3733 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3734 Double_t ybeauty;
3735
3736 if (TMath::Abs(x)>7.6) {
3737 ybeauty=0.;
3738 }
3739 else {
3740 ybeauty=TMath::Power(y,3);
3741 }
3742
3743 return ybeauty;
3744}
75e0cc59 3745Double_t AliGenMUONlib::YBeautyF0M0S3PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3746{
3747// Beauty y
3748// Corresponding NLO total cross section is 0.475 mb
3749 Double_t x=px[0];
3750 Double_t c[2]={1.0912e-02,1.1858e-04};
3751 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3752 Double_t ybeauty;
3753
3754 if (TMath::Abs(x)>7.6) {
3755 ybeauty=0.;
3756 }
3757 else {
3758 ybeauty=TMath::Power(y,3);
3759 }
3760
3761 return ybeauty;
3762}
75e0cc59 3763Double_t AliGenMUONlib::YBeautyF0M0S4PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3764{
3765// Beauty y
3766// Corresponding NLO total cross section is 0.324 mb
3767 Double_t x=px[0];
3768 Double_t c[2]={1.2378e-02,9.2490e-05};
3769 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3770 Double_t ybeauty;
3771
3772 if (TMath::Abs(x)>7.6) {
3773 ybeauty=0.;
3774 }
3775 else {
3776 ybeauty=TMath::Power(y,3);
3777 }
3778
3779 return ybeauty;
3780}
75e0cc59 3781Double_t AliGenMUONlib::YBeautyF0M0S5PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3782{
3783// Beauty y
3784// Corresponding NLO total cross section is 0.536 mb
3785 Double_t x=px[0];
3786 Double_t c[2]={1.2886e-02,8.2912e-05};
3787 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3788 Double_t ybeauty;
3789
3790 if (TMath::Abs(x)>7.6) {
3791 ybeauty=0.;
3792 }
3793 else {
3794 ybeauty=TMath::Power(y,3);
3795 }
3796
3797 return ybeauty;
3798}
75e0cc59 3799Double_t AliGenMUONlib::YBeautyF0M0S6PP( const Double_t *px, const Double_t */*dummy*/)
9e9ae065 3800{
3801// Beauty y
3802// Corresponding NLO total cross section is 0.420 mb
3803 Double_t x=px[0];
3804 Double_t c[2]={1.3106e-02,8.0115e-05};
3805 Double_t y=1-c[0]*TMath::Power(x,2)-c[1]*TMath::Power(x,4);
3806 Double_t ybeauty;
3807
3808 if (TMath::Abs(x)>7.6) {
3809 ybeauty=0.;
3810 }
3811 else {
3812 ybeauty=TMath::Power(y,3);
3813 }
3814
3815 return ybeauty;
3816}
ec772ba2 3817
65fb704d 3818Int_t AliGenMUONlib::IpBeauty(TRandom *ran)
fe4da5cc 3819{
d90f80fd 3820// Beauty Composition
65fb704d 3821 Float_t random;
fe4da5cc 3822 Int_t ip;
ec772ba2 3823 random = ran->Rndm();
3824
3825// Taux de production Carrer & Dainese : ALICE-INT-2003-019 v.3
3826// >>>>> cf. tab 4 p 11
3827
3828 if (random < 0.20) {
3829 ip=511;
3830 } else if (random < 0.40) {
3831 ip=-511;
3832 } else if (random < 0.605) {
3833 ip=521;
3834 } else if (random < 0.81) {
3835 ip=-521;
3836 } else if (random < 0.87) {
3837 ip=531;
3838 } else if (random < 0.93) {
3839 ip=-531;
3840 } else if (random < 0.965) {
3841 ip=5122;
fe4da5cc 3842 } else {
ec772ba2 3843 ip=-5122;
fe4da5cc 3844 }
fe4da5cc 3845
ec772ba2 3846 return ip;
fe4da5cc 3847}
3848
ec772ba2 3849
75e0cc59 3850typedef Double_t (*GenFunc) (const Double_t*, const Double_t*);
53904666 3851GenFunc AliGenMUONlib::GetPt(Int_t param, const char* tname) const
fe4da5cc 3852{
d90f80fd 3853// Return pointer to pT parameterisation
05932df6 3854 TString sname = TString(tname);
fe4da5cc 3855 GenFunc func;
753690b0 3856 switch (param)
fe4da5cc 3857 {
34f60c01 3858 case kPhi:
fe4da5cc 3859 func=PtPhi;
3860 break;
89512a3b 3861 case kOmega:
3862 func=PtOmega;
3863 break;
3864 case kEta:
3865 func=PtEta;
3866 break;
0ad09590 3867 case kJpsiFamily:
88e5db43 3868 case kPsiP:
ba8bf3f5 3869 case kChic1:
3870 case kChic2:
34f60c01 3871 case kJpsi:
bb6e81ac 3872 if (sname == "Vogt" || sname == "Vogt PbPb") {
05932df6 3873 func=PtJpsiPbPb;
bb6e81ac 3874 } else if (sname == "Vogt pp") {
3875 func=PtJpsiPP;
a4f206bf 3876 } else if (sname == "pp 7") {
3877 func=PtJpsiPP7000;
755104c5 3878 } else if (sname == "pp 8") {
3879 func=PtJpsiPP8000;
a4f206bf 3880 } else if (sname == "pp 2.76") {
3881 func=PtJpsiPP2760;
4bac9bd3 3882 } else if (sname == "pp 4.4") {
3883 func=PtJpsiPP4400;
3884 } else if (sname == "pp 5.03") {
3885 func=PtJpsiPP5030;
3886 } else if (sname == "pp 8.8") {
3887 func=PtJpsiPP8800;
3888 } else if (sname == "pp 7 poly") {
3889 func=PtJpsiPP7000;
3890 } else if (sname == "pp 2.76 poly") {
3891 func=PtJpsiPP2760;
a4f206bf 3892 } else if (sname == "PbPb 2.76") {
3893 func=PtJpsiPbPb2760;
7455632e 3894 } else if (sname == "PbPb 2.76c1") {
3895 func=PtJpsiPbPb2760c1;
3896 } else if (sname == "PbPb 2.76c2") {
3897 func=PtJpsiPbPb2760c2;
3898 } else if (sname == "PbPb 2.76c3") {
3899 func=PtJpsiPbPb2760c3;
3900 } else if (sname == "PbPb 2.76c4") {
3901 func=PtJpsiPbPb2760c4;
3902 } else if (sname == "PbPb 2.76c5") {
3903 func=PtJpsiPbPb2760c5;
3904 } else if (sname == "PbPb 2.76c6") {
3905 func=PtJpsiPbPb2760c6;
3906 } else if (sname == "PbPb 2.76c7") {
3907 func=PtJpsiPbPb2760c7;
3908 } else if (sname == "PbPb 2.76c8") {
3909 func=PtJpsiPbPb2760c8;
3910 } else if (sname == "PbPb 2.76c9") {
3911 func=PtJpsiPbPb2760c9;
3912 } else if (sname == "PbPb 2.76c10") {
3913 func=PtJpsiPbPb2760c10;
3914 } else if (sname == "PbPb 2.76c11") {
3915 func=PtJpsiPbPb2760c11;
4bac9bd3 3916 } else if (sname == "pPb 5.03") {
3917 func=PtJpsiPPb5030;
3918 } else if (sname == "pPb 5.03c1") {
3919 func=PtJpsiPPb5030c1;
3920 } else if (sname == "pPb 5.03c2") {
3921 func=PtJpsiPPb5030c2;
3922 } else if (sname == "pPb 5.03c3") {
3923 func=PtJpsiPPb5030c3;
3924 } else if (sname == "pPb 5.03c4") {
3925 func=PtJpsiPPb5030c4;
3926 } else if (sname == "Pbp 5.03") {
3927 func=PtJpsiPbP5030;
3928 } else if (sname == "Pbp 5.03c1") {
3929 func=PtJpsiPbP5030c1;
3930 } else if (sname == "Pbp 5.03c2") {
3931 func=PtJpsiPbP5030c2;
3932 } else if (sname == "Pbp 5.03c3") {
3933 func=PtJpsiPbP5030c3;
3934 } else if (sname == "Pbp 5.03c4") {
3935 func=PtJpsiPbP5030c4;
7455632e 3936 } else if (sname == "pPb 8.8") {
3937 func=PtJpsiPPb8800;
3938 } else if (sname == "pPb 8.8c1") {
3939 func=PtJpsiPPb8800c1;
3940 } else if (sname == "pPb 8.8c2") {
3941 func=PtJpsiPPb8800c2;
3942 } else if (sname == "pPb 8.8c3") {
3943 func=PtJpsiPPb8800c3;
3944 } else if (sname == "pPb 8.8c4") {
3945 func=PtJpsiPPb8800c4;
3946 } else if (sname == "Pbp 8.8") {
3947 func=PtJpsiPbP8800;
3948 } else if (sname == "Pbp 8.8c1") {
3949 func=PtJpsiPbP8800c1;
3950 } else if (sname == "Pbp 8.8c2") {
3951 func=PtJpsiPbP8800c2;
3952 } else if (sname == "Pbp 8.8c3") {
3953 func=PtJpsiPbP8800c3;
3954 } else if (sname == "Pbp 8.8c4") {
3955 func=PtJpsiPbP8800c4;
0e137c25 3956 } else if (sname == "CDF scaled") {
3957 func=PtJpsiCDFscaled;
9ff13849 3958 } else if (sname == "CDF pp") {
3959 func=PtJpsiCDFscaledPP;
9e9ae065 3960 } else if (sname == "CDF pp 10") {
3961 func=PtJpsiCDFscaledPP10;
9fd56238 3962 } else if (sname == "CDF pp 8.8") {
3963 func=PtJpsiCDFscaledPP9;
94a2994d 3964 } else if (sname == "CDF pp 7" || sname == "CDF pp 7 flat y") {
9fd56238 3965 func=PtJpsiCDFscaledPP7;
3966 } else if (sname == "CDF pp 3.94") {
3967 func=PtJpsiCDFscaledPP4;
a4f206bf 3968 } else if (sname == "CDF pp 2.76") {
3969 func=PtJpsiCDFscaledPP3;
3970 } else if (sname == "CDF pp 1.9") {
3971 func=PtJpsiCDFscaledPP2;
9fd56238 3972 } else if (sname == "CDF pPb 8.8") {
3973 func=PtJpsiCDFscaledPPb9;
3974 } else if (sname == "CDF Pbp 8.8") {
3975 func=PtJpsiCDFscaledPbP9;
3976 } else if (sname == "CDF PbPb 3.94") {
3977 func=PtJpsiCDFscaledPbPb4;
94a2994d 3978 } else if (sname == "Flat" || sname == "CDF pp 7 flat pt") {
4ca8d070 3979 func=PtJpsiFlat;
05932df6 3980 } else {
3981 func=PtJpsi;
3982 }
fe4da5cc 3983 break;
17d28ba5 3984 case kJpsiFromB:
3985 func = PtJpsiBPbPb;
3986 break;
0ad09590 3987 case kUpsilonFamily:
88e5db43 3988 case kUpsilonP:
3989 case kUpsilonPP:
34f60c01 3990 case kUpsilon:
bb6e81ac 3991 if (sname == "Vogt" || sname == "Vogt PbPb") {
05932df6 3992 func=PtUpsilonPbPb;
bb6e81ac 3993 } else if (sname == "Vogt pp") {
3994 func=PtUpsilonPP;
7455632e 3995 } else if (sname == "pp 7") {
3996 func=PtUpsilonPP7000;
3997 } else if (sname == "pp 2.76") {
3998 func=PtUpsilonPP2760;
4bac9bd3 3999 } else if (sname == "pp 4.4") {
4000 func=PtUpsilonPP4400;
4001 } else if (sname == "pp 5.03") {
4002 func=PtUpsilonPP5030;
4003 } else if (sname == "pp 8.8") {
4004 func=PtUpsilonPP8800;
4005 } else if (sname == "pp 7 poly") {
4006 func=PtUpsilonPP7000;
4007 } else if (sname == "pp 2.76 poly") {
4008 func=PtUpsilonPP2760;
7455632e 4009 } else if (sname == "PbPb 2.76") {
4010 func=PtUpsilonPbPb2760;
4011 } else if (sname == "PbPb 2.76c1") {
4012 func=PtUpsilonPbPb2760c1;
4013 } else if (sname == "PbPb 2.76c2") {
4014 func=PtUpsilonPbPb2760c2;
4015 } else if (sname == "PbPb 2.76c3") {
4016 func=PtUpsilonPbPb2760c3;
4017 } else if (sname == "PbPb 2.76c4") {
4018 func=PtUpsilonPbPb2760c4;
4019 } else if (sname == "PbPb 2.76c5") {
4020 func=PtUpsilonPbPb2760c5;
4021 } else if (sname == "PbPb 2.76c6") {
4022 func=PtUpsilonPbPb2760c6;
4023 } else if (sname == "PbPb 2.76c7") {
4024 func=PtUpsilonPbPb2760c7;
4025 } else if (sname == "PbPb 2.76c8") {
4026 func=PtUpsilonPbPb2760c8;
4027 } else if (sname == "PbPb 2.76c9") {
4028 func=PtUpsilonPbPb2760c9;
4029 } else if (sname == "PbPb 2.76c10") {
4030 func=PtUpsilonPbPb2760c10;
4031 } else if (sname == "PbPb 2.76c11") {
4032 func=PtUpsilonPbPb2760c11;
4bac9bd3 4033 } else if (sname == "pPb 5.03") {
4034 func=PtUpsilonPPb5030;
4035 } else if (sname == "pPb 5.03c1") {
4036 func=PtUpsilonPPb5030c1;
4037 } else if (sname == "pPb 5.03c2") {
4038 func=PtUpsilonPPb5030c2;
4039 } else if (sname == "pPb 5.03c3") {
4040 func=PtUpsilonPPb5030c3;
4041 } else if (sname == "pPb 5.03c4") {
4042 func=PtUpsilonPPb5030c4;
4043 } else if (sname == "Pbp 5.03") {
4044 func=PtUpsilonPbP5030;
4045 } else if (sname == "Pbp 5.03c1") {
4046 func=PtUpsilonPbP5030c1;
4047 } else if (sname == "Pbp 5.03c2") {
4048 func=PtUpsilonPbP5030c2;
4049 } else if (sname == "Pbp 5.03c3") {
4050 func=PtUpsilonPbP5030c3;
4051 } else if (sname == "Pbp 5.03c4") {
4052 func=PtUpsilonPbP5030c4;
7455632e 4053 } else if (sname == "pPb 8.8") {
4054 func=PtUpsilonPPb8800;
4055 } else if (sname == "pPb 8.8c1") {
4056 func=PtUpsilonPPb8800c1;
4057 } else if (sname == "pPb 8.8c2") {
4058 func=PtUpsilonPPb8800c2;
4059 } else if (sname == "pPb 8.8c3") {
4060 func=PtUpsilonPPb8800c3;
4061 } else if (sname == "pPb 8.8c4") {
4062 func=PtUpsilonPPb8800c4;
4063 } else if (sname == "Pbp 8.8") {
4064 func=PtUpsilonPbP8800;
4065 } else if (sname == "Pbp 8.8c1") {
4066 func=PtUpsilonPbP8800c1;
4067 } else if (sname == "Pbp 8.8c2") {
4068 func=PtUpsilonPbP8800c2;
4069 } else if (sname == "Pbp 8.8c3") {
4070 func=PtUpsilonPbP8800c3;
4071 } else if (sname == "Pbp 8.8c4") {
4072 func=PtUpsilonPbP8800c4;
0e137c25 4073 } else if (sname == "CDF scaled") {
4074 func=PtUpsilonCDFscaled;
9ff13849 4075 } else if (sname == "CDF pp") {
4076 func=PtUpsilonCDFscaledPP;
b33adf51 4077 } else if (sname == "CDF pp 10") {
4078 func=PtUpsilonCDFscaledPP10;
9fd56238 4079 } else if (sname == "CDF pp 8.8") {
4080 func=PtUpsilonCDFscaledPP9;
4081 } else if (sname == "CDF pp 7") {
4082 func=PtUpsilonCDFscaledPP7;
4083 } else if (sname == "CDF pp 3.94") {
4084 func=PtUpsilonCDFscaledPP4;
4085 } else if (sname == "CDF pPb 8.8") {
4086 func=PtUpsilonCDFscaledPPb9;
4087 } else if (sname == "CDF Pbp 8.8") {
4088 func=PtUpsilonCDFscaledPbP9;
4089 } else if (sname == "CDF PbPb 3.94") {
4090 func=PtUpsilonCDFscaledPbPb4;
4ca8d070 4091 } else if (sname == "Flat") {
4092 func=PtUpsilonFlat;
05932df6 4093 } else {
4094 func=PtUpsilon;
4095 }
0ad09590 4096 break;
34f60c01 4097 case kCharm:
9e9ae065 4098 if (sname == "F0M0S0 pp") {
4099 func=PtCharmF0M0S0PP;
4100 } else if (sname == "F1M0S0 pp") {
4101 func=PtCharmF1M0S0PP;
4102 } else if (sname == "F2M0S0 pp") {
4103 func=PtCharmF2M0S0PP;
4104 } else if (sname == "F0M1S0 pp") {
4105 func=PtCharmF0M1S0PP;
4106 } else if (sname == "F0M2S0 pp") {
4107 func=PtCharmF0M2S0PP;
4108 } else if (sname == "F0M0S1 pp") {
4109 func=PtCharmF0M0S1PP;
4110 } else if (sname == "F0M0S2 pp") {
4111 func=PtCharmF0M0S2PP;
4112 } else if (sname == "F0M0S3 pp") {
4113 func=PtCharmF0M0S3PP;
4114 } else if (sname == "F0M0S4 pp") {
4115 func=PtCharmF0M0S4PP;
4116 } else if (sname == "F0M0S5 pp") {
4117 func=PtCharmF0M0S5PP;
4118 } else if (sname == "F0M0S6 pp") {
4119 func=PtCharmF0M0S6PP;
4120 } else if (sname == "central") {
bd0276a8 4121 func=PtCharmCentral;
4122 } else {
4123 func=PtCharm;
4124 }
fe4da5cc 4125 break;
34f60c01 4126 case kBeauty:
9e9ae065 4127 if (sname == "F0M0S0 pp") {
4128 func=PtBeautyF0M0S0PP;
4129 } else if (sname == "F1M0S0 pp") {
4130 func=PtBeautyF1M0S0PP;
4131 } else if (sname == "F2M0S0 pp") {
4132 func=PtBeautyF2M0S0PP;
4133 } else if (sname == "F0M1S0 pp") {
4134 func=PtBeautyF0M1S0PP;
4135 } else if (sname == "F0M2S0 pp") {
4136 func=PtBeautyF0M2S0PP;
4137 } else if (sname == "F0M0S1 pp") {
4138 func=PtBeautyF0M0S1PP;
4139 } else if (sname == "F0M0S2 pp") {
4140 func=PtBeautyF0M0S2PP;
4141 } else if (sname == "F0M0S3 pp") {
4142 func=PtBeautyF0M0S3PP;
4143 } else if (sname == "F0M0S4 pp") {
4144 func=PtBeautyF0M0S4PP;
4145 } else if (sname == "F0M0S5 pp") {
4146 func=PtBeautyF0M0S5PP;
4147 } else if (sname == "F0M0S6 pp") {
4148 func=PtBeautyF0M0S6PP;
4149 } else if (sname == "central") {
bd0276a8 4150 func=PtBeautyCentral;
4151 } else {
4152 func=PtBeauty;
4153 }
fe4da5cc 4154 break;
34f60c01 4155 case kPion:
f9a1ce31 4156 if (sname == "2010 Pos PP") {
4157 func=PtPionPos2010PP;
4158 } else if (sname == "2010 Neg PP") {
4159 func=PtPionNeg2010PP;
4160 } else {
4161 func=PtPion;
4162 }
753690b0 4163 break;
34f60c01 4164 case kKaon:
f9a1ce31 4165 if (sname == "2010 Pos PP") {
4166 func=PtKaonPos2010PP;
4167 } else if (sname == "2010 Neg PP") {
4168 func=PtKaonNeg2010PP;
4169 } else {
4170 func=PtKaon;
4171 }
753690b0 4172 break;
6b450aa0 4173 case kChic0:
4174 func=PtChic0;
00935af2 4175 break;
6b450aa0 4176 case kChic:
4177 func=PtChic;
00935af2 4178 break;
119b35c7 4179 default:
4180 func=0;
4181 printf("<AliGenMUONlib::GetPt> unknown parametrisation\n");
fe4da5cc 4182 }
4183 return func;
4184}
4185
53904666 4186GenFunc AliGenMUONlib::GetY(Int_t param, const char* tname) const
fe4da5cc 4187{
ac3faee4 4188 //
4189 // Return pointer to y- parameterisation
4190 //
05932df6 4191 TString sname = TString(tname);
fe4da5cc 4192 GenFunc func;
753690b0 4193 switch (param)
fe4da5cc 4194 {
34f60c01 4195 case kPhi:
fe4da5cc 4196 func=YPhi;
4197 break;
89512a3b 4198 case kEta:
4199 func=YEta;
4200 break;
4201 case kOmega:
4202 func=YOmega;
4203 break;
0ad09590 4204 case kJpsiFamily:
88e5db43 4205 case kPsiP:
ba8bf3f5 4206 case kChic1:
4207 case kChic2:
34f60c01 4208 case kJpsi:
bb6e81ac 4209 if (sname == "Vogt" || sname == "Vogt PbPb") {
05932df6 4210 func=YJpsiPbPb;
bb6e81ac 4211 } else if (sname == "Vogt pp"){
4212 func=YJpsiPP;
a4f206bf 4213 } else if (sname == "pp 7") {
4214 func=YJpsiPP7000;
755104c5 4215 } else if (sname == "pp 7") {
4216 func=YJpsiPP8000;
a4f206bf 4217 } else if (sname == "pp 2.76") {
4218 func=YJpsiPP2760;
4bac9bd3 4219 } else if (sname == "pp 4.4") {
4220 func=YJpsiPP4400;
4221 } else if (sname == "pp 5.03") {
4222 func=YJpsiPP5030;
4223 } else if (sname == "pp 8.8") {
4224 func=YJpsiPP8800;
4225 } else if (sname == "pp 7 poly") {
4226 func=YJpsiPPpoly7000;
4227 } else if (sname == "pp 2.76 poly") {
4228 func=YJpsiPPpoly2760;
a4f206bf 4229 } else if (sname == "PbPb 2.76") {
4230 func=YJpsiPbPb2760;
7455632e 4231 } else if (sname == "PbPb 2.76c1") {
4232 func=YJpsiPbPb2760c1;
4233 } else if (sname == "PbPb 2.76c2") {
4234 func=YJpsiPbPb2760c2;
4235 } else if (sname == "PbPb 2.76c3") {
4236 func=YJpsiPbPb2760c3;
4237 } else if (sname == "PbPb 2.76c4") {
4238 func=YJpsiPbPb2760c4;
4239 } else if (sname == "PbPb 2.76c5") {
4240 func=YJpsiPbPb2760c5;
4241 } else if (sname == "PbPb 2.76c6") {
4242 func=YJpsiPbPb2760c6;
4243 } else if (sname == "PbPb 2.76c7") {
4244 func=YJpsiPbPb2760c7;
4245 } else if (sname == "PbPb 2.76c8") {
4246 func=YJpsiPbPb2760c8;
4247 } else if (sname == "PbPb 2.76c9") {
4248 func=YJpsiPbPb2760c9;
4249 } else if (sname == "PbPb 2.76c10") {
4250 func=YJpsiPbPb2760c10;
4251 } else if (sname == "PbPb 2.76c11") {
4252 func=YJpsiPbPb2760c11;
4bac9bd3 4253 } else if (sname == "pPb 5.03") {
4254 func=YJpsiPPb5030;
4255 } else if (sname == "pPb 5.03c1") {
4256 func=YJpsiPPb5030c1;
4257 } else if (sname == "pPb 5.03c2") {
4258 func=YJpsiPPb5030c2;
4259 } else if (sname == "pPb 5.03c3") {
4260 func=YJpsiPPb5030c3;
4261 } else if (sname == "pPb 5.03c4") {
4262 func=YJpsiPPb5030c4;
4263 } else if (sname == "Pbp 5.03") {
4264 func=YJpsiPbP5030;
4265 } else if (sname == "Pbp 5.03c1") {
4266 func=YJpsiPbP5030c1;
4267 } else if (sname == "Pbp 5.03c2") {
4268 func=YJpsiPbP5030c2;
4269 } else if (sname == "Pbp 5.03c3") {
4270 func=YJpsiPbP5030c3;
4271 } else if (sname == "Pbp 5.03c4") {
4272 func=YJpsiPbP5030c4;
7455632e 4273 } else if (sname == "pPb 8.8") {
4274 func=YJpsiPPb8800;
4275 } else if (sname == "pPb 8.8c1") {
4276 func=YJpsiPPb8800c1;
4277 } else if (sname == "pPb 8.8c2") {
4278 func=YJpsiPPb8800c2;
4279 } else if (sname == "pPb 8.8c3") {
4280 func=YJpsiPPb8800c3;
4281 } else if (sname == "pPb 8.8c4") {
4282 func=YJpsiPPb8800c4;
4283 } else if (sname == "Pbp 8.8") {
4284 func=YJpsiPbP8800;
4285 } else if (sname == "Pbp 8.8c1") {
4286 func=YJpsiPbP8800c1;
4287 } else if (sname == "Pbp 8.8c2") {
4288 func=YJpsiPbP8800c2;
4289 } else if (sname == "Pbp 8.8c3") {
4290 func=YJpsiPbP8800c3;
4291 } else if (sname == "Pbp 8.8c4") {
4292 func=YJpsiPbP8800c4;
0e137c25 4293 } else if (sname == "CDF scaled") {
4294 func=YJpsiCDFscaled;
9ff13849 4295 } else if (sname == "CDF pp") {
4296 func=YJpsiCDFscaledPP;
9e9ae065 4297 } else if (sname == "CDF pp 10") {
4298 func=YJpsiCDFscaledPP10;
9fd56238 4299 } else if (sname == "CDF pp 8.8") {
4300 func=YJpsiCDFscaledPP9;
94a2994d 4301 } else if (sname == "CDF pp 7" || sname == "CDF pp 7 flat pt") {
9fd56238 4302 func=YJpsiCDFscaledPP7;
4303 } else if (sname == "CDF pp 3.94") {
4304 func=YJpsiCDFscaledPP4;
a4f206bf 4305 } else if (sname == "CDF pp 2.76") {
4306 func=YJpsiCDFscaledPP3;
4307 } else if (sname == "CDF pp 1.9") {
4308 func=YJpsiCDFscaledPP2;
9fd56238 4309 } else if (sname == "CDF pPb 8.8") {
4310 func=YJpsiCDFscaledPPb9;
4311 } else if (sname == "CDF Pbp 8.8") {
4312 func=YJpsiCDFscaledPbP9;
4313 } else if (sname == "CDF PbPb 3.94") {
4314 func=YJpsiCDFscaledPbPb4;
94a2994d 4315 } else if (sname == "Flat" || sname == "CDF pp 7 flat y") {
4ca8d070 4316 func=YJpsiFlat;
05932df6 4317 } else {
4318 func=YJpsi;
4319 }
17d28ba5 4320 break;
4321 case kJpsiFromB:
4322 func = YJpsiBPbPb;
fe4da5cc 4323 break;
0ad09590 4324 case kUpsilonFamily:
88e5db43 4325 case kUpsilonP:
4326 case kUpsilonPP:
34f60c01 4327 case kUpsilon:
bb6e81ac 4328 if (sname == "Vogt" || sname == "Vogt PbPb") {
05932df6 4329 func=YUpsilonPbPb;
bb6e81ac 4330 } else if (sname == "Vogt pp") {
4331 func = YUpsilonPP;
7455632e 4332 } else if (sname == "pp 7") {
4333 func=YUpsilonPP7000;
4334 } else if (sname == "pp 2.76") {
4335 func=YUpsilonPP2760;
4bac9bd3 4336 } else if (sname == "pp 4.4") {
4337 func=YUpsilonPP4400;
4338 } else if (sname == "pp 5.03") {
4339 func=YUpsilonPP5030;
4340 } else if (sname == "pp 8.8") {
4341 func=YUpsilonPP8800;
4342 } else if (sname == "pp 7 poly") {
4343 func=YUpsilonPPpoly7000;
4344 } else if (sname == "pp 2.76 poly") {
4345 func=YUpsilonPPpoly2760;
7455632e 4346 } else if (sname == "PbPb 2.76") {
4347 func=YUpsilonPbPb2760;
4348 } else if (sname == "PbPb 2.76c1") {
4349 func=YUpsilonPbPb2760c1;
4350 } else if (sname == "PbPb 2.76c2") {
4351 func=YUpsilonPbPb2760c2;
4352 } else if (sname == "PbPb 2.76c3") {
4353 func=YUpsilonPbPb2760c3;
4354 } else if (sname == "PbPb 2.76c4") {
4355 func=YUpsilonPbPb2760c4;
4356 } else if (sname == "PbPb 2.76c5") {
4357 func=YUpsilonPbPb2760c5;
4358 } else if (sname == "PbPb 2.76c6") {
4359 func=YUpsilonPbPb2760c6;
4360 } else if (sname == "PbPb 2.76c7") {
4361 func=YUpsilonPbPb2760c7;
4362 } else if (sname == "PbPb 2.76c8") {
4363 func=YUpsilonPbPb2760c8;
4364 } else if (sname == "PbPb 2.76c9") {
4365 func=YUpsilonPbPb2760c9;
4366 } else if (sname == "PbPb 2.76c10") {
4367 func=YUpsilonPbPb2760c10;
4368 } else if (sname == "PbPb 2.76c11") {
4369 func=YUpsilonPbPb2760c11;
4bac9bd3 4370 } else if (sname == "pPb 5.03") {
4371 func=YUpsilonPPb5030;
4372 } else if (sname == "pPb 5.03c1") {
4373 func=YUpsilonPPb5030c1;
4374 } else if (sname == "pPb 5.03c2") {
4375 func=YUpsilonPPb5030c2;
4376 } else if (sname == "pPb 5.03c3") {
4377 func=YUpsilonPPb5030c3;
4378 } else if (sname == "pPb 5.03c4") {
4379 func=YUpsilonPPb5030c4;
4380 } else if (sname == "Pbp 5.03") {
4381 func=YUpsilonPbP5030;
4382 } else if (sname == "Pbp 5.03c1") {
4383 func=YUpsilonPbP5030c1;
4384 } else if (sname == "Pbp 5.03c2") {
4385 func=YUpsilonPbP5030c2;
4386 } else if (sname == "Pbp 5.03c3") {
4387 func=YUpsilonPbP5030c3;
4388 } else if (sname == "Pbp 5.03c4") {
4389 func=YUpsilonPbP5030c4;
7455632e 4390 } else if (sname == "pPb 8.8") {
4391 func=YUpsilonPPb8800;
4392 } else if (sname == "pPb 8.8c1") {
4393 func=YUpsilonPPb8800c1;
4394 } else if (sname == "pPb 8.8c2") {
4395 func=YUpsilonPPb8800c2;
4396 } else if (sname == "pPb 8.8c3") {
4397 func=YUpsilonPPb8800c3;
4398 } else if (sname == "pPb 8.8c4") {
4399 func=YUpsilonPPb8800c4;
4400 } else if (sname == "Pbp 8.8") {
4401 func=YUpsilonPbP8800;
4402 } else if (sname == "Pbp 8.8c1") {
4403 func=YUpsilonPbP8800c1;
4404 } else if (sname == "Pbp 8.8c2") {
4405 func=YUpsilonPbP8800c2;
4406 } else if (sname == "Pbp 8.8c3") {
4407 func=YUpsilonPbP8800c3;
4408 } else if (sname == "Pbp 8.8c4") {
4409 func=YUpsilonPbP8800c4;
0e137c25 4410 } else if (sname == "CDF scaled") {
4411 func=YUpsilonCDFscaled;
9ff13849 4412 } else if (sname == "CDF pp") {
4413 func=YUpsilonCDFscaledPP;
b33adf51 4414 } else if (sname == "CDF pp 10") {
4415 func=YUpsilonCDFscaledPP10;
9fd56238 4416 } else if (sname == "CDF pp 8.8") {
4417 func=YUpsilonCDFscaledPP9;
4418 } else if (sname == "CDF pp 7") {
4419 func=YUpsilonCDFscaledPP7;
4420 } else if (sname == "CDF pp 3.94") {
4421 func=YUpsilonCDFscaledPP4;
4422 } else if (sname == "CDF pPb 8.8") {
4423 func=YUpsilonCDFscaledPPb9;
4424 } else if (sname == "CDF Pbp 8.8") {
4425 func=YUpsilonCDFscaledPbP9;
4426 } else if (sname == "CDF PbPb 3.94") {
4427 func=YUpsilonCDFscaledPbPb4;
4ca8d070 4428 } else if (sname == "Flat") {
4429 func=YUpsilonFlat;
05932df6 4430 } else {
4431 func=YUpsilon;
4432 }
fe4da5cc 4433 break;
34f60c01 4434 case kCharm:
9e9ae065 4435 if (sname == "F0M0S0 pp") {
4436 func=YCharmF0M0S0PP;
4437 } else if (sname == "F1M0S0 pp") {
4438 func=YCharmF1M0S0PP;
4439 } else if (sname == "F2M0S0 pp") {
4440 func=YCharmF2M0S0PP;
4441 } else if (sname == "F0M1S0 pp") {
4442 func=YCharmF0M1S0PP;
4443 } else if (sname == "F0M2S0 pp") {
4444 func=YCharmF0M2S0PP;
4445 } else if (sname == "F0M0S1 pp") {
4446 func=YCharmF0M0S1PP;
4447 } else if (sname == "F0M0S2 pp") {
4448 func=YCharmF0M0S2PP;
4449 } else if (sname == "F0M0S3 pp") {
4450 func=YCharmF0M0S3PP;
4451 } else if (sname == "F0M0S4 pp") {
4452 func=YCharmF0M0S4PP;
4453 } else if (sname == "F0M0S5 pp") {
4454 func=YCharmF0M0S5PP;
4455 } else if (sname == "F0M0S6 pp") {
4456 func=YCharmF0M0S6PP;
4457 } else {
4458 func=YCharm;
4459 }
fe4da5cc 4460 break;
34f60c01 4461 case kBeauty:
9e9ae065 4462 if (sname == "F0M0S0 pp") {
4463 func=YBeautyF0M0S0PP;
4464 } else if (sname == "F1M0S0 pp") {
4465 func=YBeautyF1M0S0PP;
4466 } else if (sname == "F2M0S0 pp") {
4467 func=YBeautyF2M0S0PP;
4468 } else if (sname == "F0M1S0 pp") {
4469 func=YBeautyF0M1S0PP;
4470 } else if (sname == "F0M2S0 pp") {
4471 func=YBeautyF0M2S0PP;
4472 } else if (sname == "F0M0S1 pp") {
4473 func=YBeautyF0M0S1PP;
4474 } else if (sname == "F0M0S2 pp") {
4475 func=YBeautyF0M0S2PP;
4476 } else if (sname == "F0M0S3 pp") {
4477 func=YBeautyF0M0S3PP;
4478 } else if (sname == "F0M0S4 pp") {
4479 func=YBeautyF0M0S4PP;
4480 } else if (sname == "F0M0S5 pp") {
4481 func=YBeautyF0M0S5PP;
4482 } else if (sname == "F0M0S6 pp") {
4483 func=YBeautyF0M0S6PP;
4484 } else {
4485 func=YBeauty;
4486 }
fe4da5cc 4487 break;
34f60c01 4488 case kPion:
f9a1ce31 4489 if (sname == "2010 Pos PP") {
4490 func=YKaonPion2010PP;
4491 } else if (sname == "2010 Neg PP") {
4492 func=YKaonPion2010PP;
4493 } else {
4494 func=YPion;
4495 }
753690b0 4496 break;
34f60c01 4497 case kKaon:
f9a1ce31 4498 if (sname == "2010 Pos PP") {
4499 func=YKaonPion2010PP;
4500 } else if (sname == "2010 Neg PP") {
4501 func=YKaonPion2010PP;
4502 } else {
4503 func=YKaon;
4504 }
753690b0 4505 break;
6b450aa0 4506 case kChic0:
4507 func=YChic0;
00935af2 4508 break;
6b450aa0 4509 case kChic:
4510 func=YChic;
00935af2 4511 break;
119b35c7 4512 default:
4513 func=0;
4514 printf("<AliGenMUONlib::GetY> unknown parametrisation\n");
fe4da5cc 4515 }
4516 return func;
4517}
00935af2 4518
4519//
4520// Chi
4521//
4522//
4523// pt-distribution
4524//____________________________________________________________
75e0cc59 4525Double_t AliGenMUONlib::PtChic0( const Double_t *px, const Double_t */*dummy*/)
00935af2 4526{
4527// Chi_c1 pT
4528 const Double_t kpt0 = 4.;
4529 const Double_t kxn = 3.6;
4530 Double_t x=*px;
4531 //
4532 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
4533 return x/TMath::Power(pass1,kxn);
4534}
75e0cc59 4535Double_t AliGenMUONlib::PtChic1( const Double_t *px, const Double_t */*dummy*/)
00935af2 4536{
4537// Chi_c1 pT
4538 const Double_t kpt0 = 4.;
4539 const Double_t kxn = 3.6;
4540 Double_t x=*px;
4541 //
4542 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
4543 return x/TMath::Power(pass1,kxn);
4544}
75e0cc59 4545Double_t AliGenMUONlib::PtChic2( const Double_t *px, const Double_t */*dummy*/)
00935af2 4546{
4547// Chi_c2 pT
4548 const Double_t kpt0 = 4.;
4549 const Double_t kxn = 3.6;
4550 Double_t x=*px;
4551 //
4552 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
4553 return x/TMath::Power(pass1,kxn);
4554}
75e0cc59 4555Double_t AliGenMUONlib::PtChic( const Double_t *px, const Double_t */*dummy*/)
00935af2 4556{
4557// Chi_c family pT
4558 const Double_t kpt0 = 4.;
4559 const Double_t kxn = 3.6;
4560 Double_t x=*px;
4561 //
4562 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
4563 return x/TMath::Power(pass1,kxn);
4564}
4565
4566//
4567// y-distribution
4568//____________________________________________________________
75e0cc59 4569Double_t AliGenMUONlib::YChic0(const Double_t *py, const Double_t */*dummy*/)
00935af2 4570{
4571// Chi-1c y
4572 const Double_t ky0 = 4.;
4573 const Double_t kb=1.;
4574 Double_t yj;
4575 Double_t y=TMath::Abs(*py);
4576 //
4577 if (y < ky0)
4578 yj=kb;
4579 else
4580 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
4581 return yj;
4582}
4583
75e0cc59 4584Double_t AliGenMUONlib::YChic1(const Double_t *py, const Double_t */*dummy*/)
00935af2 4585{
4586// Chi-1c y
4587 const Double_t ky0 = 4.;
4588 const Double_t kb=1.;
4589 Double_t yj;
4590 Double_t y=TMath::Abs(*py);
4591 //
4592 if (y < ky0)
4593 yj=kb;
4594 else
4595 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
4596 return yj;
4597}
4598
75e0cc59 4599Double_t AliGenMUONlib::YChic2(const Double_t *py, const Double_t */*dummy*/)
00935af2 4600{
4601// Chi-2c y
4602 const Double_t ky0 = 4.;
4603 const Double_t kb=1.;
4604 Double_t yj;
4605 Double_t y=TMath::Abs(*py);
4606 //
4607 if (y < ky0)
4608 yj=kb;
4609 else
4610 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
4611 return yj;
4612}
4613
75e0cc59 4614Double_t AliGenMUONlib::YChic(const Double_t *py, const Double_t */*dummy*/)
00935af2 4615{
4616// Chi_c family y
4617 const Double_t ky0 = 4.;
4618 const Double_t kb=1.;
4619 Double_t yj;
4620 Double_t y=TMath::Abs(*py);
4621 //
4622 if (y < ky0)
4623 yj=kb;
4624 else
4625 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
4626 return yj;
4627}
4628
4629// particle composition
4630//
6b450aa0 4631Int_t AliGenMUONlib::IpChic0(TRandom *)
00935af2 4632{
4633// Chi composition
4634 return 10441;
4635}
4636//
6b450aa0 4637Int_t AliGenMUONlib::IpChic1(TRandom *)
00935af2 4638{
4639// Chi composition
4640 return 20443;
4641}
6b450aa0 4642Int_t AliGenMUONlib::IpChic2(TRandom *)
00935af2 4643{
4644// Chi_c2 prime composition
4645 return 445;
4646}
6b450aa0 4647Int_t AliGenMUONlib::IpChic(TRandom *)
00935af2 4648{
4649// Chi composition
4650 Int_t ip;
4651 Float_t r = gRandom->Rndm();
4652 if (r < 0.001) {
4653 ip = 10441;
4654 } else if( r < 0.377 ) {
4655 ip = 20443;
4656 } else {
4657 ip = 445;
4658 }
4659 return ip;
4660}
4661
4662
4663//_____________________________________________________________
4664
65fb704d 4665typedef Int_t (*GenFuncIp) (TRandom *);
f9a1ce31 4666GenFuncIp AliGenMUONlib::GetIp(Int_t param, const char* tname) const
fe4da5cc 4667{
d90f80fd 4668// Return pointer to particle type parameterisation
f9a1ce31 4669 TString sname = TString(tname);
fe4da5cc 4670 GenFuncIp func;
753690b0 4671 switch (param)
fe4da5cc 4672 {
34f60c01 4673 case kPhi:
fe4da5cc 4674 func=IpPhi;
4675 break;
89512a3b 4676 case kEta:
4677 func=IpEta;
4678 break;
4679 case kOmega:
4680 func=IpOmega;
4681 break;
0ad09590 4682 case kJpsiFamily:
4683 func=IpJpsiFamily;
4684 break;
88e5db43 4685 case kPsiP:
4686 func=IpPsiP;
4687 break;
34f60c01 4688 case kJpsi:
17d28ba5 4689 case kJpsiFromB:
fe4da5cc 4690 func=IpJpsi;
4691 break;
34f60c01 4692 case kUpsilon:
fe4da5cc 4693 func=IpUpsilon;
4694 break;
0ad09590 4695 case kUpsilonFamily:
4696 func=IpUpsilonFamily;
4697 break;
88e5db43 4698 case kUpsilonP:
4699 func=IpUpsilonP;
4700 break;
4701 case kUpsilonPP:
4702 func=IpUpsilonPP;
4703 break;
34f60c01 4704 case kCharm:
fe4da5cc 4705 func=IpCharm;
4706 break;
34f60c01 4707 case kBeauty:
fe4da5cc 4708 func=IpBeauty;
4709 break;
34f60c01 4710 case kPion:
f9a1ce31 4711 if (sname == "2010 Pos PP") {
4712 func=IpPionPos;
4713 } else if (sname == "2010 Neg PP") {
4714 func=IpPionNeg;
4715 } else {
4716 func=IpPion;
4717 }
753690b0 4718 break;
34f60c01 4719 case kKaon:
f9a1ce31 4720 if (sname == "2010 Pos PP") {
4721 func=IpKaonPos;
4722 } else if (sname == "2010 Neg PP") {
4723 func=IpKaonNeg;
4724 } else {
4725 func=IpKaon;
4726 }
753690b0 4727 break;
6b450aa0 4728 case kChic0:
4729 func=IpChic0;
00935af2 4730 break;
6b450aa0 4731 case kChic1:
4732 func=IpChic1;
00935af2 4733 break;
6b450aa0 4734 case kChic2:
4735 func=IpChic2;
00935af2 4736 break;
6b450aa0 4737 case kChic:
4738 func=IpChic;
00935af2 4739 break;
119b35c7 4740 default:
4741 func=0;
4742 printf("<AliGenMUONlib::GetIp> unknown parametrisation\n");
fe4da5cc 4743 }
4744 return func;
4745}
4746
4747
753690b0 4748
05932df6 4749Float_t AliGenMUONlib::Interpolate(Float_t x, Float_t* y, Float_t x0,
4750 Float_t dx,
4751 Int_t n, Int_t no)
4752{
4753//
4754// Neville's alorithm for interpolation
4755//
4756// x: x-value
4757// y: Input array
4758// x0: minimum x
4759// dx: step size
4760// n: number of data points
4761// no: order of polynom
4762//
4763 Float_t* c = new Float_t[n];
4764 Float_t* d = new Float_t[n];
4765 Int_t m, i;
4766 for (i = 0; i < n; i++) {
4767 c[i] = y[i];
4768 d[i] = y[i];
4769 }
4770
4771 Int_t ns = int((x - x0)/dx);
4772
4773 Float_t y1 = y[ns];
4774 ns--;
4775 for (m = 0; m < no; m++) {
4776 for (i = 0; i < n-m; i++) {
4777 Float_t ho = x0 + Float_t(i) * dx - x;
4778 Float_t hp = x0 + Float_t(i+m+1) * dx - x;
4779 Float_t w = c[i+1] - d[i];
4780 Float_t den = ho-hp;
4781 den = w/den;
4782 d[i] = hp * den;
4783 c[i] = ho * den;
4784 }
4785 Float_t dy;
4786
4787 if (2*ns < (n-m-1)) {
4788 dy = c[ns+1];
4789 } else {
4790 dy = d[ns--];
4791 }
4792 y1 += dy;}
4793 delete[] c;
4794 delete[] d;
4795
4796 return y1;
4797}
4798
f9a1ce31 4799//=============================================================================
4800Double_t AliGenMUONlib::PtPionPos2010PP(const Double_t *px, const Double_t* /*dummy*/)
4801{
4802// Pos pion
4803 const Double_t par[3] = {2.27501, 0.116141, 5.59591};
4804 Double_t pt = px[0];
4805 Double_t m0 = TDatabasePDG::Instance()->GetParticle(211)->Mass();
4806 Double_t mt = TMath::Sqrt(m0*m0 + pt*pt);
4807 Double_t nc = par[1]*par[2];
4808 Double_t t1 = (par[2]-1.)/nc/(nc/(par[2]-2.)+m0);
4809 Double_t t2 = TMath::Power(1.+(mt-m0)/nc, -1.*par[2]);
4810 Double_t fn = par[0] * pt * t1 * t2;
4811 return fn;
4812}
4813
4814//=============================================================================
4815Double_t AliGenMUONlib::PtPionNeg2010PP(const Double_t *px, const Double_t* /*dummy*/)
4816{
4817// Neg pion
4818 const Double_t par[3] = {2.25188, 0.12176, 5.91166};
4819 Double_t pt = px[0];
4820 Double_t m0 = TDatabasePDG::Instance()->GetParticle(211)->Mass();
4821 Double_t mt = TMath::Sqrt(m0*m0 + pt*pt);
4822 Double_t nc = par[1]*par[2];
4823 Double_t t1 = (par[2]-1.)/nc/(nc/(par[2]-2.)+m0);
4824 Double_t t2 = TMath::Power(1.+(mt-m0)/nc, -1.*par[2]);
4825 Double_t fn = par[0] * pt * t1 * t2;
4826 return fn;
4827}
4828
4829//=============================================================================
4830Double_t AliGenMUONlib::PtKaonPos2010PP(const Double_t *px, const Double_t* /*dummy*/)
4831{
4832// Pos kaons
4833 const Double_t par[3] = {0.279386, 0.195466, 6.59587};
4834 Double_t pt = px[0];
4835 Double_t m0 = TDatabasePDG::Instance()->GetParticle(321)->Mass();
4836 Double_t mt = TMath::Sqrt(m0*m0 + pt*pt);
4837 Double_t nc = par[1]*par[2];
4838 Double_t t1 = (par[2]-1.)/nc/(nc/(par[2]-2.)+m0);
4839 Double_t t2 = TMath::Power(1.+(mt-m0)/nc, -1.*par[2]);
4840 Double_t fn = par[0] * pt * t1 * t2;
4841 return fn;
4842}
4843
4844//=============================================================================
4845Double_t AliGenMUONlib::PtKaonNeg2010PP(const Double_t *px, const Double_t* /*dummy*/)
4846{
4847// Neg kaons
4848 const Double_t par[3] = {0.278927, 0.189049, 6.43006};
4849 Double_t pt = px[0];
4850 Double_t m0 = TDatabasePDG::Instance()->GetParticle(321)->Mass();
4851 Double_t mt = TMath::Sqrt(m0*m0 + pt*pt);
4852 Double_t nc = par[1]*par[2];
4853 Double_t t1 = (par[2]-1.)/nc/(nc/(par[2]-2.)+m0);
4854 Double_t t2 = TMath::Power(1.+(mt-m0)/nc, -1.*par[2]);
4855 Double_t fn = par[0] * pt * t1 * t2;
4856 return fn;
4857}
4858
4859//=============================================================================
4860Double_t AliGenMUONlib::YKaonPion2010PP(const Double_t *px, const Double_t* /*dummy*/)
4861{
4862// pions and kaons
4863 Double_t y = px[0];
4864 Double_t sigma = 2.35;
4865 Double_t kernal = y/2./sigma;
4866 Double_t fxn = TMath::Exp(-1.*kernal*kernal);
4867 return fxn;
4868}
753690b0 4869
f9a1ce31 4870//=============================================================================
4871Int_t AliGenMUONlib::IpPionPos(TRandom *)
4872{
4873// Pos pions
4874 return 211;
4875}
4876
4877//=============================================================================
4878Int_t AliGenMUONlib::IpPionNeg(TRandom *)
4879{
4880// Neg pions
4881 return -211;
4882}
4883
4884//=============================================================================
4885Int_t AliGenMUONlib::IpKaonPos(TRandom *)
4886{
4887// pos Kaons
4888 return 321;
4889}
4890
4891//=============================================================================
4892Int_t AliGenMUONlib::IpKaonNeg(TRandom *)
4893{
4894// neg Kaons
4895 return -321;
4bac9bd3 4896}