14 Double_t PeakPosition(Double_t pt);
15 Double_t PeakWidth(Double_t pt);
16 Double_t CB(Double_t * x, Double_t * par);
17 Double_t CB2(Double_t * x, Double_t * par);
18 Double_t CBs(Double_t * x, Double_t * par);
19 Double_t BG1(Double_t * x, Double_t * par);
20 Double_t BG2(Double_t * x, Double_t * par);
23 // const Int_t nPadX = 3, nPadY = 2;
24 // const Int_t nPtBins=6 ;
25 // const Double_t ptBinEdges[21]={1., 2., 3., 4., 5., 7., 10.} ;
27 const Int_t nPadX = 6, nPadY = 4;
29 Double_t ptBinEdges[1000] = {0};
30 double GetPtBin(int bin){
34 // return GetPtBin(bin-1) * 1.1;
37 // return GetPtBin(bin-1) + 0.4;
39 // return GetPtBin(bin-1) + 0.2;
41 double previousBin = GetPtBin(bin-1);
43 double threshold = 5.;
44 double logFact = 1 + linInc/threshold;
45 if ( previousBin < threshold ) // linear
46 return previousBin + linInc;
48 return previousBin * logFact;
55 ptBinEdges[bin] = GetPtBin(bin);
56 } while(ptBinEdges[bin] < 40.);
59 for(int b=0; b < nPtBins+1; ++b)
60 printf("%.1f, ", ptBinEdges[b]);
61 printf("\n N. Bins: %d\n", nPtBins);
64 // for(int bin = 0; bin <= nPtBins; ++bin){
65 // ptBinEdges[bin] = GetPtBin(bin);
66 // printf("%.1f, ", ptBinEdges[bin]);
72 const int kNCentralityBins = 3;
74 const Double_t kMean=0.136 ; //Approximate peak position to facilitate error estimate
76 const char format[] = ".eps"; // say if you want .pdf
78 TH2F* FindPi0(TList *histoList, bool mix, const char* pid, int centrality);
80 //-----------------------------------------------------------------------------
81 void MakeMmixPi0(const TString filename,
82 const TString listPath = "PHOSPi0Flow/PHOSPi0FlowCoutput1", // lego train
83 const Int_t centrality=0,
84 const char* pid="CPV",
85 const char* saveToDir="")
88 Printf("\nMakeMmixPi0(%s, %s, %i, %s, %s)", filename.Data(), listPath.Data(), centrality, pid, saveToDir);
90 if( TString(saveToDir).Length() )
91 gSystem->mkdir(saveToDir, true);
93 //Fit Real/Mixed ratio, normalize Mixed and subtract it from Real
95 TFile * file = new TFile(filename) ;
96 TList *histoList = (TList*)file->Get(listPath);
100 TH1F * hev = (TH1F*)histoList->FindObject("hTotSelEvents") ;
101 TH2F * hCentrality = (TH2F*)histoList->FindObject("hCenPHOSCells") ;
102 TH1D * hCentralityX = hCentrality->ProjectionX();
104 printf("TotSelEvents (4): %f \n",hev->GetBinContent(4)) ;
105 printf("Centrality: %f \n",hCentralityX->Integral()) ;
107 TH2F *hPi0 = FindPi0(histoList, false, pid, centrality);
108 TH2F *hPi0Mix = FindPi0(histoList, true, pid, centrality);
109 if( !hPi0 || !hPi0Mix || hPi0->GetEntries() < 10000) {
110 Printf(Form("no histogram(0x%p, 0x%p) or to low number of entries(%.1f) in hPi0, skipping this cent", hPi0, hPi0Mix, hPi0->GetEntries()));
117 TFile* outFile = new TFile(Form("%sPi0_FitResult_%d.root", saveToDir, centrality),"update");
120 gStyle->SetPadLeftMargin(0.14);
121 gStyle->SetPadRightMargin(0.01);
122 //gStyle->SetPadTopMargin(0.01);
123 gStyle->SetPadBottomMargin(0.08);
128 sprintf(kkey, Form("%s_cent%d",pid,centrality)) ;
130 sprintf(key,"Mix%s",kkey) ;
131 sprintf(key2,"%s_mr1",key) ;
132 TH1D * mr1 = new TH1D(key2,"Mass",nPtBins,ptBinEdges) ;
133 sprintf(key2,"%s_sr1",key) ;
134 TH1D * sr1 = new TH1D(key2,"Width",nPtBins,ptBinEdges) ;
135 sprintf(key2,"%s_ar1",key) ;
136 TH1D * ar1 = new TH1D(key2,"a",nPtBins,ptBinEdges) ;
137 sprintf(key2,"%s_br1",key) ;
138 TH1D * br1 = new TH1D(key2,"a",nPtBins,ptBinEdges) ;
139 sprintf(key2,"%s_yr1",key) ;
140 TH1D * nr1 = new TH1D(key2,"Raw yield",nPtBins,ptBinEdges) ;
141 sprintf(key2,"%s_yr1int",key) ;
142 TH1D * nr1int = new TH1D(key2,"Raw yield, integrated",nPtBins,ptBinEdges) ;
145 sprintf(key2,"%s_mr2",key) ;
146 TH1D * mr2 = new TH1D(key2,"Mass",nPtBins,ptBinEdges) ;
147 sprintf(key2,"%s_sr2",key) ;
148 TH1D * sr2 = new TH1D(key2,"Width",nPtBins,ptBinEdges) ;
149 sprintf(key2,"%s_ar2",key) ;
150 TH1D * ar2 = new TH1D(key2,"a",nPtBins,ptBinEdges) ;
151 sprintf(key2,"%s_br2",key) ;
152 TH1D * br2 = new TH1D(key2,"a",nPtBins,ptBinEdges) ;
153 sprintf(key2,"%s_cr2",key) ;
154 TH1D * cr2 = new TH1D(key2,"a",nPtBins,ptBinEdges) ;
155 sprintf(key2,"%s_yr2",key) ;
156 TH1D * nr2 = new TH1D(key2,"Raw yield",nPtBins,ptBinEdges) ;
157 sprintf(key2,"%s_yr2int",key) ;
158 TH1D * nr2int = new TH1D(key2,"Raw yield, integrated",nPtBins,ptBinEdges) ;
160 TF1 * fit1 = new TF1("fit",CB,0.,1.,6) ;
161 fit1->SetParName(0,"A") ;
162 fit1->SetParName(1,"m_{0}") ;
163 fit1->SetParName(2,"#sigma") ;
164 fit1->SetParName(3,"a_{0}") ;
165 fit1->SetParName(4,"a_{1}") ;
166 fit1->SetParName(5,"a_{2}") ;
167 fit1->SetLineWidth(2) ;
168 fit1->SetLineColor(2) ;
169 TF1 * fgs = new TF1("gs",CBs,0.,1.,4) ;
170 fgs->SetParName(0,"A") ;
171 fgs->SetParName(1,"m_{0}") ;
172 fgs->SetParName(2,"#sigma") ;
173 fgs->SetParName(3,"B") ;
174 fgs->SetLineColor(2) ;
175 fgs->SetLineWidth(1) ;
177 TF1 * fit2 = new TF1("fit2",CB2,0.,1.,7) ;
178 fit2->SetParName(0,"A") ;
179 fit2->SetParName(1,"m_{0}") ;
180 fit2->SetParName(2,"#sigma") ;
181 fit2->SetParName(3,"a_{0}") ;
182 fit2->SetParName(4,"a_{1}") ;
183 fit2->SetParName(5,"a_{2}") ;
184 fit2->SetParName(6,"a_{3}") ;
185 fit2->SetLineWidth(2) ;
186 fit2->SetLineColor(4) ;
187 fit2->SetLineStyle(2) ;
189 TF1 * fbg1 = new TF1("bg1",BG1,0.,1.,3) ;
190 TF1 * fbg2 = new TF1("bg2",BG2,0.,1.,4) ;
192 TCanvas * c3 = new TCanvas("mggFit1_Signal","mggFitCB",10,10,1200,800) ;
193 c3->Divide(nPadX,nPadY) ;
195 TCanvas * c1 = new TCanvas("mggFit1","mggFit1",10,10,1200,800) ;
196 c1->Divide(nPadX,nPadY) ;
199 TCanvas * rawCanvas = new TCanvas("rawCanvas","rawCanvas",10,10,1200,800);
200 rawCanvas->Divide(nPadX, nPadY);
202 TAxis * pta=hPi0->GetYaxis() ;
203 //TAxis * ma=hPi0->GetXaxis() ;
204 for(Int_t ptBin=1; ptBin<=nPtBins; ptBin++){
206 Int_t imin=pta->FindBin(ptBinEdges[ptBin-1]+0.0001);
207 Int_t imax=pta->FindBin(ptBinEdges[ptBin]-0.0001) ;
208 Double_t pt=(ptBinEdges[ptBin]+ptBinEdges[ptBin-1])/2. ;
210 TH1D * hPi0Proj = hPi0->ProjectionX(Form("hPi0_ptBin%d",ptBin), imin, imax) ;
211 TH1D * hPi0ProjMix= hPi0Mix->ProjectionX(Form("hPi0Mix_ptBin%d",ptBin), imin, imax) ;
213 hPi0Proj->SetTitle(Form("M_{#gamma#gamma}, PID=%s, %.1f<p_{T}<%.1f GeV/c",pid,ptBinEdges[ptBin-1],ptBinEdges[ptBin]));
214 hPi0Proj->SetXTitle("M_{#gamma#gamma} (GeV/c^{2})");
215 hPi0ProjMix->SetTitle(Form("M_{#gamma#gamma}^{Mix}, PID=%s, %.1f<p_{T}<%.1f GeV/c",pid,ptBinEdges[ptBin-1],ptBinEdges[ptBin]));
216 hPi0ProjMix->SetXTitle("M_{#gamma#gamma}^{Mix} (GeV/c^{2})");
219 Printf("\n\t%.1f<pt<%.1f GeV/c, entries: %.0f",ptBinEdges[ptBin-1],ptBinEdges[ptBin], hPi0Proj->GetEntries());
220 if( hPi0Proj->GetEntries() < 100. ) {
221 Printf("skipping this bin as n. entries is to low");
227 hPi0Proj ->Rebin(4) ;
228 hPi0ProjMix->Rebin(4) ;
231 // hPi0Proj ->Rebin(5) ;
232 // hPi0ProjMix->Rebin(5) ;
234 hPi0Proj->SetName(Form("%s_rebin", hPi0Proj->GetName()));
235 hPi0ProjMix->SetName(Form("%s_rebin", hPi0ProjMix->GetName()));
237 for(Int_t ib=1; ib<=hPi0Proj->GetNbinsX();ib++){if(hPi0Proj ->GetBinContent(ib)==0)hPi0Proj ->SetBinError(ib,1.);}
238 for(Int_t ib=1; ib<=hPi0Proj->GetNbinsX();ib++){if(hPi0ProjMix->GetBinContent(ib)==0)hPi0ProjMix->SetBinError(ib,1.);}
239 TH1D * hPi0Proj2 = (TH1D*)hPi0Proj ->Clone(Form("rawPi0Signal2_ptBin%d",ptBin)) ;
240 TH1D * hpcopy = (TH1D*)hPi0Proj ->Clone(Form("Pi0SignalMixRatio_ptBin%d",ptBin)) ;
241 TH1D * hpm2 = (TH1D*)hPi0ProjMix->Clone(Form("rawPi0Mixed_ptBin%d",ptBin)) ;
242 TH1D * hpmScaled = (TH1D*)hPi0ProjMix->Clone(Form("rawPi0MixedScaled_ptBin%d",ptBin)) ;
244 hpcopy->Divide(hPi0ProjMix) ;
245 hpcopy->SetMarkerStyle(20) ;
246 hpcopy->SetMarkerSize(0.7) ;
248 fit1->SetParameters(0.001,0.136,0.0055,0.0002,-0.002,0.0) ;
249 fit1->SetParLimits(0,0.000,1.000) ;
250 fit1->SetParLimits(1,0.120,0.145) ;
251 fit1->SetParLimits(2,0.004,0.012) ;
253 Double_t rangeMin=0.05 ;
254 Double_t rangeMax=0.3 ;
255 if(centrality==0) rangeMax=0.4 ;
260 int error = hpcopy->Fit(fit1,"Q" ,"",rangeMin,rangeMax) ;
262 Printf("fit (ratio) error: %d ", error);
265 error = hpcopy->Fit(fit1,"MQ","",rangeMin,rangeMax) ;
267 Printf("fit (ratio more) error: %d ", error);
272 ar1->SetBinContent(ptBin,fit1->GetParameter(3)) ;
273 ar1->SetBinError (ptBin,fit1->GetParError(3)) ;
274 br1->SetBinContent(ptBin,fit1->GetParameter(4)) ;
275 br1->SetBinError (ptBin,fit1->GetParError(4)) ;
277 fit2->SetParameters(fit1->GetParameters()) ;
278 fit2->SetParLimits(0,0.000,1.000) ;
279 fit2->SetParLimits(1,0.110,0.145) ;
280 fit2->SetParLimits(2,0.004,0.012) ;
282 error = hpcopy->Fit(fit2,"+NQ","",rangeMin,rangeMax) ;
284 Printf("fit (fit2) error: %d ", error);
287 error =hpcopy->Fit(fit2,"+MQ","",rangeMin,rangeMax) ;
289 Printf("fit (fit2 more) error: %d ", error);
293 ar2->SetBinContent(ptBin,fit2->GetParameter(3)) ;
294 ar2->SetBinError (ptBin,fit2->GetParError(3)) ;
295 br2->SetBinContent(ptBin,fit2->GetParameter(4)) ;
296 br2->SetBinError (ptBin,fit2->GetParError(4)) ;
297 cr2->SetBinContent(ptBin,fit2->GetParameter(5)) ;
298 cr2->SetBinError (ptBin,fit2->GetParError(5)) ;
299 hpcopy->GetXaxis()->SetRangeUser(0.05,0.30) ;
300 hpcopy->SetTitle(Form("#frac{M_{#gamma#gamma}}{M_{#gamma#gamma}^{Mix}}, PID=%s, %.1f<p_{T}<%.1f GeV/c",pid,ptBinEdges[ptBin-1],ptBinEdges[ptBin]));
302 hpcopy->Write(0,TObject::kOverwrite) ;
305 fbg1->SetParameters(fit1->GetParameter(3),fit1->GetParameter(4),fit1->GetParameter(5));
306 fbg2->SetParameters(fit2->GetParameter(3),fit2->GetParameter(4),fit2->GetParameter(5),
307 fit2->GetParameter(6));
309 Double_t intRangeMin = PeakPosition(pt)-3.*PeakWidth(pt) ;
310 Double_t intRangeMax = PeakPosition(pt)+3.*PeakWidth(pt) ;
311 Int_t intBinMin = hPi0Proj->GetXaxis()->FindBin(intRangeMin) ;
312 Int_t intBinMax = hPi0Proj->GetXaxis()->FindBin(intRangeMax) ;
313 Double_t errStat = hPi0ProjMix->Integral(intBinMin,intBinMax);
315 rawCanvas->cd(ptBin);
316 hpmScaled->Scale(fbg1->Eval(0.1349));
317 hPi0Proj->SetLineColor(kBlack);
318 hPi0Proj->SetAxisRange(0.0, 0.3);
319 hPi0Proj->DrawCopy();
320 hPi0Proj->Write(0,TObject::kOverwrite) ;
321 hpmScaled->SetLineColor(kRed);
322 hpmScaled->SetTitle(Form("M_{#gamma#gamma}^{Mix,scaled}, PID=%s, %.1f<p_{T}<%.1f GeV/c",pid,ptBinEdges[ptBin-1],ptBinEdges[ptBin]));
323 hpmScaled->DrawCopy("same");
325 hpmScaled->Write(0,TObject::kOverwrite) ;
327 hPi0ProjMix ->Multiply(fbg1) ;
328 hpm2->Multiply(fbg2) ;
329 hPi0Proj ->Add(hPi0ProjMix ,-1.) ;
330 hPi0Proj2 ->Add(hpm2,-1.) ;
334 Int_t binPi0 = hPi0Proj->FindBin(fit1->GetParameter(1));
335 Int_t nWidPi0 = 2 * (Int_t) (fit1->GetParameter(2)/hPi0Proj->GetBinWidth(1));
336 fgs->SetParameters(hPi0Proj->Integral(binPi0-nWidPi0,binPi0+nWidPi0)/5., fit1->GetParameter(1), fit1->GetParameter(2)) ;
337 fgs->SetParLimits(0,0.000,1.e+5) ;
338 fgs->SetParLimits(1,0.110,0.145) ;
339 fgs->SetParLimits(2,0.004,0.02) ;
340 error = hPi0Proj->Fit(fgs,"Q","",rangeMin,rangeMax) ;
342 Printf("fit (hPi0Proj fgs) error: %d ", error);
345 hPi0Proj->SetMaximum(hPi0Proj2->GetMaximum()*1.5) ;
346 hPi0Proj->SetMinimum(hPi0Proj2->GetMinimum()*1.1) ;
347 hPi0Proj->SetMarkerStyle(20) ;
348 hPi0Proj->SetMarkerSize(0.7) ;
349 mr1->SetBinContent(ptBin,fgs->GetParameter(1)) ;
350 mr1->SetBinError (ptBin,fgs->GetParError(1) ) ;
351 sr1->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
352 sr1->SetBinError (ptBin,fgs->GetParError(2) ) ;
354 Double_t y=fgs->GetParameter(0)/hPi0Proj->GetXaxis()->GetBinWidth(1) ;
355 nr1->SetBinContent(ptBin,y) ;
356 Double_t ey=fgs->GetParError(0)/hPi0Proj->GetXaxis()->GetBinWidth(1) ;
357 nr1->SetBinError(ptBin,ey) ;
359 Double_t npiInt = hPi0Proj->Integral(intBinMin,intBinMax) ;
360 Double_t norm = fbg1->GetParameter(0) ;
361 Double_t normErr= fbg1->GetParError(0) ;
363 nr1int->SetBinContent(ptBin,npiInt) ;
364 nr1int->SetBinError(ptBin,TMath::Sqrt(npiInt + norm*errStat + normErr*normErr*errStat*errStat + norm*norm*errStat)) ;
366 hPi0Proj2->GetXaxis()->SetRangeUser(0.05,0.3) ;
367 hPi0Proj2->SetMaximum(hPi0Proj2->GetMaximum()*1.5) ;
368 hPi0Proj2->SetMinimum(hPi0Proj2->GetMinimum()*1.1) ;
369 hPi0Proj2->SetMarkerStyle(20) ;
370 hPi0Proj2->SetMarkerSize(0.7) ;
371 hPi0Proj2->Fit(fgs,"Q","",rangeMin,rangeMax) ;
373 Printf("fit (hPi0Proj2 fgs) error: %d ", error);
376 mr2->SetBinContent(ptBin,fgs->GetParameter(1)) ;
377 mr2->SetBinError (ptBin,fgs->GetParError(1)) ;
378 sr2->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
379 sr2->SetBinError (ptBin,fgs->GetParError(2)) ;
380 y=fgs->GetParameter(0)/hPi0Proj->GetXaxis()->GetBinWidth(1) ;
381 nr2->SetBinContent(ptBin,y) ;
382 ey= fgs->GetParError(0)/hPi0Proj->GetXaxis()->GetBinWidth(1) ;
383 nr2->SetBinError(ptBin,ey) ;
384 npiInt=hPi0Proj2->Integral(intBinMin,intBinMax) ;
385 norm=fbg2->GetParameter(0) ;
386 normErr=fbg2->GetParError(0) ;
388 nr2int->SetBinContent(ptBin,npiInt) ;
389 nr2int->SetBinError(ptBin,TMath::Sqrt(npiInt + norm*errStat + normErr*normErr*errStat*errStat + norm*norm*errStat)) ;
391 hPi0Proj2->SetTitle(Form("M_{#gamma#gamma}^{BS_{2}}, PID=%s, %.1f<p_{T}<%.1f GeV/c",pid,ptBinEdges[ptBin-1],ptBinEdges[ptBin]));
392 hPi0Proj2->DrawCopy() ;
394 hPi0Proj2->Write(0,TObject::kOverwrite) ;
398 sprintf(name,"%sPi0_ratio_%s%s", saveToDir, kkey, format) ;
400 sprintf(name,"%sPi0_signal_%s%s", saveToDir, kkey, format) ;
402 sprintf(name,"%sPi0_raw_%s%s", saveToDir, kkey, format) ;
403 rawCanvas->Print(name);
405 //Normalize by the number of events
406 Int_t cMin=0, cMax=100;
407 if (centrality == 0) {
411 else if (centrality == 1) {
415 else if (centrality == 2) {
419 else if (centrality == -1) {
424 Printf("ERROR: Centrality: %d not defined !!! ERROR", centrality);
428 Double_t nevents = hCentralityX->Integral(cMin,cMax);
429 if ( nevents > 0.9 ) {
430 nr1 ->Scale(1./nevents) ;
431 nr1int->Scale(1./nevents) ;
432 nr2 ->Scale(1./nevents) ;
433 nr2int->Scale(1./nevents) ;
435 Printf("WARNING: non positive nEvents in centrality range, cMin:%d, cMax:%d, nEvents:%f", cMin, cMax, nevents );
439 mr1->Write(0,TObject::kOverwrite) ;
440 sr1->Write(0,TObject::kOverwrite) ;
441 ar1->Write(0,TObject::kOverwrite) ;
442 br1->Write(0,TObject::kOverwrite) ;
443 nr1->Write(0,TObject::kOverwrite) ;
444 nr1int->Write(0,TObject::kOverwrite) ;
445 ar2->Write(0,TObject::kOverwrite) ;
446 br2->Write(0,TObject::kOverwrite) ;
447 cr2->Write(0,TObject::kOverwrite) ;
448 mr2->Write(0,TObject::kOverwrite) ;
449 sr2->Write(0,TObject::kOverwrite) ;
450 nr2->Write(0,TObject::kOverwrite) ;
451 nr2int->Write(0,TObject::kOverwrite) ;
465 //-----------------------------------------------------------------------------
466 Double_t PeakPosition(Double_t pt){
467 //Fit to the measured peak position
468 return 4.99292e-003*exp(-pt*9.32300e-001)+1.34944e-001 ;
470 //-----------------------------------------------------------------------------
471 Double_t PeakWidth(Double_t pt){
472 //fit to the measured peak width
475 Double_t c=0.000319 ;
476 return TMath::Sqrt(a*a+b*b/pt/pt+c*c*pt*pt) ;
479 //-----------------------------------------------------------------------------
480 Double_t CB(Double_t * x, Double_t * par){
481 //Parameterization of Real/Mixed ratio
484 Double_t dx=(x[0]-m)/s ;
485 return par[0]*exp(-dx*dx/2.)+par[3]+par[4]*(x[0]-kMean) ;
488 //-----------------------------------------------------------------------------
489 Double_t CB2(Double_t * x, Double_t * par){
490 //Another parameterization of Real/Mixed ratio7TeV/README
493 Double_t dx=(x[0]-m)/s ;
494 return par[0]*exp(-dx*dx/2.)+par[3]+par[4]*(x[0]-kMean)+par[5]*(x[0]-kMean)*(x[0]-kMean) ;
496 //-----------------------------------------------------------------------------
497 Double_t CBs(Double_t * x, Double_t * par){
498 //Parameterizatin of signal
501 Double_t dx=(x[0]-m)/s ;
502 return par[0]*exp(-dx*dx/2.)/TMath::Sqrt(TMath::TwoPi())/s+par[3] ;
504 //-----------------------------------------------------------------------------
505 Double_t BG1(Double_t * x, Double_t * par){
506 //Normalizatino of Mixed
507 return par[0]+par[1]*(x[0]-kMean) ;
509 //-----------------------------------------------------------------------------
510 Double_t BG2(Double_t * x, Double_t * par){
511 //Another normalization of Mixed
512 return par[0]+par[1]*(x[0]-kMean)+par[2]*(x[0]-kMean)*(x[0]-kMean) ;
516 //-----------------------------------------------------------------------------
520 //////////////////////////////////////////////////////////////////////
522 // ROOT style macro for the TRD TDR
524 //////////////////////////////////////////////////////////////////////
526 gStyle->SetPalette(1);
527 gStyle->SetCanvasBorderMode(-1);
528 gStyle->SetCanvasBorderSize(1);
529 gStyle->SetCanvasColor(10);
531 gStyle->SetFrameFillColor(10);
532 gStyle->SetFrameBorderSize(1);
533 gStyle->SetFrameBorderMode(-1);
534 gStyle->SetFrameLineWidth(1.2);
535 gStyle->SetFrameLineColor(1);
537 gStyle->SetHistFillColor(0);
538 gStyle->SetHistLineWidth(1);
539 gStyle->SetHistLineColor(1);
541 gStyle->SetPadColor(10);
542 gStyle->SetPadBorderSize(1);
543 gStyle->SetPadBorderMode(-1);
545 gStyle->SetStatColor(10);
546 gStyle->SetTitleColor(kBlack,"X");
547 gStyle->SetTitleColor(kBlack,"Y");
549 gStyle->SetLabelSize(0.04,"X");
550 gStyle->SetLabelSize(0.04,"Y");
551 gStyle->SetLabelSize(0.04,"Z");
552 gStyle->SetTitleSize(0.04,"X");
553 gStyle->SetTitleSize(0.04,"Y");
554 gStyle->SetTitleSize(0.04,"Z");
555 gStyle->SetTitleFont(42,"X");
556 gStyle->SetTitleFont(42,"Y");
557 gStyle->SetTitleFont(42,"X");
558 gStyle->SetLabelFont(42,"X");
559 gStyle->SetLabelFont(42,"Y");
560 gStyle->SetLabelFont(42,"Z");
561 gStyle->SetStatFont(42);
563 gStyle->SetTitleOffset(1.0,"X");
564 gStyle->SetTitleOffset(1.4,"Y");
566 gStyle->SetFillColor(kWhite);
567 gStyle->SetTitleFillColor(kWhite);
569 gStyle->SetOptDate(0);
570 gStyle->SetOptTitle(1);
571 gStyle->SetOptStat(0);
572 gStyle->SetOptFit(111);
576 // For different tasks (e.g. triggers)
579 // Take care when uncommenting, seems to leak memory consumption.
582 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow/PHOSPi0FlowCoutput1", -1, "CPV", "out/kCentral/");
583 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_SemiCentral/PHOSPi0Flow_SemiCentralCoutput1", -1, "CPV", "out/kSemiCentral/");
584 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_MB/PHOSPi0Flow_MBCoutput1", -1, "CPV", "out/kMB/");
585 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_PHOSPb/PHOSPi0Flow_PHOSPbCoutput1", -1, "CPV", "out/kPHOSPb/");
588 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow/PHOSPi0FlowCoutput1", 0, "CPV", "out/kCentral/");
589 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_MB/PHOSPi0Flow_MBCoutput1", 0, "CPV", "out/kMB/");
590 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_PHOSPb/PHOSPi0Flow_PHOSPbCoutput1", 0, "CPV", "out/kPHOSPb/");
593 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_SemiCentral/PHOSPi0Flow_SemiCentralCoutput1", 1, "CPV", "out/kSemiCentral/");
594 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_MB/PHOSPi0Flow_MBCoutput1", 1, "CPV", "out/kMB/");
595 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_PHOSPb/PHOSPi0Flow_PHOSPbCoutput1", 1, "CPV", "out/kPHOSPb/");
598 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_SemiCentral/PHOSPi0Flow_SemiCentralCoutput1", 2, "CPV", "out/kSemiCentral/");
599 // MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_MB/PHOSPi0Flow_MBCoutput1", 2, "CPV", "out/kMB/");
600 MakeMmixPi0("AnalysisResults.root", "PHOSPi0Flow_PHOSPb/PHOSPi0Flow_PHOSPbCoutput1", 2, "CPV", "out/kPHOSPb/");
605 TH2F* FindPi0(TList *histoList, bool mix, const char* pid, int centrality)
607 // consider mixed or not
612 // If centrality is some integer in range [0, kNCentralityBins] return Pi0 plot for that cent.
613 if( centrality >= 0 && centrality < kNCentralityBins ) {
614 TString name = Form("h%sPi0%s_cen%d", mixStr.Data(), pid, centrality);
615 TH2F* hist = (TH2F*) histoList->FindObject(name.Data());
619 // If centrality is '-1' Merge [0, kNCentralityBins)
620 else if ( centrality == -1 ) {
621 TString name = Form("h%sPi0%s_cen%d", mixStr.Data(), pid, 0);
622 TH2F* histMerge = (TH2F*) histoList->FindObject(name.Data()) -> Clone(Form("h%sPi0%s_merged", mixStr.Data(), pid));
625 for( int cent = 1; cent < kNCentralityBins; ++cent ) {
626 name = Form("h%sPi0%s_cen%d", mixStr.Data(), pid, cent);
627 TH2F* other = (TH2F*) histoList->FindObject(name.Data());
629 histMerge->Add( other );
633 else { // case not defined
634 Printf("ERROR: Centrality must be in range: [%d,%d]", -1, kNCentralityBins - 1 );