MpdPid.cxx 134 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984
  1. #include "MpdPid.h"
  2. MpdPid::MpdPid() : TObject() {
  3. fGaus = nullptr; fAsymGaus = nullptr; fGaus2 = nullptr; fAsymGaus2 = nullptr;
  4. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++) {
  5. fProb[iType] = 0.0;
  6. fEnLossSigmasArray[iType] = 0.0;
  7. fMSquaredSigmasArray[iType] = 0.0;
  8. fBayesCoefficients[iType] = 0.0;
  9. fNSigSpecies[iType] = kFALSE;
  10. }
  11. fMethod = kTRUE;
  12. fPrRatio = 1.0;
  13. fEnergy = 4.0;
  14. fSigmaTof = 0.0;
  15. fSigmaEloss = 0.0;
  16. fTrackingState = MpdPidUtils::kCFHM;
  17. fCharge = MpdPidUtils::kPos;
  18. }
  19. MpdPid::MpdPid(Double_t sigmaTof, Double_t sigmaEloss, Double_t sqrts, Double_t EnLossCoef, TString Generator, TString Tracking, TString NSigPart)
  20. : TObject(), fSigmaTof(sigmaTof), fSigmaEloss(sigmaEloss), fCharge(MpdPidUtils::kPos), fEnergy(sqrts)
  21. {
  22. Init(Generator, Tracking, NSigPart, EnLossCoef);
  23. }
  24. MpdPid::~MpdPid() {
  25. for ( auto it = fdEdxBBMap.begin(); it != fdEdxBBMap.end(); ++it ) { for ( TF1* F : it->second ) delete F; }
  26. for ( auto it = fdEdxSigmaMap.begin(); it != fdEdxSigmaMap.end(); ++it ) { for ( TF1* F : it->second ) delete F; }
  27. for ( auto it = fdEdxDeltaMap.begin(); it != fdEdxDeltaMap.end(); ++it ) { for ( TF1* F : it->second ) delete F; }
  28. for ( auto it = fParM2Map.begin(); it != fParM2Map.end(); ++it ) { for ( TF1* F : it->second ) delete F; }
  29. for ( auto it = fPartYieldMap.begin(); it != fPartYieldMap.end(); ++it ) { for ( TF1* F : it->second ) delete F; }
  30. delete fGaus; delete fAsymGaus; delete fGaus2; delete fAsymGaus2;
  31. }
  32. Double_t MpdPid::parElBB(Double_t *x, Double_t *par) {
  33. Double_t ans = par[0] / x[0] + par[1];
  34. if ( fTrackingState == MpdPidUtils::kCF ) {
  35. if ( x[0] < 0.15 ) ans *= 0.980;
  36. if ( x[0] < 0.10 ) ans *= 1.025;
  37. }
  38. return ans;
  39. }
  40. Double_t MpdPid::parMuBB(Double_t *x, Double_t *par) {
  41. Double_t x1 = par[0] / TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 0.011 ), par[3] );
  42. Double_t x2 = par[1] - TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 0.011 ), par[3] );
  43. Double_t x3 = TMath::Log( par[2] + TMath::Power( 1.0 / ( x[0] / 0.1057 ), par[4] ));
  44. Double_t ans = x1 * ( x2 - x3 );
  45. if ( fTrackingState == MpdPidUtils::kCF ) {
  46. if ( x[0] < 0.10 ) ans *= 0.960;
  47. if ( x[0] > 1.25 ) ans *= 1.005;
  48. if ( x[0] > 1.90 ) ans *= 0.985;
  49. } else if ( fTrackingState == MpdPidUtils::kHP ) {
  50. if ( x[0] < 0.15 ) ans *= 0.970;
  51. if ( x[0] < 0.20 ) ans *= 1.015;
  52. if ( x[0] > 1.35 ) ans *= 1.005;
  53. if ( x[0] > 1.60 ) ans *= 1.005;
  54. if ( x[0] > 1.90 ) ans *= 0.985;
  55. } else ans *= 1.0;
  56. return ans;
  57. }
  58. Double_t MpdPid::parPiBB(Double_t *x, Double_t *par) {
  59. Double_t x1 = par[0] / TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 0.01949 ), par[3] );
  60. Double_t x2 = par[1] - TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 0.01949 ), par[3] );
  61. Double_t x3 = TMath::Log( par[2] + TMath::Power( 1.0 / ( x[0] / 0.1396 ), par[4] ));
  62. Double_t ans = x1 * ( x2 - x3 );
  63. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  64. if ( ( x[0] >= 0.05 ) && ( x[0] < 0.10 ) ) ans *= 1.025;
  65. if ( ( x[0] >= 0.10 ) && ( x[0] < 0.15 ) ) ans *= 0.970;
  66. } else if ( fTrackingState == MpdPidUtils::kCF ) {
  67. if ( ( x[0] > 0.05 ) && ( x[0] < 0.10 ) ) ans *= 0.830;
  68. if ( ( x[0] > 0.10 ) && ( x[0] < 0.15 ) ) ans *= 0.978;
  69. if ( ( x[0] > 0.15 ) && ( x[0] < 0.20 ) ) ans *= 1.012;
  70. if ( ( x[0] > 0.25 ) && ( x[0] < 0.30 ) ) ans *= 0.987;
  71. if ( ( x[0] > 2.60 ) && ( x[0] < 3.00 ) ) ans *= 0.980;
  72. } else {
  73. if ( x[0] < 0.10 ) ans *= 0.895;
  74. if ( x[0] < 0.15 ) ans *= 0.955;
  75. if ( x[0] < 0.25 ) ans *= 1.020;
  76. if ( x[0] < 0.30 ) ans *= 0.990;
  77. if ( x[0] > 1.70 ) ans *= 1.005;
  78. if ( x[0] > 2.50 ) ans *= 0.990;
  79. }
  80. return ans;
  81. }
  82. Double_t MpdPid::parKaBB(Double_t *x, Double_t *par) {
  83. Double_t x1, x2, x3, p[5], xint = 0.50918408, ans;
  84. for (Int_t k = 0; k < 5; k++) p[k] = x[0] < xint ? par[k] : par[k+5];
  85. x1 = p[0] / TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 0.2437 ), p[3] );
  86. x2 = p[1] - TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 0.2437 ), p[3] );
  87. x3 = TMath::Log( p[2] + TMath::Power( 1.0 / ( x[0] / 0.4937 ), p[4] ));
  88. ans = x1 * ( x2 - x3 );
  89. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  90. if ( ( x[0] >= 0.05 ) && ( x[0] < 0.10 ) ) ans *= 0.960;
  91. if ( ( x[0] >= 0.10 ) && ( x[0] < 0.15 ) ) ans *= 0.930;
  92. if ( ( x[0] >= 0.15 ) && ( x[0] < 0.20 ) ) ans *= 0.970;
  93. if ( ( x[0] >= 0.20 ) && ( x[0] < 0.25 ) ) ans *= 0.990;
  94. if ( ( x[0] >= 1.90 ) && ( x[0] < 2.10 ) ) ans *= 0.990;
  95. if ( ( x[0] >= 2.10 ) && ( x[0] < 2.20 ) ) ans *= 0.985;
  96. if ( ( x[0] >= 2.20 ) && ( x[0] < 2.40 ) ) ans *= 0.980;
  97. if ( ( x[0] >= 2.40 ) && ( x[0] < 2.60 ) ) ans *= 0.975;
  98. if ( ( x[0] >= 2.60 ) && ( x[0] < 3.00 ) ) ans *= 0.960;
  99. } else if ( fTrackingState == MpdPidUtils::kCF ) {
  100. if ( ( x[0] > 0.10 ) && ( x[0] < 0.15 ) ) ans *= 1.044;
  101. if ( ( x[0] > 0.15 ) && ( x[0] < 0.20 ) ) ans *= 1.065;
  102. if ( ( x[0] > 0.20 ) && ( x[0] < 0.25 ) ) ans *= 1.072;
  103. if ( ( x[0] > 0.25 ) && ( x[0] < 0.30 ) ) ans *= 1.029;
  104. if ( ( x[0] > 0.30 ) && ( x[0] < 0.45 ) ) ans *= 0.990;
  105. if ( ( x[0] > 0.95 ) && ( x[0] < 1.05 ) ) ans *= 0.988;
  106. if ( ( x[0] > 1.10 ) && ( x[0] < 1.60 ) ) ans *= 1.009;
  107. if ( ( x[0] > 1.60 ) && ( x[0] < 1.90 ) ) ans *= 1.013;
  108. if ( ( x[0] > 1.90 ) && ( x[0] < 2.20 ) ) ans *= 1.021;
  109. if ( ( x[0] > 2.20 ) && ( x[0] < 2.40 ) ) ans *= 1.028;
  110. if ( ( x[0] > 2.40 ) && ( x[0] < 2.60 ) ) ans *= 1.035;
  111. if ( ( x[0] > 2.60 ) && ( x[0] < 3.00 ) ) ans *= 1.041;
  112. } else {
  113. if ( x[0] < 0.15 ) ans *= 0.980;
  114. if ( x[0] < 0.20 ) ans *= 0.970;
  115. if ( x[0] < 0.25 ) ans *= 1.025;
  116. if ( x[0] < 0.30 ) ans *= 1.020;
  117. if ( x[0] < 0.40 ) ans *= 0.990;
  118. if ( x[0] < 0.45 ) ans *= 0.990;
  119. if ( x[0] < 0.50 ) ans *= 1.010;
  120. if ( x[0] > 1.05 ) ans *= 1.015;
  121. if ( x[0] > 1.50 ) ans *= 0.985;
  122. if ( x[0] > 1.80 ) ans *= 0.990;
  123. if ( x[0] > 2.10 ) ans *= 0.990;
  124. if ( x[0] > 2.20 ) ans *= 0.990;
  125. if ( x[0] > 2.40 ) ans *= 0.990;
  126. if ( x[0] > 2.70 ) ans *= 0.985;
  127. }
  128. return ans;
  129. }
  130. Double_t MpdPid::parPrBB(Double_t *x, Double_t *par) {
  131. Double_t x1, x2, x3, p[5], xint = fTrackingState != MpdPidUtils::kCFHM ? 0.384089 : 0.34173458, ans;
  132. for (Int_t k = 0; k < 5; k++) p[k] = x[0] < xint ? par[k] : par[k+5];
  133. x1 = p[0] / TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 0.88 ), p[3] );
  134. x2 = p[1] - TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 0.88 ), p[3] );
  135. x3 = TMath::Log( p[2] + TMath::Power( 1.0 / ( x[0] / 0.9383 ), p[4] ));
  136. ans = x1 * ( x2 - x3 );
  137. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  138. if ( ( x[0] >= 0.05 ) && ( x[0] < 0.10 ) ) ans *= 0.780;
  139. if ( ( x[0] >= 0.10 ) && ( x[0] < 0.15 ) ) ans *= 0.925;
  140. if ( ( x[0] >= 0.15 ) && ( x[0] < 0.20 ) ) ans *= 1.015;
  141. if ( ( x[0] >= 0.20 ) && ( x[0] < 0.25 ) ) ans *= 0.985;
  142. if ( ( x[0] >= 0.25 ) && ( x[0] < 0.30 ) ) ans *= 0.945;
  143. if ( ( x[0] >= 0.30 ) && ( x[0] < 0.35 ) ) ans *= 0.970;
  144. if ( ( x[0] >= 0.35 ) && ( x[0] < 0.40 ) ) ans *= 0.995;
  145. if ( ( x[0] >= 2.20 ) && ( x[0] < 2.40 ) ) ans *= 0.995;
  146. if ( ( x[0] >= 2.40 ) && ( x[0] < 2.60 ) ) ans *= 0.990;
  147. if ( ( x[0] >= 2.60 ) && ( x[0] < 3.00 ) ) ans *= 0.975;
  148. } else if ( fTrackingState == MpdPidUtils::kCF ) {
  149. if ( ( x[0] > 0.05 ) && ( x[0] < 0.10 ) ) ans *= 0.891;
  150. if ( ( x[0] > 0.10 ) && ( x[0] < 0.15 ) ) ans *= 0.946;
  151. if ( ( x[0] > 0.15 ) && ( x[0] < 0.20 ) ) ans *= 1.050;
  152. if ( ( x[0] > 0.20 ) && ( x[0] < 0.25 ) ) ans *= 0.922;
  153. if ( ( x[0] > 0.25 ) && ( x[0] < 0.30 ) ) ans *= 0.848;
  154. if ( ( x[0] > 0.30 ) && ( x[0] < 0.40 ) ) ans *= 0.870;
  155. if ( ( x[0] > 0.45 ) && ( x[0] < 0.55 ) ) ans *= 0.988;
  156. if ( ( x[0] > 1.40 ) && ( x[0] < 2.00 ) ) ans *= 0.990;
  157. if ( ( x[0] > 2.10 ) && ( x[0] < 2.20 ) ) ans *= 1.010;
  158. if ( ( x[0] > 2.20 ) && ( x[0] < 2.60 ) ) ans *= 1.016;
  159. if ( ( x[0] > 2.60 ) && ( x[0] < 3.00 ) ) ans *= 1.024;
  160. } else {
  161. if ( x[0] < 0.10 ) ans *= 0.690;
  162. if ( x[0] < 0.15 ) ans *= 0.940;
  163. if ( x[0] < 0.20 ) ans *= 0.955;
  164. if ( x[0] < 0.25 ) ans *= 0.965;
  165. if ( x[0] < 0.30 ) ans *= 0.975;
  166. if ( x[0] < 0.45 ) ans *= 1.030;
  167. if ( x[0] < 0.55 ) ans *= 0.970;
  168. if ( x[0] < 0.60 ) ans *= 1.030;
  169. if ( x[0] < 0.65 ) ans *= 0.975;
  170. if ( x[0] < 0.70 ) ans *= 1.010;
  171. if ( x[0] > 2.00 ) ans *= 1.010;
  172. if ( x[0] > 2.40 ) ans *= 0.990;
  173. }
  174. return ans;
  175. }
  176. Double_t MpdPid::parDeBB(Double_t *x, Double_t *par) {
  177. Double_t x1, x2, x3, p[5], xint = 0.40577186, ans;
  178. for (Int_t k = 0; k < 5; k++) p[k] = x[0] < xint ? par[k] : par[k+5];
  179. x1 = p[0] / TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 3.52 ), p[3] );
  180. x2 = p[1] - TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 3.52 ), p[3] );
  181. x3 = TMath::Log( p[2] + TMath::Power( 1.0 / ( x[0] / 1.876 ), p[4] ));
  182. ans = x1 * ( x2 - x3 );
  183. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  184. if ( ( x[0] >= 0.20 ) && ( x[0] < 0.25 ) ) ans *= 0.915;
  185. if ( ( x[0] >= 0.25 ) && ( x[0] < 0.30 ) ) ans *= 0.970;
  186. if ( ( x[0] >= 0.30 ) && ( x[0] < 0.35 ) ) ans *= 1.010;
  187. if ( ( x[0] >= 0.35 ) && ( x[0] < 0.40 ) ) ans *= 1.015;
  188. if ( ( x[0] >= 0.40 ) && ( x[0] < 0.45 ) ) ans *= 1.005;
  189. if ( ( x[0] >= 0.45 ) && ( x[0] < 0.50 ) ) ans *= 1.025;
  190. if ( ( x[0] >= 0.50 ) && ( x[0] < 0.55 ) ) ans *= 0.995;
  191. if ( ( x[0] >= 0.55 ) && ( x[0] < 0.70 ) ) ans *= 0.990;
  192. }
  193. return ans;
  194. }
  195. Double_t MpdPid::parTrBB(Double_t *x, Double_t *par) {
  196. Double_t x1, x2, x3, p[5], xint = 0.53220409, ans;
  197. for (Int_t k = 0; k < 5; k++) p[k] = x[0] < xint ? par[k] : par[k+5];
  198. x1 = p[0] / TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 7.89 ), p[3] );
  199. x2 = p[1] - TMath::Power( x[0] / TMath::Sqrt( x[0] * x[0] + 7.89 ), p[3] );
  200. x3 = TMath::Log( p[2] + TMath::Power( 1.0 / ( x[0] / 2.81 ), p[4] ));
  201. ans = x1 * ( x2 - x3 );
  202. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  203. if ( ( x[0] >= 0.20 ) && ( x[0] < 0.25 ) ) ans *= 0.960;
  204. if ( ( x[0] >= 0.25 ) && ( x[0] < 0.30 ) ) ans *= 0.975;
  205. if ( ( x[0] >= 0.35 ) && ( x[0] < 0.40 ) ) ans *= 1.015;
  206. if ( ( x[0] >= 0.40 ) && ( x[0] < 0.45 ) ) ans *= 1.010;
  207. if ( ( x[0] >= 0.45 ) && ( x[0] < 0.50 ) ) ans *= 0.990;
  208. if ( ( x[0] >= 0.50 ) && ( x[0] < 0.55 ) ) ans *= 0.970;
  209. if ( ( x[0] >= 0.55 ) && ( x[0] < 0.60 ) ) ans *= 0.985;
  210. if ( ( x[0] >= 0.60 ) && ( x[0] < 0.65 ) ) ans *= 1.010;
  211. if ( ( x[0] >= 0.65 ) && ( x[0] < 0.75 ) ) ans *= 1.015;
  212. if ( ( x[0] >= 0.85 ) && ( x[0] < 1.00 ) ) ans *= 0.990;
  213. }
  214. return ans;
  215. }
  216. Double_t MpdPid::parHe3BB(Double_t *x, Double_t *par) {
  217. Double_t x1, x2, x3, p[4], xint = 0.71388289, ans;
  218. for (Int_t k = 0; k < 4; k++) p[k] = x[0] < xint ? par[k] : par[k+4];
  219. x1 = 1.0 + TMath::Power( x[0] / 1.4047, 2.0 );
  220. x2 = TMath::Power( x[0] / 1.4047, p[3] );
  221. x3 = p[1] + p[2] * TMath::Log( 1.0 + TMath::Power( x[0] / 1.4047, 2.0 ));
  222. ans = p[0] * ( x1 / x2 * x3 - 1.0 );
  223. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  224. if ( ( x[0] >= 0.20 ) && ( x[0] < 0.25 ) ) ans *= 0.955;
  225. if ( ( x[0] >= 0.25 ) && ( x[0] < 0.30 ) ) ans *= 0.985;
  226. if ( ( x[0] >= 0.70 ) && ( x[0] < 0.95 ) ) ans *= 1.015;
  227. if ( ( x[0] >= 1.10 ) && ( x[0] < 1.25 ) ) ans *= 0.995;
  228. if ( ( x[0] >= 1.40 ) && ( x[0] < 1.45 ) ) ans *= 1.010;
  229. if ( ( x[0] >= 1.45 ) && ( x[0] < 1.50 ) ) ans *= 1.025;
  230. if ( ( x[0] >= 1.50 ) && ( x[0] < 1.55 ) ) ans *= 1.065;
  231. if ( ( x[0] >= 1.55 ) && ( x[0] < 1.60 ) ) ans *= 1.115;
  232. }
  233. return ans;
  234. }
  235. Double_t MpdPid::parHe4BB(Double_t *x, Double_t *par) {
  236. Double_t x1, x2, x3, p[4], xint = 0.72405503, ans;
  237. for (Int_t k = 0; k < 4; k++) p[k] = x[0] < xint ? par[k] : par[k+4];
  238. x1 = 1.0 + TMath::Power( x[0] / 1.863, 2.0 );
  239. x2 = TMath::Power( x[0] / 1.863, p[3] );
  240. x3 = p[1] + p[2] * TMath::Log( 1.0 + TMath::Power( x[0] / 1.863, 2.0 ));
  241. ans = p[0] * ( x1 / x2 * x3 - 1.0 );
  242. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  243. if ( ( x[0] >= 0.20 ) && ( x[0] < 0.25 ) ) ans *= 0.980;
  244. if ( ( x[0] >= 0.70 ) && ( x[0] < 0.90 ) ) ans *= 1.015;
  245. if ( ( x[0] >= 0.90 ) && ( x[0] < 0.95 ) ) ans *= 1.010;
  246. if ( ( x[0] >= 1.05 ) && ( x[0] < 1.10 ) ) ans *= 0.990;
  247. if ( ( x[0] >= 1.10 ) && ( x[0] < 1.35 ) ) ans *= 0.985;
  248. if ( ( x[0] >= 1.40 ) && ( x[0] < 1.45 ) ) ans *= 1.020;
  249. if ( ( x[0] >= 1.45 ) && ( x[0] < 1.50 ) ) ans *= 1.053;
  250. if ( ( x[0] >= 1.50 ) && ( x[0] < 1.55 ) ) ans *= 1.125;
  251. if ( ( x[0] >= 1.55 ) && ( x[0] < 1.60 ) ) ans *= 1.238;
  252. }
  253. return ans;
  254. }
  255. Double_t MpdPid::AsymGaus(Double_t *x, Double_t *par) {
  256. Double_t peak = par[1];
  257. if (x[0] < peak)
  258. return par[0]*TMath::Exp( -0.5 * TMath::Power( ( (x[0] - par[1]) / par[2] ), 2 ));
  259. else
  260. return par[0]*TMath::Exp( -0.5 * TMath::Power( ( (x[0] - par[1]) / ((1. + par[3]) * par[2]) ), 2 ));
  261. }
  262. Double_t MpdPid::AsymGaus2(Double_t *x, Double_t *par) {
  263. Double_t peak = par[1];
  264. if (x[0] < peak)
  265. return par[0]*TMath::Exp( -0.5 * TMath::Power( ( (x[0] - par[1]) / par[2] ), 2 )) * TMath::Exp( -0.5 * TMath::Power( ( (x[1] - par[4]) / par[5] ), 2 ));
  266. else
  267. return par[0]*TMath::Exp( -0.5 * TMath::Power( ( (x[0] - par[1]) / ((1. + par[3]) * par[2]) ), 2 )) * TMath::Exp( -0.5 * TMath::Power( ( (x[1] - par[4]) / par[5] ), 2 ));
  268. }
  269. /// Sum of two exponents in total momentum (pions and electrons)
  270. Double_t MpdPid::MomPi(Double_t *x, Double_t *par) {
  271. Double_t p = x[0], xx, x1, x2;
  272. xx = TMath::Sqrt( p*p + par[4]*par[4] ) - par[4];
  273. x1 = ( 1.0 + par[1] ) / ( par[2]*( par[4] + par[2] ) ) / TMath::Exp( xx / par[2] );
  274. x2 = par[1] / ( par[3]*( par[4] + par[3] ) ) / TMath::Exp( xx / par[3] );
  275. return ( par[0]*p*( x1 + x2 ) );
  276. }
  277. /// Difference of 2 exponents in total momentum (All species, except pi's and e+/-)
  278. Double_t MpdPid::MomPr(Double_t *x, Double_t *par) {
  279. Double_t p = x[0], xx, x1, x2;
  280. xx = TMath::Sqrt( p*p + par[4]*par[4] ) - par[4];
  281. x1 = ( 1.0 + par[1] ) / ( par[2]*( par[4] + par[2] ) ) / TMath::Exp( xx / par[2] );
  282. x2 = par[1] / ( par[3]*( par[4] + par[3] ) ) / TMath::Exp( xx / par[3] );
  283. return ( par[0]*p*( x1 - x2 ) );
  284. }
  285. Double_t MpdPid::GetDedxWidthValue(Double_t p, MpdPidUtils::ePartType iType) {
  286. Double_t WidthValue = 0.0;
  287. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator ret = fdEdxSigmaMap.find(iType);
  288. if ( ret != fdEdxSigmaMap.end() ) {
  289. for ( TF1* widthF : ret->second ) {
  290. if ( ( p < widthF->GetXmax() ) && ( p >= widthF->GetXmin() ) ) {
  291. WidthValue = widthF->Eval(p);
  292. break;
  293. }
  294. }
  295. }
  296. return WidthValue;
  297. }
  298. Double_t MpdPid::GetTailValue(Double_t p, MpdPidUtils::ePartType iType) {
  299. Double_t TailValue = 0.0;
  300. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator ret = fdEdxDeltaMap.find(iType);
  301. if ( ret != fdEdxDeltaMap.end() ) {
  302. for ( TF1* asymF : ret->second ) {
  303. if ( ( p < asymF->GetXmax() ) && ( p >= asymF->GetXmin() ) ) {
  304. TailValue = asymF->Eval(p);
  305. break;
  306. }
  307. }
  308. }
  309. return TailValue;
  310. }
  311. Double_t MpdPid::ComputeEnLossSigma(Double_t p, Double_t dedx, Double_t emean, Double_t sige, MpdPidUtils::ePartType iType) {
  312. Double_t sig = TMath::Abs((dedx/emean-1.)/sige);
  313. Double_t delta = GetTailValue(p, iType);
  314. Double_t SideOfAsymmetry = delta * (dedx - emean);
  315. if ( SideOfAsymmetry >= 0.0 ) sig /= 1. + TMath::Abs(delta);
  316. fEnLossSigmasArray[iType] = sig;
  317. return sig;
  318. }
  319. Double_t MpdPid::ComputeMSquaredSigma(Double_t m2, Double_t mmean, Double_t sigm, MpdPidUtils::ePartType iType) {
  320. Double_t sig = ( m2 - mmean ) / sigm;
  321. fMSquaredSigmasArray[iType] = TMath::Abs(sig);
  322. return sig;
  323. }
  324. Double_t MpdPid::ComputeDedxProb_asym(Double_t cut, Double_t p, Double_t dedx, Double_t n, Double_t emean, Double_t sige, MpdPidUtils::ePartType iType) {
  325. Double_t Prob = 0.0, xx;
  326. Double_t delta = GetTailValue(p, iType);
  327. xx = ComputeEnLossSigma(p, dedx, emean, sige, iType);
  328. if (xx < cut) {
  329. fAsymGaus->SetParameters(n, 1., sige, delta);
  330. Prob = fAsymGaus->Eval(dedx/emean);
  331. }
  332. fMSquaredSigmasArray[iType] = -1.0;
  333. return Prob;
  334. }
  335. Double_t MpdPid::ComputeCombProb_asym(Double_t cut_dedx, Double_t cut_m2, Double_t p, Double_t dedx, Double_t m2, Double_t n, Double_t emean, Double_t mmean, Double_t sige, Double_t sigm, MpdPidUtils::ePartType iType) {
  336. Double_t Prob = 0.0, xx, yy;
  337. Double_t delta = GetTailValue(p, iType);
  338. xx = ComputeEnLossSigma(p, dedx, emean, sige, iType);
  339. yy = ComputeMSquaredSigma(m2, mmean, sigm, iType);
  340. if ( iType == MpdPidUtils::kElectron ) mmean = 0.002;
  341. if ( (TMath::Abs(xx) < cut_dedx) && (TMath::Abs(yy) < cut_m2) ) {
  342. fAsymGaus2->SetParameters(n, 1., sige, delta, mmean, sigm);
  343. Prob = fAsymGaus2->Eval(dedx/emean, m2);
  344. }
  345. return Prob;
  346. }
  347. void MpdPid::Init(TString Generator, TString Tracking, TString NSigPart, Double_t fCoef) {
  348. cout << "MpdPid::Init().." << endl;
  349. Double_t PMIN = 0.0, PMAX = 5.0, xint;
  350. Double_t dedxParam;
  351. TString sFunc;
  352. if ( Tracking == "HP" ) fTrackingState = MpdPidUtils::kHP;
  353. else if ( Tracking == "CF" ) fTrackingState = MpdPidUtils::kCF;
  354. else if ( Tracking == "CFHM" ) fTrackingState = MpdPidUtils::kCFHM;
  355. else { cout << "ERROR! Unknown tracking method! Switch to default (\"CFHM\")." << endl; fTrackingState = MpdPidUtils::kCFHM; }
  356. /// Setting default ratio ('rat' is pos./neg.)
  357. fPrRatio = fEnergy < 7.0 ? 1000.0 : 100.0;
  358. vecTF1ptrs fBB[MpdPidUtils::kNSpecies], fm2[MpdPidUtils::kNSpecies], fSigDedx[MpdPidUtils::kNSpecies], fAsymDedx[MpdPidUtils::kNSpecies], fPartYield[MpdPidUtils::kNSpecies];
  359. ///
  360. /// Bethe-Bloch versus p
  361. ///
  362. TF1* fParElBB = new TF1("fParElBB",this,&MpdPid::parElBB,PMIN,PMAX,2,"MpdPid","parElBB");
  363. fBB[MpdPidUtils::kElectron].push_back(fParElBB);
  364. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fBB[MpdPidUtils::kElectron]) );
  365. TF1* fParMuBB = new TF1("fParMuBB",this,&MpdPid::parMuBB,PMIN,PMAX,5,"MpdPid","parMuBB");
  366. fBB[MpdPidUtils::kMuon].push_back(fParMuBB);
  367. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fBB[MpdPidUtils::kMuon]) );
  368. TF1* fParPiBB = new TF1("fParPiBB",this,&MpdPid::parPiBB,PMIN,PMAX,5,"MpdPid","parPiBB");
  369. fBB[MpdPidUtils::kPion].push_back(fParPiBB);
  370. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fBB[MpdPidUtils::kPion]) );
  371. TF1* fParKaBB = new TF1("fParKaBB",this,&MpdPid::parKaBB,PMIN,PMAX,10,"MpdPid","parKaBB");
  372. fBB[MpdPidUtils::kKaon].push_back(fParKaBB);
  373. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fBB[MpdPidUtils::kKaon]) );
  374. xint = fTrackingState == MpdPidUtils::kCFHM ? 4.8 : 5.0;
  375. TF1* fParPrBB = new TF1("fParPrBB",this,&MpdPid::parPrBB,PMIN,xint,10,"MpdPid","parPrBB");
  376. fBB[MpdPidUtils::kProton].push_back(fParPrBB);
  377. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  378. TF1* fParPrP1 = new TF1("fParPrP1","[0]",xint,5.0);
  379. fBB[MpdPidUtils::kProton].push_back(fParPrP1);
  380. }
  381. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fBB[MpdPidUtils::kProton]) );
  382. if ( fTrackingState == MpdPidUtils::kCF ) {
  383. xint = 0.375;
  384. TF1* fParDeP1 = new TF1("fParDeP1","pol1(0)",PMIN,0.225);
  385. fBB[MpdPidUtils::kDeuteron].push_back(fParDeP1);
  386. TF1* fParDeP2 = new TF1("fParDeP2","pol1(0)",0.225,xint);
  387. fBB[MpdPidUtils::kDeuteron].push_back(fParDeP2);
  388. } else xint = PMIN;
  389. TF1* fParDeBB = new TF1("fParDeBB",this,&MpdPid::parDeBB,xint,PMAX,10,"MpdPid","parDeBB");
  390. fBB[MpdPidUtils::kDeuteron].push_back(fParDeBB);
  391. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fBB[MpdPidUtils::kDeuteron]) );
  392. if ( fTrackingState == MpdPidUtils::kCF ) {
  393. xint = 0.525;
  394. TF1* fParTrP1 = new TF1("fParTrP1","pol1(0)",PMIN,0.3);
  395. fBB[MpdPidUtils::kTriton].push_back(fParTrP1);
  396. TF1* fParTrP2 = new TF1("fParTrP2","pol1(0)",0.3,xint);
  397. fBB[MpdPidUtils::kTriton].push_back(fParTrP2);
  398. } else xint = PMIN;
  399. TF1* fParTrBB = new TF1("fParTrBB",this,&MpdPid::parTrBB,xint,PMAX,10,"MpdPid","parTrBB");
  400. fBB[MpdPidUtils::kTriton].push_back(fParTrBB);
  401. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fBB[MpdPidUtils::kTriton]) );
  402. /// Double charged have p_reco= p_MC/2
  403. if ( fTrackingState == MpdPidUtils::kCF ) {
  404. xint = 0.55;
  405. TF1* fParHe3P1 = new TF1("fParHe3P1","pol1(0)",PMIN,0.24);
  406. fBB[MpdPidUtils::kHe3].push_back(fParHe3P1);
  407. TF1* fParHe3P2 = new TF1("fParHe3P2","pol1(0)",0.24,0.325);
  408. fBB[MpdPidUtils::kHe3].push_back(fParHe3P2);
  409. TF1* fParHe3P3 = new TF1("fParHe3P3","pol1(0)",0.325,xint);
  410. fBB[MpdPidUtils::kHe3].push_back(fParHe3P3);
  411. } else xint = PMIN;
  412. PMAX = fTrackingState == MpdPidUtils::kCFHM ? 2.1 : 5.0;
  413. TF1* fParHe3BB = new TF1("fParHe3BB",this,&MpdPid::parHe3BB,xint,PMAX,8,"MpdPid","parHe3BB");
  414. fBB[MpdPidUtils::kHe3].push_back(fParHe3BB);
  415. PMAX = 5.0;
  416. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  417. TF1* fParHe3P4 = new TF1("fParHe3P4","[0]",2.1,PMAX);
  418. fBB[MpdPidUtils::kHe3].push_back(fParHe3P4);
  419. }
  420. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fBB[MpdPidUtils::kHe3]) );
  421. if ( fTrackingState == MpdPidUtils::kCF ) {
  422. xint = 0.5;
  423. TF1* fParHe4P1 = new TF1("fParHe4P1","pol1(0)",PMIN,0.32);
  424. fBB[MpdPidUtils::kHe4].push_back(fParHe4P1);
  425. TF1* fParHe4P2 = new TF1("fParHe4P2","pol1(0)",0.32,xint);
  426. fBB[MpdPidUtils::kHe4].push_back(fParHe4P2);
  427. } else xint = PMIN;
  428. TF1* fParHe4BB = new TF1("fParHe4BB",this,&MpdPid::parHe4BB,xint,PMAX,8,"MpdPid","parHe4BB");
  429. fBB[MpdPidUtils::kHe4].push_back(fParHe4BB);
  430. fdEdxBBMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fBB[MpdPidUtils::kHe4]) );
  431. ///
  432. /// Width of mass-squared versus total p
  433. ///
  434. TF1* fParElM2 = new TF1("fParElM2","pol2(0)",PMIN,PMAX);
  435. fm2[MpdPidUtils::kElectron].push_back(fParElM2);
  436. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fm2[MpdPidUtils::kElectron] ));
  437. TF1* fParMuM2 = new TF1("fParMuM2","pol2(0)",PMIN,PMAX);
  438. fm2[MpdPidUtils::kMuon].push_back(fParMuM2);
  439. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fm2[MpdPidUtils::kMuon] ));
  440. xint = fTrackingState != MpdPidUtils::kCFHM ? 1.4 : 0.650314;
  441. TF1* fParPiM2P1 = new TF1("fParPiM2P1","pol2(0)",PMIN,xint);
  442. fm2[MpdPidUtils::kPion].push_back(fParPiM2P1);
  443. TF1* fParPiM2P2 = new TF1("fParPiM2P2","pol2(0)",xint,PMAX);
  444. fm2[MpdPidUtils::kPion].push_back(fParPiM2P2);
  445. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fm2[MpdPidUtils::kPion] ));
  446. if ( fTrackingState != MpdPidUtils::kCFHM ) {
  447. TF1* fParKaM2P1 = new TF1("fParKaM2P1","pol2(0)",PMIN,PMAX);
  448. fm2[MpdPidUtils::kKaon].push_back(fParKaM2P1);
  449. } else {
  450. TF1* fParKaM2P1 = new TF1("fParKaM2P1","pol2(0)",PMIN,0.705661);
  451. fm2[MpdPidUtils::kKaon].push_back(fParKaM2P1);
  452. TF1* fParKaM2P2 = new TF1("fParKaM2P2","pol2(0)",0.705661,PMAX);
  453. fm2[MpdPidUtils::kKaon].push_back(fParKaM2P2);
  454. }
  455. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fm2[MpdPidUtils::kKaon] ));
  456. xint = fTrackingState != MpdPidUtils::kCFHM ? 1.4 : 0.930546;
  457. sFunc = fTrackingState != MpdPidUtils::kCFHM ? "pol3(0)" : "pol2(0)";
  458. TF1* fParPrM2P1 = new TF1("fParPrM2P1",sFunc,PMIN,xint);
  459. fm2[MpdPidUtils::kProton].push_back(fParPrM2P1);
  460. TF1* fParPrM2P2 = new TF1("fParPrM2P2","pol2(0)",xint,PMAX);
  461. fm2[MpdPidUtils::kProton].push_back(fParPrM2P2);
  462. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fm2[MpdPidUtils::kProton] ));
  463. sFunc = fTrackingState != MpdPidUtils::kCFHM ? "pol3(0)" : "pol2(0)";
  464. TF1* fParDeM2 = new TF1("fParDeM2",sFunc,PMIN,PMAX);
  465. fm2[MpdPidUtils::kDeuteron].push_back(fParDeM2);
  466. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fm2[MpdPidUtils::kDeuteron] ));
  467. sFunc = fTrackingState == MpdPidUtils::kHP ? "pol3(0)" : "pol2(0)";
  468. TF1* fParTrM2 = new TF1("fParTrM2",sFunc,PMIN,PMAX);
  469. fm2[MpdPidUtils::kTriton].push_back(fParTrM2);
  470. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fm2[MpdPidUtils::kTriton] ));
  471. sFunc = fTrackingState != MpdPidUtils::kCFHM ? "[0]" : "pol2(0)";
  472. TF1* fParHe3M2 = new TF1("fParHe3M2",sFunc,PMIN,PMAX);
  473. fm2[MpdPidUtils::kHe3].push_back(fParHe3M2);
  474. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fm2[MpdPidUtils::kHe3] ));
  475. sFunc = fTrackingState != MpdPidUtils::kCFHM ? "[0]" : "pol3(0)";
  476. TF1* fParHe4M2 = new TF1("fParHe4M2",sFunc,PMIN,PMAX);
  477. fm2[MpdPidUtils::kHe4].push_back(fParHe4M2);
  478. fParM2Map.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fm2[MpdPidUtils::kHe4] ));
  479. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator it;
  480. if ( fTrackingState == MpdPidUtils::kHP ) {
  481. /// dE/dx Bethe-Bloch
  482. it = fdEdxBBMap.find(MpdPidUtils::kElectron);
  483. it->second[0]->SetParameters( fCoef*(-8.27289e-09),fCoef*2.10438e-06 );
  484. it = fdEdxBBMap.find(MpdPidUtils::kMuon);
  485. it->second[0]->SetParameters( fCoef*2.56183e-06,2.7034,2.52734,0.854563,0.330576 );
  486. it = fdEdxBBMap.find(MpdPidUtils::kPion);
  487. it->second[0]->SetParameters( fCoef*(-1.19342e-07),-7.83114,8.17749,1.85775,-1.80695 );
  488. it = fdEdxBBMap.find(MpdPidUtils::kKaon);
  489. it->second[0]->SetParameters( fCoef*6.50167e-07,1.01718,-0.795357,1.80916,0.0707667,fCoef*6.50167e-07,1.01718,-0.795357,1.80916,0.0707667 );
  490. it = fdEdxBBMap.find(MpdPidUtils::kProton);
  491. it->second[0]->SetParameters( fCoef*4.40008e-07,2.97563,-0.192657,2.16118,0.61451,fCoef*4.40008e-07,2.97563,-0.192657,2.16118,0.61451 );
  492. it = fdEdxBBMap.find(MpdPidUtils::kDeuteron);
  493. it->second[0]->SetParameters( fCoef*3.27e-07,3.74,-0.23,2.32,0.987,fCoef*3.27e-07,3.74,-0.23,2.32,0.987 );
  494. it = fdEdxBBMap.find(MpdPidUtils::kTriton);
  495. it->second[0]->SetParameters( fCoef*2.59e-07,5.06,0.0001,2.2,1.056,fCoef*2.59e-07,5.06,0.0001,2.2,1.056 );
  496. it = fdEdxBBMap.find(MpdPidUtils::kHe3);
  497. it->second[0]->SetParameters( fCoef*2.86201e-06,2.10168,2.74807e-01,1.86774,fCoef*2.86201e-06,2.10168,2.74807e-01,1.86774 );
  498. it = fdEdxBBMap.find(MpdPidUtils::kHe4);
  499. it->second[0]->SetParameters( fCoef*2.96e-06,2.085,0.256,1.85,fCoef*2.96e-06,2.085,0.256,1.85 );
  500. /// Width of m^2
  501. it = fParM2Map.find(MpdPidUtils::kElectron);
  502. it->second[0]->SetParameters( 0.00102552,-0.000243946,0.0307395 );
  503. it = fParM2Map.find(MpdPidUtils::kMuon);
  504. it->second[0]->SetParameters( 0.00155957,-0.000984273,0.0306857 );
  505. it = fParM2Map.find(MpdPidUtils::kPion);
  506. it->second[0]->SetParameters( 0.00259115, -0.00251021, 0.0287287 );
  507. it->second[1]->SetParameters( -0.0393955, 0.0586315, 0.00516675 );
  508. it = fParM2Map.find(MpdPidUtils::kKaon);
  509. it->second[0]->SetParameters( 0.00144014, 0.0183536, 0.0161613 );
  510. it = fParM2Map.find(MpdPidUtils::kProton);
  511. it->second[0]->SetParameters( 0.0777042, -0.123828, 0.139278, -0.0338542 );
  512. it->second[1]->SetParameters( 0.0244298, 0.018534, 0.0174998 );
  513. it = fParM2Map.find(MpdPidUtils::kDeuteron);
  514. it->second[0]->SetParameters( 0.535691,-0.529882,0.293807,-0.0428139 );
  515. it = fParM2Map.find(MpdPidUtils::kTriton);
  516. it->second[0]->SetParameters( 0.422,0.3,-0.202,0.0524 );
  517. it = fParM2Map.find(MpdPidUtils::kHe3);
  518. it->second[0]->SetParameter( 0, 0.17 );
  519. it = fParM2Map.find(MpdPidUtils::kHe4);
  520. it->second[0]->SetParameter( 0, 0.3 );
  521. const Double_t kSigmaDedx[3] = { 0.05, 0.11, 0.08 }; ///< constant values of dE/dx width (Hit Producer Tracking)
  522. /// Width of dE/dx
  523. TF1* fEnLossSigmaEl = new TF1("fEnLossSigmaEl", "[0]", PMIN, PMAX); fEnLossSigmaEl->SetParameter(0, kSigmaDedx[2]);
  524. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaEl);
  525. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fSigDedx[MpdPidUtils::kElectron] ));
  526. TF1* fEnLossSigmaMuP1 = new TF1("fEnLossSigmaMuP1", "[0]", PMIN, 0.15); fEnLossSigmaMuP1->SetParameter(0, kSigmaDedx[1]);
  527. TF1* fEnLossSigmaMuP2 = new TF1("fEnLossSigmaMuP2", "[0]", 0.15, PMAX); fEnLossSigmaMuP2->SetParameter(0, kSigmaDedx[0]);
  528. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP1);
  529. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP2);
  530. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fSigDedx[MpdPidUtils::kMuon] ));
  531. TF1* fEnLossSigmaPiP1 = new TF1("fEnLossSigmaPiP1", "[0]", PMIN, 0.15); fEnLossSigmaPiP1->SetParameter(0, kSigmaDedx[1]);
  532. TF1* fEnLossSigmaPiP2 = new TF1("fEnLossSigmaPiP2", "[0]", 0.15, PMAX); fEnLossSigmaPiP2->SetParameter(0, kSigmaDedx[0]);
  533. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP1);
  534. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP2);
  535. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fSigDedx[MpdPidUtils::kPion] ));
  536. TF1* fEnLossSigmaKaP1 = new TF1("fEnLossSigmaKaP1", "[0]", PMIN, 0.15); fEnLossSigmaKaP1->SetParameter(0, kSigmaDedx[1]);
  537. TF1* fEnLossSigmaKaP2 = new TF1("fEnLossSigmaKaP2", "[0]", 0.15, PMAX); fEnLossSigmaKaP2->SetParameter(0, kSigmaDedx[0]);
  538. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP1);
  539. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP2);
  540. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fSigDedx[MpdPidUtils::kKaon] ));
  541. TF1* fEnLossSigmaPrP1 = new TF1("fEnLossSigmaPrP1", "[0]", PMIN, 0.15); fEnLossSigmaPrP1->SetParameter(0, kSigmaDedx[1]);
  542. TF1* fEnLossSigmaPrP2 = new TF1("fEnLossSigmaPrP2", "[0]", 0.15, PMAX); fEnLossSigmaPrP2->SetParameter(0, kSigmaDedx[0]);
  543. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP1);
  544. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP2);
  545. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fSigDedx[MpdPidUtils::kProton] ));
  546. TF1* fEnLossSigmaDeP1 = new TF1("fEnLossSigmaDeP1", "[0]", PMIN, 0.45); fEnLossSigmaDeP1->SetParameter(0, kSigmaDedx[1]);
  547. TF1* fEnLossSigmaDeP2 = new TF1("fEnLossSigmaDeP2", "[0]", 0.45, PMAX); fEnLossSigmaDeP2->SetParameter(0, kSigmaDedx[0]);
  548. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP1);
  549. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP2);
  550. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fSigDedx[MpdPidUtils::kDeuteron] ));
  551. TF1* fEnLossSigmaTrP1 = new TF1("fEnLossSigmaTrP1", "[0]", PMIN, 0.45); fEnLossSigmaTrP1->SetParameter(0, kSigmaDedx[1]);
  552. TF1* fEnLossSigmaTrP2 = new TF1("fEnLossSigmaTrP2", "[0]", 0.45, PMAX); fEnLossSigmaTrP2->SetParameter(0, kSigmaDedx[0]);
  553. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP1);
  554. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP2);
  555. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fSigDedx[MpdPidUtils::kTriton] ));
  556. TF1* fEnLossSigmaHe3P1 = new TF1("fEnLossSigmaHe3P1", "[0]", PMIN, 0.45); fEnLossSigmaHe3P1->SetParameter(0, kSigmaDedx[1]);
  557. TF1* fEnLossSigmaHe3P2 = new TF1("fEnLossSigmaHe3P2", "[0]", 0.45, PMAX); fEnLossSigmaHe3P2->SetParameter(0, kSigmaDedx[0]);
  558. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P1);
  559. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P2);
  560. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fSigDedx[MpdPidUtils::kHe3] ));
  561. TF1* fEnLossSigmaHe4P1 = new TF1("fEnLossSigmaHe4P1", "[0]", PMIN, PMAX); fEnLossSigmaHe4P1->SetParameter(0, kSigmaDedx[1]);
  562. TF1* fEnLossSigmaHe4P2 = new TF1("fEnLossSigmaHe4P2", "[0]", PMIN, PMAX); fEnLossSigmaHe4P2->SetParameter(0, kSigmaDedx[0]);
  563. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P1);
  564. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P2);
  565. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fSigDedx[MpdPidUtils::kHe4] ));
  566. /// Asymmetry parameter of dE/dx
  567. TF1* fAsymElP1 = new TF1("fAsymElP1", "pol1(0)", PMIN, 0.5); fAsymElP1->SetParameters(0.456871, -0.0424708);
  568. TF1* fAsymElP2 = new TF1("fAsymElP2", "pol1(0)", 0.5, 0.85); fAsymElP2->SetParameters(0.4418036, -0.0131662);
  569. TF1* fAsymElP3 = new TF1("fAsymElP3", "pol1(0)", 0.85, 3.0); fAsymElP3->SetParameters(0.440012, -0.0113746);
  570. TF1* fAsymElP4 = new TF1("fAsymElP4", "[0]", 3.0, PMAX); fAsymElP4->SetParameter(0, fAsymElP3->Eval(3.0));
  571. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP1);
  572. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP2);
  573. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP3);
  574. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP4);
  575. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fAsymDedx[MpdPidUtils::kElectron] ));
  576. TF1* fAsymMuP1 = new TF1("fAsymMuP1", "pol1(0)", PMIN, 0.175); fAsymMuP1->SetParameters(12.138, -66.6292);
  577. TF1* fAsymMuP2 = new TF1("fAsymMuP2", "pol1(0)", 0.175, 0.65); fAsymMuP2->SetParameters(0.31412, 0.158834);
  578. TF1* fAsymMuP3 = new TF1("fAsymMuP3", "pol1(0)", 0.65, 3.0); fAsymMuP3->SetParameters(0.409629, -0.0234975);
  579. TF1* fAsymMuP4 = new TF1("fAsymMuP4", "[0]", 3.0, PMAX); fAsymMuP4->SetParameter(0, fAsymMuP3->Eval(3.0));
  580. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP1);
  581. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP2);
  582. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP3);
  583. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP4);
  584. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fAsymDedx[MpdPidUtils::kMuon] ));
  585. TF1* fAsymPiP1 = new TF1("fAsymPiP1", "pol1(0)", PMIN, 0.18); fAsymPiP1->SetParameters(11.3953, -58.1321);
  586. TF1* fAsymPiP2 = new TF1("fAsymPiP2", "pol1(0)", 0.18, 0.9); fAsymPiP2->SetParameters(0.412467, -0.0289088);
  587. TF1* fAsymPiP3 = new TF1("fAsymPiP3", "pol1(0)", 0.9, 3.0); fAsymPiP3->SetParameters(0.408242, -0.0520603);
  588. TF1* fAsymPiP4 = new TF1("fAsymPiP4", "[0]", 3.0, PMAX); fAsymPiP4->SetParameter(0, fAsymPiP3->Eval(3.0));
  589. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP1);
  590. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP2);
  591. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP3);
  592. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP4);
  593. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fAsymDedx[MpdPidUtils::kPion] ));
  594. TF1* fAsymKaP1 = new TF1("fAsymKaP1", "pol1(0)", PMIN, 0.45); fAsymKaP1->SetParameters(3.21698, -6.37965);
  595. TF1* fAsymKaP2 = new TF1("fAsymKaP2", "pol1(0)", 0.45, 1.05); fAsymKaP2->SetParameters(0.237053, 0.143231);
  596. TF1* fAsymKaP3 = new TF1("fAsymKaP3", "pol1(0)", 1.05, 3.0); fAsymKaP3->SetParameters(0.252239, 0.0558685);
  597. TF1* fAsymKaP4 = new TF1("fAsymKaP4", "[0]", 3.0, PMAX); fAsymKaP4->SetParameter(0, fAsymKaP3->Eval(3.0));
  598. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP1);
  599. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP2);
  600. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP3);
  601. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP4);
  602. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fAsymDedx[MpdPidUtils::kKaon] ));
  603. TF1* fAsymPrP1 = new TF1("fAsymPrP1", "pol1(0)", PMIN, 0.3); fAsymPrP1->SetParameters(6.40228, -19.5847);
  604. TF1* fAsymPrP2 = new TF1("fAsymPrP2", "pol1(0)", 0.3, 1.0); fAsymPrP2->SetParameters(0.193311, 0.179621);
  605. TF1* fAsymPrP3 = new TF1("fAsymPrP3", "pol1(0)", 1.0, 3.0); fAsymPrP3->SetParameters(0.21947, 0.0936557);
  606. TF1* fAsymPrP4 = new TF1("fAsymPrP4", "[0]", 3.0, PMAX); fAsymPrP4->SetParameter(0, fAsymPrP3->Eval(3.0));
  607. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP1);
  608. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP2);
  609. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP3);
  610. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP4);
  611. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fAsymDedx[MpdPidUtils::kProton] ));
  612. } else if ( fTrackingState == MpdPidUtils::kCF ) {
  613. /// dE/dx Bethe-Bloch
  614. it = fdEdxBBMap.find(MpdPidUtils::kElectron);
  615. it->second[0]->SetParameters( fCoef*(-65.7432),fCoef*4007.68 );
  616. it = fdEdxBBMap.find(MpdPidUtils::kMuon);
  617. it->second[0]->SetParameters( fCoef*(-54.6053),-41.38,109.594,1.30576,-4.66578 );
  618. it = fdEdxBBMap.find(MpdPidUtils::kPion);
  619. it->second[0]->SetParameters( fCoef*(-345.254),-4.65898,3.41161,1.88069,-1.20667 );
  620. it = fdEdxBBMap.find(MpdPidUtils::kKaon);
  621. it->second[0]->SetParameters( fCoef*(-665.977),-4.10879,0.393422,1.01384,4.12062,fCoef*(-665.977),-4.10879,0.393422,1.01384,4.12062 );
  622. it = fdEdxBBMap.find(MpdPidUtils::kProton);
  623. it->second[0]->SetParameters( fCoef*(-6140.11),0.8323,2.03597,1.34309,0.746625,fCoef*(-6140.11),0.8323,2.03597,1.34309,0.746625 );
  624. it = fdEdxBBMap.find(MpdPidUtils::kDeuteron);
  625. it->second[0]->SetParameters( fCoef*(112.e+04),fCoef*(-4466.666e+03) );
  626. it->second[1]->SetParameters( fCoef*(215507.),fCoef*(-474223.) );
  627. it->second[2]->SetParameters( fCoef*(-3591.57),0.656424,1.61966,0.585121,2.70803,fCoef*(-3591.57),0.656424,1.61966,0.585121,2.70803 );
  628. it = fdEdxBBMap.find(MpdPidUtils::kTriton);
  629. it->second[0]->SetParameters( fCoef*(1.094542e+06),fCoef*(-1.81963e+06) );
  630. it->second[1]->SetParameters( fCoef*(226703.),fCoef*(-362129.) );
  631. it->second[2]->SetParameters( fCoef*(-6467.59),1.83428,3.94612,0.0819389,3.2898,fCoef*(-6467.59),1.83428,3.94612,0.0819389,3.2898 );
  632. it = fdEdxBBMap.find(MpdPidUtils::kHe3);
  633. it->second[0]->SetParameters( fCoef*(3.09e+06),fCoef*(-10.833333e+06) );
  634. it->second[1]->SetParameters( fCoef*(1.403646e+06),fCoef*(-3.806859e+06) );
  635. it->second[2]->SetParameters( fCoef*(333495.),fCoef*(-514085.) );
  636. it->second[3]->SetParameters( fCoef*(-19120.8),-0.183431,0.323092,2.41984,fCoef*(-19120.8),-0.183431,0.323092,2.41984 );
  637. it = fdEdxBBMap.find(MpdPidUtils::kHe4);
  638. it->second[0]->SetParameters( fCoef*(3.243636e+06),fCoef*(-8.636364e+06) );
  639. it->second[1]->SetParameters( fCoef*(1.100082e+06),fCoef*(-1.937756e+06) );
  640. it->second[1]->SetParameters( fCoef*(-16150.2),-0.0645649,-0.0213786,3.61265,fCoef*(-16150.2),-0.0645649,-0.0213786,3.61265 );
  641. /// m2
  642. it = fParM2Map.find(MpdPidUtils::kElectron);
  643. it->second[0]->SetParameters( 0.001227,-0.000973509,0.0314155 );
  644. it = fParM2Map.find(MpdPidUtils::kMuon);
  645. it->second[0]->SetParameters( 0.00166279,-0.00131341,0.0311028 );
  646. it = fParM2Map.find(MpdPidUtils::kPion);
  647. it->second[0]->SetParameters( 0.00284751, -0.00311967, 0.0238384 );
  648. it->second[1]->SetParameters( -0.0139431, 0.0254295, 0.0111476 );
  649. it = fParM2Map.find(MpdPidUtils::kKaon);
  650. it->second[0]->SetParameters( 0.00520284, 0.0092726, 0.0177252 );
  651. it = fParM2Map.find(MpdPidUtils::kProton);
  652. it->second[0]->SetParameters( 0.0873237, -0.127771, 0.130356, -0.0290419 );
  653. it->second[1]->SetParameters( 0.00606334, 0.040014, 0.0113814 );
  654. it = fParM2Map.find(MpdPidUtils::kDeuteron);
  655. it->second[0]->SetParameters( 0.417362, -0.399356, 0.24154, -0.0339673 );
  656. it = fParM2Map.find(MpdPidUtils::kTriton);
  657. it->second[0]->SetParameters( 1.03599,-0.663541,0.199024 );
  658. it = fParM2Map.find(MpdPidUtils::kHe3);
  659. it->second[0]->SetParameter( 0, 0.13 );
  660. it = fParM2Map.find(MpdPidUtils::kHe4);
  661. it->second[0]->SetParameter( 0, 0.24 );
  662. /// dE/dx width
  663. TF1* fEnLossSigmaElP1 = new TF1("fEnLossSigmaElP1", "pol1(0)", PMIN, 0.55); fEnLossSigmaElP1->SetParameters(0.0747217, -0.0308101);
  664. TF1* fEnLossSigmaElP2 = new TF1("fEnLossSigmaElP2", "pol1(0)", 0.55, 2.0); fEnLossSigmaElP2->SetParameters(0.0653074, -0.00546004);
  665. TF1* fEnLossSigmaElP3 = new TF1("fEnLossSigmaElP3", "pol1(0)", 2.0, 3.0); fEnLossSigmaElP3->SetParameters(0.0572145, -0.00104922);
  666. TF1* fEnLossSigmaElP4 = new TF1("fEnLossSigmaElP4", "[0]", 3.0, PMAX); fEnLossSigmaElP4->SetParameter(0, fEnLossSigmaElP3->Eval(3.0));
  667. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaElP1);
  668. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaElP2);
  669. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaElP3);
  670. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaElP4);
  671. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fSigDedx[MpdPidUtils::kElectron] ));
  672. TF1* fEnLossSigmaMuP1 = new TF1("fEnLossSigmaMuP1", "pol1(0)", PMIN, 0.3); fEnLossSigmaMuP1->SetParameters(0.115611, -0.179933);
  673. TF1* fEnLossSigmaMuP2 = new TF1("fEnLossSigmaMuP2", "pol1(0)", 0.3, 1.05); fEnLossSigmaMuP2->SetParameters(0.0583018, 0.00140717);
  674. TF1* fEnLossSigmaMuP3 = new TF1("fEnLossSigmaMuP3", "pol1(0)", 1.05, 3.0); fEnLossSigmaMuP3->SetParameters(0.0570477, -8.02801e-05);
  675. TF1* fEnLossSigmaMuP4 = new TF1("fEnLossSigmaMuP4", "[0]", 3.0, PMAX); fEnLossSigmaMuP4->SetParameter(0, fEnLossSigmaMuP3->Eval(3.0));
  676. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP1);
  677. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP2);
  678. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP3);
  679. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP4);
  680. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fSigDedx[MpdPidUtils::kMuon] ));
  681. TF1* fEnLossSigmaPiP1 = new TF1("fEnLossSigmaPiP1", "pol1(0)", PMIN, 0.319058); fEnLossSigmaPiP1->SetParameters(0.103709,-0.142807);
  682. TF1* fEnLossSigmaPiP2 = new TF1("fEnLossSigmaPiP2", "pol1(0)", 0.319058, 1.41097); fEnLossSigmaPiP2->SetParameters(0.0568649,0.0040131);
  683. TF1* fEnLossSigmaPiP3 = new TF1("fEnLossSigmaPiP3", "pol1(0)", 1.41097, 1.6955); fEnLossSigmaPiP3->SetParameters(0.0606278,0.00134621);
  684. TF1* fEnLossSigmaPiP4 = new TF1("fEnLossSigmaPiP4", "pol1(0)", 1.6855, 3.0); fEnLossSigmaPiP4->SetParameters(0.0527141,0.00604137);
  685. TF1* fEnLossSigmaPiP5 = new TF1("fEnLossSigmaPiP5", "[0]", 3.0, PMAX); fEnLossSigmaPiP5->SetParameter(0, fEnLossSigmaPiP4->Eval(3.0));
  686. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP1);
  687. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP2);
  688. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP3);
  689. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP4);
  690. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP5);
  691. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fSigDedx[MpdPidUtils::kPion] ));
  692. TF1* fEnLossSigmaKaP1 = new TF1("fEnLossSigmaKaP1", "pol1(0)", PMIN, 0.202208); fEnLossSigmaKaP1->SetParameters(0.122114, -0.299878);
  693. TF1* fEnLossSigmaKaP2 = new TF1("fEnLossSigmaKaP2", "pol1(0)", 0.202208, 3.0); fEnLossSigmaKaP2->SetParameters(0.0614433, 0.000163801);
  694. TF1* fEnLossSigmaKaP3 = new TF1("fEnLossSigmaKaP3", "[0]", 3.0, PMAX); fEnLossSigmaKaP3->SetParameter(0, fEnLossSigmaKaP2->Eval(3.0));
  695. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP1);
  696. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP2);
  697. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP3);
  698. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fSigDedx[MpdPidUtils::kKaon] ));
  699. TF1* fEnLossSigmaPrP1 = new TF1("fEnLossSigmaPrP1", "pol1(0)", PMIN, 0.5); fEnLossSigmaPrP1->SetParameters(0.134444, -0.148889);
  700. TF1* fEnLossSigmaPrP2 = new TF1("fEnLossSigmaPrP2", "pol1(0)", 0.5, 3.0); fEnLossSigmaPrP2->SetParameters(0.0623534, -0.00287991);
  701. TF1* fEnLossSigmaPrP3 = new TF1("fEnLossSigmaPrP3", "[0]", 3.0, PMAX); fEnLossSigmaPrP3->SetParameter(0, fEnLossSigmaPrP2->Eval(3.0));
  702. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP1);
  703. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP2);
  704. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP3);
  705. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fSigDedx[MpdPidUtils::kProton] ));
  706. TF1* fEnLossSigmaDeP1 = new TF1("fEnLossSigmaDeP1", "pol1(0)", 0.6, 1.025); fEnLossSigmaDeP1->SetParameters(0.158871, -0.0961071);
  707. TF1* fEnLossSigmaDeP2 = new TF1("fEnLossSigmaDeP2", "pol1(0)", 1.025, 3.0); fEnLossSigmaDeP2->SetParameters(0.054097, 0.00610817);
  708. TF1* fEnLossSigmaDeP3 = new TF1("fEnLossSigmaDeP3", "[0]", 3.0, PMAX); fEnLossSigmaDeP3->SetParameter(0, fEnLossSigmaDeP2->Eval(3.0));
  709. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP1);
  710. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP2);
  711. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP3);
  712. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fSigDedx[MpdPidUtils::kDeuteron] ));
  713. TF1* fEnLossSigmaTrP1 = new TF1("fEnLossSigmaTrP1", "pol1(0)", PMIN, 0.625); fEnLossSigmaTrP1->SetParameters(0.50625, -0.65);
  714. TF1* fEnLossSigmaTrP2 = new TF1("fEnLossSigmaTrP2", "pol1(0)", 0.625, 1.5); fEnLossSigmaTrP2->SetParameters(0.137969, -0.05625);
  715. TF1* fEnLossSigmaTrP3 = new TF1("fEnLossSigmaTrP3", "pol1(0)", 1.5, 3.0); fEnLossSigmaTrP3->SetParameters(0.0510345, 0.0039953);
  716. TF1* fEnLossSigmaTrP4 = new TF1("fEnLossSigmaTrP4", "[0]", 3.0, PMAX); fEnLossSigmaTrP4->SetParameter(0, fEnLossSigmaTrP3->Eval(3.0));
  717. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP1);
  718. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP2);
  719. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP3);
  720. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP4);
  721. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fSigDedx[MpdPidUtils::kTriton] ));
  722. TF1* fEnLossSigmaHe3P1 = new TF1("fEnLossSigmaHe3P1", "pol1(0)", PMIN, 0.675); fEnLossSigmaHe3P1->SetParameters(0.44225, -0.47);
  723. TF1* fEnLossSigmaHe3P2 = new TF1("fEnLossSigmaHe3P2", "pol1(0)", 0.675, 1.475); fEnLossSigmaHe3P2->SetParameters(0.17984375, -0.08125);
  724. TF1* fEnLossSigmaHe3P3 = new TF1("fEnLossSigmaHe3P3", "pol1(0)", 1.475, 1.6); fEnLossSigmaHe3P3->SetParameters(-0.261818, 0.21818);
  725. TF1* fEnLossSigmaHe3P4 = new TF1("fEnLossSigmaHe3P4", "[0]", 1.6, PMAX); fEnLossSigmaHe3P4->SetParameter(0, fEnLossSigmaHe3P3->Eval(1.6));
  726. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P1);
  727. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P2);
  728. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P3);
  729. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P4);
  730. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fSigDedx[MpdPidUtils::kHe3] ));
  731. TF1* fEnLossSigmaHe4P1 = new TF1("fEnLossSigmaHe4P1", "pol1(0)", PMIN, 0.475); fEnLossSigmaHe4P1->SetParameters(0.37188, -0.225);
  732. TF1* fEnLossSigmaHe4P2 = new TF1("fEnLossSigmaHe4P2", "pol1(0)", 0.475, 0.7); fEnLossSigmaHe4P2->SetParameters(0.19375, 0.15);
  733. TF1* fEnLossSigmaHe4P3 = new TF1("fEnLossSigmaHe4P3", "pol1(0)", 0.7, 0.925); fEnLossSigmaHe4P3->SetParameters(0.72231, -0.6025);
  734. TF1* fEnLossSigmaHe4P4 = new TF1("fEnLossSigmaHe4P4", "pol1(0)", 0.925, 1.6); fEnLossSigmaHe4P4->SetParameters(0.32477, -0.17273);
  735. TF1* fEnLossSigmaHe4P5 = new TF1("fEnLossSigmaHe4P5", "[0]", 1.6, PMAX); fEnLossSigmaHe4P5->SetParameter(0, fEnLossSigmaHe4P4->Eval(1.6));
  736. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P1);
  737. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P2);
  738. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P3);
  739. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P4);
  740. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P5);
  741. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fSigDedx[MpdPidUtils::kHe4] ));
  742. /// Asymmetry parameter of dE/dx
  743. TF1* fAsymElP1 = new TF1("fAsymElP1", "pol1(0)", PMIN, 0.5); fAsymElP1->SetParameters(-0.340074, 1.04407);
  744. TF1* fAsymElP2 = new TF1("fAsymElP2", "pol1(0)", 0.5, 0.85); fAsymElP2->SetParameters(0.291559, -0.306138);
  745. TF1* fAsymElP3 = new TF1("fAsymElP3", "pol1(0)", 0.85, 3.0); fAsymElP3->SetParameters(0.0915437, 0.0467649);
  746. TF1* fAsymElP4 = new TF1("fAsymElP4", "[0]", 3.0, PMAX); fAsymElP4->SetParameter(0, fAsymElP3->Eval(3.0));
  747. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP1);
  748. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP2);
  749. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP3);
  750. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP4);
  751. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fAsymDedx[MpdPidUtils::kElectron] ));
  752. TF1* fAsymMuP1 = new TF1("fAsymMuP1", "pol1(0)", PMIN, 0.125); fAsymMuP1->SetParameters(2.5656, -14.391);
  753. TF1* fAsymMuP2 = new TF1("fAsymMuP2", "pol1(0)", 0.125, 0.5); fAsymMuP2->SetParameters(-0.0467746, 0.496758);
  754. TF1* fAsymMuP3 = new TF1("fAsymMuP3", "pol1(0)", 0.5, 3.0); fAsymMuP3->SetParameters(0.196422, 0.0117276);
  755. TF1* fAsymMuP4 = new TF1("fAsymMuP4", "[0]", 3.0, PMAX); fAsymMuP4->SetParameter(0, fAsymMuP3->Eval(3.0));
  756. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP1);
  757. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP2);
  758. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP3);
  759. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP4);
  760. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fAsymDedx[MpdPidUtils::kMuon] ));
  761. TF1* fAsymPiP1 = new TF1("fAsymPiP1", "pol1(0)", PMIN, 0.1841); fAsymPiP1->SetParameters(4.51001, -23.116);
  762. TF1* fAsymPiP2 = new TF1("fAsymPiP2", "pol1(0)", 0.1841, 0.6); fAsymPiP2->SetParameters(0.206221, 0.103783);
  763. TF1* fAsymPiP3 = new TF1("fAsymPiP3", "pol1(0)", 0.6, 3.0); fAsymPiP3->SetParameters(0.204105, 0.0544095);
  764. TF1* fAsymPiP4 = new TF1("fAsymPiP4", "[0]", 3.0, PMAX); fAsymPiP4->SetParameter(0, fAsymPiP3->Eval(3.0));
  765. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP1);
  766. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP2);
  767. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP3);
  768. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP4);
  769. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fAsymDedx[MpdPidUtils::kPion] ));
  770. TF1* fAsymKaP1 = new TF1("fAsymKaP1", "pol1(0)", PMIN, 0.5); fAsymKaP1->SetParameters(2.3588, -4.87114);
  771. TF1* fAsymKaP2 = new TF1("fAsymKaP2", "pol1(0)", 0.5, 1.05); fAsymKaP2->SetParameters(0.00526557, 0.239378);
  772. TF1* fAsymKaP3 = new TF1("fAsymKaP3", "pol1(0)", 1.05, 3.0); fAsymKaP3->SetParameters(0.0892569, 0.119403);
  773. TF1* fAsymKaP4 = new TF1("fAsymKaP4", "[0]", 3.0, PMAX); fAsymKaP4->SetParameter(0, fAsymKaP3->Eval(3.0));
  774. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP1);
  775. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP2);
  776. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP3);
  777. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP4);
  778. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fAsymDedx[MpdPidUtils::kKaon] ));
  779. TF1* fAsymPrP1 = new TF1("fAsymPrP1", "pol1(0)", PMIN, 0.25); fAsymPrP1->SetParameters(1.68519, -2.75816);
  780. TF1* fAsymPrP2 = new TF1("fAsymPrP2", "pol1(0)", 0.25, 0.5); fAsymPrP2->SetParameters(1.68519, -2.75816);
  781. TF1* fAsymPrP3 = new TF1("fAsymPrP3", "pol1(0)", 0.5, 3.0); fAsymPrP3->SetParameters(-0.0761382, 0.186669);
  782. TF1* fAsymPrP4 = new TF1("fAsymPrP4", "[0]", 3.0, PMAX); fAsymPrP4->SetParameter(0, fAsymPrP3->Eval(3.0));
  783. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP1);
  784. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP2);
  785. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP3);
  786. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP4);
  787. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fAsymDedx[MpdPidUtils::kProton] ));
  788. } else {
  789. /// dE/dx Bethe-Bloch
  790. it = fdEdxBBMap.find(MpdPidUtils::kPion);
  791. it->second[0]->SetParameters( fCoef*(6.6409779),-1.1578231,-0.89821579,0.39576895,0.0030161715 );
  792. it = fdEdxBBMap.find(MpdPidUtils::kKaon);
  793. it->second[0]->SetParameters( fCoef*(1.0779842),-1.8890881,-0.96881438,1.7614218,0.0097918706,fCoef*(0.40714716),-1.0797026,-0.98546413,1.8773068,0.0052661566 );
  794. it = fdEdxBBMap.find(MpdPidUtils::kProton);
  795. it->second[0]->SetParameters( fCoef*(10.097455),3.9118115,27.918783,1.0980692,-3.2202531,fCoef*(0.2204469),0.51729011,-0.98983046,2.047551,0.0061174674 );
  796. it->second[1]->SetParameter( 0, fCoef*(1.81344) );
  797. it = fdEdxBBMap.find(MpdPidUtils::kDeuteron);
  798. it->second[0]->SetParameters( fCoef*(21.479608),3.3186673,16.269037,0.890677,-4.2241652,fCoef*(0.20764449),0.48498402,-0.99221832,2.0873096,0.0063239652 );
  799. it = fdEdxBBMap.find(MpdPidUtils::kTriton);
  800. it->second[0]->SetParameters( fCoef*(2.9608171),7.5586606,181.76905,0.94955581,-15.689995,fCoef*(0.43139727),-1.1708504,-0.97933102,2.2046764,0.017628675 );
  801. it = fdEdxBBMap.find(MpdPidUtils::kHe3);
  802. it->second[0]->SetParameters( fCoef*(-32.557409),-0.20640164,1.2041051,1.3280685,fCoef*(-9.0106592),-0.44985727,0.58537297,2.2634325 );
  803. it->second[1]->SetParameter( 0, fCoef*(6.43563) );
  804. it = fdEdxBBMap.find(MpdPidUtils::kHe4);
  805. it->second[0]->SetParameters( fCoef*(-28.632092),-0.33744378,1.7965949,1.1225621,fCoef*(-9.2874351),-0.82028253,1.3750019,1.4904775 );
  806. /// m2
  807. it = fParM2Map.find(MpdPidUtils::kElectron);
  808. it->second[0]->SetParameters( 0.001227,-0.000973509,0.0314155 );
  809. it = fParM2Map.find(MpdPidUtils::kMuon);
  810. it->second[0]->SetParameters( 0.00166279,-0.00131341,0.0311028 );
  811. it = fParM2Map.find(MpdPidUtils::kPion);
  812. it->second[0]->SetParameters( 0.00720016,-0.0221267,0.0440498 );
  813. it->second[1]->SetParameters( -0.00642527,0.0155077,0.0151141 );
  814. it = fParM2Map.find(MpdPidUtils::kKaon);
  815. it->second[0]->SetParameters( 0.022164,-0.0466916,0.0616221 );
  816. it->second[1]->SetParameters( -0.00354366,0.0211465,0.013555 );
  817. it = fParM2Map.find(MpdPidUtils::kProton);
  818. it->second[0]->SetParameters( 0.086827,-0.116522,0.0874504 );
  819. it->second[1]->SetParameters( 0.0240519,0.0166668,0.0158857 );
  820. it = fParM2Map.find(MpdPidUtils::kDeuteron);
  821. it->second[0]->SetParameters( 0.200874, -0.163555, 0.0883628 );
  822. it = fParM2Map.find(MpdPidUtils::kTriton);
  823. it->second[0]->SetParameters( 0.948708,-0.474263,0.151498 );
  824. it = fParM2Map.find(MpdPidUtils::kHe3);
  825. it->second[0]->SetParameters( 0.200874, -0.163555, 0.0883628 );
  826. it = fParM2Map.find(MpdPidUtils::kHe4);
  827. it->second[0]->SetParameters( 0.593194,-0.938302,0.864070,-0.276790 );
  828. /// dE/dx width
  829. TF1* fEnLossSigmaElP1 = new TF1("fEnLossSigmaElP1", "pol1(0)", PMIN, 0.55); fEnLossSigmaElP1->SetParameters(0.0747217, -0.0308101);
  830. TF1* fEnLossSigmaElP2 = new TF1("fEnLossSigmaElP2", "pol1(0)", 0.55, 2.0); fEnLossSigmaElP2->SetParameters(0.0653074, -0.00546004);
  831. TF1* fEnLossSigmaElP3 = new TF1("fEnLossSigmaElP3", "pol1(0)", 2.0, 3.0); fEnLossSigmaElP3->SetParameters(0.0572145, -0.00104922);
  832. TF1* fEnLossSigmaElP4 = new TF1("fEnLossSigmaElP4", "[0]", 3.0, PMAX); fEnLossSigmaElP4->SetParameter(0, fEnLossSigmaElP3->Eval(3.0));
  833. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaElP1);
  834. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaElP2);
  835. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaElP3);
  836. fSigDedx[MpdPidUtils::kElectron].push_back(fEnLossSigmaElP4);
  837. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fSigDedx[MpdPidUtils::kElectron] ));
  838. TF1* fEnLossSigmaMuP1 = new TF1("fEnLossSigmaMuP1", "pol1(0)", PMIN, 0.3); fEnLossSigmaMuP1->SetParameters(0.115611, -0.179933);
  839. TF1* fEnLossSigmaMuP2 = new TF1("fEnLossSigmaMuP2", "pol1(0)", 0.3, 1.05); fEnLossSigmaMuP2->SetParameters(0.0583018, 0.00140717);
  840. TF1* fEnLossSigmaMuP3 = new TF1("fEnLossSigmaMuP3", "pol1(0)", 1.05, 3.0); fEnLossSigmaMuP3->SetParameters(0.0570477, -8.02801e-05);
  841. TF1* fEnLossSigmaMuP4 = new TF1("fEnLossSigmaMuP4", "[0]", 3.0, PMAX); fEnLossSigmaMuP4->SetParameter(0, fEnLossSigmaMuP3->Eval(3.0));
  842. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP1);
  843. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP2);
  844. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP3);
  845. fSigDedx[MpdPidUtils::kMuon].push_back(fEnLossSigmaMuP4);
  846. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fSigDedx[MpdPidUtils::kMuon] ));
  847. TF1* fEnLossSigmaPiP1 = new TF1("fEnLossSigmaPiP1", "pol1(0)", PMIN, 0.2688734); fEnLossSigmaPiP1->SetParameters(0.10398002, -0.10199579);
  848. TF1* fEnLossSigmaPiP2 = new TF1("fEnLossSigmaPiP2", "pol1(0)", 0.2688734, 0.49397765); fEnLossSigmaPiP2->SetParameters(0.077284183, -0.0027080125);
  849. TF1* fEnLossSigmaPiP3 = new TF1("fEnLossSigmaPiP3", "pol1(0)", 0.49397765, 1.0971911); fEnLossSigmaPiP3->SetParameters(0.080134745, -0.0084786422);
  850. TF1* fEnLossSigmaPiP4 = new TF1("fEnLossSigmaPiP4", "pol1(0)", 1.0971911, 2.1724992); fEnLossSigmaPiP4->SetParameters(0.076484001, -0.0051512878);
  851. TF1* fEnLossSigmaPiP5 = new TF1("fEnLossSigmaPiP5", "pol1(0)", 2.1724992, 3.0); fEnLossSigmaPiP5->SetParameters(0.061593305, 0.0017028902);
  852. TF1* fEnLossSigmaPiP6 = new TF1("fEnLossSigmaPiP6", "[0]", 3.0, PMAX); fEnLossSigmaPiP6->SetParameter(0, fEnLossSigmaPiP5->Eval(3.0));
  853. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP1);
  854. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP2);
  855. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP3);
  856. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP4);
  857. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP5);
  858. fSigDedx[MpdPidUtils::kPion].push_back(fEnLossSigmaPiP6);
  859. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fSigDedx[MpdPidUtils::kPion] ));
  860. TF1* fEnLossSigmaKaP1 = new TF1("fEnLossSigmaKaP1", "pol1(0)", PMIN, 0.21747029); fEnLossSigmaKaP1->SetParameters(0.10629765, -0.038213911);
  861. TF1* fEnLossSigmaKaP2 = new TF1("fEnLossSigmaKaP2", "pol1(0)", 0.21747029, 0.49430427); fEnLossSigmaKaP2->SetParameters(0.11680119, -0.086512631);
  862. TF1* fEnLossSigmaKaP3 = new TF1("fEnLossSigmaKaP3", "pol1(0)", 0.49430427, 3.0); fEnLossSigmaKaP3->SetParameters(0.074836561, -0.0016162851);
  863. TF1* fEnLossSigmaKaP4 = new TF1("fEnLossSigmaKaP4", "[0]", 3.0, PMAX); fEnLossSigmaKaP4->SetParameter(0, fEnLossSigmaKaP3->Eval(3.0));
  864. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP1);
  865. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP2);
  866. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP3);
  867. fSigDedx[MpdPidUtils::kKaon].push_back(fEnLossSigmaKaP4);
  868. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fSigDedx[MpdPidUtils::kKaon] ));
  869. TF1* fEnLossSigmaPrP1 = new TF1("fEnLossSigmaPrP1", "pol1(0)", PMIN, 0.32931261); fEnLossSigmaPrP1->SetParameters(0.18061292, -0.26546851);
  870. TF1* fEnLossSigmaPrP2 = new TF1("fEnLossSigmaPrP2", "pol1(0)", 0.32931261, 0.61837676); fEnLossSigmaPrP2->SetParameters(0.11996127, -0.081291993);
  871. TF1* fEnLossSigmaPrP3 = new TF1("fEnLossSigmaPrP3", "pol1(0)", 0.61837676, 3.0); fEnLossSigmaPrP3->SetParameters(0.070310332, -0.00099961267);
  872. TF1* fEnLossSigmaPrP4 = new TF1("fEnLossSigmaPrP4", "[0]", 3.0, PMAX); fEnLossSigmaPrP4->SetParameter(0, fEnLossSigmaPrP3->Eval(3.0));
  873. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP1);
  874. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP2);
  875. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP3);
  876. fSigDedx[MpdPidUtils::kProton].push_back(fEnLossSigmaPrP4);
  877. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fSigDedx[MpdPidUtils::kProton] ));
  878. TF1* fEnLossSigmaDeP1 = new TF1("fEnLossSigmaDeP1", "pol1(0)", PMIN, 0.76311362); fEnLossSigmaDeP1->SetParameters(0.15548636, -0.10127273);
  879. TF1* fEnLossSigmaDeP2 = new TF1("fEnLossSigmaDeP2", "pol1(0)", 0.76311362, 1.1312292); fEnLossSigmaDeP2->SetParameters(0.091285714, -0.017142857);
  880. TF1* fEnLossSigmaDeP3 = new TF1("fEnLossSigmaDeP3", "pol1(0)", 1.1312292, 3.0); fEnLossSigmaDeP3->SetParameters(0.070917901, 0.00086217052);
  881. TF1* fEnLossSigmaDeP4 = new TF1("fEnLossSigmaDeP4", "[0]", 3.0, PMAX); fEnLossSigmaDeP4->SetParameter(0, fEnLossSigmaDeP3->Eval(3.0));
  882. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP1);
  883. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP2);
  884. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP3);
  885. fSigDedx[MpdPidUtils::kDeuteron].push_back(fEnLossSigmaDeP4);
  886. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fSigDedx[MpdPidUtils::kDeuteron] ));
  887. TF1* fEnLossSigmaTrP1 = new TF1("fEnLossSigmaTrP1", "pol1(0)", PMIN, 0.33138201); fEnLossSigmaTrP1->SetParameters(0.18504055, -0.21598167);
  888. TF1* fEnLossSigmaTrP2 = new TF1("fEnLossSigmaTrP2", "pol1(0)", 0.33138201, 1.3184028); fEnLossSigmaTrP2->SetParameters(0.1271025, -0.041144002);
  889. TF1* fEnLossSigmaTrP3 = new TF1("fEnLossSigmaTrP3", "pol1(0)", 1.3184028, 1.6844853); fEnLossSigmaTrP3->SetParameters(0.058605403, 0.010810599);
  890. TF1* fEnLossSigmaTrP4 = new TF1("fEnLossSigmaTrP4", "pol1(0)", 1.6844853, 3.0); fEnLossSigmaTrP4->SetParameters(0.079593779, -0.0016492155);
  891. TF1* fEnLossSigmaTrP5 = new TF1("fEnLossSigmaTrP5", "[0]", 3.0, PMAX); fEnLossSigmaTrP5->SetParameter(0, fEnLossSigmaTrP4->Eval(3.0));
  892. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP1);
  893. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP2);
  894. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP3);
  895. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP4);
  896. fSigDedx[MpdPidUtils::kTriton].push_back(fEnLossSigmaTrP5);
  897. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fSigDedx[MpdPidUtils::kTriton] ));
  898. TF1* fEnLossSigmaHe3P1 = new TF1("fEnLossSigmaHe3P1", "pol1(0)", PMIN, 0.57767997); fEnLossSigmaHe3P1->SetParameters(0.13595673, -0.09501415);
  899. TF1* fEnLossSigmaHe3P2 = new TF1("fEnLossSigmaHe3P2", "pol1(0)", 0.57767997, 0.83108376); fEnLossSigmaHe3P2->SetParameters(0.087834092, -0.011710864);
  900. TF1* fEnLossSigmaHe3P3 = new TF1("fEnLossSigmaHe3P3", "pol1(0)", 0.83108376, 1.6); fEnLossSigmaHe3P3->SetParameters(0.11349599, -0.042588492);
  901. TF1* fEnLossSigmaHe3P4 = new TF1("fEnLossSigmaHe3P4", "[0]", 1.6, PMAX); fEnLossSigmaHe3P4->SetParameter(0, fEnLossSigmaHe3P3->Eval(1.6));
  902. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P1);
  903. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P2);
  904. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P3);
  905. fSigDedx[MpdPidUtils::kHe3].push_back(fEnLossSigmaHe3P4);
  906. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fSigDedx[MpdPidUtils::kHe3] ));
  907. TF1* fEnLossSigmaHe4P1 = new TF1("fEnLossSigmaHe4P1", "pol1(0)", PMIN, 0.43111078); fEnLossSigmaHe4P1->SetParameters(0.26892942, -0.41394235);
  908. TF1* fEnLossSigmaHe4P2 = new TF1("fEnLossSigmaHe4P2", "pol1(0)", 0.43111078, 1.6); fEnLossSigmaHe4P2->SetParameters(0.10132884, -0.025177813);
  909. TF1* fEnLossSigmaHe4P3 = new TF1("fEnLossSigmaHe4P3", "[0]", 1.6, PMAX); fEnLossSigmaHe4P3->SetParameter(0, fEnLossSigmaHe4P2->Eval(1.6));
  910. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P1);
  911. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P2);
  912. fSigDedx[MpdPidUtils::kHe4].push_back(fEnLossSigmaHe4P3);
  913. fdEdxSigmaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fSigDedx[MpdPidUtils::kHe4] ));
  914. /// Asymmetry parameter of dE/dx
  915. TF1* fAsymElP1 = new TF1("fAsymElP1", "pol1(0)", PMIN, 0.5); fAsymElP1->SetParameters(-0.340074, 1.04407);
  916. TF1* fAsymElP2 = new TF1("fAsymElP2", "pol1(0)", 0.5, 0.85); fAsymElP2->SetParameters(0.291559, -0.306138);
  917. TF1* fAsymElP3 = new TF1("fAsymElP3", "pol1(0)", 0.85, 3.0); fAsymElP3->SetParameters(0.0915437, 0.0467649);
  918. TF1* fAsymElP4 = new TF1("fAsymElP4", "[0]", 3.0, PMAX); fAsymElP4->SetParameter(0, fAsymElP3->Eval(3.0));
  919. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP1);
  920. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP2);
  921. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP3);
  922. fAsymDedx[MpdPidUtils::kElectron].push_back(fAsymElP4);
  923. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fAsymDedx[MpdPidUtils::kElectron] ));
  924. TF1* fAsymMuP1 = new TF1("fAsymMuP1", "pol1(0)", PMIN, 0.125); fAsymMuP1->SetParameters(2.5656, -14.391);
  925. TF1* fAsymMuP2 = new TF1("fAsymMuP2", "pol1(0)", 0.125, 0.5); fAsymMuP2->SetParameters(-0.0467746, 0.496758);
  926. TF1* fAsymMuP3 = new TF1("fAsymMuP3", "pol1(0)", 0.5, 3.0); fAsymMuP3->SetParameters(0.196422, 0.0117276);
  927. TF1* fAsymMuP4 = new TF1("fAsymMuP4", "[0]", 3.0, PMAX); fAsymMuP4->SetParameter(0, fAsymMuP3->Eval(3.0));
  928. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP1);
  929. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP2);
  930. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP3);
  931. fAsymDedx[MpdPidUtils::kMuon].push_back(fAsymMuP4);
  932. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fAsymDedx[MpdPidUtils::kMuon] ));
  933. TF1* fAsymPiP1 = new TF1("fAsymPiP1", "pol1(0)", PMIN, 0.21734774); fAsymPiP1->SetParameters(2.039118, -6.8874236);
  934. TF1* fAsymPiP2 = new TF1("fAsymPiP2", "pol1(0)", 0.21734774, 0.44744793); fAsymPiP2->SetParameters(0.61574221, -0.33858234);
  935. TF1* fAsymPiP3 = new TF1("fAsymPiP3", "pol1(0)", 0.44744793, 1.0179262); fAsymPiP3->SetParameters(0.44321431, 0.046999724);
  936. TF1* fAsymPiP4 = new TF1("fAsymPiP4", "pol1(0)", 1.0179262, 3.0); fAsymPiP4->SetParameters(0.51997558, -0.02840974);
  937. TF1* fAsymPiP5 = new TF1("fAsymPiP5", "[0]", 3.0, PMAX); fAsymPiP5->SetParameter(0, fAsymPiP4->Eval(3.0));
  938. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP1);
  939. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP2);
  940. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP3);
  941. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP4);
  942. fAsymDedx[MpdPidUtils::kPion].push_back(fAsymPiP5);
  943. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fAsymDedx[MpdPidUtils::kPion] ));
  944. TF1* fAsymKaP1 = new TF1("fAsymKaP1", "pol1(0)", PMIN, 0.29786956); fAsymKaP1->SetParameters(4.1300984, -12.078456);
  945. TF1* fAsymKaP2 = new TF1("fAsymKaP2", "pol1(0)", 0.29786956, 3.0); fAsymKaP2->SetParameters(0.53887837, -0.02210481);
  946. TF1* fAsymKaP3 = new TF1("fAsymKaP3", "[0]", 3.0, PMAX); fAsymKaP3->SetParameter(0, fAsymKaP2->Eval(3.0));
  947. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP1);
  948. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP2);
  949. fAsymDedx[MpdPidUtils::kKaon].push_back(fAsymKaP3);
  950. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fAsymDedx[MpdPidUtils::kKaon] ));
  951. TF1* fAsymPrP1 = new TF1("fAsymPrP1", "[0]", PMIN, 0.15958801); fAsymPrP1->SetParameter(0, 0.84733839); /// <...>P2.Eval(0.15958801)
  952. TF1* fAsymPrP2 = new TF1("fAsymPrP2", "pol1(0)", 0.15958801, 0.26986452); fAsymPrP2->SetParameters(0.44179229, 2.5412067);
  953. TF1* fAsymPrP3 = new TF1("fAsymPrP3", "pol1(0)", 0.26986452, 0.3902664); fAsymPrP3->SetParameters(2.4116168, -4.7581024);
  954. TF1* fAsymPrP4 = new TF1("fAsymPrP4", "pol1(0)", 0.3902664, 3.0); fAsymPrP4->SetParameters(0.55387387, 0.0020895347);
  955. TF1* fAsymPrP5 = new TF1("fAsymPrP5", "[0]", 3.0, PMAX); fAsymPrP5->SetParameter(0, fAsymPrP4->Eval(3.0));
  956. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP1);
  957. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP2);
  958. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP3);
  959. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP4);
  960. fAsymDedx[MpdPidUtils::kProton].push_back(fAsymPrP5);
  961. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fAsymDedx[MpdPidUtils::kProton] ));
  962. TF1* fAsymDeP1 = new TF1("fAsymDeP1", "pol1(0)", PMIN, 0.46066487); fAsymDeP1->SetParameters(-0.12857143, 1.3714286);
  963. TF1* fAsymDeP2 = new TF1("fAsymDeP2", "pol1(0)", 0.46066487, 3.0); fAsymDeP2->SetParameters(0.4816788, 0.046712329);
  964. TF1* fAsymDeP3 = new TF1("fAsymDeP3", "[0]", 3.0, PMAX); fAsymDeP3->SetParameter(0, fAsymDeP2->Eval(3.0));
  965. fAsymDedx[MpdPidUtils::kDeuteron].push_back(fAsymDeP1);
  966. fAsymDedx[MpdPidUtils::kDeuteron].push_back(fAsymDeP2);
  967. fAsymDedx[MpdPidUtils::kDeuteron].push_back(fAsymDeP3);
  968. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fAsymDedx[MpdPidUtils::kDeuteron] ));
  969. TF1* fAsymTrP1 = new TF1("fAsymTrP1", "pol1(0)", PMIN, 0.83782809); fAsymTrP1->SetParameters(-0.1027975, 0.79037208);
  970. TF1* fAsymTrP2 = new TF1("fAsymTrP2", "[0]", 0.83782809, PMAX); fAsymTrP2->SetParameter(0, 0.55939843);
  971. fAsymDedx[MpdPidUtils::kTriton].push_back(fAsymTrP1);
  972. fAsymDedx[MpdPidUtils::kTriton].push_back(fAsymTrP2);
  973. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fAsymDedx[MpdPidUtils::kTriton] ));
  974. TF1* fAsymHe3P1 = new TF1("fAsymHe3P1", "pol1(0)", PMIN, 1.6); fAsymHe3P1->SetParameters(-0.20580778, 0.71928838);
  975. TF1* fAsymHe3P2 = new TF1("fAsymHe3P2", "[0]", 1.6, PMAX); fAsymHe3P2->SetParameter(0, fAsymHe3P1->Eval(1.6));
  976. fAsymDedx[MpdPidUtils::kHe3].push_back(fAsymHe3P1);
  977. fAsymDedx[MpdPidUtils::kHe3].push_back(fAsymHe3P2);
  978. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fAsymDedx[MpdPidUtils::kHe3] ));
  979. TF1* fAsymHe4P1 = new TF1("fAsymHe4P1", "pol1(0)", PMIN, 0.3334044); fAsymHe4P1->SetParameters(-1.0041691, 3.1063592);
  980. TF1* fAsymHe4P2 = new TF1("fAsymHe4P2", "pol1(0)", 0.3334044, 1.2256613); fAsymHe4P2->SetParameters(-0.13764555, 0.50734285);
  981. TF1* fAsymHe4P3 = new TF1("fAsymHe4P3", "pol1(0)", 1.2256613, 1.6); fAsymHe4P3->SetParameters(-1.4373775, 1.567776);
  982. TF1* fAsymHe4P4 = new TF1("fAsymHe4P4", "[0]", 1.6, PMAX); fAsymHe4P4->SetParameter(0, fAsymHe4P3->Eval(1.6));
  983. fAsymDedx[MpdPidUtils::kHe4].push_back(fAsymHe4P1);
  984. fAsymDedx[MpdPidUtils::kHe4].push_back(fAsymHe4P2);
  985. fAsymDedx[MpdPidUtils::kHe4].push_back(fAsymHe4P3);
  986. fAsymDedx[MpdPidUtils::kHe4].push_back(fAsymHe4P4);
  987. fdEdxDeltaMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fAsymDedx[MpdPidUtils::kHe4] ));
  988. }
  989. /// Particle yields versus momentum (close to a thermal function).
  990. /// The predicted number roughly speaking are not dN/dy or total yiels,
  991. /// only their relative hights are of relevance!
  992. Double_t amplParam;
  993. TF1* fParElPosMom = new TF1("fParElPosMom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPi");
  994. TF1* fParElNegMom = new TF1("fParElNegMom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPi");
  995. TF1* fParMuPosMom = new TF1("fParMuPosMom",this,&MpdPid::MomPi,PMIN,PMAX,5,"MpdPid","MomPi");
  996. TF1* fParMuNegMom = new TF1("fParMuNegMom",this,&MpdPid::MomPi,PMIN,PMAX,5,"MpdPid","MomPi");
  997. TF1* fParPiPosMom = new TF1("fParPiPosMom",this,&MpdPid::MomPi,PMIN,PMAX,5,"MpdPid","MomPi");
  998. TF1* fParPiNegMom = new TF1("fParPiNegMom",this,&MpdPid::MomPi,PMIN,PMAX,5,"MpdPid","MomPi");
  999. TF1* fParKaPosMom = new TF1("fParKaPosMom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPr");
  1000. TF1* fParKaNegMom = new TF1("fParKaNegMom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPr");
  1001. TF1* fParPrPosMom = new TF1("fParPrPosMom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPr");
  1002. TF1* fParPrNegMom = new TF1("fParPrNegMom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPr");
  1003. TF1* fParDeMom = new TF1("fParDeMom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPr");
  1004. TF1* fParTrMom = new TF1("fParTrMom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPr");
  1005. TF1* fParHe3Mom = new TF1("fParHe3Mom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPr");
  1006. TF1* fParHe4Mom = new TF1("fParHe4Mom",this,&MpdPid::MomPr,PMIN,PMAX,5,"MpdPid","MomPr");
  1007. if (Generator == "NSIG") {
  1008. fMethod = kFALSE;
  1009. delete fParElPosMom; delete fParElNegMom; delete fParMuPosMom; delete fParMuNegMom;
  1010. delete fParPiPosMom; delete fParPiNegMom; delete fParKaPosMom; delete fParKaNegMom;
  1011. delete fParPrPosMom; delete fParPrNegMom; delete fParDeMom; delete fParTrMom;
  1012. delete fParHe3Mom; delete fParHe4Mom;
  1013. if ( NSigPart.Contains("el") ) {
  1014. fNSigSpecies[MpdPidUtils::kElectron] = kTRUE; cout << "electrons are included in n-sigma method..." << endl;
  1015. } else { fNSigSpecies[MpdPidUtils::kElectron] = kFALSE; }
  1016. if ( NSigPart.Contains("mu") ) {
  1017. fNSigSpecies[MpdPidUtils::kMuon] = kTRUE; cout << "muons are included in n-sigma method..." << endl;
  1018. } else { fNSigSpecies[MpdPidUtils::kMuon] = kFALSE; }
  1019. if ( NSigPart.Contains("pi") ) {
  1020. fNSigSpecies[MpdPidUtils::kPion] = kTRUE; cout << "pions are included in n-sigma method..." << endl;
  1021. } else { fNSigSpecies[MpdPidUtils::kPion] = kFALSE; }
  1022. if ( NSigPart.Contains("ka") ) {
  1023. fNSigSpecies[MpdPidUtils::kKaon] = kTRUE; cout << "kaons are included in n-sigma method..." << endl;
  1024. } else { fNSigSpecies[MpdPidUtils::kKaon] = kFALSE; }
  1025. if ( NSigPart.Contains("pr") ) {
  1026. fNSigSpecies[MpdPidUtils::kProton] = kTRUE; cout << "(anti-)protons are included in n-sigma method..." << endl;
  1027. } else { fNSigSpecies[MpdPidUtils::kProton] = kFALSE; }
  1028. if ( NSigPart.Contains("de") ) {
  1029. fNSigSpecies[MpdPidUtils::kDeuteron] = kTRUE; cout << "deuterons are included in n-sigma method..." << endl;
  1030. } else { fNSigSpecies[MpdPidUtils::kDeuteron] = kFALSE; }
  1031. if ( NSigPart.Contains("tr") ) {
  1032. fNSigSpecies[MpdPidUtils::kTriton] = kTRUE; cout << "tritons are included in n-sigma method..." << endl;
  1033. } else { fNSigSpecies[MpdPidUtils::kTriton] = kFALSE; }
  1034. if ( NSigPart.Contains("he3") ) {
  1035. fNSigSpecies[MpdPidUtils::kHe3] = kTRUE; cout << "he3 are included in n-sigma method..." << endl;
  1036. } else { fNSigSpecies[MpdPidUtils::kHe3] = kFALSE; }
  1037. if ( NSigPart.Contains("he4") ) {
  1038. fNSigSpecies[MpdPidUtils::kHe4] = kTRUE; cout << "he4 are included in n-sigma method..." << endl;
  1039. } else { fNSigSpecies[MpdPidUtils::kHe4] = kFALSE; }
  1040. } else fMethod = kTRUE;
  1041. if ( !( (Generator == "LAQGSM") || (Generator == "QGSM") || (Generator == "URQMD") || (Generator == "NSIG") || (Generator == "PHSD") || (Generator == "EPOS") || (Generator == "PHSD_CENT") || (Generator == "PHSD_CSR") || (Generator == "PHSD_NOCSR") || (Generator == "PHQMD") ) ) {
  1042. cout << "Incorrect generator string! Switching to DEFAULT..." << endl;
  1043. Generator = "DEFAULT";
  1044. }
  1045. if ( Generator == "EPOS" ) { /// for p + p collisions
  1046. if ( fEnergy < 7.0 ) { /// sqrt(s) = 6 GeV, ~1M events
  1047. fParPiPosMom->SetParameters(2853.8,0.623542,0.0537214,0.137323,1.4267); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1048. fParPiNegMom->SetParameters(1407.44,0.987421,0.0574761,0.131526,1.18167); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1049. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1050. fParKaPosMom->SetParameters(228.358,7.59862,0.162463,0.148098,0.183593); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1051. fParKaNegMom->SetParameters(57.3598,0.546853,0.154656,0.0593315,0.543194); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1052. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1053. fParPrPosMom->SetParameters(1796.08,8.20092,0.272697,0.253002,0.181719); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1054. fParPrNegMom->SetParameters(38.0024,0.0768751,0.151354,0.144691,-0.144209); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1055. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1056. } else if ( fEnergy < 9.0 ) { /// sqrt(s) = 8.76 GeV, 1M events
  1057. fParPiPosMom->SetParameters(3160.76,0.70523,0.080124,0.206086,0.974646); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1058. fParPiNegMom->SetParameters(1751.43,1.17603,0.0914196,0.206213,0.737364); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1059. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1060. fParKaPosMom->SetParameters(362.313,0.332122,0.232739,0.0763912,0.301778); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1061. fParKaNegMom->SetParameters(161.454,0.483719,0.217565,0.0874472,0.345383); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1062. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1063. fParPrPosMom->SetParameters(1254.12,0.409612,0.385691,0.171431,0.181715); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1064. fParPrNegMom->SetParameters(89.4667,0.216063,0.139082,0.0149435,1.29752); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1065. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1066. } else if ( fEnergy < 12.0 ) { /// sqrt(s) = 10 GeV, 1M events
  1067. fParPiPosMom->SetParameters(3320.92,0.698313,0.0892079,0.227947,0.875591); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1068. fParPiNegMom->SetParameters(2090.76,1.0203,0.100926,0.228817,0.673615); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1069. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1070. fParKaPosMom->SetParameters(400.101,4.6224,0.208173,0.182652,0.069632); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1071. fParKaNegMom->SetParameters(197.395,0.355122,0.235916,0.0794332,0.358637); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1072. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1073. fParPrPosMom->SetParameters(1089.56,0.242752,0.407993,0.13063,0.250824); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1074. fParPrNegMom->SetParameters(136.99,1.09482,0.231846,0.127863,0.205208); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1075. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1076. } else if ( fEnergy < 16.0 ) { /// sqrt(s) = 15 GeV, 1M events
  1077. fParPiPosMom->SetParameters(3750.67,0.657879,0.108281,0.279038,0.725381); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1078. fParPiNegMom->SetParameters(2984.16,0.769168,0.129349,0.287196,0.507861); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1079. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1080. fParKaPosMom->SetParameters(675.506,0.0596585,0.26442,0.14352,-0.138467); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1081. fParKaNegMom->SetParameters(292.368,0.256861,0.275726,0.0776192,0.326165); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1082. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1083. fParPrPosMom->SetParameters(890.967,0.00141238,0.416039,0.150785,-0.150519); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1084. fParPrNegMom->SetParameters(518.922,0.00427706,0.2737,0.156507,-0.156194); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1085. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1086. } else if ( fEnergy < 19.0 ) { /// sqrt(s) = 17.3 GeV, 1M events
  1087. fParPiPosMom->SetParameters(3817.06,0.664315,0.115249,0.292103,0.674843); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1088. fParPiNegMom->SetParameters(3440.51,0.65109,0.139433,0.3066,0.464094); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1089. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1090. fParKaPosMom->SetParameters(505.915,0.229333,0.289876,0.0773325,0.275986); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1091. fParKaNegMom->SetParameters(321.28,0.255435,0.283842,0.0806211,0.315722); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1092. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1093. fParPrPosMom->SetParameters(655.647,0.165912,0.410953,0.0981928,0.296843); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1094. fParPrNegMom->SetParameters(368.293,0.275794,0.289646,0.066954,0.501408); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1095. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1096. } else if ( fEnergy < 23.0 ) { /// sqrt(s) = 20 GeV, 1M events
  1097. fParPiPosMom->SetParameters(3908.67,0.663881,0.11984,0.303021,0.648025); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1098. fParPiNegMom->SetParameters(3652.92,0.635229,0.145063,0.317634,0.434774); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1099. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1100. fParKaPosMom->SetParameters(1504.68,-0.608577,0.300936,0.105427,-0.169068); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1101. fParKaNegMom->SetParameters(352.373,0.234724,0.293469,0.0797531,0.303124); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1102. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1103. fParPrPosMom->SetParameters(599.226,0.172265,0.406555,0.0998964,0.284495); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1104. fParPrNegMom->SetParameters(441.899,0.187852,0.296744,0.0391455,0.591304); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1105. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1106. } else { /// sqrt(s) = 25 GeV, 1M events
  1107. fParPiPosMom->SetParameters(3982.71,0.68892,0.122378,0.312125,0.636517); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1108. fParPiNegMom->SetParameters(3980.97,0.60921,0.149336,0.331234,0.424032); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1109. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1110. fParKaPosMom->SetParameters(1370.93,-0.538074,0.313878,0.103715,-0.16116); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1111. fParKaNegMom->SetParameters(396.416,0.206327,0.304933,0.0762121,0.305453); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1112. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1113. fParPrPosMom->SetParameters(547.27,0.166229,0.401412,0.0955138,0.284058); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1114. fParPrNegMom->SetParameters(546.003,0.664169,0.32501,0.154779,-0.0269533); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1115. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1116. }
  1117. }
  1118. if ( Generator == "PHQMD" ) { /// Mass Production, fTracking = 2, 15M min bias events @ 8.8 GeV
  1119. fParPiPosMom->SetParameters(245004.,6.43066,0.285935,0.191311,0.0632783); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1120. fParPiNegMom->SetParameters(63866.2,29.1281,0.284521,0.203969,0.0623634); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1121. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1122. fParKaPosMom->SetParameters(410468.,0.431534,0.276289,0.108674,0.370743); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1123. fParKaNegMom->SetParameters(178284.,0.426688,0.257688,0.0968996,0.439992); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1124. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1125. fParPrPosMom->SetParameters(949875.,3.6411,0.314117,0.264786,0.365604); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1126. fParPrNegMom->SetParameters(10839.6,0.705385,0.221633,0.0956065,1.45505); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1127. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1128. fParDeMom->SetParameters(15978.8,2.26702,0.579366,0.441819,0.971303); fPartYield[MpdPidUtils::kDeuteron].push_back(fParDeMom);
  1129. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fPartYield[MpdPidUtils::kDeuteron] ));
  1130. fParTrMom->SetParameters(408.611,0.184547,0.589216,0.103737,7.26799); fPartYield[MpdPidUtils::kTriton].push_back(fParTrMom);
  1131. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fPartYield[MpdPidUtils::kTriton] ));
  1132. fParHe3Mom->SetParameters(379.097,5.99965,0.327897,0.289616,1.33579); fPartYield[MpdPidUtils::kHe3].push_back(fParHe3Mom);
  1133. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fPartYield[MpdPidUtils::kHe3] ));
  1134. fParHe4Mom->SetParameters(14.4574,12.1212,0.0348463,0.0324572,33.2308); fPartYield[MpdPidUtils::kHe4].push_back(fParHe4Mom);
  1135. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fPartYield[MpdPidUtils::kHe4] ));
  1136. }
  1137. if ( Generator == "PHSD" ) {
  1138. if ( fTrackingState == MpdPidUtils::kHP ) {
  1139. if ( fEnergy < 7.0 ) { /// not ready, QGSM 5 gev
  1140. fParElPosMom->SetParameters(17.6,-0.12,0.078,0.167,0.00); fPartYield[MpdPidUtils::kElectron].push_back(fParElPosMom);
  1141. fParElNegMom->SetParameters(16.3,-0.12,0.078,0.167,0.00); fPartYield[MpdPidUtils::kElectron].push_back(fParElNegMom);
  1142. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fPartYield[MpdPidUtils::kElectron] ));
  1143. fParMuPosMom->SetParameters(20.5,0.064,0.107,0.05,0.105); fPartYield[MpdPidUtils::kMuon].push_back(fParMuPosMom);
  1144. fParMuNegMom->SetParameters(20.5,0.064,0.107,0.05,0.105); fPartYield[MpdPidUtils::kMuon].push_back(fParMuNegMom);
  1145. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fPartYield[MpdPidUtils::kMuon] ));
  1146. fParPiPosMom->SetParameters(307.0,0.035,0.175,0.127,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1147. fParPiNegMom->SetParameters(325.6,0.035,0.175,0.127,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1148. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1149. fParKaPosMom->SetParameters(15.3,0.236,0.203,0.056,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1150. fParKaNegMom->SetParameters(8.88,0.236,0.203,0.056,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1151. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1152. amplParam = 104.0;
  1153. fParPrPosMom->SetParameters(amplParam,0.213,0.294,0.09,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1154. amplParam /= fPrRatio;
  1155. fParPrNegMom->SetParameters(amplParam,0.213,0.294,0.09,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1156. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1157. fParDeMom->SetParameters(5.7,0.338,0.333,0.114,1.878); fPartYield[MpdPidUtils::kDeuteron].push_back(fParDeMom);
  1158. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fPartYield[MpdPidUtils::kDeuteron] ));
  1159. fParTrMom->SetParameters(0.2,-0.35,0.723,0.2,2.81); fPartYield[MpdPidUtils::kTriton].push_back(fParTrMom);
  1160. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fPartYield[MpdPidUtils::kTriton] ));
  1161. fParHe3Mom->SetParameters(0.36,-0.784,530.3,0.131,1.983); fPartYield[MpdPidUtils::kHe3].push_back(fParHe3Mom);
  1162. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fPartYield[MpdPidUtils::kHe3] ));
  1163. fParHe4Mom->SetParameters(6.6e-03,0.27,0.2,1.42,3.51); fPartYield[MpdPidUtils::kHe4].push_back(fParHe4Mom);
  1164. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fPartYield[MpdPidUtils::kHe4] ));
  1165. } else { /// fEnergy > 7.0 not ready, QGSM 9 gev
  1166. fParElPosMom->SetParameters(17.6,-0.12,0.078,0.167,0.00); fPartYield[MpdPidUtils::kElectron].push_back(fParElPosMom);
  1167. fParElNegMom->SetParameters(16.3,-0.12,0.078,0.167,0.00); fPartYield[MpdPidUtils::kElectron].push_back(fParElNegMom);
  1168. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fPartYield[MpdPidUtils::kElectron] ));
  1169. fParMuPosMom->SetParameters(20.5,0.064,0.107,0.05,0.105); fPartYield[MpdPidUtils::kMuon].push_back(fParMuPosMom);
  1170. fParMuNegMom->SetParameters(20.5,0.064,0.107,0.05,0.105); fPartYield[MpdPidUtils::kMuon].push_back(fParMuNegMom);
  1171. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fPartYield[MpdPidUtils::kMuon] ));
  1172. fParPiPosMom->SetParameters(473.,0.034,0.187,0.469,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1173. fParPiNegMom->SetParameters(501.6,0.034,0.187,0.469,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1174. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1175. fParKaPosMom->SetParameters(21.1,0.157,0.241,0.043,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1176. fParKaNegMom->SetParameters(12.25,0.157,0.241,0.043,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1177. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1178. amplParam = 67.4;
  1179. fParPrPosMom->SetParameters(amplParam,.02,0.365,0.01,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1180. amplParam /= fPrRatio;
  1181. fParPrNegMom->SetParameters(amplParam,.02,0.365,0.01,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1182. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1183. fParDeMom->SetParameters(1.8,0.05,0.432,0.163,1.878); fPartYield[MpdPidUtils::kDeuteron].push_back(fParDeMom);
  1184. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fPartYield[MpdPidUtils::kDeuteron] ));
  1185. fParTrMom->SetParameters(0.2,-0.35,0.723,0.2,2.81); fPartYield[MpdPidUtils::kTriton].push_back(fParTrMom);
  1186. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fPartYield[MpdPidUtils::kTriton] ));
  1187. fParHe3Mom->SetParameters(0.36,-0.784,530.3,0.131,1.983); fPartYield[MpdPidUtils::kHe3].push_back(fParHe3Mom);
  1188. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fPartYield[MpdPidUtils::kHe3] ));
  1189. fParHe4Mom->SetParameters(6.6e-03,0.27,0.2,1.42,3.51); fPartYield[MpdPidUtils::kHe4].push_back(fParHe4Mom);
  1190. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fPartYield[MpdPidUtils::kHe4] ));
  1191. }
  1192. } else { /// Tracking == "CF", "CFHM" is not ready
  1193. if ( fEnergy < 7.0 ) { /// not ready
  1194. fParPiPosMom->SetParameters(44660.6,1.4425,0.0821871,0.126819,-0.106069); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1195. fParPiNegMom->SetParameters(1929.85,24.5821,0.111797,0.066913,0.667266); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1196. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1197. fParKaPosMom->SetParameters(3089.81,9.2121,0.136135,0.125175,0.350274); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1198. fParKaNegMom->SetParameters(237.81,-0.746975,0.0771305,0.0365433,2.27772); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1199. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1200. amplParam = 114392.;
  1201. fParPrPosMom->SetParameters(amplParam,6.35265,0.188466,0.166392,0.7605); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1202. amplParam /= fPrRatio;
  1203. fParPrNegMom->SetParameters(amplParam,6.35265,0.188466,0.166392,0.7605); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1204. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1205. } else { /// fEnergy = 11.0, 03/07/2018, 629K events
  1206. fParPiPosMom->SetParameters(12708,7.25584,0.167878,0.303888,0.277294); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1207. fParPiNegMom->SetParameters(3319.17,14.7475,0.212685,0.341987,-0.190745); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1208. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1209. fParKaPosMom->SetParameters(24333.9,0.409004,0.283049,0.107653,0.396297); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1210. fParKaNegMom->SetParameters(12323.4,0.392905,0.267303,0.0952731,0.457674); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1211. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1212. fParPrPosMom->SetParameters(42750.4,1.92747,0.363864,0.273259,0.337891); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1213. fParPrNegMom->SetParameters(4636.8,1.42461,0.285596,0.181618,0.837135); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1214. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1215. }
  1216. }
  1217. }
  1218. if ( Generator == "PHSD_CENT" ) { /// PHSD central events, b < 3 fm, fEnergy = 11.0, 20/03/2019, 5482 events
  1219. fParPiPosMom->SetParameters(2628.47,0.846834,0.203337,0.357357,0.147232); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1220. fParPiNegMom->SetParameters(1997.0,1.41096,0.196863,0.341347,0.18051); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1221. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1222. fParKaPosMom->SetParameters(872.775,0.346697,0.298306,0.102013,0.423512); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1223. fParKaNegMom->SetParameters(437.025,0.368078,0.279169,0.0955438,0.48267); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1224. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1225. fParPrPosMom->SetParameters(1705.66,0.663284,0.425112,0.220086,0.457981); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1226. fParPrNegMom->SetParameters(191.997,6.39986,0.276029,0.244932,0.722006); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1227. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1228. }
  1229. if ( Generator == "PHSD_CSR" ) {
  1230. if ( fEnergy < 5.0 ) { /// PHSD csr central events, b < 3 fm, fEnergy = 4.0 GeV, 10/10/2019, ~50k events
  1231. fParPiPosMom->SetParameters(326.591,37.4694,0.0395906,0.145417,1.08328); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1232. fParPiNegMom->SetParameters(7834.26,1.46868,0.178981,0.0634056,0.520443); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1233. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1234. fParKaPosMom->SetParameters(1709.8,1.73908,0.20194,0.143219,0.290164); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1235. fParKaNegMom->SetParameters(327.052,0.638412,0.183259,0.0800663,0.554539); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1236. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1237. fParPrPosMom->SetParameters(29176.4,3.57695,0.238379,0.195002,0.670283); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1238. fParPrNegMom->SetParameters(4.18494,1.07077,0.165123,0.0865973,2.30082); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1239. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1240. } else if ( fEnergy < 7.0 ) { /// PHSD csr central events, b < 3 fm, fEnergy = 6.2 GeV, 10/10/2019, ~50k events
  1241. fParPiPosMom->SetParameters(112.48,188.057,0.183905,0.284109,-9.42658e-05); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1242. fParPiNegMom->SetParameters(369.468,63.2746,0.190742,0.278494,-0.0606429); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1243. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1244. fParKaPosMom->SetParameters(4727.89,0.411218,0.271326,0.10275,0.38878); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1245. fParKaNegMom->SetParameters(1467.24,0.423877,0.247845,0.0908385,0.477971); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1246. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1247. fParPrPosMom->SetParameters(22653.3,2.16885,0.335439,0.255945,0.403967); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1248. fParPrNegMom->SetParameters(85.4405,1.87681,0.13522,0.0885255,2.5824); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1249. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1250. } else if ( fEnergy < 8.0 ) { /// PHSD csr central events, b < 3 fm, fEnergy = 7.6 GeV, 10/10/2019, ~50k events
  1251. fParPiPosMom->SetParameters(271.408,92.8688,0.184859,0.303397,0.0543418); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1252. fParPiNegMom->SetParameters(1489.49,17.1459,0.192214,0.302818,-0.0970675); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1253. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1254. fParKaPosMom->SetParameters(6031.92,0.356296,0.28695,0.0997535,0.406052); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1255. fParKaNegMom->SetParameters(2292.64,0.392553,0.26581,0.0946355,0.461694); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1256. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1257. fParPrPosMom->SetParameters(20282.1,1.38552,0.373508,0.255721,0.370525); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1258. fParPrNegMom->SetParameters(178.133,1.51585,0.201521,0.125455,1.68405); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1259. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1260. } else if ( fEnergy < 10.0 ) { /// PHSD csr central events, b < 3 fm, fEnergy = 8.8 GeV, 10/10/2019, ~50k events
  1261. fParPiPosMom->SetParameters(330.227,85.1517,0.179918,0.3141,0.121203); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1262. fParPiNegMom->SetParameters(21412.6,0.965329,0.210709,0.338147,0.08417); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1263. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1264. fParKaPosMom->SetParameters(6714.74,0.343555,0.297204,0.101954,0.396783); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1265. fParKaNegMom->SetParameters(2939.86,0.373118,0.276092,0.0958796,0.458351); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1266. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1267. fParPrPosMom->SetParameters(18934.3,1.02918,0.397596,0.248315,0.378061); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1268. fParPrNegMom->SetParameters(271.395,1.29596,0.246056,0.146202,1.31564); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1269. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1270. } else { /// PHSD csr central events, b < 3 fm, fEnergy = 12.3 GeV, 10/10/2019, ~50k events
  1271. fParPiPosMom->SetParameters(523.376,66.8745,0.172619,0.330811,0.198081); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1272. fParPiNegMom->SetParameters(996.699,25.9407,0.202627,0.35925,-0.162493); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1273. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1274. fParKaPosMom->SetParameters(8208.95,0.325369,0.313731,0.105367,0.393535); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1275. fParKaNegMom->SetParameters(4565.48,0.344706,0.298358,0.100691,0.441146); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1276. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1277. fParPrPosMom->SetParameters(15861.8,1.06114,0.420781,0.268906,0.331336); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1278. fParPrNegMom->SetParameters(545.455,5.15299,0.289769,0.250636,0.750215); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1279. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1280. }
  1281. }
  1282. if ( Generator == "PHSD_NOCSR" ) {
  1283. if ( fEnergy < 5.0 ) { /// PHSD no csr central events, b < 3 fm, fEnergy = 4 GeV, 10/10/2019, ~50k events
  1284. fParPiPosMom->SetParameters(396.282,32.7313,0.0382901,0.141021,1.12647); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1285. fParPiNegMom->SetParameters(3579.74,3.98371,0.11532,0.0306925,1.30859); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1286. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1287. fParKaPosMom->SetParameters(1081.74,3.09011,0.190816,0.154575,0.279164); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1288. fParKaNegMom->SetParameters(253.536,0.589513,0.178808,0.0743182,0.612162); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1289. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1290. fParPrPosMom->SetParameters(30200.6,3.29956,0.236862,0.190743,0.684265); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1291. fParPrNegMom->SetParameters(4.86563,1.59102,0.115168,0.0729325,3.3942); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1292. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1293. } else if ( fEnergy < 7.0 ) { /// PHSD no csr central events, b < 3 fm, fEnergy = 6.2 GeV, 10/10/2019, ~50k events
  1294. fParPiPosMom->SetParameters(2907.1,7.34039,0.192883,0.283338,0.000931754); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1295. fParPiNegMom->SetParameters(434.643,57.0644,0.194478,0.275712,-0.0728979); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1296. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1297. fParKaPosMom->SetParameters(3030.57,0.431268,0.264635,0.102554,0.388718); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1298. fParKaNegMom->SetParameters(1194.21,0.430582,0.239526,0.0874055,0.502341); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1299. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1300. fParPrPosMom->SetParameters(24464.4,2.01624,0.334706,0.250743,0.412746); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1301. fParPrNegMom->SetParameters(104.891,2.0149,0.141495,0.0947837,2.53473); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1302. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1303. } else if ( fEnergy < 8.0 ) { /// PHSD no csr central events, b < 3 fm, fEnergy = 7.6 GeV, 10/10/2019, ~50k events
  1304. fParPiPosMom->SetParameters(3463.66,7.24569,0.190893,0.304263,0.0839204); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1305. fParPiNegMom->SetParameters(638.648,40.2362,0.194759,0.301837,-0.1207); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1306. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1307. fParKaPosMom->SetParameters(4243.36,0.373601,0.279679,0.0997516,0.401217); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1308. fParKaNegMom->SetParameters(1954.45,0.411682,0.258866,0.0941066,0.470275); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1309. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1310. fParPrPosMom->SetParameters(21992.6,1.39463,0.370946,0.254295,0.371529); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1311. fParPrNegMom->SetParameters(210.959,1.4898,0.201572,0.123791,1.70536); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1312. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1313. } else if ( fEnergy < 10.0 ) { /// PHSD no csr central events, b < 3 fm, fEnergy = 8.8 GeV, 10/10/2019, ~50k events
  1314. fParPiPosMom->SetParameters(6728.05,3.88388,0.190088,0.319898,0.124891); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1315. fParPiNegMom->SetParameters(3648.45,8.36849,0.304356,0.177689,0.177577); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1316. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1317. fParKaPosMom->SetParameters(5131.42,0.356848,0.289977,0.101518,0.39762); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1318. fParKaNegMom->SetParameters(2595.77,0.383127,0.270511,0.0949794,0.464502); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1319. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1320. fParPrPosMom->SetParameters(20165.6,1.28612,0.388469,0.261465,0.353915); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1321. fParPrNegMom->SetParameters(305.183,1.28427,0.245721,0.144331,1.35441); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1322. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1323. } else { /// PHSD no csr central events, b < 3 fm, fEnergy = 12.3 GeV, 10/10/2019, ~50k events
  1324. fParPiPosMom->SetParameters(25403.9,0.930567,0.206834,0.368397,0.134282); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1325. fParPiNegMom->SetParameters(1064.68,36.2707,0.326473,0.173008,0.228547); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1326. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1327. fParKaPosMom->SetParameters(7276.52,0.328204,0.309239,0.104224,0.392577); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1328. fParKaNegMom->SetParameters(4294.11,0.353445,0.293973,0.100527,0.443493); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1329. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1330. fParPrPosMom->SetParameters(16438.3,1.07511,0.419069,0.268969,0.330482); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1331. fParPrNegMom->SetParameters(575.422,4.48476,0.290547,0.246113,0.770269); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1332. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1333. }
  1334. }
  1335. if ( (Generator == "LAQGSM") || (Generator == "QGSM") ) {
  1336. if ( fTrackingState == MpdPidUtils::kHP ) {
  1337. if ( fEnergy < 7.0 ) { /// not ready, QGSM 5 gev
  1338. fParElPosMom->SetParameters(17.6,-0.12,0.078,0.167,0.00); fPartYield[MpdPidUtils::kElectron].push_back(fParElPosMom);
  1339. fParElNegMom->SetParameters(16.3,-0.12,0.078,0.167,0.00); fPartYield[MpdPidUtils::kElectron].push_back(fParElNegMom);
  1340. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fPartYield[MpdPidUtils::kElectron] ));
  1341. fParMuPosMom->SetParameters(20.5,0.064,0.107,0.05,0.105); fPartYield[MpdPidUtils::kMuon].push_back(fParMuPosMom);
  1342. fParMuNegMom->SetParameters(20.5,0.064,0.107,0.05,0.105); fPartYield[MpdPidUtils::kMuon].push_back(fParMuNegMom);
  1343. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fPartYield[MpdPidUtils::kMuon] ));
  1344. fParPiPosMom->SetParameters(307.0,0.035,0.175,0.127,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1345. fParPiNegMom->SetParameters(325.6,0.035,0.175,0.127,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1346. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1347. fParKaPosMom->SetParameters(15.3,0.236,0.203,0.056,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1348. fParKaNegMom->SetParameters(8.88,0.236,0.203,0.056,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1349. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1350. amplParam = 104.0;
  1351. fParPrPosMom->SetParameters(amplParam,0.213,0.294,0.09,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1352. amplParam /= fPrRatio;
  1353. fParPrNegMom->SetParameters(amplParam,0.213,0.294,0.09,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1354. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1355. fParDeMom->SetParameters(5.7,0.338,0.333,0.114,1.878); fPartYield[MpdPidUtils::kDeuteron].push_back(fParDeMom);
  1356. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fPartYield[MpdPidUtils::kDeuteron] ));
  1357. fParTrMom->SetParameters(0.2,-0.35,0.723,0.2,2.81); fPartYield[MpdPidUtils::kTriton].push_back(fParTrMom);
  1358. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fPartYield[MpdPidUtils::kTriton] ));
  1359. fParHe3Mom->SetParameters(0.36,-0.784,530.3,0.131,1.983); fPartYield[MpdPidUtils::kHe3].push_back(fParHe3Mom);
  1360. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fPartYield[MpdPidUtils::kHe3] ));
  1361. fParHe4Mom->SetParameters(6.6e-03,0.27,0.2,1.42,3.51); fPartYield[MpdPidUtils::kHe4].push_back(fParHe4Mom);
  1362. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fPartYield[MpdPidUtils::kHe4] ));
  1363. } else { /// fEnergy > 7.0 not ready, QGSM 9 gev
  1364. fParElPosMom->SetParameters(17.6,-0.12,0.078,0.167,0.00); fPartYield[MpdPidUtils::kElectron].push_back(fParElPosMom);
  1365. fParElNegMom->SetParameters(16.3,-0.12,0.078,0.167,0.00); fPartYield[MpdPidUtils::kElectron].push_back(fParElNegMom);
  1366. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kElectron,fPartYield[MpdPidUtils::kElectron] ));
  1367. fParMuPosMom->SetParameters(20.5,0.064,0.107,0.05,0.105); fPartYield[MpdPidUtils::kMuon].push_back(fParMuPosMom);
  1368. fParMuNegMom->SetParameters(20.5,0.064,0.107,0.05,0.105); fPartYield[MpdPidUtils::kMuon].push_back(fParMuNegMom);
  1369. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kMuon,fPartYield[MpdPidUtils::kMuon] ));
  1370. fParPiPosMom->SetParameters(473.,0.034,0.187,0.469,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1371. fParPiNegMom->SetParameters(501.6,0.034,0.187,0.469,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1372. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1373. fParKaPosMom->SetParameters(21.1,0.157,0.241,0.043,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1374. fParKaNegMom->SetParameters(12.25,0.157,0.241,0.043,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1375. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1376. amplParam = 67.4;
  1377. fParPrPosMom->SetParameters(amplParam,.02,0.365,0.01,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1378. amplParam /= fPrRatio;
  1379. fParPrNegMom->SetParameters(amplParam,.02,0.365,0.01,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1380. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1381. fParDeMom->SetParameters(1.8,0.05,0.432,0.163,1.878); fPartYield[MpdPidUtils::kDeuteron].push_back(fParDeMom);
  1382. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fPartYield[MpdPidUtils::kDeuteron] ));
  1383. fParTrMom->SetParameters(0.2,-0.35,0.723,0.2,2.81); fPartYield[MpdPidUtils::kTriton].push_back(fParTrMom);
  1384. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fPartYield[MpdPidUtils::kTriton] ));
  1385. fParHe3Mom->SetParameters(0.36,-0.784,530.3,0.131,1.983); fPartYield[MpdPidUtils::kHe3].push_back(fParHe3Mom);
  1386. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fPartYield[MpdPidUtils::kHe3] ));
  1387. fParHe4Mom->SetParameters(6.6e-03,0.27,0.2,1.42,3.51); fPartYield[MpdPidUtils::kHe4].push_back(fParHe4Mom);
  1388. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe4,fPartYield[MpdPidUtils::kHe4] ));
  1389. }
  1390. } else { /// Tracking == "CF", "CFHM" is not ready
  1391. if ( fEnergy < 7.0 ) {
  1392. fParPiPosMom->SetParameters(44660.6,1.4425,0.0821871,0.126819,-0.106069); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1393. fParPiNegMom->SetParameters(1929.85,24.5821,0.111797,0.066913,0.667266); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1394. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1395. fParKaPosMom->SetParameters(3089.81,9.2121,0.136135,0.125175,0.350274); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1396. fParKaNegMom->SetParameters(237.81,-0.746975,0.0771305,0.0365433,2.27772); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1397. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1398. amplParam = 114392.;
  1399. fParPrPosMom->SetParameters(amplParam,6.35265,0.188466,0.166392,0.7605); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1400. amplParam /= fPrRatio;
  1401. fParPrNegMom->SetParameters(amplParam,6.35265,0.188466,0.166392,0.7605); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1402. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1403. fParDeMom->SetParameters(5024.67,0.129733,0.266767,0.00308559,39.0077); fPartYield[MpdPidUtils::kDeuteron].push_back(fParDeMom);
  1404. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fPartYield[MpdPidUtils::kDeuteron] ));
  1405. fParTrMom->SetParameters(938.334,0.368862,0.0161982,0.00680544,109.992); fPartYield[MpdPidUtils::kTriton].push_back(fParTrMom);
  1406. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kTriton,fPartYield[MpdPidUtils::kTriton] ));
  1407. fParHe3Mom->SetParameters(661.212,8.47325,0.150273,0.135588,1.57518); fPartYield[MpdPidUtils::kHe3].push_back(fParHe3Mom);
  1408. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kHe3,fPartYield[MpdPidUtils::kHe3] ));
  1409. } else { /// fEnergy = 11.0 (mb, Au+Au), 12/12/2017, 394.5K events
  1410. fParPiPosMom->SetParameters(1287.54,48.9678,0.253939,0.121823,0.371256); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1411. fParPiNegMom->SetParameters(3979.89,3.39065,0.194877,0.392421,-0.186646); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1412. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1413. fParKaPosMom->SetParameters(9300.04,0.252028,0.280878,0.0806716,0.30038); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1414. fParKaNegMom->SetParameters(4270.24,0.269129,0.276149,0.0813025,0.316033); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1415. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1416. amplParam = 19730.6;
  1417. fParPrPosMom->SetParameters(amplParam,0.327478,0.478771,0.188208,0.263743); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1418. amplParam /= fPrRatio;
  1419. fParPrNegMom->SetParameters(amplParam,0.327478,0.478771,0.188208,0.263743); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1420. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1421. fParDeMom->SetParameters(303.123,0.144,0.580517,0.097639,1.31764); fPartYield[MpdPidUtils::kDeuteron].push_back(fParDeMom);
  1422. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kDeuteron,fPartYield[MpdPidUtils::kDeuteron] ));
  1423. }
  1424. }
  1425. }
  1426. if ( Generator == "URQMD" ) {
  1427. if ( fTrackingState == MpdPidUtils::kHP ) {
  1428. if ( fEnergy < 7.0 ) { /// not ready, QGSM 5 gev
  1429. fParPiPosMom->SetParameters(307.0,0.035,0.175,0.127,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1430. fParPiNegMom->SetParameters(325.6,0.035,0.175,0.127,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1431. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1432. fParKaPosMom->SetParameters(15.3,0.236,0.203,0.056,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1433. fParKaNegMom->SetParameters(8.88,0.236,0.203,0.056,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1434. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1435. amplParam = 104.0;
  1436. fParPrPosMom->SetParameters(amplParam,0.213,0.294,0.09,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1437. amplParam /= fPrRatio;
  1438. fParPrNegMom->SetParameters(amplParam,0.213,0.294,0.09,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1439. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1440. } else { /// fEnergy > 7.0, fParameterization 11 GeV (27/07/2017) 10K events
  1441. fPrRatio = 52.4698;
  1442. fParPiPosMom->SetParameters(1050.82,1.07492,0.16913,0.354773,0.253396); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1443. fParPiNegMom->SetParameters(1134.48,1.05525,0.170399,0.35685,0.241421); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1444. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1445. fParKaPosMom->SetParameters(316.545,0.193559,0.359936,0.0945873,0.283851); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1446. fParKaNegMom->SetParameters(174.667,0.280725,0.316105,0.101935,0.293752); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1447. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1448. amplParam = 872.525;
  1449. fParPrPosMom->SetParameters(amplParam,0.440378,0.475486,0.207794,0.440092); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1450. amplParam /= fPrRatio;
  1451. fParPrNegMom->SetParameters(amplParam,0.440378,0.475486,0.207794,0.440092); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1452. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1453. }
  1454. } else {
  1455. if ( fEnergy < 7.0 ) { /// not ready, QGSM 5 gev
  1456. fParPiPosMom->SetParameters(307.0,0.035,0.175,0.127,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1457. fParPiNegMom->SetParameters(325.6,0.035,0.175,0.127,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1458. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1459. fParKaPosMom->SetParameters(15.3,0.236,0.203,0.056,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1460. fParKaNegMom->SetParameters(8.88,0.236,0.203,0.056,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1461. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1462. amplParam = 104.0;
  1463. fParPrPosMom->SetParameters(amplParam,0.213,0.294,0.09,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1464. amplParam /= fPrRatio;
  1465. fParPrNegMom->SetParameters(amplParam,0.213,0.294,0.09,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1466. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1467. } else { /// fEnergy > 7.0, fParameterization 8 GeV (27/07/2017) 10K events
  1468. fPrRatio = 282.25;
  1469. fParPiPosMom->SetParameters(3360.54,1.08086,0.151008,0.330264,0.351397); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1470. fParPiNegMom->SetParameters(3530.8,1.14233,0.147187,0.328013,0.358974); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1471. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1472. fParKaPosMom->SetParameters(1206.47,0.245233,0.333437,0.0996193,0.327909); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1473. fParKaNegMom->SetParameters(529.028,0.288553,0.303136,0.0948728,0.376275); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1474. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1475. amplParam = 4408.45;
  1476. fParPrPosMom->SetParameters(amplParam,0.666617,0.416237,0.215083,0.487749); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1477. amplParam /= fPrRatio;
  1478. fParPrNegMom->SetParameters(amplParam,0.666617,0.416237,0.215083,0.487749); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1479. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1480. }
  1481. }
  1482. }
  1483. if ( Generator == "DEFAULT" ) { /// Generator == "DEFAULT", average 9 gev
  1484. fParPiPosMom->SetParameters(503.,0.035,0.203,0.668,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiPosMom);
  1485. fParPiNegMom->SetParameters(533.4,0.035,0.203,0.668,0.139); fPartYield[MpdPidUtils::kPion].push_back(fParPiNegMom);
  1486. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kPion,fPartYield[MpdPidUtils::kPion] ));
  1487. fParKaPosMom->SetParameters(29.3,0.17,0.27,0.06,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaPosMom);
  1488. fParKaNegMom->SetParameters(17.,0.17,0.27,0.06,0.494); fPartYield[MpdPidUtils::kKaon].push_back(fParKaNegMom);
  1489. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kKaon,fPartYield[MpdPidUtils::kKaon] ));
  1490. amplParam = 88.;
  1491. fParPrPosMom->SetParameters(amplParam,0.18,0.37,0.15,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrPosMom);
  1492. amplParam /= fPrRatio;
  1493. fParPrNegMom->SetParameters(amplParam,0.18,0.37,0.15,0.938); fPartYield[MpdPidUtils::kProton].push_back(fParPrNegMom);
  1494. fPartYieldMap.insert( pair<MpdPidUtils::ePartType,vecTF1ptrs>(MpdPidUtils::kProton,fPartYield[MpdPidUtils::kProton] ));
  1495. }
  1496. fGaus = new TF1("fGaus","gaus(0)",-1.,5.);
  1497. fGaus2 = new TF2("fGaus2","[0]*TMath::Gaus(x,[1],[2])*TMath::Gaus(y,[3],[4])",-2.,10.,-1.,5.);
  1498. fAsymGaus = new TF1("fAsymGaus", this, &MpdPid::AsymGaus, -1., 5., 4, "MpdPid", "AsymGaus");
  1499. fAsymGaus2 = new TF2("fAsymGaus2", this, &MpdPid::AsymGaus2, -1., 5., -2., 10., 6, "MpdPid", "AsymGaus2");
  1500. }
  1501. vecTF1ptrs MpdPid::GetVecdEdxMean(MpdPidUtils::ePartType iType) {
  1502. vecTF1ptrs ret;
  1503. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator it = fdEdxBBMap.find(iType);
  1504. if ( it != fdEdxBBMap.end() ) ret = it->second;
  1505. else cout << "Parameterization of <dE/dx> (" << MpdPidUtils::cParticleName[iType] << ") does not found." << endl;
  1506. return ret;
  1507. }
  1508. vecTF1ptrs MpdPid::GetVecdEdxWidth(MpdPidUtils::ePartType iType) {
  1509. vecTF1ptrs ret;
  1510. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator it = fdEdxSigmaMap.find(iType);
  1511. if ( it != fdEdxSigmaMap.end() ) ret = it->second;
  1512. else cout << "Parameterization of dE/dx width (" << MpdPidUtils::cParticleName[iType] << ") does not found." << endl;
  1513. return ret;
  1514. }
  1515. vecTF1ptrs MpdPid::GetVecdEdxAsym(MpdPidUtils::ePartType iType) {
  1516. vecTF1ptrs ret;
  1517. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator it = fdEdxDeltaMap.find(iType);
  1518. if ( it != fdEdxDeltaMap.end() ) ret = it->second;
  1519. else cout << "Parameterization of dE/dx delta parameter (" << MpdPidUtils::cParticleName[iType] << ") does not found." << endl;
  1520. return ret;
  1521. }
  1522. vecTF1ptrs MpdPid::GetVecm2Width(MpdPidUtils::ePartType iType) {
  1523. vecTF1ptrs ret;
  1524. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator it = fParM2Map.find(iType);
  1525. if ( it != fParM2Map.end() ) ret = it->second;
  1526. else cout << "Parameterization of m^2 width (" << MpdPidUtils::cParticleName[iType] << ") does not found." << endl;
  1527. return ret;
  1528. }
  1529. vecTF1ptrs MpdPid::GetVecYield(MpdPidUtils::ePartType iType) {
  1530. vecTF1ptrs ret;
  1531. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator it = fPartYieldMap.find(iType);
  1532. if ( it != fPartYieldMap.end() ) ret = it->second;
  1533. else cout << "Parameterization of yield (" << MpdPidUtils::cParticleName[iType] << ") does not found." << endl;
  1534. return ret;
  1535. }
  1536. Double_t MpdPid::GetDedxParam(Double_t p, MpdPidUtils::ePartType iType) {
  1537. Double_t dedx;
  1538. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator ret = fdEdxBBMap.find(iType);
  1539. if ( ret != fdEdxBBMap.end() ) {
  1540. for ( TF1* BBF : ret->second ) {
  1541. if ( ( p < BBF->GetXmax() ) && ( p >= BBF->GetXmin() ) ) {
  1542. dedx = BBF->Eval(p);
  1543. break;
  1544. }
  1545. }
  1546. }
  1547. return dedx;
  1548. }
  1549. Double_t MpdPid::Getm2WidthParam(Double_t p, MpdPidUtils::ePartType iType) {
  1550. Double_t m2W;
  1551. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator ret = fParM2Map.find(iType);
  1552. if ( ret != fParM2Map.end() ) {
  1553. for ( TF1* m2WF : ret->second ) {
  1554. if ( ( p < m2WF->GetXmax() ) && ( p >= m2WF->GetXmin() ) ) {
  1555. m2W = m2WF->Eval(p);
  1556. break;
  1557. }
  1558. }
  1559. }
  1560. return m2W;
  1561. }
  1562. void MpdPid::ComputeBayesCoefficients(Double_t p) {
  1563. Int_t maxType = fCharge == MpdPidUtils::kPos ? MpdPidUtils::kHe4 : MpdPidUtils::kProton;
  1564. Double_t fsum = 0.0;
  1565. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator ret;
  1566. for ( Int_t iType = MpdPidUtils::kElectron; iType < MpdPidUtils::kNSpecies; iType++ ) fBayesCoefficients[iType] = 0.0;
  1567. for ( Int_t iType = MpdPidUtils::kElectron; iType < maxType+1; iType++ ) {
  1568. ret = fPartYieldMap.find(static_cast<MpdPidUtils::ePartType>(iType));
  1569. if ( ret != fPartYieldMap.end() ) {
  1570. fsum += ret->second[fCharge]->Eval(p);
  1571. }
  1572. }
  1573. for ( Int_t iType = MpdPidUtils::kElectron; iType < maxType+1; iType++ ) {
  1574. ret = fPartYieldMap.find(static_cast<MpdPidUtils::ePartType>(iType));
  1575. if ( ret != fPartYieldMap.end() ) {
  1576. fBayesCoefficients[iType] = ret->second[fCharge]->Eval(p) / fsum;
  1577. }
  1578. }
  1579. }
  1580. Bool_t MpdPid::FillProbs(MpdTrack* track) {
  1581. if ( track == 0 ) return (kFALSE);
  1582. Double_t px = track->GetPx(), py = track->GetPy(), pz = track->GetPz();
  1583. Double_t p = TMath::Sqrt( px*px + py*py + pz*pz );
  1584. ///
  1585. /// NO parameterisation beyond p=5.0 GeV/c
  1586. /// ignore anti-d,-He3 and -He4
  1587. ///
  1588. Int_t charge = 1; if ( track->GetPt() > 0 ) charge = -1;
  1589. Int_t flag = track->GetTofFlag();
  1590. Double_t dedx = track->GetdEdXTPC();
  1591. Bool_t ret;
  1592. if (flag == 2 || flag == 6) {
  1593. Double_t m2 = track->GetTofMass2();
  1594. ret = FillProbs( p, dedx, m2, charge );
  1595. } else ret = FillProbs( p, dedx, charge );
  1596. return ret;
  1597. }
  1598. Bool_t MpdPid::FillProbs( Double_t p, Double_t dedx, Int_t charge ) {
  1599. ///
  1600. /// NO parameterisation beyond p=5.0 GeV/c
  1601. /// ignore anti-d,-He3 and -He4
  1602. ///
  1603. Double_t emean[MpdPidUtils::kNSpecies], sige[MpdPidUtils::kNSpecies], probs[MpdPidUtils::kNSpecies], fsum = 0.0, cut;
  1604. if ( p > 5.0 ) return kFALSE;
  1605. if ( charge == 0 ) return kFALSE;
  1606. fCharge = charge > 0 ? MpdPidUtils::kPos : MpdPidUtils::kNeg;
  1607. if ( fSigmaEloss > 0.1 ) cut = fSigmaEloss;
  1608. else return kFALSE;
  1609. Int_t nSigFlag = 0;
  1610. ///
  1611. /// Params. for dE/dx sigma versus total momentum.
  1612. /// These are koef*<dE/dx> , koef=0.07
  1613. /// Deviations from Bethe-Bloch at low-p accounted by somewhat larger sigmas
  1614. ///
  1615. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) {
  1616. emean[iType] = GetDedxParam(p, static_cast<MpdPidUtils::ePartType>(iType));
  1617. sige[iType] = GetDedxWidthValue(p, static_cast<MpdPidUtils::ePartType>(iType));
  1618. }
  1619. if (fMethod) { /// bayesian approach
  1620. ComputeBayesCoefficients(p);
  1621. ///
  1622. /// Set prob=0. for differences greater than "n" of sigmas
  1623. /// otherwise evaluation..
  1624. ///
  1625. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) {
  1626. probs[iType] = ComputeDedxProb_asym(cut, p, dedx, fBayesCoefficients[iType], emean[iType], sige[iType], static_cast<MpdPidUtils::ePartType>(iType));
  1627. fsum += probs[iType];
  1628. }
  1629. ///
  1630. /// Normalization
  1631. ///
  1632. if ( 1.0e+8 * fsum > 0.0 ) {
  1633. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) fProb[iType] = probs[iType] / fsum;
  1634. } else return kFALSE; /// outliers!
  1635. return kTRUE;
  1636. } else { /// n-sigma method
  1637. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) {
  1638. ComputeEnLossSigma(p, dedx, emean[iType], sige[iType], static_cast<MpdPidUtils::ePartType>(iType));
  1639. if ( ( fEnLossSigmasArray[iType] < cut ) && ( fNSigSpecies[iType] ) ) { fProb[iType] = 1.0; nSigFlag++; }
  1640. else fProb[iType] = 0.0;
  1641. }
  1642. if ( nSigFlag > 1 ) { for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) fProb[iType] = 0.0; }
  1643. if ( nSigFlag == 1 ) return kTRUE;
  1644. else return kFALSE;
  1645. }
  1646. }
  1647. Bool_t MpdPid::FillProbs(Double_t p, Double_t dedx, Double_t m2, Int_t charge) {
  1648. ///
  1649. /// NO parameterisation beyond p=3.0 GeV/c
  1650. /// ignore anti-d,-He3 and -He4
  1651. ///
  1652. Double_t emean[MpdPidUtils::kNSpecies], sige[MpdPidUtils::kNSpecies], sigm[MpdPidUtils::kNSpecies], probs[MpdPidUtils::kNSpecies], fsum = 0.0, cut_dedx, cut_m2;
  1653. if ( p > 5.0 ) return kFALSE;
  1654. if ( charge == 0 ) return kFALSE;
  1655. if ( (fSigmaEloss > 0.1) && (fSigmaTof > 0.1) )
  1656. { cut_dedx = fSigmaEloss; cut_m2 = fSigmaTof; }
  1657. else return kFALSE;
  1658. fCharge = charge > 0 ? MpdPidUtils::kPos : MpdPidUtils::kNeg;
  1659. Int_t nSigFlag = 0;
  1660. ///
  1661. /// Params. for dE/dx sigma versus total momentum.
  1662. /// These are koef*<dE/dx> , koef=0.06
  1663. /// Deviations from Bethe-Bloch at low-p accounted by somewhat larger sigmas
  1664. ///
  1665. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) {
  1666. emean[iType] = GetDedxParam(p, static_cast<MpdPidUtils::ePartType>(iType));
  1667. sige[iType] = GetDedxWidthValue(p, static_cast<MpdPidUtils::ePartType>(iType));
  1668. sigm[iType] = Getm2WidthParam(p, static_cast<MpdPidUtils::ePartType>(iType));
  1669. }
  1670. ///
  1671. /// Set prob=0. for differences greater than n-sigmas
  1672. /// otherwise evaluation..
  1673. ///
  1674. const Double_t aMass[MpdPidUtils::kNSpecies] = { 0.0007, 0.011, 0.019, 0.24, 0.887, 3.54, 7.87, 1.983, 3.51 };
  1675. if (fMethod) { /// bayesian approach
  1676. ComputeBayesCoefficients(p);
  1677. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) {
  1678. probs[iType] = ComputeCombProb_asym(cut_dedx, cut_m2, p, dedx, m2, fBayesCoefficients[iType], emean[iType], aMass[iType], sige[iType], sigm[iType], static_cast<MpdPidUtils::ePartType>(iType));
  1679. if ( fTrackingState == MpdPidUtils::kCFHM ) {
  1680. if ( ( p < 0.1 ) && ( iType == MpdPidUtils::kPion ) ) probs[iType] = 0.0;
  1681. if ( ( p < 0.2 ) && ( iType == MpdPidUtils::kKaon ) ) probs[iType] = 0.0;
  1682. if ( ( p < 0.3 ) && ( iType == MpdPidUtils::kProton ) ) probs[iType] = 0.0;
  1683. if ( ( p < 0.5 ) && ( iType == MpdPidUtils::kDeuteron ) ) probs[iType] = 0.0;
  1684. if ( ( p < 0.7 ) && ( iType == MpdPidUtils::kTriton ) ) probs[iType] = 0.0;
  1685. if ( ( p < 0.55 ) && ( iType == MpdPidUtils::kHe3 ) ) probs[iType] = 0.0;
  1686. if ( ( p < 0.65 ) && ( iType == MpdPidUtils::kHe4 ) ) probs[iType] = 0.0;
  1687. }
  1688. fsum += probs[iType];
  1689. }
  1690. ///
  1691. /// Normalization
  1692. ///
  1693. if ( 1.0e+8 * fsum > 0.0 ) {
  1694. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) fProb[iType] = probs[iType] / fsum;
  1695. } else return kFALSE; /// outliers!
  1696. return kTRUE;
  1697. } else { /// n-sigma method
  1698. for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) {
  1699. ComputeEnLossSigma(p, dedx, emean[iType], sige[iType], static_cast<MpdPidUtils::ePartType>(iType));
  1700. ComputeMSquaredSigma(m2, aMass[iType], sigm[iType], static_cast<MpdPidUtils::ePartType>(iType));
  1701. if ( ( iType == MpdPidUtils::kPion ) && ( p < 0.1 ) ) fMSquaredSigmasArray[iType] = 999.;
  1702. if ( ( iType == MpdPidUtils::kKaon ) && ( p < 0.2 ) ) fMSquaredSigmasArray[iType] = 999.;
  1703. if ( ( iType == MpdPidUtils::kProton ) && ( p < 0.3 ) ) fMSquaredSigmasArray[iType] = 999.;
  1704. if ( ( iType == MpdPidUtils::kDeuteron ) && ( p < 0.5 ) ) fMSquaredSigmasArray[iType] = 999.;
  1705. if ( ( iType == MpdPidUtils::kTriton ) && ( p < 0.7 ) ) fMSquaredSigmasArray[iType] = 999.;
  1706. if ( ( iType == MpdPidUtils::kHe3 ) && ( p < 0.55 ) ) fMSquaredSigmasArray[iType] = 999.;
  1707. if ( ( iType == MpdPidUtils::kHe4 ) && ( p < 0.65 ) ) fMSquaredSigmasArray[iType] = 999.;
  1708. if ( ( TMath::Sqrt( TMath::Power( fEnLossSigmasArray[iType], 2) + TMath::Power( fMSquaredSigmasArray[iType], 2) ) <= TMath::Sqrt( TMath::Power( cut_dedx, 2 ) + TMath::Power( cut_m2, 2 )) ) && (fNSigSpecies[iType]) ) {
  1709. fProb[iType] = 1.0;
  1710. nSigFlag++;
  1711. } else fProb[iType] = 0.0;
  1712. }
  1713. if ( nSigFlag > 1 ) { for ( Int_t iType = 0; iType < MpdPidUtils::kNSpecies; iType++ ) fProb[iType] = 0.0; }
  1714. if ( nSigFlag == 1 ) return kTRUE;
  1715. else return kFALSE;
  1716. }
  1717. }
  1718. Long_t MpdPid::GetMaxProb() {
  1719. Long_t pdg = 211;
  1720. Double_t pcut = 0.501;
  1721. Long_t codes[MpdPidUtils::kNSpecies] = { -11, -13, 211, 321, 2212, 1000010020, 1000010030, 1000020030, 1000020040 };
  1722. Double_t probs[MpdPidUtils::kNSpecies] = { fProb[MpdPidUtils::kElectron],fProb[MpdPidUtils::kMuon],fProb[MpdPidUtils::kPion],fProb[MpdPidUtils::kKaon],fProb[MpdPidUtils::kProton],fProb[MpdPidUtils::kDeuteron],fProb[MpdPidUtils::kTriton],fProb[MpdPidUtils::kHe3],fProb[MpdPidUtils::kHe4]};
  1723. if (fProb[MpdPidUtils::kElectron] > pcut) pdg = -11;
  1724. else if (fProb[MpdPidUtils::kMuon] > pcut) pdg = -13;
  1725. else if (fProb[MpdPidUtils::kPion] > pcut) pdg = 211;
  1726. else if (fProb[MpdPidUtils::kKaon] > pcut) pdg = 321;
  1727. else if (fProb[MpdPidUtils::kProton] > pcut) pdg = 2212;
  1728. else if (fProb[MpdPidUtils::kDeuteron] > pcut) pdg = 1000010020;
  1729. else if (fProb[MpdPidUtils::kTriton] > pcut) pdg = 1000010030;
  1730. else if (fProb[MpdPidUtils::kHe3] > pcut) pdg = 1000020030;
  1731. else if (fProb[MpdPidUtils::kHe4] > pcut) pdg = 1000020040;
  1732. else{
  1733. Long_t tmp;
  1734. for (Int_t i = 1; i < MpdPidUtils::kNSpecies; i++) {
  1735. if ( probs[0] < probs[i] ) {
  1736. tmp = codes[0];
  1737. codes[0] = codes[i];
  1738. codes[i] = tmp;
  1739. tmp = probs[0];
  1740. probs[0] = probs[i];
  1741. probs[i] = tmp;
  1742. }
  1743. }
  1744. pdg = codes[0];
  1745. }
  1746. pdg *= ( fCharge == MpdPidUtils::kPos ) ? 1.0 : -1.0;
  1747. return pdg;
  1748. }
  1749. Double_t MpdPid::GetNsigmaToBetheBloch(TString species) {
  1750. Double_t ans = -1.0;
  1751. if (species.EqualTo("el")) ans = fEnLossSigmasArray[MpdPidUtils::kElectron];
  1752. else if (species.EqualTo("mu")) ans = fEnLossSigmasArray[MpdPidUtils::kMuon];
  1753. else if (species.EqualTo("pi")) ans = fEnLossSigmasArray[MpdPidUtils::kPion];
  1754. else if (species.EqualTo("ka")) ans = fEnLossSigmasArray[MpdPidUtils::kKaon];
  1755. else if (species.EqualTo("pr")) ans = fEnLossSigmasArray[MpdPidUtils::kProton];
  1756. else if (species.EqualTo("de")) ans = fEnLossSigmasArray[MpdPidUtils::kDeuteron];
  1757. else if (species.EqualTo("tr")) ans = fEnLossSigmasArray[MpdPidUtils::kTriton];
  1758. else if (species.EqualTo("he3")) ans = fEnLossSigmasArray[MpdPidUtils::kHe3];
  1759. else if (species.EqualTo("he4")) ans = fEnLossSigmasArray[MpdPidUtils::kHe4];
  1760. return ans;
  1761. }
  1762. Double_t MpdPid::GetNsigmaToBetheBloch(MpdPidUtils::ePartType iType) {
  1763. Double_t ans = ( iType != MpdPidUtils::kUnknown ) ? fEnLossSigmasArray[iType] : -1.0;
  1764. return ans;
  1765. }
  1766. Double_t MpdPid::GetNsigmaToAverageMass2(TString species) {
  1767. Double_t ans = -1.0;
  1768. if (species.EqualTo("el")) ans = fMSquaredSigmasArray[MpdPidUtils::kElectron];
  1769. else if (species.EqualTo("mu")) ans = fMSquaredSigmasArray[MpdPidUtils::kMuon];
  1770. else if (species.EqualTo("pi")) ans = fMSquaredSigmasArray[MpdPidUtils::kPion];
  1771. else if (species.EqualTo("ka")) ans = fMSquaredSigmasArray[MpdPidUtils::kKaon];
  1772. else if (species.EqualTo("pr")) ans = fMSquaredSigmasArray[MpdPidUtils::kProton];
  1773. else if (species.EqualTo("de")) ans = fMSquaredSigmasArray[MpdPidUtils::kDeuteron];
  1774. else if (species.EqualTo("tr")) ans = fMSquaredSigmasArray[MpdPidUtils::kTriton];
  1775. else if (species.EqualTo("he3")) ans = fMSquaredSigmasArray[MpdPidUtils::kHe3];
  1776. else if (species.EqualTo("he4")) ans = fMSquaredSigmasArray[MpdPidUtils::kHe4];
  1777. return ans;
  1778. }
  1779. Double_t MpdPid::GetNsigmaToAverageMass2(MpdPidUtils::ePartType iType) {
  1780. Double_t ans = ( iType != MpdPidUtils::kUnknown ) ? fMSquaredSigmasArray[iType] : -1.0;
  1781. return ans;
  1782. }
  1783. void MpdPid::SetPrRat(Double_t PrRat) {
  1784. fPrRatio = PrRat;
  1785. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator it = fPartYieldMap.find(MpdPidUtils::kProton);
  1786. if ( it != fPartYieldMap.end() ) {
  1787. it->second[1]->SetParameter( 0, it->second[1]->GetParameter(0) / PrRat );
  1788. }
  1789. }
  1790. Double_t MpdPid::GetBayesCoefficient(Double_t p, MpdPidUtils::ePartType iType, MpdPidUtils::ePartCharge ech) {
  1791. Int_t maxType = ech == MpdPidUtils::kPos ? MpdPidUtils::kHe4 : MpdPidUtils::kProton;
  1792. Double_t fsum = 0.0;
  1793. map <MpdPidUtils::ePartType,vecTF1ptrs>::iterator ret;
  1794. for ( Int_t itype = MpdPidUtils::kElectron; itype < MpdPidUtils::kNSpecies; itype++ ) fBayesCoefficients[itype] = 0.0;
  1795. for ( Int_t itype = MpdPidUtils::kElectron; itype < maxType+1; itype++ ) {
  1796. ret = fPartYieldMap.find(static_cast<MpdPidUtils::ePartType>(itype));
  1797. if ( ret != fPartYieldMap.end() ) {
  1798. fsum += ret->second[ech]->Eval(p);
  1799. }
  1800. }
  1801. Double_t ans = -1.0;
  1802. ret = fPartYieldMap.find(static_cast<MpdPidUtils::ePartType>(iType));
  1803. if ( ret != fPartYieldMap.end() ) ans = ret->second[ech]->Eval(p) / fsum;
  1804. else cout << "Bayes Coefficient cannot be computed." << endl;
  1805. return ans;
  1806. }
  1807. void MpdPid::Print(const char* comment, ostream& os) {
  1808. if (comment != nullptr) os << comment;
  1809. os << "MpdPid::Print" << endl;
  1810. for ( Int_t iType = MpdPidUtils::kElectron; iType < MpdPidUtils::kNSpecies+1; iType++ )
  1811. os << "fProb[" << MpdPidUtils::cParticleShortName[iType] << "] = " << fProb[iType] << endl;
  1812. }
  1813. ClassImp(MpdPid);