1 void CompareFlowResults()
3 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
4 gSystem->AddIncludePath("-I$ROOTSYS/include");
6 //load needed libraries:
7 gSystem->Load("libTree.so");
8 gSystem->Load("libANALYSIS.so");
9 gSystem->Load("libPWG2flow.so");
10 cerr<<"libPWG2flow.so loaded ..."<<endl;
13 //removing the title and stat. box from all histograms:
14 gStyle->SetOptTitle(0);
15 gStyle->SetOptStat(0);
17 //choosing the style and color of mesh for MC error bands:
18 Int_t meshStyle = 3044;//see documentation of TAttFill
19 Int_t meshColor = kRed-4;
21 //type of analysis was: ESD, AOD, MC, ESDMC0, ESDMC1
22 const TString type = "ESD";
24 //open the output files:
25 TString inputFileNameMCEP = "outputMCEPanalysis";
26 TFile* file_MCEP = NULL;
27 file_MCEP = TFile::Open(((inputFileNameMCEP.Append(type)).Append(".root")).Data(), "READ");
29 TString inputFileNameLYZ1 = "outputLYZ1analysis";
30 TFile* file_LYZ1 = NULL;
31 file_LYZ1 = TFile::Open(((inputFileNameLYZ1.Append(type)).Append("_firstrun.root")).Data(), "READ");
34 TString inputFileNameSP = "outputSPanalysis";
35 TFile* file_SP = NULL;
36 file_SP = TFile::Open(((inputFileNameSP.Append(type)).Append(".root")).Data(), "READ");
39 TString inputFileNameFQD = "outputFQDanalysis";
40 TFile* file_FQD = NULL;
41 file_FQD = TFile::Open(((inputFileNameFQD.Append(type)).Append(".root")).Data(), "READ");
43 TString inputFileNameGFC = "outputGFCanalysis";
44 TFile* file_GFC = NULL;
45 file_GFC = TFile::Open(((inputFileNameGFC.Append(type)).Append(".root")).Data(), "READ");
47 TString inputFileNameQC = "outputQCanalysis";
48 TFile* file_QC = NULL;
49 file_QC = TFile::Open(((inputFileNameQC.Append(type)).Append(".root")).Data(), "READ");
51 //==================================================================================
53 //==================================================================================
55 //booking the histogram for the integrated flow results from all methods
56 TH1D* intFlow = new TH1D("intFlow","Integrated Flow",11,0,11);
58 intFlow->SetLabelSize(0.044);
59 intFlow->SetMarkerStyle(21);
60 intFlow->SetMarkerColor(kRed-4);
61 (intFlow->GetXaxis())->SetBinLabel(1,"v_{n}{MC}");
62 (intFlow->GetXaxis())->SetBinLabel(2,"v_{n}{LYZ}");
63 (intFlow->GetXaxis())->SetBinLabel(3,"v_{n}{FQD}");
64 (intFlow->GetXaxis())->SetBinLabel(4,"v_{n}{2}");
65 (intFlow->GetXaxis())->SetBinLabel(5,"v_{n}{4}");
66 (intFlow->GetXaxis())->SetBinLabel(6,"v_{n}{6}");
67 (intFlow->GetXaxis())->SetBinLabel(7,"v_{n}{8}");
68 (intFlow->GetXaxis())->SetBinLabel(8,"v_{n}^{Q}{2}");
69 (intFlow->GetXaxis())->SetBinLabel(9,"v_{n}^{Q}{4}");
70 (intFlow->GetXaxis())->SetBinLabel(10,"v_{n}^{Q}{6}");
71 (intFlow->GetXaxis())->SetBinLabel(11,"v_{n}^{Q}{8}");
73 //MCEP = Monte Carlo Event Plane
74 TList *pListMCEP = NULL;
75 AliFlowCommonHistResults *mcepCommonHistRes = NULL;
78 file_MCEP->GetObject("cobjMCEP",pListMCEP);
81 mcepCommonHist = dynamic_cast<AliFlowCommonHist*> (pListMCEP->FindObject("AliFlowCommonHistMCEP"));
82 mcepCommonHistRes = dynamic_cast<AliFlowCommonHistResults*> (pListMCEP->FindObject("AliFlowCommonHistResultsMCEP"));
85 intFlow->SetBinContent(1,(mcepCommonHistRes->GetHistIntFlow())->GetBinContent(1));
86 intFlow->SetBinError(1,(mcepCommonHistRes->GetHistIntFlow())->GetBinError(1));
91 //LYZ1 = Lee-Yang Zeros (1st run)
92 TList *pListLYZ1 = NULL;
93 AliFlowCommonHistResults *lyz1 = NULL;
96 file_LYZ1->GetObject("cobjLYZ1",pListLYZ1);
99 lyz1 = dynamic_cast<AliFlowCommonHistResults*> (pListLYZ1->FindObject("AliFlowCommonHistResultsLYZ"));
102 intFlow->SetBinContent(2,(lyz1->GetHistIntFlow())->GetBinContent(1));
103 intFlow->SetBinError(2,(lyz1->GetHistIntFlow())->GetBinError(1));
108 //FQD = Fitting q-distribution
109 TList *pListFQD = NULL;
110 AliFlowCommonHistResults *fqd = NULL;
113 file_FQD->GetObject("cobjFQD",pListFQD);
116 fqd = dynamic_cast<AliFlowCommonHistResults*> (pListFQD->FindObject("AliFlowCommonHistResultsFQD"));
119 intFlow->SetBinContent(3,(fqd->GetHistIntFlow())->GetBinContent(1));
120 intFlow->SetBinError(3,(fqd->GetHistIntFlow())->GetBinError(1));
125 //GFC = Generating Function Cumulants
126 TList *pListGFC = NULL;
127 AliFlowCommonHistResults *gfc2 = NULL;
128 AliFlowCommonHistResults *gfc4 = NULL;
129 AliFlowCommonHistResults *gfc6 = NULL;
130 AliFlowCommonHistResults *gfc8 = NULL;
133 file_GFC->GetObject("cobjGFC",pListGFC);
136 gfc2 = dynamic_cast<AliFlowCommonHistResults*> (pListGFC->FindObject("AliFlowCommonHistResults2ndOrderGFC"));
139 intFlow->SetBinContent(4,(gfc2->GetHistIntFlow())->GetBinContent(1));
140 intFlow->SetBinError(4,(gfc2->GetHistIntFlow())->GetBinError(1));
142 gfc4 = dynamic_cast<AliFlowCommonHistResults*> (pListGFC->FindObject("AliFlowCommonHistResults4thOrderGFC"));
145 intFlow->SetBinContent(5,(gfc4->GetHistIntFlow())->GetBinContent(1));
146 intFlow->SetBinError(5,(gfc4->GetHistIntFlow())->GetBinError(1));
148 gfc6 = dynamic_cast<AliFlowCommonHistResults*> (pListGFC->FindObject("AliFlowCommonHistResults6thOrderGFC"));
151 intFlow->SetBinContent(6,(gfc6->GetHistIntFlow())->GetBinContent(1));
152 intFlow->SetBinError(6,(gfc6->GetHistIntFlow())->GetBinError(1));
154 gfc8 = dynamic_cast<AliFlowCommonHistResults*> (pListGFC->FindObject("AliFlowCommonHistResults8thOrderGFC"));
157 intFlow->SetBinContent(7,(gfc8->GetHistIntFlow())->GetBinContent(1));
158 intFlow->SetBinError(7,(gfc8->GetHistIntFlow())->GetBinError(1));
164 TList *pListQC = NULL;
165 AliFlowCommonHist *qcCommonHist2 = NULL, *qcCommonHist4 = NULL;
166 AliFlowCommonHistResults *qcCommonHistRes2 = NULL;
167 AliFlowCommonHistResults *qcCommonHistRes4 = NULL;
168 AliFlowCommonHistResults *qcCommonHistRes6 = NULL;
169 AliFlowCommonHistResults *qcCommonHistRes8 = NULL;
172 file_QC->GetObject("cobjQC",pListQC);
175 qcCommonHist2 = dynamic_cast<AliFlowCommonHist*> (pListQC->FindObject("AliFlowCommonHistQC"));//to be improved
176 qcCommonHistRes2 = dynamic_cast<AliFlowCommonHistResults*> (pListQC->FindObject("AliFlowCommonHistResults2ndOrderQC"));
179 intFlow->SetBinContent(8,(qcCommonHistRes2->GetHistIntFlow())->GetBinContent(1));
180 intFlow->SetBinError(8,(qcCommonHistRes2->GetHistIntFlow())->GetBinError(1));
182 qcCommonHist4 = dynamic_cast<AliFlowCommonHist*> (pListQC->FindObject("AliFlowCommonHistQC"));//to be improved
183 qcCommonHistRes4 = dynamic_cast<AliFlowCommonHistResults*> (pListQC->FindObject("AliFlowCommonHistResults4thOrderQC"));
186 intFlow->SetBinContent(9,(qcCommonHistRes4->GetHistIntFlow())->GetBinContent(1));
187 intFlow->SetBinError(9,(qcCommonHistRes4->GetHistIntFlow())->GetBinError(1));
189 qcCommonHistRes6 = dynamic_cast<AliFlowCommonHistResults*> (pListQC->FindObject("AliFlowCommonHistResults6thOrderQC"));
192 intFlow->SetBinContent(10,(qcCommonHistRes6->GetHistIntFlow())->GetBinContent(1));
193 intFlow->SetBinError(10,(qcCommonHistRes6->GetHistIntFlow())->GetBinError(1));
195 qcCommonHistRes8 = dynamic_cast<AliFlowCommonHistResults*> (pListQC->FindObject("AliFlowCommonHistResults8thOrderQC"));
198 intFlow->SetBinContent(11,(qcCommonHistRes8->GetHistIntFlow())->GetBinContent(1));
199 intFlow->SetBinError(11,(qcCommonHistRes8->GetHistIntFlow())->GetBinError(1));
204 //----------------------------------------------------------------------------------
205 //cosmetics: mesh for MC error bands (integrated flow)
206 TGraph* pGraphIF = NULL;
207 if(intFlow && mcepCommonHistRes)
209 Double_t valueMC = intFlow->GetBinContent(1);
210 Double_t errorMC = intFlow->GetBinError(1);
211 Int_t nPts = intFlow->GetNbinsX();
213 pGraphIF = new TGraph(nPts);
215 pGraphIF->SetPoint(1,0,valueMC+errorMC);
216 pGraphIF->SetPoint(2,nPts+1,valueMC+errorMC);
217 pGraphIF->SetPoint(3,nPts+1,valueMC-errorMC);
218 pGraphIF->SetPoint(4,0,valueMC-errorMC);
219 pGraphIF->SetPoint(5,0,valueMC+errorMC);
221 pGraphIF->SetFillStyle(meshStyle);
222 pGraphIF->SetFillColor(meshColor);
227 TString *avM = new TString("M = ");//to be improved
228 TString *nEvts = new TString("N = ");//to be improved
229 TLegend *legendIntFlow = new TLegend(0.15,0.15,0.44,0.35);
230 legendIntFlow->SetTextFont(72);
231 legendIntFlow->SetTextSize(0.03);
234 (*avM)+=(qcCommonHist->GetHistMultInt())->GetMean();//to be improved
235 (*N)+=(Long_t)(qcCommonHist->GetHistMultInt())->GetEntries();//to be improved
236 legendIntFlow->AddEntry(qcCommonHist->GetHistMultInt(),avM->Data(),"");
237 legendIntFlow->AddEntry(qcCommonHist->GetHistMultInt(),N->Data(),"");
242 //cosmetics: legend (integrated flow)
243 TString *entryMC = new TString("MC ......... ");
244 TString *entryQC2 = new TString("QC{2} .... ");
245 TString *entryQC4 = new TString("QC{4} .... ");
247 TLegend *legendIntFlow = new TLegend(0.15,0.15,0.44,0.35);
248 legendIntFlow->SetTextFont(72);
249 legendIntFlow->SetTextSize(0.03);
252 Double_t avMultMC=0., avMultQC2=0., avMultQC4=0.;
253 Long_t nEvtsMC=0, nEvtsQC2=0, nEvtsQC4=0;
256 avMultMC = (mcepCommonHist->GetHistMultInt())->GetMean();
257 nEvtsMC = (mcepCommonHist->GetHistMultInt())->GetEntries();
258 entryMC->Append("M = ");
259 (*entryMC)+=(Long_t)avMultMC;
260 entryMC->Append(", N = ");
261 (*entryMC)+=(Long_t)nEvtsMC;
262 legendIntFlow->AddEntry(mcepCommonHist->GetHistMultInt(),entryMC->Data(),"f");
266 avMultQC2 = (qcCommonHist2->GetHistMultInt())->GetMean();
267 nEvtsQC2 = (qcCommonHist2->GetHistMultInt())->GetEntries();
268 entryQC2->Append("M = ");
269 (*entryQC2)+=(Long_t)avMultQC2;
270 entryQC2->Append(", N = ");
271 (*entryQC2)+=(Long_t)nEvtsQC2;
272 legendIntFlow->AddEntry(qcCommonHist2->GetHistMultInt(),entryQC2->Data(),"f");
276 avMultQC4 = (qcCommonHist4->GetHistMultInt())->GetMean();
277 nEvtsQC4 = (qcCommonHist4->GetHistMultInt())->GetEntries();
278 entryQC4->Append("M = ");
279 (*entryQC4)+=(Long_t)avMultQC4;
280 entryQC4->Append(", N = ");
281 (*entryQC4)+=(Long_t)nEvtsQC4;
282 legendIntFlow->AddEntry(qcCommonHist4->GetHistMultInt(),entryQC4->Data(),"f");
288 //cosmetics: text (integrated flow)
289 TString *entryMC = new TString("MC ......... ");
290 TString *entryQC2 = new TString("QC{2} .... ");
291 TString *entryQC4 = new TString("QC{4} .... ");
293 TPaveText *text = new TPaveText(0.15,0.15,0.44,0.35,"NDC");
294 text->SetTextFont(72);
295 text->SetTextSize(0.03);
297 Double_t avMultMC=0., avMultQC2=0., avMultQC4=0.;
298 Long_t nEvtsMC=0, nEvtsQC2=0, nEvtsQC4=0;
301 avMultMC = (mcepCommonHist->GetHistMultInt())->GetMean();
302 nEvtsMC = (mcepCommonHist->GetHistMultInt())->GetEntries();
303 entryMC->Append("M = ");
304 (*entryMC)+=(Long_t)avMultMC;
305 entryMC->Append(", N = ");
306 (*entryMC)+=(Long_t)nEvtsMC;
307 text->AddText(entryMC->Data());
311 avMultQC2 = (qcCommonHist2->GetHistMultInt())->GetMean();
312 nEvtsQC2 = (qcCommonHist2->GetHistMultInt())->GetEntries();
313 entryQC2->Append("M = ");
314 (*entryQC2)+=(Long_t)avMultQC2;
315 entryQC2->Append(", N = ");
316 (*entryQC2)+=(Long_t)nEvtsQC2;
317 text->AddText(entryQC2->Data());
321 avMultQC4 = (qcCommonHist4->GetHistMultInt())->GetMean();
322 nEvtsQC4 = (qcCommonHist4->GetHistMultInt())->GetEntries();
323 entryQC4->Append("M = ");
324 (*entryQC4)+=(Long_t)avMultQC4;
325 entryQC4->Append(", N = ");
326 (*entryQC4)+=(Long_t)nEvtsQC4;
327 text->AddText(entryQC4->Data());
330 //----------------------------------------------------------------------------------
332 //drawing everything for integrated flow:
333 TCanvas* intFlowCanvas = new TCanvas("Integrated Flow","Integrated Flow",1000,600);
335 if(intFlow) intFlow->Draw("E1");
336 if(pGraphIF) pGraphIF->Draw("LFSAME");
337 //if(legendIntFlow) legendIntFlow->Draw("");
340 //==================================================================================
345 //==================================================================================
347 //==================================================================================
349 TCanvas* diffFlowCanvas = new TCanvas("Differential Flow","Differential Flow",1000,600);
351 Int_t iNbinsPt = AliFlowCommonConstants::GetNbinsPt();
352 Double_t dPtMin = AliFlowCommonConstants::GetPtMin();
353 Double_t dPtMax = AliFlowCommonConstants::GetPtMax();
355 TH1D *styleHist = new TH1D("styleHist","styleHist",iNbinsPt,dPtMin,dPtMax);
356 styleHist->SetTitle("Differential Flow");
357 styleHist->SetXTitle("p_{t} [GeV]");
358 styleHist->SetYTitle("v_{n}");
361 TString *entryDiffMC = new TString("v_{n}{MC} ");
362 TString *entryDiffQC2 = new TString("v_{n}^{Q}{2} ");
363 TString *entryDiffQC4 = new TString("v_{n}^{Q}{4} ");
365 TLegend* legendDiffFlow = new TLegend(0.15,0.15,0.44,0.35);
366 legendDiffFlow->SetTextFont(72);
367 legendDiffFlow->SetTextSize(0.03);
369 //MCEP = Monte Carlo Event Plane
372 if(mcepCommonHistRes)
374 (mcepCommonHistRes->GetHistDiffFlow())->Scale(0.01);//to be improved
375 (mcepCommonHistRes->GetHistDiffFlow())->SetMarkerColor(2);
376 (mcepCommonHistRes->GetHistDiffFlow())->SetMarkerStyle(20);
377 (mcepCommonHistRes->GetHistDiffFlow())->SetFillStyle(meshStyle);
378 (mcepCommonHistRes->GetHistDiffFlow())->SetFillColor(meshColor);
379 entryDiffMC->Append("(M = ");
380 (*entryDiffMC)+=(Long_t)avMultMC;
381 entryDiffMC->Append(", N = ");
382 (*entryDiffMC)+=(Long_t)nEvtsMC;
383 entryDiffMC->Append(")");
384 //(mcepCommonHistRes->GetHistDiffFlow())->Draw("E1PSAME");
385 legendDiffFlow->AddEntry(mcepCommonHistRes->GetHistDiffFlow(),entryDiffMC->Data(),"f");
389 //GFC = Generating Function Cumulants
394 (gfc2->GetHistDiffFlow())->SetMarkerColor(28);
395 (gfc2->GetHistDiffFlow())->SetMarkerStyle(20);
396 (gfc2->GetHistDiffFlow())->Draw("E1PSAME");
397 legendDiffFlow->AddEntry(gfc2->GetHistDiffFlow(),"v_{n}{2}","p");
401 (gfc4->GetHistDiffFlow())->SetMarkerColor(28);
402 (gfc4->GetHistDiffFlow())->SetMarkerStyle(21);
403 (gfc4->GetHistDiffFlow())->Draw("E1PSAME");
404 legendDiffFlow->AddEntry(gfc4->GetHistDiffFlow(),"v_{n}{4}","p");
405 //(gfc6->GetHistDiffFlow())->Draw("SAME");
406 //(gfc8->GetHistDiffFlow())->Draw("SAME");
415 (qcCommonHistRes2->GetHistDiffFlow())->SetMarkerColor(44);
416 (qcCommonHistRes2->GetHistDiffFlow())->SetMarkerStyle(20);
417 (qcCommonHistRes2->GetHistDiffFlow())->Draw("E1PSAME");
418 entryDiffQC2->Append("(M = ");
419 (*entryDiffQC2)+=(Long_t)avMultQC2;
420 entryDiffQC2->Append(", N = ");
421 (*entryDiffQC2)+=(Long_t)nEvtsQC2;
422 entryDiffQC2->Append(")");
423 legendDiffFlow->AddEntry(qcCommonHistRes2->GetHistDiffFlow(),entryDiffQC2->Data(),"p");
427 (qcCommonHistRes4->GetHistDiffFlow())->SetMarkerColor(44);
428 (qcCommonHistRes4->GetHistDiffFlow())->SetMarkerStyle(21);
429 (qcCommonHistRes4->GetHistDiffFlow())->Draw("E1PSAME");
430 entryDiffQC4->Append("(M = ");
431 (*entryDiffQC4)+=(Long_t)avMultQC4;
432 entryDiffQC4->Append(", N = ");
433 (*entryDiffQC4)+=(Long_t)nEvtsQC4;
434 entryDiffQC4->Append(")");
435 legendDiffFlow->AddEntry(qcCommonHistRes4->GetHistDiffFlow(),entryDiffQC4->Data(),"p");
443 //SP = Scalar Product
444 TList *pListSP = NULL;
445 AliFlowCommonHistResults *sp = NULL;
448 file_SP->GetObject("cobjSP",pListSP);
451 sp = dynamic_cast<AliFlowCommonHistResults*> (pListSP->FindObject("AliFlowCommonHistResultsSP"));
458 //SP = Scalar Product
463 (sp->GetHistDiffFlow())->SetMarkerColor(3);
464 (sp->GetHistDiffFlow())->SetMarkerStyle(28);
465 (sp->GetHistDiffFlow())->Draw("E1PSAME");
466 legend1->AddEntry(sp->GetHistDiffFlow(),"v_{n}{SP}","p");
480 //cosmetics: additional legend (differential flow)
486 TLegend* legendDiffFlow2 = new TLegend(0.15,0.60,0.40,0.80);
487 legendDiffFlow2->SetTextFont(72);
488 legendDiffFlow2->SetTextSize(0.03);
491 legendDiffFlow2->AddEntry(qcCommonHist2->GetHistMultInt(),avM->Data(),"");
492 legendDiffFlow2->AddEntry(qcCommonHist2->GetHistMultInt(),nEvts->Data(),"");
496 legendDiffFlow2->AddEntry(qcCommonHist2->GetHistMultInt(),avM->Data(),"");
497 legendDiffFlow2->AddEntry(qcCommonHist2->GetHistMultInt(),nEvts->Data(),"");
501 legendDiffFlow2->AddEntry(qcCommonHist2->GetHistMultInt(),avM->Data(),"");
502 legendDiffFlow2->AddEntry(qcCommonHist2->GetHistMultInt(),nEvts->Data(),"");
507 //cosmetics: Monte Carlo error bands for differential flow
508 TGraph* pGraphDF = NULL;
509 if(mcepCommonHistRes)
511 Int_t nPtsDF = (mcepCommonHistRes->GetHistDiffFlow())->GetNbinsX();
512 Double_t binWidth = (mcepCommonHistRes->GetHistDiffFlow())->GetBinWidth(1);//assuming that all bins have the same width
514 pGraphDF = new TGraph(2*nPts);
516 for(Int_t i=1;i<nPtsDF+1;i++)
518 Double_t valueMC = (mcepCommonHistRes->GetHistDiffFlow())->GetBinContent(i);
519 Double_t errorMC = (mcepCommonHistRes->GetHistDiffFlow())->GetBinError(i);
520 pGraphDF->SetPoint(i,(i-0.5)*binWidth,valueMC+errorMC);
523 for(Int_t i=nPtsDF;i<2*nPtsDF;i++)
525 Double_t valueMC = (mcepCommonHistRes->GetHistDiffFlow())->GetBinContent(2*nPtsDF-i);
526 Double_t errorMC = (mcepCommonHistRes->GetHistDiffFlow())->GetBinError(2*nPtsDF-i);
527 pGraphDF->SetPoint(i,(2*nPtsDF-i-0.5)*binWidth,valueMC-errorMC);
530 pGraphDF->SetFillStyle(meshStyle);
531 pGraphDF->SetFillColor(meshColor);
534 if(legendDiffFlow) legendDiffFlow->Draw("");
535 if(pGraphDF) pGraphDF->Draw("LFSAME");
537 //==================================================================================
541 //==========================================================
543 TGraph* fillAreaBetweenFunctions(TF1* fUp, TF1*fDown, double nfmin,
544 double nfmax, int npf, int fillStyle,
547 fDown->SetLineColor(fillColor);
548 fDown->SetLineWidth(0.3);
549 fUp->SetLineColor(fillColor);
550 fUp->SetLineWidth(0.3);
552 TArrayD xf(2*npf+1), yf(2*npf+1);
554 //make and closed area and fill it
555 Double_t xfmin = nfmin; Double_t xfmax = nfmax;
556 Double_t dxf = (xfmax-xfmin)/(npf-1);
557 for (Int_t i=0;i<npf;i++) {
558 xf[i] = xfmin + dxf*i;
559 yf[i] = fDown->Eval(xf[i]);
560 xf[npf+i] = xfmax - dxf*i;
561 yf[npf+i] = fUp->Eval(xf[npf+i]);
563 xf[2*npf] = xf[0]; yf[2*npf] = yf[0];
564 TGraph *grf = new TGraph(2*npf+1);
565 for (int i=0; i<2*npf+1; i++) grf->SetPoint(i,xf[i],yf[i]);
566 grf->SetFillStyle(fillStyle);
567 grf->SetFillColor(fillColor);
574 //=====================================================================================