]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/ThermalFits/InterpolateRatiosAndYields.C
Improved computation of ratios for part+antipart
[u/mrichter/AliRoot.git] / PWGLF / ThermalFits / InterpolateRatiosAndYields.C
1 #if !defined (__CINT__) || (defined(__MAKECINT__))
2 #include <iostream>
3 #include "TClonesArray.h"
4 #include "AliParticleYield.h"
5
6 #endif
7 TClonesArray * arr =0;
8
9 void InterpolateRatios(Int_t pdg1, Int_t pdg2, TString centr1="V0M0005", TString centr2="V0M0510", TString centrfinal="V0M0010") ;
10 void Interpolate0010(Int_t pdg) ;
11 void Interpolate6080(Int_t pdg) ;
12
13 void ExtrapolateWithConstantRatioToPions(Int_t pdg, TString centrOrigin, TString centrDest);
14 Int_t collSystem = -1;
15 Float_t energy = -1;
16
17 void InterpolateRatiosAndYields() {
18 #if !(!defined (__CINT__) || (defined(__MAKECINT__)))
19   LoadLibs();
20 #endif
21   collSystem = 2; energy =2760;
22   // *************** pi, K, pr *****************
23   arr=   AliParticleYield::ReadFromASCIIFile("PbPb_2760_PiKaPr.txt");
24   // Interpolate0010(211);
25   // Interpolate0010(-211);
26   // Interpolate0010(321);
27   // Interpolate0010(-321);
28   // Interpolate0010(2212);
29   // Interpolate0010(-2212);
30   //  InterpolateRatios(2212,211);  
31   //  InterpolateRatios(321,211);  
32   // Interpolate6080(211);
33   // Interpolate6080(-211);
34   // Interpolate6080(2212);
35   // Interpolate6080(-2212);
36   Interpolate6080(321);
37   Interpolate6080(-321);
38   // InterpolateRatios(2212,211, "V0M6070", "V0M7080", "V0M6080");  
39   // InterpolateRatios(321,211, "V0M6070", "V0M7080", "V0M6080");    
40
41   // *************** Lambda and K0 *****************
42   // arr=   AliParticleYield::ReadFromASCIIFile("PbPb_2760_LambdaK0.txt");
43   // Interpolate0010(3122);
44   // Interpolate0010(310);
45   // *************** Helium 3 *****************
46   // arr = AliParticleYield::ReadFromASCIIFile("PbPb_2760_DeuHelium3.txt");
47   // arr->AbsorbObjects(AliParticleYield::ReadFromASCIIFile("./PbPb_2760_AveragedNumbers.txt"));
48   // ExtrapolateWithConstantRatioToPions(1000020030, "V0M0020", "V0M0010");
49   // *************** Kstar *****************
50   // arr = AliParticleYield::ReadFromASCIIFile("PbPb_2760_Kstar892.txt");
51   // arr->AbsorbObjects(AliParticleYield::ReadFromASCIIFile("./PbPb_2760_AveragedNumbers.txt"));
52   // ExtrapolateWithConstantRatioToPions(313, "V0M0020", "V0M0010");
53
54   // *************** pPb, deuteron *********************
55   //  collSystem = 1; energy = 5020;
56   // 1. Average pions
57   //arr = AliParticleYield::ReadFromASCIIFile("pPb_5020_PiKaPrLamndaK0.txt");
58   //  Interpolate0010(211);
59   //  Interpolate0010(-211);
60   // 2. Extrapolate the deuteron
61   // arr = AliParticleYield::ReadFromASCIIFile("pPb_5020_deuteron.txt");
62   // arr->AbsorbObjects(AliParticleYield::ReadFromASCIIFile("pPb_5020_PiKaPrLamndaK0.txt"));
63   //  ExtrapolateWithConstantRatioToPions(1000010020, "V0A0010", "V0A0005");
64   // ExtrapolateWithConstantRatioToPions(-1000010020, "V0A0010", "V0A0005");
65
66
67 }
68
69 void DUMP(){
70   AliParticleYield * p0 = AliParticleYield::FindParticle(arr, 211,  2, 2760., "V0M0005");
71   //  p0 = AliParticleYield::Add(p0, AliParticleYield::FindParticle(arr, -211,  2, 2760., "V0M0005"));
72   AliParticleYield * p2 = AliParticleYield::FindParticle(arr, 2212, 2, 2760., "V0M0005");
73   //  p2 = AliParticleYield::Add(p2,AliParticleYield::FindParticle(arr, -2212, 2, 2760., "V0M0005"));
74   AliParticleYield *pratio = AliParticleYield::Divide(p2,p0);
75   pratio->Print();
76   AliParticleYield::FindRatio(arr, 2212, 211, 2, 2760, "V0M0005")->Print();
77
78 }
79
80 void Interpolate0010(Int_t pdg) {
81
82   TString centrPrefix = collSystem == 2 ? "V0M" : "V0A";
83
84   AliParticleYield * p0 = AliParticleYield::FindParticle(arr, pdg, collSystem, energy, centrPrefix+"0005");
85   AliParticleYield * p1 = AliParticleYield::FindParticle(arr, pdg, collSystem, energy, centrPrefix+"0510");
86   p0->Scale(0.5);
87   p1->Scale(0.5);
88   AliParticleYield * pav = AliParticleYield::Add(p0,p1);
89   std::cout << pav->GetYield() << ", " << pav->GetStatError() << ", "<< pav->GetSystError() << std::endl;
90
91
92
93 void Interpolate6080(Int_t pdg) {
94
95   TString centrPrefix = collSystem == 2 ? "V0M" : "V0A";
96
97   AliParticleYield * p0 = AliParticleYield::FindParticle(arr, pdg, collSystem, energy, centrPrefix+"6070");
98   AliParticleYield * p1 = AliParticleYield::FindParticle(arr, pdg, collSystem, energy, centrPrefix+"7080");
99   p0->Scale(0.5);
100   p1->Scale(0.5);
101   AliParticleYield * pav = AliParticleYield::Add(p0,p1);
102   std::cout << pav->GetYield() << ", " << pav->GetStatError() << ", "<< pav->GetSystError() << std::endl;
103
104
105
106
107 void InterpolateRatios(Int_t pdg1, Int_t pdg2, TString centr1, TString centr2, TString centrfinal) {
108
109   AliParticleYield * ratio[2];
110   ratio[0] = AliParticleYield::FindRatio(arr, pdg1, pdg2, 2, 2760., centr1, 1);
111   ratio[1] = AliParticleYield::FindRatio(arr, pdg1, pdg2, 2, 2760., centr2, 1);
112   AliParticleYield * average = AliParticleYield::Add(ratio[0], ratio[1]);
113   average->Scale(0.5);
114   AliParticleYield * pi[2];
115   pi[0] = AliParticleYield::FindParticle(arr, pdg2, 2, 2760., centr1, 0);
116   pi[0] = AliParticleYield::Add(pi[0],AliParticleYield::FindParticle(arr, -pdg2, 2, 2760., centr1, 0));
117   pi[1] = AliParticleYield::FindParticle(arr, pdg2, 2, 2760., centr2, 0);
118   pi[1] = AliParticleYield::Add(pi[1],AliParticleYield::FindParticle(arr, -pdg2, 2, 2760., centr2, 0));
119   
120
121   // Scale to get protons with errors corresponding to the ratio
122   ratio[0]->Scale(pi[0]->GetYield()) ;
123   ratio[1]->Scale(pi[1]->GetYield()) ;
124
125   ratio[0]->Add(ratio[0], ratio[1]);
126   pi[0]->Add(pi[0],pi[1]);
127   pi[0]->SetNormError(0);
128   pi[0]->SetStatError(0);
129   pi[0]->SetSystError(0);
130   
131   ratio[0]->Scale(1./pi[0]->GetYield());
132   ratio[0]->SetCentr(centrfinal);
133
134   ratio[0]->Print();
135   //  average->Dump();
136   average->Print();
137
138     
139 }
140
141 void ExtrapolateWithConstantRatioToPions(Int_t pdg, TString centrOrigin, TString centrDest) {
142
143   AliParticleYield * part       =  AliParticleYield::FindParticle(arr, pdg,collSystem, energy, centrOrigin);
144   AliParticleYield * pionOrigin =  AliParticleYield::FindParticle(arr, 211,collSystem, energy, centrOrigin);
145   AliParticleYield * pionDest   =  AliParticleYield::FindParticle(arr, 211,collSystem, energy, centrDest);
146   if(!part || !pionOrigin | !pionDest) {
147     return;
148   }
149   // The pion yield is takes
150   part->Scale (1./pionOrigin->GetYield());
151   part->Scale (pionDest->GetYield());
152   part->SetCentr(centrDest);
153   part->SetMeasurementType(part->GetMeasurementType() | AliParticleYield::kTypeExtrPionRatio);
154   part->Print();
155   //  std::cout << "1" << std::endl;
156   TClonesArray * arrOut = new TClonesArray("AliParticleYield");
157   //  std::cout << "2" << std::endl;
158   new((*arrOut)[0]) AliParticleYield(*part) ;
159
160   //  std::cout << "3" << std::endl;
161   //  std::cout << "4" << std::endl;
162   AliParticleYield::SaveAsASCIIFile(arrOut, "temp.txt");
163 }