LCOV - code coverage report
Current view: top level - EVGEN - AliGenEMlib.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 20 501 4.0 %
Date: 2016-06-14 17:26:59 Functions: 4 104 3.8 %

          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             : 

Generated by: LCOV version 1.11