1 #if !defined (__CINT__) || (defined(__MAKECINT__))
3 #include "TClonesArray.h"
5 #include "AliPWGFunc.h"
6 //#include "LoadSpectraPiKPPbPb.C"
7 #include "AliParticleYield.h"
9 #include "TDatabasePDG.h"
14 void AddHistograms (TH1 * hdest, TH1 * hsource, Float_t scale = 1. , Int_t isLinear = 0) ;
15 TH1* PrintYieldAndError(TH1 * hsyst, TH1* hstat, Int_t ifunc = 0, Double_t massParticle=0.139) ;
16 TH1* ReweightSpectra(TClonesArray * histos, Double_t * weights, Int_t isLinear = 0, TString suffix = "") ;
17 void LoadStuff(Bool_t loadPbPb = kTRUE) ;
18 void AverageAndExtrapolate(TString what);
29 void AverageAndExtrapolate () {
31 LoadStuff(0); // True PbPb, False pPb
33 // PrintYieldAndError(hSpectraCentr_sys[0][kMyProton][0], hSpectraCentr_stat[0][kMyProton][0], 0, mass[2]);
35 // PrintYieldAndError(hLambdaSyst[0], hLambdaStat[0], 0, TDatabasePDG::Instance()->GetParticle("Lambda0")->Mass());
36 // icentr, ipart, icharge
38 // AverageAndExtrapolate("pions_pos_0020");
39 // AverageAndExtrapolate("pions_pos_0010");
40 // AverageAndExtrapolate("pions_neg_0010");
41 AverageAndExtrapolate("pions_sum_0010");
42 // AverageAndExtrapolate("kaons_pos_0010");
43 // AverageAndExtrapolate("kaons_neg_0010");
44 // AverageAndExtrapolate("protons_pos_0010");
45 // AverageAndExtrapolate("protons_neg_0010");
46 // AverageAndExtrapolate("lambda_0010");
47 // AverageAndExtrapolate("k0s_0010");
48 // AverageAndExtrapolate("pions_pos_6080");
49 // AverageAndExtrapolate("pions_neg_6080");
50 // AverageAndExtrapolate("kaons_pos_6080");
51 // AverageAndExtrapolate("kaons_neg_6080");
52 // AverageAndExtrapolate("protons_pos_6080");
53 // AverageAndExtrapolate("protons_neg_6080");
57 TH1* PrintYieldAndError(TH1 * hsyst, TH1* hstat, Int_t ifunc, Double_t massParticle) {
61 f= BGBlastWave("fBlastWave", massParticle);
62 f->SetParameters(massParticle, 0.640, 0.097, 0.73, 100); // FIXME
64 else if (ifunc == 1) {
65 f = fm.GetTsallis(massParticle, 0.2, 11, 800, "fTsallisPion");
68 // TH1 * h = YieldMean(hstat, hsyst, f, 0.0, 100, 0.01, 0.1, "");
69 TH1 * h = YieldMean(hstat, hsyst, f, 0.0, 100);
70 // std::cout << "H " << h << std::endl;
71 std::cout << "" << std::endl;
72 std::cout << h->GetBinContent(1) << ", " << h->GetBinContent(2) << ", " << h->GetBinContent(3) << std::endl;
73 std::cout << "" << std::endl;
80 TH1* ReweightSpectra(TObjArray * histos, Double_t * weights, Int_t isLinear, TString suffix) {
82 // sums a number of spectra with a given weight. Used to combine
83 // several centrality bins. The weights should add up to 1 and be
84 // proportional to the width of the centrality bin for each
86 // Suffix is added to the name of the histogram.
87 // if linear = 1 errors are summed linearly rather than in quadrature
94 while ((h = dynamic_cast<TH1*>(it.Next()))) {
96 std::cout << "ERROR cannot get one of the histos!" << std::endl;
101 // First histogram, clone it
102 hsum = (TH1D*) h->Clone(TString(h->GetName())+suffix);
103 hsum->Scale(weights[ihisto++]);
105 AddHistograms(hsum, h, weights[ihisto++], isLinear);
111 void AddHistograms (TH1 * hdest, TH1 * hsource, Float_t scale, Int_t isLinear) {
112 // THis method assumes that the 2 histos are consistent!!
113 TH1 * hsourceLoc = (TH1*) hsource->Clone("hsourceLoc");
114 hsourceLoc->Scale(scale);
116 hdest->Add(hsourceLoc);
119 Int_t nbin = hsourceLoc->GetNbinsX();
120 for(Int_t ibin = 0; ibin < nbin; ibin++){
121 Double_t content = hdest->GetBinContent(ibin) + hsourceLoc->GetBinContent(ibin);
122 Double_t error = hdest->GetBinError (ibin) + hsourceLoc->GetBinError (ibin);
123 hdest->SetBinContent(ibin,content);
124 hdest->SetBinError(ibin, error);
137 void LoadStuff(Bool_t loadPbPb) {
139 gROOT->LoadMacro("LoadSpectraPiKPPbPb.C");
140 LoadSpectraPiKPPbPb();
143 gROOT->LoadMacro("LoadSpectraPiKPProtonLead.C");
144 LoadSpectraPiKPProtonLead();
147 gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/UTILS/YieldMean.C");
148 gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/UTILS/SpectraUtils.C");
150 // Load Lambdas and K0s
151 TFile * f = new TFile("k0s_lambda_final_spectra.root");
152 const char * multTags[] = { "0005", "0510", "1020", "2040", "4060", "6080", "8090"};
153 for (Int_t icentr = 0; icentr<7; icentr++) {
154 hLambdaStat[icentr] = (TH1*) f->Get(Form("statonly_cent%s_Lambda",multTags[icentr]));
155 hLambdaSyst[icentr] = (TH1*) f->Get(Form("statonly_cent%s_Lambda",multTags[icentr]));
156 hK0SStat[icentr] = (TH1*) f->Get(Form("systonly_cent%s_K0s",multTags[icentr]));
157 hK0SSyst[icentr] = (TH1*) f->Get(Form("statonly_cent%s_K0s",multTags[icentr]));
159 // The bin 300-400 MeV was not used in the analysis
160 hK0SStat[icentr]->SetBinContent(4,0);
161 hK0SSyst[icentr]->SetBinContent(4,0);
162 hK0SStat[icentr]->SetBinError(4,0);
163 hK0SSyst[icentr]->SetBinError(4,0);
168 void AverageAndExtrapolate(TString what) {
174 if(what == "pions_pos_0020"){
176 TObjArray * arrStat = new TObjArray();
177 arrStat->Add(hSpectraCentr_stat[0][kMyPion][kMyPos]);
178 arrStat->Add(hSpectraCentr_stat[1][kMyPion][kMyPos]);
179 arrStat->Add(hSpectraCentr_stat[2][kMyPion][kMyPos]);
181 TObjArray * arrSyst = new TObjArray();
182 arrSyst->Add(hSpectraCentr_sys [0][kMyPion][kMyPos]);
183 arrSyst->Add(hSpectraCentr_sys [1][kMyPion][kMyPos]);
184 arrSyst->Add(hSpectraCentr_sys [2][kMyPion][kMyPos]);
186 Double_t weights[] = {0.25, 0.25, 0.5};
187 //Double_t weights[] = {0.5, 0.5};
189 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0020");
190 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0020");
192 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
196 if(what == "pions_pos_0010"){
198 TObjArray * arrStat = new TObjArray();
199 arrStat->Add(hSpectraCentr_stat[0][kMyPion][kMyPos]);
200 arrStat->Add(hSpectraCentr_stat[1][kMyPion][kMyPos]);
202 TObjArray * arrSyst = new TObjArray();
203 arrSyst->Add(hSpectraCentr_sys [0][kMyPion][kMyPos]);
204 arrSyst->Add(hSpectraCentr_sys [1][kMyPion][kMyPos]);
206 Double_t weights[] = {0.5, 0.5};
208 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
209 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
211 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
215 if(what == "pions_sum_0010"){
217 TObjArray * arrStat = new TObjArray();
218 arrStat->Add(hSpectraCentr_stat[0][kMyPion][kMyPos]);
219 arrStat->Add(hSpectraCentr_stat[1][kMyPion][kMyPos]);
220 arrStat->Add(hSpectraCentr_stat[0][kMyPion][kMyNeg]);
221 arrStat->Add(hSpectraCentr_stat[1][kMyPion][kMyNeg]);
223 TObjArray * arrSyst = new TObjArray();
224 arrSyst->Add(hSpectraCentr_sys [0][kMyPion][kMyPos]);
225 arrSyst->Add(hSpectraCentr_sys [1][kMyPion][kMyPos]);
226 arrSyst->Add(hSpectraCentr_sys [0][kMyPion][kMyNeg]);
227 arrSyst->Add(hSpectraCentr_sys [1][kMyPion][kMyNeg]);
229 Double_t weights[] = {0.5, 0.5, 0.5, 0.5};
231 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
232 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
234 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
238 if(what == "pions_neg_0010"){
240 TObjArray * arrStat = new TObjArray();
241 arrStat->Add(hSpectraCentr_stat[0][kMyPion][kMyNeg]);
242 arrStat->Add(hSpectraCentr_stat[1][kMyPion][kMyNeg]);
244 TObjArray * arrSyst = new TObjArray();
245 arrSyst->Add(hSpectraCentr_sys [0][kMyPion][kMyNeg]);
246 arrSyst->Add(hSpectraCentr_sys [1][kMyPion][kMyNeg]);
248 Double_t weights[] = {0.5, 0.5};
250 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
251 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
253 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
257 if(what == "protons_pos_0010"){
259 TObjArray * arrStat = new TObjArray();
260 arrStat->Add(hSpectraCentr_stat[0][kMyProton][kMyPos]);
261 arrStat->Add(hSpectraCentr_stat[1][kMyProton][kMyPos]);
263 TObjArray * arrSyst = new TObjArray();
264 arrSyst->Add(hSpectraCentr_sys [0][kMyProton][kMyPos]);
265 arrSyst->Add(hSpectraCentr_sys [1][kMyProton][kMyPos]);
267 Double_t weights[] = {0.5, 0.5};
269 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
270 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
272 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[2]);
276 if(what == "protons_neg_0010"){
278 TObjArray * arrStat = new TObjArray();
279 arrStat->Add(hSpectraCentr_stat[0][kMyProton][kMyNeg]);
280 arrStat->Add(hSpectraCentr_stat[1][kMyProton][kMyNeg]);
282 TObjArray * arrSyst = new TObjArray();
283 arrSyst->Add(hSpectraCentr_sys [0][kMyProton][kMyNeg]);
284 arrSyst->Add(hSpectraCentr_sys [1][kMyProton][kMyNeg]);
286 Double_t weights[] = {0.5, 0.5};
288 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
289 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
291 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[2]);
295 if(what == "kaons_pos_0010"){
297 TObjArray * arrStat = new TObjArray();
298 arrStat->Add(hSpectraCentr_stat[0][kMyKaon][kMyPos]);
299 arrStat->Add(hSpectraCentr_stat[1][kMyKaon][kMyPos]);
301 TObjArray * arrSyst = new TObjArray();
302 arrSyst->Add(hSpectraCentr_sys [0][kMyKaon][kMyPos]);
303 arrSyst->Add(hSpectraCentr_sys [1][kMyKaon][kMyPos]);
305 Double_t weights[] = {0.5, 0.5};
307 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
308 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
310 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[1]);
314 if(what == "kaons_neg_0010"){
316 TObjArray * arrStat = new TObjArray();
317 arrStat->Add(hSpectraCentr_stat[0][kMyKaon][kMyNeg]);
318 arrStat->Add(hSpectraCentr_stat[1][kMyKaon][kMyNeg]);
320 TObjArray * arrSyst = new TObjArray();
321 arrSyst->Add(hSpectraCentr_sys [0][kMyKaon][kMyNeg]);
322 arrSyst->Add(hSpectraCentr_sys [1][kMyKaon][kMyNeg]);
324 Double_t weights[] = {0.5, 0.5};
326 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
327 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
329 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[1]);
334 if(what == "pions_pos_6080"){
336 TObjArray * arrStat = new TObjArray();
337 arrStat->Add(hSpectraCentr_stat[7][kMyPion][kMyPos]);
338 arrStat->Add(hSpectraCentr_stat[8][kMyPion][kMyPos]);
340 TObjArray * arrSyst = new TObjArray();
341 arrSyst->Add(hSpectraCentr_sys [7][kMyPion][kMyPos]);
342 arrSyst->Add(hSpectraCentr_sys [8][kMyPion][kMyPos]);
344 Double_t weights[] = {0.5, 0.5};
346 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
347 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
349 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
353 if(what == "pions_neg_6080"){
355 TObjArray * arrStat = new TObjArray();
356 arrStat->Add(hSpectraCentr_stat[7][kMyPion][kMyNeg]);
357 arrStat->Add(hSpectraCentr_stat[8][kMyPion][kMyNeg]);
359 TObjArray * arrSyst = new TObjArray();
360 arrSyst->Add(hSpectraCentr_sys [7][kMyPion][kMyNeg]);
361 arrSyst->Add(hSpectraCentr_sys [8][kMyPion][kMyNeg]);
363 Double_t weights[] = {0.5, 0.5};
365 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
366 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
368 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
372 if(what == "protons_pos_6080"){
374 TObjArray * arrStat = new TObjArray();
375 arrStat->Add(hSpectraCentr_stat[7][kMyProton][kMyPos]);
376 arrStat->Add(hSpectraCentr_stat[8][kMyProton][kMyPos]);
378 TObjArray * arrSyst = new TObjArray();
379 arrSyst->Add(hSpectraCentr_sys [7][kMyProton][kMyPos]);
380 arrSyst->Add(hSpectraCentr_sys [8][kMyProton][kMyPos]);
382 Double_t weights[] = {0.5, 0.5};
384 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
385 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
387 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[2]);
391 if(what == "protons_neg_6080"){
393 TObjArray * arrStat = new TObjArray();
394 arrStat->Add(hSpectraCentr_stat[7][kMyProton][kMyNeg]);
395 arrStat->Add(hSpectraCentr_stat[8][kMyProton][kMyNeg]);
397 TObjArray * arrSyst = new TObjArray();
398 arrSyst->Add(hSpectraCentr_sys [7][kMyProton][kMyNeg]);
399 arrSyst->Add(hSpectraCentr_sys [8][kMyProton][kMyNeg]);
401 Double_t weights[] = {0.5, 0.5};
403 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
404 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
406 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[2]);
410 if(what == "kaons_pos_6080"){
412 TObjArray * arrStat = new TObjArray();
413 arrStat->Add(hSpectraCentr_stat[7][kMyKaon][kMyPos]);
414 arrStat->Add(hSpectraCentr_stat[8][kMyKaon][kMyPos]);
416 TObjArray * arrSyst = new TObjArray();
417 arrSyst->Add(hSpectraCentr_sys [7][kMyKaon][kMyPos]);
418 arrSyst->Add(hSpectraCentr_sys [8][kMyKaon][kMyPos]);
420 Double_t weights[] = {0.5, 0.5};
422 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
423 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
425 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[1]);
429 if(what == "kaons_neg_6080"){
431 TObjArray * arrStat = new TObjArray();
432 arrStat->Add(hSpectraCentr_stat[7][kMyKaon][kMyNeg]);
433 arrStat->Add(hSpectraCentr_stat[8][kMyKaon][kMyNeg]);
435 TObjArray * arrSyst = new TObjArray();
436 arrSyst->Add(hSpectraCentr_sys [7][kMyKaon][kMyNeg]);
437 arrSyst->Add(hSpectraCentr_sys [8][kMyKaon][kMyNeg]);
439 Double_t weights[] = {0.5, 0.5};
441 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
442 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
444 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[1]);
450 if(what == "lambda_0010"){
452 TObjArray * arrStat = new TObjArray();
453 arrStat->Add(hLambdaStat[0]);
454 arrStat->Add(hLambdaStat[1]);
456 TObjArray * arrSyst = new TObjArray();
457 arrSyst->Add(hLambdaSyst[0]);
458 arrSyst->Add(hLambdaSyst[1]);
460 Double_t weights[] = {0.5, 0.5};
462 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
463 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
465 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, TDatabasePDG::Instance()->GetParticle("Lambda0")->Mass());
470 if(what == "k0s_0010"){
472 TObjArray * arrStat = new TObjArray();
473 arrStat->Add(hK0SStat[0]);
474 arrStat->Add(hK0SStat[1]);
476 TObjArray * arrSyst = new TObjArray();
477 arrSyst->Add(hK0SSyst[0]);
478 arrSyst->Add(hK0SSyst[1]);
480 Double_t weights[] = {0.5, 0.5};
482 TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
483 TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
485 hyieldmean = PrintYieldAndError(hsyst, hstat, 0, TDatabasePDG::Instance()->GetParticle("K_S0")->Mass());
493 TCanvas * c1 = new TCanvas("Averaging", "Averaging");
497 hsyst->Draw("same,e3");