Line data Source code
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 :
16 : /* $Id: AliGenEMlib.cxx 30052 2008-11-25 14:54:18Z morsch $ */
17 :
18 : /////////////////////////////////////////////////////////////////////////////
19 : // //
20 : // Implementation of AliGenEMlib for electron, di-electron, and photon //
21 : // cocktail calculations. //
22 : // It is based on AliGenGSIlib. //
23 : // //
24 : // Responsible: R.Averbeck@gsi.de //
25 : // //
26 : /////////////////////////////////////////////////////////////////////////////
27 :
28 :
29 : #include <Riostream.h>
30 : #include "TMath.h"
31 : #include "TRandom.h"
32 : #include "TString.h"
33 : #include "AliGenEMlib.h"
34 :
35 : using std::cout;
36 : using std::endl;
37 :
38 6 : ClassImp(AliGenEMlib)
39 :
40 : //Initializers for static members
41 : Int_t AliGenEMlib::fgSelectedCollisionsSystem=AliGenEMlib::kpp7TeV;
42 : Int_t AliGenEMlib::fgSelectedPtParamPi0=AliGenEMlib::kPizeroParam;
43 : Int_t AliGenEMlib::fgSelectedPtParamEta=AliGenEMlib::kEtaParamRatiopp;
44 : Int_t AliGenEMlib::fgSelectedPtParamOmega=AliGenEMlib::kOmegaParampp;
45 : Int_t AliGenEMlib::fgSelectedPtParamPhi=AliGenEMlib::kPhiParampp;
46 : Int_t AliGenEMlib::fgSelectedCentrality=AliGenEMlib::kpp;
47 : Int_t AliGenEMlib::fgSelectedV2Systematic=AliGenEMlib::kNoV2Sys;
48 :
49 : Double_t AliGenEMlib::CrossOverLc(double a, double b, double x){
50 0 : if(x<b-a/2) return 1.0;
51 0 : else if(x>b+a/2) return 0.0;
52 0 : else return cos(((x-b)/a+0.5)*TMath::Pi())/2+0.5;
53 0 : }
54 : Double_t AliGenEMlib::CrossOverRc(double a, double b, double x){
55 0 : return 1-CrossOverLc(a,b,x);
56 : }
57 :
58 : // const Double_t AliGenEMlib::fgkV2param[kCentralities][16] = {
59 : // // charged pion cent, based on: https://twiki.cern.ch/twiki/bin/viewauth/ALICE/FlowPAGQM2012talkIdentified
60 : // { 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // pp no V2
61 : // ,{ 6.554571e-02, 1.436915e+00, 4.610598e-02, 2.554090e+00, 1.300948e+00, 2.970850e-02, 4.767877e+00, 4.228885e+00, 6.025959e-02, 1.570851e-03, 1.108941e+00, 0, 1, 1.715434e-03, 4.088070e-01, 25 } // 0-5
62 : // ,{ 1.171348e-01, 1.333067e+00, 4.537086e-02, 3.046348e+00, 3.903416e+00, 4.407152e-02, 9.123846e-01, 4.834531e+00, 1.186227e-01, 2.259463e-03, 8.916458e-01, 0, 1, 2.300647e-03, 4.531172e-01, 25 } // 5-10
63 : // ,{ 1.748434e-01, 1.285199e+00, 4.219881e-02, 4.018858e+00, 4.255082e+00, 7.955896e-03, 1.183264e-01,-9.329627e+00, 5.826570e-01, 3.368057e-03, 5.437668e-01, 0, 1, 3.178663e-03, 3.617552e-01, 25 } // 10-20
64 : // ,{ 2.149526e-01, 1.408792e+00, 5.062101e-02, 3.206279e+00, 3.988517e+00, 3.724655e-02, 1.995791e-01,-1.571536e+01, 6.494227e+00, 4.957874e-03, 4.903140e-01, 0, 1, 4.214626e-03, 3.457922e-01, 25 } // 20-30
65 : // ,{ 2.408942e-01, 1.477541e+00, 5.768983e-02, 3.333347e+00, 3.648508e+00,-2.044309e-02, 1.004145e-01,-2.386625e+01, 3.301913e+00, 5.666750e-03, 5.118686e-01, 0, 1, 4.626802e-03, 3.188974e-01, 25 } // 30-40
66 : // ,{ 2.495109e-01, 1.543680e+00, 6.217835e-02, 3.518863e+00, 4.557145e+00, 6.014553e-02, 1.491814e-01,-5.443647e+00, 5.403300e-01, 6.217285e-03, 5.580218e-01, 0, 1, 4.620486e-03, 3.792879e-01, 25 } // 40-50
67 : // ,{ 2.166399e-01, 1.931033e+00, 8.195390e-02, 2.226640e+00, 3.106649e+00, 1.058755e-01, 8.557791e-01, 4.006501e+00, 2.476449e-01, 6.720714e-03, 6.342966e-01, 0, 1, 4.449839e-03, 4.968750e-01, 25 } // 50-60
68 : // ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-10
69 : // ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 20-40
70 : // ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 40-60
71 : // ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 60-80
72 : // ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-20
73 : // ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-40
74 : // ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 20-80
75 : // ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 40-80
76 : // };
77 :
78 : const Double_t AliGenEMlib::fgkV2param[kCentralities][16] = {
79 : // charged pion cent, based on: https://twiki.cern.ch/twiki/bin/viewauth/ALICE/FlowPAGQM2012talkIdentified
80 : { 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // pp no V2
81 : ,{ 6.516808e-02, 1.449877e+00, 4.705013e-02, 3.025555e+00, 3.391947e+00, 2.364841e-02, 2.303211e+00, 4.443068e+00, 5.989572e-02, 2.079546e-03, 8.365175e-01, 0, 1, 2.079546e-03, 8.365175e-01, 6.0 } // 0-5
82 : ,{ 1.199628e-01, 1.288148e+00, 4.230109e-02, 3.071488e+00, 3.649381e+00, 4.643994e-02, 1.210442e+00, 5.055715e+00, 1.089290e-01, 2.561783e-03, 7.907385e-01, 0, 1, 2.561783e-03, 7.907385e-01, 7.0 } // 5-10
83 : ,{ 1.672604e-01, 1.367064e+00, 4.704060e-02, 3.005428e+00, 3.816287e+00, 5.845636e-02, 8.660308e-01, 4.587477e+00, 1.819530e-01, 2.945173e-03, 7.256487e-01, 0, 1, 2.945173e-03, 7.256487e-01, 8.0 } // 10-20
84 : ,{ 2.079093e-01, 1.480510e+00, 5.518112e-02, 2.845102e+00, 3.485697e+00, 3.363945e-02, 3.599748e-01, 3.207685e+00, 3.494331e-01, 4.398452e-03, 6.399492e-01, 0, 1, 4.398452e-03, 6.399492e-01, 16.0} // 20-30
85 : ,{ 2.275701e-01, 1.622512e+00, 6.793718e-02, 2.742464e+00, 3.229573e+00, 3.316905e-02, 3.128005e-01, 2.465896e+00, 4.296590e-01, 4.837696e-03, 6.855293e-01, 0, 1, 4.837696e-03, 6.855293e-01, 17.0} // 30-40
86 : ,{ 2.394412e-01, 1.663730e+00, 7.163620e-02, 2.406896e+00, 2.343323e+00, 1.033637e-01, 1.028906e+00, 4.512137e+00, 2.383232e-01, 5.013671e-03, 7.776760e-01, 0, 1, 5.013671e-03, 7.776760e-01, 8.0 } // 40-50
87 : ,{ 2.115576e-01, 1.981979e+00, 8.221619e-02, 2.203373e+00, 3.213309e+00, 1.113934e-01, 7.620465e-01, 3.575663e+00, 2.673220e-01, 4.555673e-03, 9.927123e-01, 0, 1, 4.555673e-03, 9.927123e-01, 7.0 } // 50-60
88 : ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-10
89 : ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 20-40
90 : ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 40-60
91 : ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 60-80
92 : ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-20
93 : ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 0-40
94 : ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 20-80
95 : ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000, 10 } // 40-80
96 : };
97 :
98 : const Double_t AliGenEMlib::fgkRawPtOfV2Param[kCentralities][10] = {
99 : { 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // pp no V2
100 : ,{ 2.181446e+08, 9.412925e-01, 1.158774e-01, 3.020303e+01, 6.790828e+00, 9.999996e+01, 2.616827e+00, 3.980492e+00, 1.225169e+07, 5.575243e+00 } // 0-5
101 : ,{ 3.006215e+08, 9.511881e-01, 1.192788e-01, 2.981931e+01, 5.068175e+01, 9.999993e+01, 2.650635e+00, 4.073982e+00, 2.508045e+07, 5.621039e+00 } // 5-10
102 : ,{ 1.643438e+09, 9.604242e-01, 1.218512e-01, 2.912684e+01, 1.164242e+00, 9.999709e+01, 2.662326e+00, 4.027795e+00, 7.020810e+07, 5.696860e+00 } // 10-20
103 : ,{ 8.109985e+08, 9.421935e-01, 1.328020e-01, 2.655910e+01, 1.053677e+00, 9.999812e+01, 2.722949e+00, 3.964547e+00, 6.104096e+07, 5.694703e+00 } // 20-30
104 : ,{ 5.219789e+08, 9.417339e-01, 1.417541e-01, 2.518080e+01, 7.430803e-02, 9.303295e+01, 2.780227e+00, 3.909570e+00, 4.723116e+07, 5.778375e+00 } // 30-40
105 : ,{ 2.547159e+08, 9.481459e-01, 2.364858e-01, 1.689288e+01, 3.858883e+00, 6.352619e+00, 2.742270e+00, 3.855226e+00, 3.120535e+07, 5.878677e+00 } // 40-50
106 : ,{ 9.396097e+07, 9.304491e-01, 3.244940e-01, 1.291696e+01, 2.854367e+00, 6.325908e+00, 2.828258e+00, 4.133699e+00, 1.302739e+07, 5.977896e+00 } // 50-60
107 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-10
108 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 20-40
109 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 40-60
110 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 60-80
111 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-20
112 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-40
113 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 20-80
114 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 40-80
115 : };
116 :
117 : //based on: arXiv:1401.1250 [nucl-ex], https://twiki.cern.ch/twiki/bin/view/ALICE/PWGLFPAGSPECTRALowToHighPt
118 : const Double_t AliGenEMlib::fgkPtParam[kCentralities][10] = {
119 : { 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // pp no V2
120 : ,{ 1.240475e+02, 7.238972e-01, 4.297020e-01, 9.315793e+00, 3.304777e+00, 4.821807e+00, 3.729274e+00, 2.400991e+00, 2.487974e+01, 5.728662e+00 } // 0-5
121 : ,{ 7.912895e+01, 7.185643e-01, 3.995308e-01, 9.887192e+00, 3.191115e+00, 4.495417e+00, 2.724148e+00, 4.382795e+00, 3.024189e+01, 5.860432e+00 } // 5-10
122 : ,{ 6.956488e+01, 6.911720e-01, 4.646870e-01, 8.550547e+00, 3.172843e+00, 4.624597e+00, 3.679825e+00, 2.529246e+00, 2.454819e+01, 5.846622e+00 } // 10-20
123 : ,{ 4.851407e+02, 9.341151e-01, 4.716673e-01, 1.058090e+01, 4.681218e+00, 7.261284e+00, 3.883227e+00, 6.638627e+00, 1.562806e+01, 5.772127e+00 } // 20-30 (based on older unpublished)
124 : ,{ 3.157060e+01, 6.849451e-01, 4.868669e-01, 8.394558e+00, 3.539142e+00, 5.495280e+00, 4.102638e+00, 3.722991e+00, 1.638622e+01, 5.935963e+00 } // 30-40 (based on older unpublished)
125 : ,{ 1.857919e+01, 6.185989e-01, 5.878869e-01, 7.035064e+00, 2.892415e+00, 4.339383e+00, 3.549679e+00, 2.821061e+00, 1.529318e+01, 6.091388e+00 } // 40-50 (based on older unpublished)
126 : ,{ 1.069397e+01, 5.816587e-01, 6.542961e-01, 6.472858e+00, 2.643870e+00, 3.929020e+00, 3.339224e+00, 2.410371e+00, 9.606748e+00, 6.116685e+00 } // 50-60 (based on older unpublished)
127 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-10
128 : ,{ 3.936495e+01, 7.043984e-01, 4.552076e-01, 9.142929e+00, 3.036362e+00, 4.248826e+00, 2.477718e+00, 3.911314e+00, 2.045442e+01, 5.946635e+00 } // 20-40
129 : ,{ 1.944300e+01, 6.102861e-01, 6.715858e-01, 6.491069e+00, 2.578329e+00, 3.671677e+00, 3.162338e+00, 2.317503e+00, 1.224814e+01, 6.089513e+00 } // 40-60
130 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 60-80
131 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-20
132 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 0-40
133 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 20-80
134 : ,{ 0.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000 } // 40-80
135 : };
136 :
137 : const Double_t AliGenEMlib::fgkThermPtParam[kCentralities][2] = {
138 : // might also be interesting: https://aliceinfo.cern.ch/Notes/node/226
139 : { 0.0000000000, 0.0000000000 } // pp no V2
140 : ,{ 0.0000000000, 0.0000000000 } // 0-5
141 : ,{ 0.0000000000, 0.0000000000 } // 5-10
142 : ,{ 1.944330e+01, 3.047106e+00 } // 10-20 //based on: https://aliceinfo.cern.ch/Notes/node/87
143 : ,{ 0.0000000000, 0.0000000000 } // 20-30
144 : ,{ 0.0000000000, 0.0000000000 } // 30-40
145 : ,{ 0.0000000000, 0.0000000000 } // 40-50
146 : ,{ 0.0000000000, 0.0000000000 } // 50-60
147 : ,{ 3.557511e+02, 4.459934e+00 } // 0-10 //based on: https://aliceinfo.cern.ch/Notes/node/87
148 : ,{ 8.088291e-01, 2.013231e+00 } // 20-40 //based on: https://twiki.cern.ch/twiki/bin/view/ALICE/ALICEDirectPhotonSpectrumPaper
149 : ,{ 0.0000000000, 0.0000000000 } // 40-60
150 : ,{ 0.0000000000, 0.0000000000 } // 60-80
151 : ,{ 1.363037e+01, 2.696863e+00 } // 0-20 //based on: https://twiki.cern.ch/twiki/bin/view/ALICE/ALICEDirectPhotonSpectrumPaper
152 : ,{ 4.351422e+01, 3.267624e+00 } // 0-40 //based on: https://aliceinfo.cern.ch/Figure/node/2866
153 : ,{ 0.0000000000, 0.0000000000 } // 20-80
154 : ,{ 0.0000000000, 0.0000000000 } // 40-80
155 : };
156 :
157 : const Double_t AliGenEMlib::fgkModTsallisParamPi0PbPb[kCentralities][7] = {
158 : {0., 0., 0., 0., 0., 0., 0. }, // pp
159 : {0., 0., 0., 0., 0., 0., 0. }, // 0-5
160 : {0., 0., 0., 0., 0., 0., 0. }, // 5-10
161 : {2.09114, 2.7482, 6.911, 51.1383, -10.6896, 1.30818, -1.59137 }, // 10-20
162 : {0., 0., 0., 0., 0., 0., 0. }, // 20-30
163 : {0., 0., 0., 0., 0., 0., 0. }, // 30-40
164 : {0., 0., 0., 0., 0., 0., 0. }, // 40-50
165 : {0., 0., 0., 0., 0., 0., 0. }, // 50-60
166 : {970.684, 0.46451, 5.52064, 21.7707, -4.2495, 4.62292, -3.47699 }, // 00-10
167 : {3.22534, 2.83717, 7.50505, 38.8015, -8.93242, 0.9842, -0.821508 }, // 20-40
168 : {0., 0., 0., 0., 0., 0., 0. }, // 40-60
169 : {0., 0., 0., 0., 0., 0., 0. }, // 60-80
170 : {44.3972, 1.0644, 5.92254, 40.9254, -8.07759, 3.30333, -2.25078 }, // 00-20
171 : {38.187, 1.58985, 6.81705, 31.2526, -8.35251, 3.39482, -1.56172 }, // 00-40
172 : {0., 0., 0., 0., 0., 0., 0. }, // 20-80
173 : {89.2412, 0.150509, 4.97424, 112.986, 643.257, 3.41969, -2.46034 }, // 40-80
174 : };
175 :
176 : const Double_t AliGenEMlib::fgkModTsallisParamPiChargedPbPb[kCentralities][7] = {
177 : {0., 0., 0., 0., 0., 0., 0. }, // pp
178 : {0., 0., 0., 0., 0., 0., 0. }, // 0-5
179 : {0., 0., 0., 0., 0., 0., 0. }, // 5-10
180 : {117.693, 1.20567, 6.57362, 29.2275, -7.71065, 4.50046, -1.91093 }, // 10-20
181 : {0., 0., 0., 0., 0., 0., 0. }, // 20-30
182 : {0., 0., 0., 0., 0., 0., 0. }, // 30-40
183 : {0., 0., 0., 0., 0., 0., 0. }, // 40-50
184 : {0., 0., 0., 0., 0., 0., 0. }, // 50-60
185 : {229.035, 1.11283, 6.53404, 28.9739, -8.15381, 5.05703, -2.32825 }, // 00-10
186 : {45.5686, 1.39268, 6.72519, 29.4513, -7.23335, 3.80987, -1.18599 }, // 20-40
187 : {0., 0., 0., 0., 0., 0., 0. }, // 40-60
188 : {0., 0., 0., 0., 0., 0., 0. }, // 60-80
189 : {171.812, 1.14849, 6.54742, 29.0473, -7.96679, 4.82915, -2.15967 }, // 00-20
190 : {108.083, 1.21125, 6.59362, 28.9651, -7.70072, 4.56583, -1.89318 }, // 00-40
191 : {0., 0., 0., 0., 0., 0., 0. }, // 20-80
192 : {3.14057, 0.329224, 4.8235, 491.145, 186.041, 2.91138, -2.20281 }, // 40-80
193 : };
194 :
195 6 : const Double_t AliGenEMlib::fgkParamSetPi07TeV[kNPi0Param][7] = {
196 6 : {0.134977, 2.31335/(2*TMath::Pi()), 0.1433, 7.003, 0, 0, 0 }, //kPizeroParam
197 3 : {-0.0580977, 0.580804, 5.0964, -669.913, -160.2, 4.45906, -0.465125 }, //kPizeroParamlow
198 3 : {-7.09454, 0.218554, 5.2278, 77.9877, -359.457, 4.67862, -0.996938 }, //kPizeroParamhigh
199 : {0., 0., 0., 0., 0., 0., 0. }, //kPichargedParam
200 : {0., 0., 0., 0., 0., 0., 0. }, //kPichargedParamlow
201 3 : {-0.000632204, 0.371249, 4.56778, -111488, -15573.4, 4.33064, -1.5506 }, //kPichargedParamhigh
202 : {0., 0., 0., 0., 0., 0., 0. }, //kPizeroParamAlter
203 : {0., 0., 0., 0., 0., 0., 0. }, //kPizeroParamAlterlow
204 3 : {0., 0., 0., 0., 0., 0., 0. }, //kPizeroParamAlterhigh
205 : };
206 :
207 6 : const Double_t AliGenEMlib::fgkParamSetPi02760GeV[kNPi0Param][7] = {
208 6 : {0.134977, 1.7/(2*TMath::Pi()), 0.135, 7.1, 0, 0, 0 }, //kPizeroParam
209 3 : {-1.4583, 0.188108, 5.34499, 546.328, -2142.93, 4.55572, -1.82455 }, //kPizeroParamlow
210 3 : {-0.0648943, 0.231029, 4.39238, -3705.4, -35.9761, 4.87127, -2.00983 }, //kPizeroParamhigh
211 3 : {0.755554, 0.20772, 5.24167, 11.8279, 1492.53, 3.93863, -1.72404 }, //kPichargedParam
212 : {0., 0., 0., 0., 0., 0., 0. }, //kPichargedParamlow
213 : {0., 0., 0., 0., 0., 0., 0. }, //kPichargedParamhigh
214 3 : {0.0610774, 5.86289, -7.83516, 1.29301, 2.62416, 0., 0. }, //kPizeroParamAlter
215 3 : {0.065338, 5.86705, -9.05494, 1.38435, 3.58848, 0., 0. }, //kPizeroParamAlterlow
216 3 : {0., 0., 0., 0., 0., 0., 0. }, //kPizeroParamAlterhigh
217 : };
218 :
219 6 : const Double_t AliGenEMlib::fgkParamSetPi0900GeV[kNPi0Param][7] = {
220 6 : {0.134977, 1.5/(2*TMath::Pi()), 0.132, 7.8, 0, 0, 0 }, //kPizeroParam
221 : {0., 0., 0., 0., 0., 0., 0. }, //kPizeroParamlow
222 : {0., 0., 0., 0., 0., 0., 0. }, //kPizeroParamhigh
223 : {0., 0., 0., 0., 0., 0., 0. }, //kPichargedParam
224 : {0., 0., 0., 0., 0., 0., 0. }, //kPichargedParamlow
225 : {0., 0., 0., 0., 0., 0., 0. }, //kPichargedParamhigh
226 3 : {0.0467285, 59.6495, -212.865, 0.0584012, 2.83816, 0., 0. }, //kPizeroParamAlter
227 3 : {0.0468173, 66.9511, -136.287, 0.0298099, 1.17147, 0., 0. }, //kPizeroParamAlterlow
228 3 : {0., 0., 0., 0., 0., 0., 0. }, //kPizeroParamAlterhigh
229 : };
230 :
231 :
232 : // MASS 0=>PIZERO, 1=>ETA, 2=>RHO0, 3=>OMEGA, 4=>ETAPRIME, 5=>PHI, 6=>JPSI, 7=>SIGMA, 8=>K0s, 9=>DELTA++, 10=>DELTA+, 11=>DELTA-, 12=>DELTA0, 13=>Rho+, 14=>Rho-, 15=>K0*
233 : const Double_t AliGenEMlib::fgkHM[16] = {0.1349766, 0.547853, 0.77549, 0.78265, 0.95778, 1.019455, 3.096916, 1.192642, 0.497614, 1.2311, 1.2349, 1.2349, 1.23340, 0.77549, 0.77549, 0.896};
234 :
235 : const Double_t AliGenEMlib::fgkMtFactor[3][16] = {
236 : // {1.0, 0.5, 1.0, 0.9, 0.4, 0.23, 0.054}, // factor for pp from arXiv:1110.3929
237 : // {1.0, 0.55, 1.0, 0.9, 0.4, 0.25, 0.004} // factor for PbPb from arXiv:1110.3929
238 : //{1., 0.48, 1.0, 0.9, 0.25, 0.4}, (old values)
239 : //{1., 0.48, 1.0, 0.9, 0.4, 0.25}, (nlo values)
240 : //{1., 0.48, 1.0, 0.8, 0.4, 0.2, 0.06} (combination of nlo and LHC measurements)
241 : //https://aliceinfo.cern.ch/Figure/node/2634
242 : //https://aliceinfo.cern.ch/Figure/node/2788
243 : //https://aliceinfo.cern.ch/Figure/node/4403
244 : //https://aliceinfo.cern.ch/Figure/node/5842
245 : //https://aliceinfo.cern.ch/Notes/node/87
246 : /*best guess:
247 : - pp values for eta/pi0 [arXiv:1205.5724], omega/pi0 [arXiv:1210.5749], phi/(pi+/-) [arXiv:1208.5717] from measured 7 Tev data
248 : */
249 : {1., 0.476, 1.0, 0.85, 0.4, 0.13, 1., 0.49, 0.575, 1, 1, 1, 1, 1.0, 1.0, 1.0}, //pp
250 : {1., 0.476, 1.0, 0.85, 0.4, 0.25, 1., 0.49, 0.575, 1, 1, 1, 1, 1.0, 1.0, 1.0}, //pPb
251 : {1., 0.476, 1.0, 0.85, 0.4, 0.25, 1., 0.49, 0.575, 1, 1, 1, 1, 1.0, 1.0, 1.0} //PbPb
252 : };
253 :
254 : //==========================================================================
255 : //
256 : // Definition of Particle Distributions
257 : //
258 : //==========================================================================
259 :
260 : //--------------------------------------------------------------------------
261 : //
262 : // General functions
263 : //
264 : //--------------------------------------------------------------------------
265 : Double_t AliGenEMlib::PtModifiedHagedornThermal(Double_t pt,
266 : Double_t c,
267 : Double_t p0,
268 : Double_t p1,
269 : Double_t n,
270 : Double_t cT,
271 : Double_t T)
272 : {
273 : // Modified Hagedorn Thermal fit to Picharged for PbPb:
274 : Double_t invYield;
275 0 : invYield = c/TMath::Power(p0+pt/p1,n) + cT*exp(-1.0*pt/T);
276 :
277 0 : return invYield*(2*TMath::Pi()*pt);
278 : }
279 :
280 :
281 :
282 : Double_t AliGenEMlib::PtModifiedHagedornExp(Double_t pt,
283 : Double_t c,
284 : Double_t p1,
285 : Double_t p2,
286 : Double_t p0,
287 : Double_t n)
288 : {
289 : // Modified Hagedorn exponentiel fit to Pizero for PbPb:
290 : Double_t invYield;
291 0 : invYield = c*TMath::Power(exp(-1*(p1*pt-p2*pt*pt))+pt/p0,-n);
292 :
293 0 : return invYield*(2*TMath::Pi()*pt);
294 : }
295 :
296 :
297 : Double_t AliGenEMlib::PtModifiedHagedornExp2(Double_t pt,
298 : Double_t c,
299 : Double_t a,
300 : Double_t b,
301 : Double_t p0,
302 : Double_t p1,
303 : Double_t d,
304 : Double_t n)
305 : {
306 : // Modified Hagedorn exponential fit to charged pions for pPb:
307 : Double_t invYield;
308 0 : invYield = c*TMath::Power(exp(-a*pt-b*pt*pt)+pt/p0+TMath::Power(pt/p1,d),-n);
309 :
310 0 : return invYield*(2*TMath::Pi()*pt);
311 : }
312 :
313 : Double_t AliGenEMlib::PtTsallis(Double_t pt,
314 : Double_t m,
315 : Double_t c,
316 : Double_t T,
317 : Double_t n)
318 : {
319 : // Tsallis fit to Pizero for pp:
320 : Double_t mt;
321 : Double_t invYield;
322 :
323 0 : mt = sqrt(m*m + pt*pt);
324 0 : invYield = c*((n-1.)*(n-2.))/(n*T*(n*T+m*(n-2.)))*pow(1.+(mt-m)/(n*T),-n);
325 :
326 0 : return invYield*(2*TMath::Pi()*pt);
327 : }
328 :
329 :
330 : Double_t AliGenEMlib::PtXQCD( Double_t pt,
331 : Double_t a,
332 : Double_t b,
333 : Double_t c,
334 : Double_t d,
335 : Double_t e,
336 : Double_t f)
337 : {
338 : // QCD inspired function by Martin Wilde
339 : // DISCLAIMER: Please be careful outside of the measured pT range
340 : Double_t invYield = 0;
341 0 : if(pt>0.05){
342 0 : invYield = a*pow(pt,-1*(b+c/(pow(pt,d)+e*pow(pt,f))));
343 0 : } else invYield = 100;
344 0 : return invYield*(2*TMath::Pi()*pt);
345 : }
346 :
347 : Double_t AliGenEMlib::PtQCD( Double_t pt,
348 : Double_t a,
349 : Double_t b,
350 : Double_t c,
351 : Double_t d,
352 : Double_t e)
353 : {
354 : // QCD inspired function by Martin Wilde
355 : // DISCLAIMER: Please be careful outside of the measured pT range
356 : Double_t invYield = 0;
357 0 : if(pt>0.05){
358 0 : invYield = a*pow(pt,-1*(b+c/(pow(pt,d)+e)));
359 0 : } else invYield = 100;
360 0 : return invYield*(2*TMath::Pi()*pt);
361 : }
362 :
363 : Double_t AliGenEMlib::PtModTsallis( Double_t pt,
364 : Double_t a,
365 : Double_t b,
366 : Double_t c,
367 : Double_t d,
368 : Double_t e,
369 : Double_t f,
370 : Double_t g,
371 : Double_t mass)
372 : {
373 :
374 : Double_t invYield = 0;
375 0 : Double_t mt = sqrt(mass*mass + pt*pt);
376 : Double_t pt2 = pt*pt;
377 0 : if(pt>0.05){
378 0 : invYield = a*TMath::Power((1.+(mt-mass)/(b)),-c)*(d+e*pt+pt2)/(f+g*pt+pt2);
379 0 : } else invYield = 100;
380 0 : return invYield*(2*TMath::Pi()*pt);
381 : }
382 :
383 : Double_t AliGenEMlib::PtParticleRatiopp(Double_t pt,
384 : Double_t m1,
385 : Double_t m2,
386 : Double_t c1,
387 : Double_t c2,
388 : Double_t T1,
389 : Double_t T2,
390 : Double_t n)
391 : {
392 :
393 : Double_t ratio = 0;
394 0 : if (PtTsallis (pt, m2, c2, T2, n)>0) ratio = PtTsallis (pt, m1, c1, T1, n)/ PtTsallis (pt, m2, c2, T2, n);
395 0 : return ratio;
396 : }
397 :
398 :
399 : // Exponential
400 : Double_t AliGenEMlib::PtExponential(const Double_t *px, const Double_t *c){
401 : const double &pt=px[0];
402 0 : Double_t invYield = c[0]*exp(-pt*c[1]);
403 :
404 0 : return invYield*(2*TMath::Pi()*pt);
405 : }
406 :
407 : // Hagedorn with additional Powerlaw
408 : Double_t AliGenEMlib::PtModifiedHagedornPowerlaw(const Double_t *px, const Double_t *c){
409 : const double &pt=px[0];
410 0 : Double_t invYield = c[0]*pow(c[1]+pt*c[2],-c[3])*CrossOverLc(c[5],c[4],pt)+CrossOverRc(c[7],c[6],pt)*c[8]*pow(pt+0.001,-c[9]); //pt+0.001: prevent powerlaw from exploding for pt->0
411 :
412 0 : return invYield*(2*TMath::Pi()*pt+0.001); //+0.001: be sure to be > 0
413 : }
414 :
415 : // double powerlaw for J/Psi yield
416 : Double_t AliGenEMlib::PtDoublePowerlaw(const Double_t *px, const Double_t *c){
417 : const double &pt=px[0];
418 0 : Double_t yield = c[0]*pt*pow(1+pow(pt*c[1],2),-c[2]);
419 :
420 0 : return yield;
421 : }
422 :
423 : // integral over krollwada with S=1^2*(1-mee^2/mh^2)^3 from mee=0 up to mee=mh
424 : // approximation is perfect for mh>20MeV
425 : Double_t AliGenEMlib::IntegratedKrollWada(const Double_t *mh, const Double_t *){
426 0 : if(*mh<0.002941) return 0;
427 0 : return 2*log(*mh/0.000511/exp(1.75))/411.11/TMath::Pi();
428 0 : }
429 :
430 : //--------------------------------------------------------------------------
431 : //
432 : // DirectRealGamma
433 : //
434 : //--------------------------------------------------------------------------
435 : Double_t AliGenEMlib::PtPromptRealGamma( const Double_t *px, const Double_t */*dummy*/ )
436 : {
437 : const static Double_t promptGammaPtParam[10] = { 1.908746e-02, 3.326402e-01, 7.525743e-01, 5.251425e+00, 9.275261e+00, 1.855052e+01, 9.855216e+00, 1.867316e+01, 1.198770e-01, 5.407858e+00 };
438 : //{ 2.146541e-02, 5.540414e-01, 6.664706e-01, 5.739829e+00, 1.816496e+01, 2.561591e+01, 1.121881e+01, 3.569223e+01, 6.624561e-02, 5.234547e+00 };
439 :
440 0 : return PtModifiedHagedornPowerlaw(px,promptGammaPtParam)*GetTAA(fgSelectedCentrality)*1.15;
441 : //correction factor 1.15 comes from the global fit of all ALICE direct gamma measurements (see definition of fgkThermPtParam), showing that direct gamma is about 15% above the NLO expectation
442 : }
443 :
444 : Double_t AliGenEMlib::PtThermalRealGamma( const Double_t *px, const Double_t */*dummy*/ )
445 : {
446 0 : return PtExponential(px,fgkThermPtParam[fgSelectedCentrality]);
447 : }
448 :
449 : Double_t AliGenEMlib::PtDirectRealGamma( const Double_t *px, const Double_t */*dummy*/ )
450 : {
451 0 : return PtPromptRealGamma(px,px)+PtThermalRealGamma(px,px);
452 : }
453 :
454 : Int_t AliGenEMlib::IpDirectRealGamma(TRandom *)
455 : {
456 0 : return 220000;
457 : }
458 :
459 : Double_t AliGenEMlib::YDirectRealGamma( const Double_t *px, const Double_t */*dummy*/ )
460 : {
461 0 : return YFlat(*px);
462 : }
463 :
464 : Double_t AliGenEMlib::V2DirectRealGamma( const Double_t *px, const Double_t */*dummy*/ )
465 : {
466 : const static Double_t v2Param[3][16] = {
467 : { 1.004245e-01, 1.057645e+00, 0.000000e+00, 2.836492e+00, 2.819767e+00, -6.231529e-02, 1.173054e+00, 2.836492e+00, 1.881590e-01, 1.183293e-02, 1.252249e+00, 0, 1, 4.876263e-03, 1.518526e+00, 4.5 } // 00-20, based on: https://aliceinfo.cern.ch/Notes/node/249
468 : ,{ 1.619000e-01, 1.868201e+00, 6.983303e-15, 2.242170e+00, 4.484339e+00, -1.695734e-02, 2.301359e+00, 2.871469e+00, 1.619000e-01, 2.264320e-02, 1.028641e+00, 0, 1, 8.172203e-03, 1.271637e+00, 4.5 } // 20-40
469 : ,{ 1.335000e-01, 1.076916e+00, 1.462605e-08, 2.785732e+00, 5.571464e+00, -2.356156e-02, 2.745437e+00, 2.785732e+00, 1.335000e-01, 1.571589e-02, 1.001131e+00, 0, 1, 5.179715e-03, 1.329344e+00, 4.5 } // 00-40
470 : };
471 0 : switch(fgSelectedCentrality){
472 0 : case k0020: return V2Param(px,v2Param[0]); break;
473 0 : case k2040: return V2Param(px,v2Param[1]); break;
474 0 : case k0040: return V2Param(px,v2Param[2]); break;
475 : // case k0010: return 0.43*V2Param(px,v2Param[1]); break; //V2Pizero(0010)/V2Pizero(2040)=0.43 +-0.025
476 : // case k1020: return 0.75*V2Param(px,v2Param[1]); break; //V2Pizero(1020)/V2Pizero(2040)=0.75 +-0.04
477 0 : case k0010: return 0.53*V2Param(px,v2Param[2]); break; //V2Pizero(0010)/V2Pizero(0040)=0.53 +-0.03
478 0 : case k1020: return 0.91*V2Param(px,v2Param[2]); break; //V2Pizero(1020)/V2Pizero(0040)=0.91 +-0.04
479 : }
480 0 : return 0;
481 0 : }
482 :
483 :
484 : //--------------------------------------------------------------------------
485 : //
486 : // DirectVirtGamma
487 : //
488 : //--------------------------------------------------------------------------
489 : Double_t AliGenEMlib::PtPromptVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
490 : {
491 0 : return IntegratedKrollWada(px,px)*PtPromptRealGamma(px,px);
492 : }
493 :
494 : Double_t AliGenEMlib::PtThermalVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
495 : {
496 0 : return IntegratedKrollWada(px,px)*PtThermalRealGamma(px,px);
497 : }
498 :
499 : Double_t AliGenEMlib::PtDirectVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
500 : {
501 0 : return IntegratedKrollWada(px,px)*PtDirectRealGamma(px,px);
502 : }
503 :
504 : Int_t AliGenEMlib::IpDirectVirtGamma(TRandom *)
505 : {
506 0 : return 220001;
507 : }
508 :
509 : Double_t AliGenEMlib::YDirectVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
510 : {
511 0 : return YFlat(*px);
512 : }
513 :
514 : Double_t AliGenEMlib::V2DirectVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
515 : {
516 0 : return V2DirectRealGamma(px,px);
517 : }
518 :
519 : //--------------------------------------------------------------------------
520 : //
521 : // Pizero
522 : //
523 : //--------------------------------------------------------------------------
524 : Int_t AliGenEMlib::IpPizero(TRandom *)
525 : {
526 : // Return pizero pdg code
527 0 : return 111;
528 : }
529 :
530 : Double_t AliGenEMlib::PtPizero( const Double_t *px, const Double_t */*dummy*/ )
531 : {
532 : // double pigammacorr=1; //misuse pion for direct gammas, tuned for 0040, iteration 0
533 : // pigammacorr*=2.258900e-01*log(*px+0.001)+1.591291e+00; //iteration 1
534 : // pigammacorr*=6.601943e-03*log(*px+0.001)+9.593698e-01; //iteration 2
535 : // pigammacorr*=4.019933e-03*log(*px+0.001)+9.843412e-01; //iteration 3
536 : // pigammacorr*=-4.543991e-03*log(*px+0.001)+1.010886e+00; //iteration 4
537 : // return pigammacorr*PtPromptRealGamma(px,px); //now the gammas from the pi->gg decay have the pt spectrum of prompt real gammas
538 :
539 : // fit functions and corresponding parameter of Pizero pT for pp @ 2.76 TeV and @ 7 TeV and for PbPb @ 2.76 TeV
540 : // std::cout << "intitializing collision system: " << fgSelectedCollisionsSystem <<"\t" << kpp900GeV <<"\t" << kpp2760GeV <<"\t" << kpp7TeV <<"\t" << kpPb <<"\t" << kPbPb << std::endl;
541 : // std::cout << "centrality: " << fgSelectedCentrality <<"\t"<< kpp <<"\t"<< k0005<<"\t"<< k0510<<"\t"<< k1020<<"\t"<< k2030<<"\t"<< std::endl
542 : // << k3040<<"\t"<< k4050<<"\t"<< k5060<<"\t"<< k0010<<"\t"<< k2040<<"\t"<< std::endl
543 : // << k4060<<"\t"<< k6080<<"\t"<< k0020<<"\t"<< k0040<<"\t"<< k2080<<"\t"<< std::endl
544 : // << k4080<< std::endl;
545 : // std::cout << "parametrisation: " << fgSelectedPtParamPi0 << std::endl;
546 :
547 :
548 : Double_t kc=0.;
549 : Double_t kn=0.;
550 : Double_t kcT=0.;
551 : Double_t kT=0.;
552 : Double_t kp0=0.;
553 : Double_t kp1=0.;
554 : Double_t ka=0.;
555 : Double_t kb=0.;
556 : Double_t kd=0.;
557 :
558 : double n1,n2,n3,n4;
559 : int oldCent;
560 :
561 0 : switch(fgSelectedCollisionsSystem) {
562 : case kPbPb:
563 0 : switch (fgSelectedPtParamPi0){
564 : case kPichargedParamNew:
565 : // fit to pi charged, same data like in kPiOldChargedPbPb,
566 : // but tested and compared against newest (2014) neutral pi measurement
567 0 : switch (fgSelectedCentrality){
568 : case k0005:
569 : case k0510:
570 : case k1020:
571 : case k2030:
572 : case k3040:
573 : case k4050:
574 : case k5060:
575 : case k2040:
576 : case k4060:
577 0 : return PtModifiedHagedornPowerlaw(px,fgkPtParam[fgSelectedCentrality]);
578 : break;
579 : case k0010:
580 0 : n1=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0005]);
581 0 : n2=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0510]);
582 0 : return (n1+n2)/2;
583 : break;
584 : case k0020:
585 0 : n1=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0005]);
586 0 : n2=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0510]);
587 0 : n3=PtModifiedHagedornPowerlaw(px,fgkPtParam[k1020]);
588 0 : return (n1+n2+2*n3)/4;
589 : break;
590 : case k0040:
591 0 : n1=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0005]);
592 0 : n2=PtModifiedHagedornPowerlaw(px,fgkPtParam[k0510]);
593 0 : n3=PtModifiedHagedornPowerlaw(px,fgkPtParam[k1020]);
594 0 : n4=PtModifiedHagedornPowerlaw(px,fgkPtParam[k2040]);
595 0 : return (n1+n2+2*n3+4*n4)/8;
596 : break;
597 : default:
598 0 : return 0;
599 : }
600 :
601 : case kPichargedParamOld:
602 0 : switch (fgSelectedCentrality){
603 : // fit to pi charged v1
604 : // charged pion from ToF, unidentified hadrons scaled with pion from TPC
605 : // for Pb-Pb @ 2.76 TeV
606 : case k0005:
607 : kc=1347.5; kp0=0.9393; kp1=2.254; kn=11.294; kcT=0.002537; kT=2.414;
608 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
609 : break;
610 : case k0510:
611 : kc=1256.1; kp0=0.9545; kp1=2.248; kn=11.291; kcT=0.002662; kT=2.326;
612 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
613 : break;
614 : case k2030:
615 : kc=7421.6; kp0=1.2059; kp1=1.520; kn=10.220; kcT=0.002150; kT=2.196;
616 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
617 : break;
618 : case k3040:
619 : kc=1183.2; kp0=1.0478; kp1=1.623; kn=9.8073; kcT=0.00198333; kT=2.073;
620 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
621 : break;
622 : // the following is what went into the Pb-Pb preliminary approval (0-10%)
623 : case k0010:
624 : kc=1296.0; kp0=0.968; kp1=2.567; kn=12.27; kcT=0.004219; kT=2.207;
625 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
626 : break;
627 : case k1020:
628 : kc=986.0; kp0=0.9752; kp1=2.376; kn=11.62; kcT=0.003116; kT=2.213;
629 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
630 : break;
631 : case k2040:
632 : kc=17337.0; kp0=1.337; kp1=1.507; kn=10.629; kcT=0.00184; kT=2.234;
633 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
634 : break;
635 : case k4050:
636 : kc=6220.0; kp0=1.322; kp1=1.224; kn=9.378; kcT=0.000595; kT=2.383;
637 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
638 : break;
639 : case k5060:
640 : kc=2319.0; kp0=1.267; kp1=1.188; kn=9.044; kcT=0.000437; kT=2.276;
641 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
642 : break;
643 : case k4060:
644 : kc=4724.0; kp0=1.319; kp1=1.195; kn=9.255; kcT=0.000511; kT=2.344;
645 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
646 : break;
647 : case k6080:
648 : kc=2842.0; kp0=1.465; kp1=0.8324; kn=8.167; kcT=0.0001049; kT=2.29;
649 0 : return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
650 : break;
651 : case k0020:
652 : oldCent=fgSelectedCentrality;
653 0 : fgSelectedCentrality=k0010;
654 0 : n1=PtPizero(px,px);
655 0 : fgSelectedCentrality=k1020;
656 0 : n2=PtPizero(px,px);
657 0 : fgSelectedCentrality=oldCent;
658 0 : return (n1+n2)/2;
659 : break;
660 : case k0040:
661 : oldCent=fgSelectedCentrality;
662 0 : fgSelectedCentrality=k0010;
663 0 : n1=PtPizero(px,px);
664 0 : fgSelectedCentrality=k1020;
665 0 : n2=PtPizero(px,px);
666 0 : fgSelectedCentrality=k2040;
667 0 : n3=PtPizero(px,px);
668 0 : fgSelectedCentrality=oldCent;
669 0 : return (n1+n2+2*n3)/4;
670 : default:
671 0 : return 0;
672 : }
673 :
674 : case kPichargedParam:
675 0 : switch (fgSelectedCentrality){
676 : case k0010:
677 : case k1020:
678 : case k2040:
679 : case k0020:
680 : case k0040:
681 : case k4080:
682 0 : return PtModTsallis( *px,
683 0 : fgkModTsallisParamPiChargedPbPb[fgSelectedCentrality][0],
684 0 : fgkModTsallisParamPiChargedPbPb[fgSelectedCentrality][1],
685 0 : fgkModTsallisParamPiChargedPbPb[fgSelectedCentrality][2],
686 0 : fgkModTsallisParamPiChargedPbPb[fgSelectedCentrality][3],
687 0 : fgkModTsallisParamPiChargedPbPb[fgSelectedCentrality][4],
688 0 : fgkModTsallisParamPiChargedPbPb[fgSelectedCentrality][5],
689 0 : fgkModTsallisParamPiChargedPbPb[fgSelectedCentrality][6],
690 : 0.135);
691 : break;
692 : default:
693 0 : return 0;
694 : }
695 :
696 : case kPizeroParam:
697 0 : switch (fgSelectedCentrality){
698 : case k0010:
699 : case k1020:
700 : case k2040:
701 : case k0020:
702 : case k0040:
703 : case k4080:
704 0 : return PtModTsallis( *px,
705 0 : fgkModTsallisParamPi0PbPb[fgSelectedCentrality][0],
706 0 : fgkModTsallisParamPi0PbPb[fgSelectedCentrality][1],
707 0 : fgkModTsallisParamPi0PbPb[fgSelectedCentrality][2],
708 0 : fgkModTsallisParamPi0PbPb[fgSelectedCentrality][3],
709 0 : fgkModTsallisParamPi0PbPb[fgSelectedCentrality][4],
710 0 : fgkModTsallisParamPi0PbPb[fgSelectedCentrality][5],
711 0 : fgkModTsallisParamPi0PbPb[fgSelectedCentrality][6],
712 : 0.135);
713 : break;
714 : default:
715 0 : return 0;
716 : }
717 :
718 : default:
719 0 : return 0;
720 : }
721 :
722 : case kpPb:
723 : // fit to charged pions for p-Pb @ 5.02TeV
724 0 : switch (fgSelectedPtParamPi0){
725 : case kPichargedParam:
726 : //kc=235.5; ka=0.6903; kb=0.06864; kp0=2.289; kp1=0.5872; kd=0.6474; kn=7.842;
727 : kc = 80.718314; ka = 0.510550; kb = 0.081444; kp0 = 3.415777; kp1 = 0.722887; kd = 0.820271; kn = 7.140332;
728 0 : return PtModifiedHagedornExp2(*px,kc,ka,kb,kp0,kp1,kd,kn);
729 : break;
730 : case kPichargedParamlow:
731 : kc = 62.548591; ka = 0.410163; kb = 0.111024; kp0 = 3.643849; kp1 = 0.734388; kd = 0.889554; kn = 6.741050;
732 0 : return PtModifiedHagedornExp2(*px,kc,ka,kb,kp0,kp1,kd,kn);
733 : break;
734 : case kPichargedParamhigh:
735 : kc = 105.785183; ka = 0.598377; kb = 0.055882; kp0 = 3.751795; kp1 = 0.679347; kd = 0.767044; kn = 7.516741;
736 0 : return PtModifiedHagedornExp2(*px,kc,ka,kb,kp0,kp1,kd,kn);
737 : break;
738 : default:
739 0 : return 0;
740 :
741 : }
742 : case kpp7TeV:
743 0 : switch (fgSelectedPtParamPi0){
744 : // Tsallis fit to final pizero (PHOS+PCM) -> used for publication
745 : // for pp @ 7 TeV
746 : case kPizeroParam: // fit to combined spectrum with stat errors only
747 0 : return PtTsallis(*px,fgkParamSetPi07TeV[kPizeroParam][0],fgkParamSetPi07TeV[kPizeroParam][1],fgkParamSetPi07TeV[kPizeroParam][2],fgkParamSetPi07TeV[kPizeroParam][3]);
748 : break;
749 : case kPizeroParamlow:
750 0 : return PtModTsallis( *px,
751 0 : fgkParamSetPi07TeV[kPizeroParamlow][0],
752 0 : fgkParamSetPi07TeV[kPizeroParamlow][1],
753 0 : fgkParamSetPi07TeV[kPizeroParamlow][2],
754 0 : fgkParamSetPi07TeV[kPizeroParamlow][3],
755 0 : fgkParamSetPi07TeV[kPizeroParamlow][4],
756 0 : fgkParamSetPi07TeV[kPizeroParamlow][5],
757 0 : fgkParamSetPi07TeV[kPizeroParamlow][6],
758 : 0.135);
759 : break;
760 : case kPizeroParamhigh:
761 0 : return PtModTsallis( *px,
762 0 : fgkParamSetPi07TeV[kPizeroParamhigh][0],
763 0 : fgkParamSetPi07TeV[kPizeroParamhigh][1],
764 0 : fgkParamSetPi07TeV[kPizeroParamhigh][2],
765 0 : fgkParamSetPi07TeV[kPizeroParamhigh][3],
766 0 : fgkParamSetPi07TeV[kPizeroParamhigh][4],
767 0 : fgkParamSetPi07TeV[kPizeroParamhigh][5],
768 0 : fgkParamSetPi07TeV[kPizeroParamhigh][6],
769 : 0.135);
770 : break;
771 : case kPichargedParamhigh:
772 0 : return PtModTsallis( *px,
773 0 : fgkParamSetPi07TeV[kPichargedParamhigh][0],
774 0 : fgkParamSetPi07TeV[kPichargedParamhigh][1],
775 0 : fgkParamSetPi07TeV[kPichargedParamhigh][2],
776 0 : fgkParamSetPi07TeV[kPichargedParamhigh][3],
777 0 : fgkParamSetPi07TeV[kPichargedParamhigh][4],
778 0 : fgkParamSetPi07TeV[kPichargedParamhigh][5],
779 0 : fgkParamSetPi07TeV[kPichargedParamhigh][6],
780 : 0.135);
781 : break;
782 :
783 : default:
784 0 : return 0;
785 : }
786 :
787 :
788 : case kpp2760GeV:
789 0 : switch (fgSelectedPtParamPi0){
790 : // Tsallis fit to pizero: published pi0
791 : // for pp @ 2.76 TeV
792 : case kPizeroParam: //published fit parameters
793 0 : return PtTsallis(*px,fgkParamSetPi02760GeV[kPizeroParam][0],fgkParamSetPi02760GeV[kPizeroParam][1],fgkParamSetPi02760GeV[kPizeroParam][2],fgkParamSetPi02760GeV[kPizeroParam][3]);
794 : break;
795 : case kPizeroParamlow:
796 0 : return PtModTsallis( *px,
797 0 : fgkParamSetPi02760GeV[kPizeroParamlow][0],
798 0 : fgkParamSetPi02760GeV[kPizeroParamlow][1],
799 0 : fgkParamSetPi02760GeV[kPizeroParamlow][2],
800 0 : fgkParamSetPi02760GeV[kPizeroParamlow][3],
801 0 : fgkParamSetPi02760GeV[kPizeroParamlow][4],
802 0 : fgkParamSetPi02760GeV[kPizeroParamlow][5],
803 0 : fgkParamSetPi02760GeV[kPizeroParamlow][6],
804 : 0.135);
805 : break;
806 : case kPizeroParamhigh:
807 0 : return PtModTsallis( *px,
808 0 : fgkParamSetPi02760GeV[kPizeroParamhigh][0],
809 0 : fgkParamSetPi02760GeV[kPizeroParamhigh][1],
810 0 : fgkParamSetPi02760GeV[kPizeroParamhigh][2],
811 0 : fgkParamSetPi02760GeV[kPizeroParamhigh][3],
812 0 : fgkParamSetPi02760GeV[kPizeroParamhigh][4],
813 0 : fgkParamSetPi02760GeV[kPizeroParamhigh][5],
814 0 : fgkParamSetPi02760GeV[kPizeroParamhigh][6],
815 : 0.135);
816 : break;
817 : case kPichargedParam:
818 0 : return PtModTsallis( *px,
819 0 : fgkParamSetPi02760GeV[kPichargedParam][0],
820 0 : fgkParamSetPi02760GeV[kPichargedParam][1],
821 0 : fgkParamSetPi02760GeV[kPichargedParam][2],
822 0 : fgkParamSetPi02760GeV[kPichargedParam][3],
823 0 : fgkParamSetPi02760GeV[kPichargedParam][4],
824 0 : fgkParamSetPi02760GeV[kPichargedParam][5],
825 0 : fgkParamSetPi02760GeV[kPichargedParam][6],
826 : 0.135);
827 : break;
828 : case kPizeroParamAlter:
829 0 : return PtQCD( *px,
830 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][0],
831 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][1],
832 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][2],
833 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][3],
834 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][4]);
835 : break;
836 : case kPizeroParamAlterlow:
837 0 : return PtQCD( *px,
838 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][0],
839 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][1],
840 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][2],
841 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][3],
842 0 : fgkParamSetPi02760GeV[kPizeroParamAlter][4]);
843 : break;
844 : default:
845 0 : return 0;
846 : }
847 : case kpp900GeV:
848 0 : switch (fgSelectedPtParamPi0){
849 : // Tsallis fit to pizero: published pi0
850 : // for pp @ 0.9 TeV
851 : case kPizeroParam: //published fit parameters
852 0 : return PtTsallis( *px,
853 0 : fgkParamSetPi0900GeV[kPizeroParam][0],
854 0 : fgkParamSetPi0900GeV[kPizeroParam][1],
855 0 : fgkParamSetPi0900GeV[kPizeroParam][2],
856 0 : fgkParamSetPi0900GeV[kPizeroParam][3]);
857 : break;
858 : case kPizeroParamAlter:
859 0 : return PtQCD( *px,
860 0 : fgkParamSetPi0900GeV[kPizeroParamAlter][0],
861 0 : fgkParamSetPi0900GeV[kPizeroParamAlter][1],
862 0 : fgkParamSetPi0900GeV[kPizeroParamAlter][2],
863 0 : fgkParamSetPi0900GeV[kPizeroParamAlter][3],
864 0 : fgkParamSetPi0900GeV[kPizeroParamAlter][4]);
865 : break;
866 : case kPizeroParamhigh:
867 0 : return PtQCD( *px,
868 0 : fgkParamSetPi0900GeV[kPizeroParamAlterlow][0],
869 0 : fgkParamSetPi0900GeV[kPizeroParamAlterlow][1],
870 0 : fgkParamSetPi0900GeV[kPizeroParamAlterlow][2],
871 0 : fgkParamSetPi0900GeV[kPizeroParamAlterlow][3],
872 0 : fgkParamSetPi0900GeV[kPizeroParamAlterlow][4]);
873 : break;
874 : default:
875 0 : return 0;
876 : }
877 :
878 : default:
879 0 : cout << "ERROR:: No valid collision system defined: "<< fgSelectedCollisionsSystem << endl;;
880 0 : return 0;
881 : }
882 :
883 0 : }
884 :
885 : Double_t AliGenEMlib::YPizero( const Double_t *py, const Double_t */*dummy*/ )
886 : {
887 0 : return YFlat(*py);
888 :
889 : }
890 :
891 : Double_t AliGenEMlib::V2Pizero( const Double_t *px, const Double_t */*dummy*/ )
892 : {
893 : double n1,n2,n3,n4,n5;
894 : double v1,v2,v3,v4,v5;
895 0 : switch(fgSelectedCollisionsSystem|fgSelectedCentrality) {
896 : case kPbPb|k0010:
897 0 : n1=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0005]);
898 0 : v1=V2Param(px,fgkV2param[k0005]);
899 0 : n2=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0510]);
900 0 : v2=V2Param(px,fgkV2param[k0510]);
901 0 : return (n1*v1+n2*v2)/(n1+n2);
902 : break;
903 : case kPbPb|k0020:
904 0 : n1=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0005]);
905 0 : v1=V2Param(px,fgkV2param[k0005]);
906 0 : n2=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0510]);
907 0 : v2=V2Param(px,fgkV2param[k0510]);
908 0 : n3=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k1020]);
909 0 : v3=V2Param(px,fgkV2param[k1020]);
910 : // raw yeilds are not normalized per event
911 0 : return (n1*v1+n2*v2+n3*v3)/(n1+n2+n3);
912 : break;
913 : case kPbPb|k2040:
914 0 : n1=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k2030]);
915 0 : v1=V2Param(px,fgkV2param[k2030]);
916 0 : n2=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k3040]);
917 0 : v2=V2Param(px,fgkV2param[k3040]);
918 0 : return (n1*v1+n2*v2)/(n1+n2);
919 : break;
920 : case kPbPb|k0040:
921 0 : n1=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0005]);
922 0 : v1=V2Param(px,fgkV2param[k0005]);
923 0 : n2=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0510]);
924 0 : v2=V2Param(px,fgkV2param[k0510]);
925 0 : n3=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k1020]);
926 0 : v3=V2Param(px,fgkV2param[k1020]);
927 0 : n4=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k2030]);
928 0 : v4=V2Param(px,fgkV2param[k2030]);
929 0 : n5=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k3040]);
930 0 : v5=V2Param(px,fgkV2param[k3040]);
931 : // raw yeilds are not normalized per event
932 0 : return (n1*v1+n2*v2+n3*v3+n4*v4+n5*v5)/(n1+n2+n3+n4+n5);
933 : break;
934 :
935 : default:
936 0 : return V2Param(px,fgkV2param[fgSelectedCentrality]);
937 : }
938 0 : }
939 :
940 : //--------------------------------------------------------------------------
941 : //
942 : // Eta
943 : //
944 : //--------------------------------------------------------------------------
945 : Int_t AliGenEMlib::IpEta(TRandom *)
946 : {
947 : // Return eta pdg code
948 0 : return 221;
949 : }
950 :
951 : Double_t AliGenEMlib::PtEta( const Double_t *px, const Double_t */*dummy*/ )
952 : {
953 :
954 : // fit functions and corresponding parameter of Eta pT for pp @ 2.76 TeV and @ 7 TeV
955 : // and mtscaled pT
956 :
957 : // parameters for Tsallis fit to eta
958 : Double_t km = 0.;
959 : Double_t kc = 0.;
960 : Double_t kT = 0.;
961 : Double_t kn = 0.;
962 :
963 : // parameters for Tsallis fit to pi0
964 : Double_t kmPi0 = 0.;
965 : Double_t kcPi0 = 0.;
966 : Double_t kTPi0 = 0.;
967 : Double_t knPi0 = 0.;
968 :
969 : // parameters for fit to eta/pi0
970 : Double_t krm1 = 0.;
971 : Double_t krm2 = 0.;
972 : Double_t krc1 = 0.;
973 : Double_t krc2 = 0.;
974 : Double_t krT1 = 0.;
975 : Double_t krT2 = 0.;
976 : Double_t krn = 0.;
977 :
978 0 : switch(fgSelectedCollisionsSystem){
979 : case kpp7TeV:
980 0 : switch(fgSelectedPtParamEta){
981 : // Tsallis fit to final eta (PHOS+PCM) -> used stat errors only for final publication
982 : // for pp @ 7 TeV
983 : case kEtaParamRatiopp:
984 : krm1 = 0.547853; krm2 = 0.134977; krc1 = 1.44198e+11; krc2 = 2.06751e+12 ; krT1 = 0.154567 ; krT2 = 0.139634 ; krn=32.0715;
985 0 : kmPi0=0.134977; kcPi0=2.31335/(2*TMath::Pi()); kTPi0=0.1433; knPi0=7.003;
986 0 : return PtParticleRatiopp(*px, krm1, krm2, krc1, krc2, krT1, krT2, krn) * PtTsallis(*px,kmPi0,kcPi0,kTPi0,knPi0);
987 : break;
988 : case kEtaParampp:
989 0 : km = 0.547853; kc = 0.290164/(2*TMath::Pi()); kT = 0.212; kn = 7.352;
990 0 : return PtTsallis(*px,km,kc,kT,kn);
991 : break;
992 : // NOTE: None of these parametrisations look right - no idea where they come from
993 : case kEtaParampplow:
994 : km = 0.547853; kc = 1.970; kT = 0.253; kn = 7.591;
995 0 : return PtTsallis(*px,km,kc,kT,kn);
996 : break;
997 : case kEtaParampphigh:
998 : km = 0.547853; kc = 3.060; kT = 0.212; kn = 6.578;
999 0 : return PtTsallis(*px,km,kc,kT,kn);
1000 : break;
1001 : case kEtaMtScal:
1002 : default:
1003 0 : return MtScal(*px,kEta);
1004 : }
1005 : case kpp2760GeV:
1006 0 : switch(fgSelectedPtParamEta){
1007 : // Tsallis fit to preliminary eta (QM'11)
1008 : // for pp @ 2.76 TeV
1009 : // NOTE: None of these parametrisations look right - no idea where they come from
1010 : case kEtaParampp:
1011 : km = 0.547853; kc = 1.971; kT = 0.188; kn = 6.308;
1012 0 : return PtTsallis(*px,km,kc,kT,kn);
1013 : case kEtaParampplow:
1014 : km = 0.547853; kc = 1.228; kT = 0.220; kn = 7.030;
1015 0 : return PtTsallis(*px,km,kc,kT,kn);
1016 : break;
1017 : case kEtaParampphigh:
1018 : km = 0.547853; kc = 2.802; kT = 0.164; kn = 5.815;
1019 0 : return PtTsallis(*px,km,kc,kT,kn);
1020 : break;
1021 : case kEtaMtScal:
1022 : default:
1023 0 : return MtScal(*px,kEta);
1024 : break;
1025 : }
1026 : default:
1027 0 : return MtScal(*px,kEta);
1028 : break;
1029 : }
1030 0 : }
1031 :
1032 : Double_t AliGenEMlib::YEta( const Double_t *py, const Double_t */*dummy*/ )
1033 : {
1034 0 : return YFlat(*py);
1035 : }
1036 :
1037 : Double_t AliGenEMlib::V2Eta( const Double_t *px, const Double_t */*dummy*/ )
1038 : {
1039 0 : return KEtScal(*px,kEta); //V2Param(px,fgkV2param[1][fgSelectedV2Param]);
1040 : }
1041 :
1042 : //--------------------------------------------------------------------------
1043 : //
1044 : // Rho
1045 : //
1046 : //--------------------------------------------------------------------------
1047 : Int_t AliGenEMlib::IpRho0(TRandom *)
1048 : {
1049 : // Return rho pdg code
1050 0 : return 113;
1051 : }
1052 :
1053 : Double_t AliGenEMlib::PtRho0( const Double_t *px, const Double_t */*dummy*/ )
1054 : {
1055 : // Rho pT
1056 0 : return MtScal(*px,kRho0);
1057 : }
1058 :
1059 : Double_t AliGenEMlib::YRho0( const Double_t *py, const Double_t */*dummy*/ )
1060 : {
1061 0 : return YFlat(*py);
1062 : }
1063 :
1064 : Double_t AliGenEMlib::V2Rho0( const Double_t *px, const Double_t */*dummy*/ )
1065 : {
1066 0 : return KEtScal(*px,kRho0);
1067 : }
1068 :
1069 :
1070 : //--------------------------------------------------------------------------
1071 : //
1072 : // Omega
1073 : //
1074 : //--------------------------------------------------------------------------
1075 : Int_t AliGenEMlib::IpOmega(TRandom *)
1076 : {
1077 : // Return omega pdg code
1078 0 : return 223;
1079 : }
1080 :
1081 : Double_t AliGenEMlib::PtOmega( const Double_t *px, const Double_t */*dummy*/ )
1082 : {
1083 : // Omega pT
1084 : // fit functions and corresponding parameter of Omega pT for preliminary pp @ 7 TeV data
1085 : // and mtscaled pT
1086 :
1087 : // parameters for Tsallis fit to omega
1088 : Double_t km = 0.;
1089 : Double_t kc = 0.;
1090 : Double_t kT = 0.;
1091 : Double_t kn = 0.;
1092 :
1093 : // parameters for Tsallis fit to pi0
1094 : Double_t kmPi0 = 0.;
1095 : Double_t kcPi0 = 0.;
1096 : Double_t kTPi0 = 0.;
1097 : Double_t knPi0 = 0.;
1098 :
1099 : // parameters for fit to omega/pi0
1100 : Double_t krm1 = 0.;
1101 : Double_t krm2 = 0.;
1102 : Double_t krc1 = 0.;
1103 : Double_t krc2 = 0.;
1104 : Double_t krT1 = 0.;
1105 : Double_t krT2 = 0.;
1106 : Double_t krn = 0.;
1107 :
1108 0 : switch(fgSelectedCollisionsSystem){
1109 : case kpp7TeV:
1110 0 : switch(fgSelectedPtParamOmega){
1111 : // Tsallis fit to final omega (PHOS) -> stat errors only, preliminary QM12
1112 : // for pp @ 7 TeV
1113 : case kOmegaParamRatiopp:
1114 : krm1 = 0.78265; krm2 = 0.134977; krc1 = 21240028553.4600143433; krc2 = 168266377865.0805969238 ; krT1 = 0.21175 ; krT2 = 0.14328 ; krn=12.8831831756;
1115 0 : kmPi0=0.134977; kcPi0=2.31335/(2*TMath::Pi()); kTPi0=0.1433; knPi0=7.003;
1116 0 : return PtParticleRatiopp(*px, krm1, krm2, krc1, krc2, krT1, krT2, krn) * PtTsallis(*px,kmPi0,kcPi0,kTPi0,knPi0);
1117 : break;
1118 : case kOmegaParampp:
1119 0 : km = 0.78265; kc = 0.340051/(2*TMath::Pi()); kT = 0.206; kn = 6.31422;
1120 0 : return PtTsallis(*px,km,kc,kT,kn);
1121 : break;
1122 : case kOmegaMtScal:
1123 : default:
1124 0 : return MtScal(*px,kOmega);
1125 : }
1126 : default:
1127 0 : return MtScal(*px,kOmega);
1128 : break;
1129 : }
1130 :
1131 : return MtScal(*px,kOmega);
1132 :
1133 0 : }
1134 :
1135 : Double_t AliGenEMlib::YOmega( const Double_t *py, const Double_t */*dummy*/ )
1136 : {
1137 0 : return YFlat(*py);
1138 : }
1139 :
1140 : Double_t AliGenEMlib::V2Omega( const Double_t *px, const Double_t */*dummy*/ )
1141 : {
1142 0 : return KEtScal(*px,kOmega);
1143 :
1144 : }
1145 :
1146 :
1147 : //--------------------------------------------------------------------------
1148 : //
1149 : // Etaprime
1150 : //
1151 : //--------------------------------------------------------------------------
1152 : Int_t AliGenEMlib::IpEtaprime(TRandom *)
1153 : {
1154 : // Return etaprime pdg code
1155 0 : return 331;
1156 : }
1157 :
1158 : Double_t AliGenEMlib::PtEtaprime( const Double_t *px, const Double_t */*dummy*/ )
1159 : {
1160 : // Eta pT
1161 0 : return MtScal(*px,kEtaprime);
1162 : }
1163 :
1164 : Double_t AliGenEMlib::YEtaprime( const Double_t *py, const Double_t */*dummy*/ )
1165 : {
1166 0 : return YFlat(*py);
1167 :
1168 : }
1169 :
1170 : Double_t AliGenEMlib::V2Etaprime( const Double_t *px, const Double_t */*dummy*/ )
1171 : {
1172 0 : return KEtScal(*px,kEtaprime);
1173 : }
1174 :
1175 : //--------------------------------------------------------------------------
1176 : //
1177 : // Phi
1178 : //
1179 : //--------------------------------------------------------------------------
1180 : Int_t AliGenEMlib::IpPhi(TRandom *)
1181 : {
1182 : // Return phi pdg code
1183 0 : return 333;
1184 : }
1185 :
1186 : Double_t AliGenEMlib::PtPhi( const Double_t *px, const Double_t */*dummy*/ )
1187 : {
1188 : // Phi pT
1189 : // fit functions and corresponding parameter of Phi pT for preliminary pp @ 7 TeV data
1190 : // and PbPb collisions
1191 : // and mtscaled pT
1192 :
1193 : // parameters for Tsallis fit to phi
1194 : Double_t km = 0.;
1195 : Double_t kc = 0.;
1196 : Double_t kT = 0.;
1197 : Double_t kn = 0.;
1198 :
1199 :
1200 0 : switch(fgSelectedCollisionsSystem){
1201 : // case kPbPb:
1202 : // switch(fgSelectedCentrality){
1203 : // // Tsallis fit to final phi->K+K- (TPC, ITS) -> stat+syst
1204 : // case k0010:
1205 : // switch(fgSelectedPtParamPhi){
1206 : // case kPhiParamPbPb:
1207 : // km = 0.78265; kc = 0.340051/(2*TMath::Pi()); kT = 0.206; kn = 6.31422;
1208 : // return PtTsallis(*px,km,kc,kT,kn);
1209 : // break;
1210 : // case kPhiMtScal:
1211 : // default:
1212 : // return MtScal(*px,kPhi);
1213 : // }
1214 : // default:
1215 : // return MtScal(*px,kPhi);
1216 : // }
1217 : case kpp7TeV:
1218 0 : switch(fgSelectedPtParamPhi){
1219 : // Tsallis fit to final phi->K+K- (TPC, ITS) -> stat+syst
1220 : // for pp @ 7 TeV
1221 : case kPhiParampp:
1222 0 : km = 1.01946; kc = 0.0269578/(2*TMath::Pi()); kT = 0.2718119311; kn = 6.6755739295;
1223 0 : return PtTsallis(*px,km,kc,kT,kn);
1224 : break;
1225 : case kPhiMtScal:
1226 : default:
1227 0 : return MtScal(*px,kPhi);
1228 : }
1229 : case kpPb:
1230 0 : switch(fgSelectedPtParamPhi){
1231 : // for pPb @ 5.02 TeV
1232 : case kPhiParamPPb:
1233 0 : km = 1.01946; kc = 0.13484191317 / (2*TMath::Pi()); kT = 0.44560169252; kn = 12.78215005772;
1234 0 : return PtTsallis(*px,km,kc,kT,kn);
1235 : break;
1236 : case kPhiParamPPblow:
1237 0 : km = 1.01946; kc = 0.12420303835 / (2*TMath::Pi()); kT = 0.45097611367; kn = 13.18917228630;
1238 0 : return PtTsallis(*px,km,kc,kT,kn);
1239 : break;
1240 : case kPhiParamPPbhigh:
1241 0 : km = 1.01946; kc = 0.14548654894 / (2*TMath::Pi()); kT = 0.44101775738; kn = 12.45359262330;
1242 0 : return PtTsallis(*px,km,kc,kT,kn);
1243 : break;
1244 : case kPhiMtScal:
1245 : default:
1246 0 : return MtScal(*px,kPhi);
1247 : }
1248 : default:
1249 0 : return MtScal(*px,kPhi);
1250 : break;
1251 : }
1252 : return MtScal(*px,kPhi);
1253 :
1254 0 : }
1255 :
1256 : Double_t AliGenEMlib::YPhi( const Double_t *py, const Double_t */*dummy*/ )
1257 : {
1258 0 : return YFlat(*py);
1259 : }
1260 :
1261 : Double_t AliGenEMlib::V2Phi( const Double_t *px, const Double_t */*dummy*/ )
1262 : {
1263 0 : return KEtScal(*px,kPhi);
1264 : }
1265 :
1266 : //--------------------------------------------------------------------------
1267 : //
1268 : // Jpsi
1269 : //
1270 : //--------------------------------------------------------------------------
1271 : Int_t AliGenEMlib::IpJpsi(TRandom *)
1272 : {
1273 : // Return jpsi pdg code
1274 0 : return 443;
1275 : }
1276 :
1277 : Double_t AliGenEMlib::PtJpsi( const Double_t *px, const Double_t */*dummy*/ )
1278 : {
1279 : // Jpsi pT
1280 : // based on: //https://aliceinfo.cern.ch/Notes/node/242, https://aliceinfo.cern.ch/Figure/node/3457, http://arxiv.org/abs/1203.3641
1281 : const static Double_t jpsiPtParam[2][3] = {
1282 : { 9.686337e-03, 2.629441e-01, 4.552044e+00 }
1283 : ,{ 3.403549e-03, 2.897061e-01, 3.644278e+00 }
1284 : };
1285 0 : const double pt=px[0]*2.28/2.613;
1286 0 : switch(fgSelectedCollisionsSystem|fgSelectedCentrality) {
1287 0 : case kPbPb|k0020: return 2.405*PtDoublePowerlaw(&pt,jpsiPtParam[0]); break;
1288 0 : case kPbPb|k2040: return 2.405*PtDoublePowerlaw(&pt,jpsiPtParam[1]); break;
1289 0 : case kPbPb|k0040: return 0.5*2.405*(PtDoublePowerlaw(&pt,jpsiPtParam[0])+PtDoublePowerlaw(&pt,jpsiPtParam[1])); break;
1290 : default:
1291 0 : return MtScal(*px,kJpsi);
1292 : }
1293 : return 0;
1294 0 : }
1295 :
1296 : Double_t AliGenEMlib::YJpsi( const Double_t *py, const Double_t */*dummy*/ )
1297 : {
1298 0 : return YFlat(*py);
1299 : }
1300 :
1301 : Double_t AliGenEMlib::V2Jpsi( const Double_t *px, const Double_t */*dummy*/ )
1302 : {
1303 : const static Double_t v2Param[16] = { 1.156000e-01, 8.936854e-01, 0.000000e+00, 4.000000e+00, 6.222375e+00, -1.600314e-01, 8.766676e-01, 7.824143e+00, 1.156000e-01, 3.484503e-02, 4.413685e-01, 0, 1, 3.484503e-02, 4.413685e-01, 7.2 };
1304 0 : switch(fgSelectedCollisionsSystem|fgSelectedCentrality){
1305 0 : case kPbPb|k2040: return V2Param(px,v2Param); break;
1306 0 : case kPbPb|k0010: return 0.43*V2Param(px,v2Param); break; //V2Pizero(0010)/V2Pizero(2040)=0.43 +-0.025
1307 0 : case kPbPb|k1020: return 0.75*V2Param(px,v2Param); break; //V2Pizero(1020)/V2Pizero(2040)=0.75 +-0.04
1308 0 : case kPbPb|k0020: return 0.66*V2Param(px,v2Param); break; //V2Pizero(0020)/V2Pizero(2040)=0.66 +-0.035
1309 0 : case kPbPb|k0040: return 0.82*V2Param(px,v2Param); break; //V2Pizero(0040)/V2Pizero(2040)=0.82 +-0.05
1310 : default:
1311 0 : return KEtScal(*px,kJpsi);
1312 : }
1313 : return 0;
1314 0 : }
1315 :
1316 : //--------------------------------------------------------------------------
1317 : //
1318 : // Sigma
1319 : //
1320 : //--------------------------------------------------------------------------
1321 : Int_t AliGenEMlib::IpSigma(TRandom *)
1322 : {
1323 : // Return Sigma pdg code
1324 0 : return 3212;
1325 : }
1326 :
1327 : Double_t AliGenEMlib::PtSigma( const Double_t *px, const Double_t */*dummy*/ )
1328 : {
1329 : // Sigma pT
1330 0 : return MtScal(*px,kSigma0);
1331 : }
1332 :
1333 : Double_t AliGenEMlib::YSigma( const Double_t *py, const Double_t */*dummy*/ )
1334 : {
1335 0 : return YFlat(*py);
1336 :
1337 : }
1338 :
1339 : Double_t AliGenEMlib::V2Sigma0( const Double_t *px, const Double_t */*dummy*/ )
1340 : {
1341 0 : return KEtScal(*px,kSigma0,3);
1342 : }
1343 :
1344 :
1345 : //--------------------------------------------------------------------------
1346 : //
1347 : // K0short
1348 : //
1349 : //--------------------------------------------------------------------------
1350 :
1351 : Int_t AliGenEMlib::IpK0short(TRandom *)
1352 : {
1353 : // Return kzeroshort pdg code
1354 0 : return 310;
1355 : }
1356 :
1357 : Double_t AliGenEMlib::PtK0short( const Double_t *px, const Double_t */*dummy*/ )
1358 : {
1359 : // K0short pT
1360 :
1361 : Double_t ka = 0;
1362 : Double_t kb = 0;
1363 : Double_t kc = 0;
1364 : Double_t kd = 0;
1365 : Double_t ke = 0;
1366 : Double_t kf = 0;
1367 :
1368 0 : switch (fgSelectedCentrality){
1369 : case k0010:
1370 : ka =9.21859; kb=5.71299; kc=-3.34251; kd=0.48796; ke=0.0192272; kf=3.82224;
1371 0 : return PtXQCD( *px, ka, kb, kc, kd, ke, kf);
1372 : break;
1373 : case k1020:
1374 : ka=6.2377; kb=5.6133; kc=-117.295; kd=3.51154; ke=36.3047; kf=0.456243;
1375 0 : return PtXQCD( *px, ka, kb, kc, kd, ke, kf);
1376 : break;
1377 : case k0020:
1378 : ka=7.7278; kb=5.6686; kc=-3.29259; kd=0.475403; ke=0.0223951; kf=3.69326;
1379 0 : return PtXQCD( *px, ka, kb, kc, kd, ke, kf);
1380 : break;
1381 : case k2040:
1382 : ka=3.38301; kb= 5.5323; kc=-96.078; kd=3.30782; ke=31.085; kf=0.466908;
1383 0 : return PtXQCD( *px, ka, kb, kc, kd, ke, kf);
1384 : break;
1385 : case k0040:
1386 : ka=5.55478; kb=5.61919; kc=-125.635; kd=3.5637; ke=38.9668; kf=0.47068;
1387 0 : return PtXQCD( *px, ka, kb, kc, kd, ke, kf);
1388 : break;
1389 : case k4080:
1390 : ka=0.731606; kb=5.49931; kc=-25.3106; kd=2.2439; ke=8.25063; kf= 0.289288;
1391 0 : return PtXQCD( *px, ka, kb, kc, kd, ke, kf);
1392 : break;
1393 : default:
1394 0 : return MtScal(*px,kK0s);
1395 : break;
1396 : }
1397 0 : }
1398 : Double_t AliGenEMlib::YK0short( const Double_t *py, const Double_t */*dummy*/ )
1399 : {
1400 0 : return YFlat(*py);
1401 :
1402 : }
1403 :
1404 : Double_t AliGenEMlib::V2K0sshort( const Double_t *px, const Double_t */*dummy*/ )
1405 : {
1406 0 : return KEtScal(*px,kK0s);
1407 : }
1408 :
1409 :
1410 : //--------------------------------------------------------------------------
1411 : //
1412 : // Delta ++
1413 : //
1414 : //--------------------------------------------------------------------------
1415 : Int_t AliGenEMlib::IpDeltaPlPl(TRandom *)
1416 : {
1417 : // Return Delta++ pdg code
1418 0 : return 2224;
1419 : }
1420 :
1421 : Double_t AliGenEMlib::PtDeltaPlPl( const Double_t *px, const Double_t */*dummy*/ )
1422 : {
1423 : // Delta++ pT
1424 0 : return MtScal(*px,kDeltaPlPl);
1425 : }
1426 :
1427 : Double_t AliGenEMlib::YDeltaPlPl( const Double_t *py, const Double_t */*dummy*/ )
1428 : {
1429 0 : return YFlat(*py);
1430 :
1431 : }
1432 :
1433 : Double_t AliGenEMlib::V2DeltaPlPl( const Double_t *px, const Double_t */*dummy*/ )
1434 : {
1435 0 : return KEtScal(*px,kDeltaPlPl,3);
1436 : }
1437 :
1438 :
1439 : //--------------------------------------------------------------------------
1440 : //
1441 : // Delta +
1442 : //
1443 : //--------------------------------------------------------------------------
1444 : Int_t AliGenEMlib::IpDeltaPl(TRandom *)
1445 : {
1446 : // Return Delta+ pdg code
1447 0 : return 2214;
1448 : }
1449 :
1450 : Double_t AliGenEMlib::PtDeltaPl( const Double_t *px, const Double_t */*dummy*/ )
1451 : {
1452 : // Delta+ pT
1453 0 : return MtScal(*px,kDeltaPl);
1454 : }
1455 :
1456 : Double_t AliGenEMlib::YDeltaPl( const Double_t *py, const Double_t */*dummy*/ )
1457 : {
1458 0 : return YFlat(*py);
1459 :
1460 : }
1461 :
1462 : Double_t AliGenEMlib::V2DeltaPl( const Double_t *px, const Double_t */*dummy*/ )
1463 : {
1464 0 : return KEtScal(*px,kDeltaPl,3);
1465 : }
1466 :
1467 :
1468 : //--------------------------------------------------------------------------
1469 : //
1470 : // Delta -
1471 : //
1472 : //--------------------------------------------------------------------------
1473 : Int_t AliGenEMlib::IpDeltaMi(TRandom *)
1474 : {
1475 : // Return Delta- pdg code
1476 0 : return 1114;
1477 : }
1478 :
1479 : Double_t AliGenEMlib::PtDeltaMi( const Double_t *px, const Double_t */*dummy*/ )
1480 : {
1481 : // Delta- pT
1482 0 : return MtScal(*px,kDeltaMi);
1483 : }
1484 :
1485 : Double_t AliGenEMlib::YDeltaMi( const Double_t *py, const Double_t */*dummy*/ )
1486 : {
1487 0 : return YFlat(*py);
1488 :
1489 : }
1490 :
1491 : Double_t AliGenEMlib::V2DeltaMi( const Double_t *px, const Double_t */*dummy*/ )
1492 : {
1493 0 : return KEtScal(*px,kDeltaMi,3);
1494 : }
1495 :
1496 :
1497 :
1498 : //--------------------------------------------------------------------------
1499 : //
1500 : // Delta 0
1501 : //
1502 : //--------------------------------------------------------------------------
1503 : Int_t AliGenEMlib::IpDeltaZero(TRandom *)
1504 : {
1505 : // Return Delta0 pdg code
1506 0 : return 2114;
1507 : }
1508 :
1509 : Double_t AliGenEMlib::PtDeltaZero( const Double_t *px, const Double_t */*dummy*/ )
1510 : {
1511 : // Delta0 pT
1512 0 : return MtScal(*px,kDeltaZero);
1513 : }
1514 :
1515 : Double_t AliGenEMlib::YDeltaZero( const Double_t *py, const Double_t */*dummy*/ )
1516 : {
1517 0 : return YFlat(*py);
1518 :
1519 : }
1520 :
1521 : Double_t AliGenEMlib::V2DeltaZero( const Double_t *px, const Double_t */*dummy*/ )
1522 : {
1523 0 : return KEtScal(*px,kDeltaZero,3);
1524 : }
1525 :
1526 :
1527 : //--------------------------------------------------------------------------
1528 : //
1529 : // rho +
1530 : //
1531 : //--------------------------------------------------------------------------
1532 : Int_t AliGenEMlib::IpRhoPl(TRandom *)
1533 : {
1534 : // Return rho+ pdg code
1535 0 : return 213;
1536 : }
1537 :
1538 : Double_t AliGenEMlib::PtRhoPl( const Double_t *px, const Double_t */*dummy*/ )
1539 : {
1540 : // rho + pT
1541 0 : return MtScal(*px,kRhoPl);
1542 : }
1543 :
1544 : Double_t AliGenEMlib::YRhoPl( const Double_t *py, const Double_t */*dummy*/ )
1545 : {
1546 0 : return YFlat(*py);
1547 :
1548 : }
1549 :
1550 : Double_t AliGenEMlib::V2RhoPl( const Double_t *px, const Double_t */*dummy*/ )
1551 : {
1552 0 : return KEtScal(*px,kRhoPl);
1553 : }
1554 :
1555 :
1556 : //--------------------------------------------------------------------------
1557 : //
1558 : // rho -
1559 : //
1560 : //--------------------------------------------------------------------------
1561 : Int_t AliGenEMlib::IpRhoMi(TRandom *)
1562 : {
1563 : // Return rho- pdg code
1564 0 : return -213;
1565 : }
1566 :
1567 : Double_t AliGenEMlib::PtRhoMi( const Double_t *px, const Double_t */*dummy*/ )
1568 : {
1569 : // rho- pT
1570 0 : return MtScal(*px,kRhoMi);
1571 : }
1572 :
1573 : Double_t AliGenEMlib::YRhoMi( const Double_t *py, const Double_t */*dummy*/ )
1574 : {
1575 0 : return YFlat(*py);
1576 :
1577 : }
1578 :
1579 : Double_t AliGenEMlib::V2RhoMi( const Double_t *px, const Double_t */*dummy*/ )
1580 : {
1581 0 : return KEtScal(*px,kRhoMi);
1582 : }
1583 :
1584 :
1585 : //--------------------------------------------------------------------------
1586 : //
1587 : // K0 *
1588 : //
1589 : //--------------------------------------------------------------------------
1590 : Int_t AliGenEMlib::IpK0star(TRandom *)
1591 : {
1592 : // Return K0 * pdg code
1593 0 : return 313;
1594 : }
1595 :
1596 : Double_t AliGenEMlib::PtK0star( const Double_t *px, const Double_t */*dummy*/ )
1597 : {
1598 : // K0 * pT
1599 0 : return MtScal(*px,kK0star);
1600 : }
1601 :
1602 : Double_t AliGenEMlib::YK0star( const Double_t *py, const Double_t */*dummy*/ )
1603 : {
1604 0 : return YFlat(*py);
1605 :
1606 : }
1607 :
1608 : Double_t AliGenEMlib::V2K0star( const Double_t *px, const Double_t */*dummy*/ )
1609 : {
1610 0 : return KEtScal(*px,kK0star);
1611 : }
1612 :
1613 :
1614 :
1615 : Double_t AliGenEMlib::YFlat(Double_t /*y*/)
1616 : {
1617 : //--------------------------------------------------------------------------
1618 : //
1619 : // flat rapidity distribution
1620 : //
1621 : //--------------------------------------------------------------------------
1622 :
1623 : Double_t dNdy = 1.;
1624 :
1625 0 : return dNdy;
1626 :
1627 : }
1628 :
1629 :
1630 : //=============================================================
1631 : //
1632 : // Mt-scaling
1633 : //
1634 : //=============================================================
1635 : //
1636 : Double_t AliGenEMlib::MtScal(Double_t pt, Int_t np)
1637 : {
1638 : // Function for the calculation of the Pt distribution for a
1639 : // given particle np, from the pizero Pt distribution using
1640 : // mt scaling.
1641 :
1642 0 : Double_t scaledPt = sqrt(pt*pt + fgkHM[np]*fgkHM[np] - fgkHM[0]*fgkHM[0]);
1643 0 : Double_t scaledYield = PtPizero(&scaledPt, (Double_t*) 0);
1644 :
1645 : // VALUE MESON/PI AT 5 GeV/c
1646 0 : Double_t NormPt = 5.;
1647 0 : Double_t scaledNormPt = sqrt(NormPt*NormPt + fgkHM[np]*fgkHM[np] - fgkHM[0]*fgkHM[0]);
1648 :
1649 : Int_t selectedCol;
1650 0 : switch (fgSelectedCollisionsSystem){
1651 : case kpp900GeV:
1652 : selectedCol=0;
1653 0 : break;
1654 : case kpp2760GeV:
1655 : selectedCol=0;
1656 0 : break;
1657 : case kpp7TeV:
1658 : selectedCol=0;
1659 0 : break;
1660 : case kpPb:
1661 : selectedCol=1;
1662 0 : break;
1663 : case kPbPb:
1664 : selectedCol=2;
1665 0 : break;
1666 : default:
1667 : selectedCol=0;
1668 0 : printf("<AliGenEMlib::MtScal> no collision system has been given\n");
1669 0 : }
1670 :
1671 0 : Double_t norm = fgkMtFactor[selectedCol][np] * (PtPizero(&NormPt, (Double_t*) 0) / PtPizero(&scaledNormPt, (Double_t*) 0));
1672 :
1673 0 : return norm*(pt/scaledPt)*scaledYield;
1674 0 : }
1675 :
1676 : Double_t AliGenEMlib::KEtScal(Double_t pt, Int_t np, Int_t nq)
1677 : {
1678 0 : Double_t scaledPt = sqrt(pow(2.0/nq*(sqrt(pt*pt+fgkHM[np]*fgkHM[np])-fgkHM[np])+fgkHM[0],2)-fgkHM[0]*fgkHM[0]);
1679 0 : return V2Pizero(&scaledPt, (Double_t*) 0);
1680 0 : }
1681 :
1682 : Double_t AliGenEMlib::V2Param(const Double_t *px, const Double_t *par)
1683 : {
1684 : // Very general parametrization of the v2
1685 :
1686 : const double &pt=px[0];
1687 0 : double val=CrossOverLc(par[4],par[3],pt)*(2*par[0]/(1+TMath::Exp(par[1]*(par[2]-pt)))-par[0])+CrossOverRc(par[4],par[3],pt)*((par[8]-par[5])/(1+TMath::Exp(par[6]*(pt-par[7])))+par[5]);
1688 : double sys=0;
1689 0 : if(fgSelectedV2Systematic){
1690 0 : double syspt=((pt>par[15])&(fgSelectedV2Systematic>0))?par[15]:pt;
1691 0 : sys=fgSelectedV2Systematic*par[11+fgSelectedV2Systematic*2]*pow(syspt,par[12+fgSelectedV2Systematic*2]);
1692 0 : }
1693 0 : return std::max(val+sys,0.0);
1694 : }
1695 :
1696 : Double_t AliGenEMlib::V2Flat(const Double_t */*px*/, const Double_t */*param*/)
1697 : {
1698 : // Flat v2
1699 :
1700 0 : return 0.0;
1701 : }
1702 :
1703 : Double_t AliGenEMlib::GetTAA(Int_t cent){
1704 : const static Double_t taa[16] = { 1.0, // pp
1705 : 26.32, // 0-5
1706 : 20.56, // 5-10
1707 : 14.39, // 10-20
1708 : 8.70, // 20-30
1709 : 5.001, // 30-40
1710 : 2.675, // 40-50
1711 : 1.317, // 50-60
1712 : 23.44, // 0-10
1713 : 6.85, // 20-40
1714 : 1.996, // 40-60
1715 : 0.4174, // 60-80
1716 : 18.91, // 0-20
1717 : 12.88, // 0-40
1718 : 3.088, // 20-80
1719 : 1.207}; // 40-80
1720 0 : return taa[cent];
1721 : }
1722 :
1723 : //==========================================================================
1724 : //
1725 : // Set Getters
1726 : //
1727 : //==========================================================================
1728 :
1729 : typedef Double_t (*GenFunc) (const Double_t*, const Double_t*);
1730 :
1731 : typedef Int_t (*GenFuncIp) (TRandom *);
1732 :
1733 : GenFunc AliGenEMlib::GetPt(Int_t param, const char * tname) const
1734 : {
1735 : // Return pointer to pT parameterisation
1736 : GenFunc func=0;
1737 0 : TString sname(tname);
1738 :
1739 0 : switch (param) {
1740 : case kDirectRealGamma:
1741 : func=PtDirectRealGamma;
1742 0 : break;
1743 : case kDirectVirtGamma:
1744 : func=PtDirectVirtGamma;
1745 0 : break;
1746 : case kPizero:
1747 : func=PtPizero;
1748 0 : break;
1749 : case kEta:
1750 : func=PtEta;
1751 0 : break;
1752 : case kRho0:
1753 : func=PtRho0;
1754 0 : break;
1755 : case kOmega:
1756 : func=PtOmega;
1757 0 : break;
1758 : case kEtaprime:
1759 : func=PtEtaprime;
1760 0 : break;
1761 : case kPhi:
1762 : func=PtPhi;
1763 0 : break;
1764 : case kJpsi:
1765 : func=PtJpsi;
1766 0 : break;
1767 : case kSigma0:
1768 : func= PtSigma;
1769 0 : break;
1770 : case kK0s:
1771 : func= PtK0short;
1772 0 : break;
1773 : case kDeltaPlPl:
1774 : func= PtDeltaPlPl;
1775 0 : break;
1776 : case kDeltaPl:
1777 : func= PtDeltaPlPl;
1778 0 : break;
1779 : case kDeltaMi:
1780 : func= PtDeltaMi;
1781 0 : break;
1782 : case kDeltaZero:
1783 : func= PtDeltaZero;
1784 0 : break;
1785 : case kRhoPl:
1786 : func= PtRhoPl;
1787 0 : break;
1788 : case kRhoMi:
1789 : func= PtRhoMi;
1790 0 : break;
1791 : case kK0star:
1792 : func= PtK0star;
1793 0 : break;
1794 : default:
1795 : func=0;
1796 0 : printf("<AliGenEMlib::GetPt> unknown parametrisation\n");
1797 : }
1798 : return func;
1799 0 : }
1800 :
1801 : GenFunc AliGenEMlib::GetY(Int_t param, const char * tname) const
1802 : {
1803 : // Return pointer to y- parameterisation
1804 : GenFunc func=0;
1805 0 : TString sname(tname);
1806 :
1807 0 : switch (param) {
1808 : case kDirectRealGamma:
1809 : func=YDirectRealGamma;
1810 0 : break;
1811 : case kDirectVirtGamma:
1812 : func=YDirectVirtGamma;
1813 0 : break;
1814 : case kPizero:
1815 : func=YPizero;
1816 0 : break;
1817 : case kEta:
1818 : func=YEta;
1819 0 : break;
1820 : case kRho0:
1821 : func=YRho0;
1822 0 : break;
1823 : case kOmega:
1824 : func=YOmega;
1825 0 : break;
1826 : case kEtaprime:
1827 : func=YEtaprime;
1828 0 : break;
1829 : case kPhi:
1830 : func=YPhi;
1831 0 : break;
1832 : case kJpsi:
1833 : func=YJpsi;
1834 0 : break;
1835 : case kSigma0:
1836 : func=YSigma;
1837 0 : break;
1838 : case kK0s:
1839 : func=YK0short;
1840 0 : break;
1841 : case kDeltaPlPl:
1842 : func=YDeltaPlPl;
1843 0 : break;
1844 : case kDeltaPl:
1845 : func=YDeltaPl;
1846 0 : break;
1847 : case kDeltaMi:
1848 : func=YDeltaMi;
1849 0 : break;
1850 : case kDeltaZero:
1851 : func=YDeltaZero;
1852 0 : break;
1853 : case kRhoPl:
1854 : func=YRhoPl;
1855 0 : break;
1856 : case kRhoMi:
1857 : func=YRhoMi;
1858 0 : break;
1859 : case kK0star:
1860 : func=YK0star;
1861 0 : break;
1862 : default:
1863 : func=0;
1864 0 : printf("<AliGenEMlib::GetY> unknown parametrisation\n");
1865 : }
1866 : return func;
1867 0 : }
1868 :
1869 : GenFuncIp AliGenEMlib::GetIp(Int_t param, const char * tname) const
1870 : {
1871 : // Return pointer to particle type parameterisation
1872 : GenFuncIp func=0;
1873 0 : TString sname(tname);
1874 :
1875 0 : switch (param) {
1876 : case kDirectRealGamma:
1877 : func=IpDirectRealGamma;
1878 0 : break;
1879 : case kDirectVirtGamma:
1880 : func=IpDirectVirtGamma;
1881 0 : break;
1882 : case kPizero:
1883 : func=IpPizero;
1884 0 : break;
1885 : case kEta:
1886 : func=IpEta;
1887 0 : break;
1888 : case kRho0:
1889 : func=IpRho0;
1890 0 : break;
1891 : case kOmega:
1892 : func=IpOmega;
1893 0 : break;
1894 : case kEtaprime:
1895 : func=IpEtaprime;
1896 0 : break;
1897 : case kPhi:
1898 : func=IpPhi;
1899 0 : break;
1900 : case kJpsi:
1901 : func=IpJpsi;
1902 0 : break;
1903 : case kSigma0:
1904 : func=IpSigma;
1905 0 : break;
1906 : case kK0s:
1907 : func=IpK0short;
1908 0 : break;
1909 : case kDeltaPlPl:
1910 : func=IpDeltaPlPl;
1911 0 : break;
1912 : case kDeltaPl:
1913 : func=IpDeltaPl;
1914 0 : break;
1915 : case kDeltaMi:
1916 : func=IpDeltaMi;
1917 0 : break;
1918 : case kDeltaZero:
1919 : func=IpDeltaZero;
1920 0 : break;
1921 : case kRhoPl:
1922 : func=IpRhoPl;
1923 0 : break;
1924 : case kRhoMi:
1925 : func=IpRhoMi;
1926 0 : break;
1927 : case kK0star:
1928 : func=IpK0star;
1929 0 : break;
1930 : default:
1931 : func=0;
1932 0 : printf("<AliGenEMlib::GetIp> unknown parametrisation\n");
1933 : }
1934 : return func;
1935 0 : }
1936 :
1937 : GenFunc AliGenEMlib::GetV2(Int_t param, const char * tname) const
1938 : {
1939 : // Return pointer to v2-parameterisation
1940 : GenFunc func=0;
1941 0 : TString sname(tname);
1942 :
1943 0 : switch (param) {
1944 : case kDirectRealGamma:
1945 : func=V2DirectRealGamma;
1946 0 : break;
1947 : case kDirectVirtGamma:
1948 : func=V2DirectVirtGamma;
1949 0 : break;
1950 : case kPizero:
1951 : func=V2Pizero;
1952 0 : break;
1953 : case kEta:
1954 : func=V2Eta;
1955 0 : break;
1956 : case kRho0:
1957 : func=V2Rho0;
1958 0 : break;
1959 : case kOmega:
1960 : func=V2Omega;
1961 0 : break;
1962 : case kEtaprime:
1963 : func=V2Etaprime;
1964 0 : break;
1965 : case kPhi:
1966 : func=V2Phi;
1967 0 : break;
1968 : case kJpsi:
1969 : func=V2Jpsi;
1970 0 : break;
1971 : case kSigma0:
1972 : func=V2Sigma0;
1973 0 : break;
1974 : case kK0s:
1975 : func=V2K0sshort;
1976 0 : break;
1977 : case kDeltaPlPl:
1978 : func=V2DeltaPlPl;
1979 0 : break;
1980 : case kDeltaPl:
1981 : func=V2DeltaPl;
1982 0 : break;
1983 : case kDeltaMi:
1984 : func=V2DeltaMi;
1985 0 : break;
1986 : case kDeltaZero:
1987 : func=V2DeltaZero;
1988 0 : break;
1989 : case kRhoPl:
1990 : func=V2RhoPl;
1991 0 : break;
1992 : case kRhoMi:
1993 : func=V2RhoMi;
1994 0 : break;
1995 : case kK0star:
1996 : func=V2K0star;
1997 0 : break;
1998 :
1999 : default:
2000 : func=0;
2001 0 : printf("<AliGenEMlib::GetV2> unknown parametrisation\n");
2002 : }
2003 : return func;
2004 0 : }
2005 :
|