]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/drawProtonQAResults.C
reorganized a bit
[u/mrichter/AliRoot.git] / PWG2 / drawProtonQAResults.C
1 void drawProtonQAResults(const char *analysisType = "TPC") {
2   //Macro to visualize the results of the proton QA task
3   //TCanvas objects: 16
4   gStyle->SetPalette(1,0);
5   gStyle->SetCanvasColor(41);
6   gStyle->SetFrameFillColor(10);
7
8   TString filename1 = "Protons.QA.";
9   filename1 += analysisType; filename1 += ".root";
10   TString filename2 = "Protons.MC.QA.";
11   filename2 += analysisType; filename2 += ".root";
12   TString filename3 = "Protons.Efficiency.";
13   filename3 += analysisType; filename3 += ".root",
14  
15   TFile *fQA = TFile::Open(filename1.Data());
16   TList *listGlobalQA = (TList *)fQA->Get("globalQAList");
17   drawCutStatistics(listGlobalQA,analysisType);
18  
19   TFile *fMC = TFile::Open(filename2.Data());
20   TList *listPDG = (TList *)fMC->Get("pdgCodeList");  
21   TList *listMCProcesses = (TList *)fMC->Get("mcProcessList");  
22   drawMCQA(listPDG,listMCProcesses);
23   
24   TFile *fEfficiency = TFile::Open(filename3.Data());
25   TList *listEfficiency = (TList *)fEfficiency->Get("efficiencyList");
26   drawEfficiency(listEfficiency,analysisType);
27
28   fQA->Close();
29   fMC->Close();
30   fEfficiency->Close();
31 }
32
33 //________________________________________//
34 void drawCutStatistics(TList *list,
35                        const char* analysisType) {
36   //Function to display the statistics from the cuts
37   //The histogram shows the influence of each cut on the primary
38   //and secondary (anti)protons
39   const Int_t NQAHISTOSPERLIST = 26;
40   
41   Double_t gEntriesQA2DList[12] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
42   Double_t gEntriesQAPrimaryProtonsAcceptedList[NQAHISTOSPERLIST], gEntriesQAPrimaryProtonsRejectedList[NQAHISTOSPERLIST];
43   Double_t gEntriesQASecondaryProtonsAcceptedList[NQAHISTOSPERLIST], gEntriesQASecondaryProtonsRejectedList[NQAHISTOSPERLIST];
44   Double_t gEntriesQAPrimaryAntiProtonsAcceptedList[NQAHISTOSPERLIST], gEntriesQAPrimaryAntiProtonsRejectedList[NQAHISTOSPERLIST];
45   Double_t gEntriesQASecondaryAntiProtonsAcceptedList[NQAHISTOSPERLIST], gEntriesQASecondaryAntiProtonsRejectedList[NQAHISTOSPERLIST];
46
47   for(Int_t i = 0; i < NQAHISTOSPERLIST; i++) {
48     gEntriesQAPrimaryProtonsAcceptedList[i] = 0.0;
49     gEntriesQAPrimaryProtonsRejectedList[i] = 0.0;
50     gEntriesQASecondaryProtonsAcceptedList[i] = 0.0;
51     gEntriesQASecondaryProtonsRejectedList[i] = 0.0;
52     gEntriesQAPrimaryAntiProtonsAcceptedList[i] = 0.0;
53     gEntriesQAPrimaryAntiProtonsRejectedList[i] = 0.0;
54     gEntriesQASecondaryAntiProtonsAcceptedList[i] = 0.0;
55     gEntriesQASecondaryAntiProtonsRejectedList[i] = 0.0;
56   }
57
58   TList *fQA2DList = (TList *)list->At(0);
59   GetQAEntries(fQA2DList,gEntriesQA2DList);
60   TH3F *gHistYPtPDGProtonsPass = (TH3F *)fQA2DList->At(10);
61   TH3F *gHistYPtPDGAntiProtonsPass = (TH3F *)fQA2DList->At(11);
62
63   TList *fQAPrimaryProtonsAcceptedList = (TList *)list->At(1);
64   GetQAEntries(fQAPrimaryProtonsAcceptedList,gEntriesQAPrimaryProtonsAcceptedList);
65
66   TList *fQAPrimaryProtonsRejectedList = (TList *)list->At(2);
67   GetQAEntries(fQAPrimaryProtonsRejectedList,gEntriesQAPrimaryProtonsRejectedList);
68
69   TList *fQASecondaryProtonsAcceptedList = (TList *)list->At(3);
70   GetQAEntries(fQASecondaryProtonsAcceptedList,gEntriesQASecondaryProtonsAcceptedList);
71
72   TList *fQASecondaryProtonsRejectedList = (TList *)list->At(4);
73   GetQAEntries(fQASecondaryProtonsRejectedList,gEntriesQASecondaryProtonsRejectedList);
74
75   TList *fQAPrimaryAntiProtonsAcceptedList = (TList *)list->At(5);
76   GetQAEntries(fQAPrimaryAntiProtonsAcceptedList,gEntriesQAPrimaryAntiProtonsAcceptedList);
77
78   TList *fQAPrimaryAntiProtonsRejectedList = (TList *)list->At(6);
79   GetQAEntries(fQAPrimaryAntiProtonsRejectedList,gEntriesQAPrimaryAntiProtonsRejectedList);
80
81   TList *fQASecondaryAntiProtonsAcceptedList = (TList *)list->At(7);
82   GetQAEntries(fQASecondaryAntiProtonsAcceptedList,gEntriesQASecondaryAntiProtonsAcceptedList);
83
84   TList *fQASecondaryAntiProtonsRejectedList = (TList *)list->At(8);
85   GetQAEntries(fQASecondaryAntiProtonsRejectedList,gEntriesQASecondaryAntiProtonsRejectedList);
86
87   //_______________________________________________________//
88   //Create the histograms
89   const Int_t nx = 26;
90   char *fCutName[nx] = {"Tracks","",
91                         "ITS Clusters",
92                         "#chi^{2}/N_{ITS-Clusters}",
93                         "TPC Clusters",
94                         "#chi^{2}/N_{TPC-Clusters}",
95                         "ExtCov11",
96                         "ExtCov22",
97                         "ExtCov33",
98                         "ExtCov44",
99                         "ExtCov55",
100                         "#sigma_{Vertex}",
101                         "#sigma_{Vertex-TPC}",
102                         "DCA_{xy}",
103                         "DCA_{xy}(TPC)",
104                         "DCA_{z}",
105                         "DCA_{z}(TPC)",
106                         "#chi^{2}(vertex)",
107                         "ITS refit",
108                         "TPC refit",
109                         "ESD pid",
110                         "TPC pid","",
111                         "N_{Secondaries}/N_{total}","",""};
112   char *fCutITSName[6] = {"SPD_{1}","SPD_{2}",
113                           "SDD_{1}","SDD_{2}",
114                           "SSD_{1}","SSD_{2}"};
115
116   //cut influence
117   TH2F *hEmpty = new TH2F("hEmpty","",nx,0,nx,100,0,100); 
118   hEmpty->SetStats(kFALSE); 
119   hEmpty->SetMarkerStyle(kFullCircle);
120   hEmpty->SetLineColor(2); hEmpty->SetMarkerColor(2);
121   hEmpty->GetYaxis()->SetTitle("Influence of the cuts [%]");
122   for(Int_t i = 1; i <= nx; i++) 
123     hEmpty->GetXaxis()->SetBinLabel(i,fCutName[i-1]);
124   hEmpty->GetXaxis()->SetLabelOffset(0.01); 
125   hEmpty->GetXaxis()->SetLabelSize(0.045);
126
127   //primary protons
128   TH1F *hPrimaryProtons = new TH1F("hPrimaryProtons","",nx,0,nx); 
129   hPrimaryProtons->SetStats(kFALSE); 
130   hPrimaryProtons->SetMarkerStyle(kFullCircle);
131   hPrimaryProtons->SetLineColor(4); hPrimaryProtons->SetLineWidth(2); 
132   hPrimaryProtons->SetMarkerColor(4);
133   hPrimaryProtons->GetYaxis()->SetTitle("Influence of the cuts [%]");
134   for(Int_t i = 1; i <= nx; i++) {
135     hPrimaryProtons->SetBinContent(i,-10.);
136     hPrimaryProtons->GetXaxis()->SetBinLabel(i,fCutName[i-1]);
137   }
138   hPrimaryProtons->GetXaxis()->SetLabelOffset(0.01); 
139   hPrimaryProtons->GetXaxis()->SetLabelSize(0.045);
140
141   //secondary protons
142   TH1F *hSecondaryProtons = new TH1F("hSecondaryProtons","",nx,0,nx); 
143   hSecondaryProtons->SetStats(kFALSE); 
144   hSecondaryProtons->SetMarkerStyle(22);
145   hSecondaryProtons->SetMarkerSize(1.4);
146   hSecondaryProtons->SetLineColor(2); hSecondaryProtons->SetLineWidth(2); 
147   hSecondaryProtons->SetMarkerColor(2);
148   hSecondaryProtons->GetYaxis()->SetTitle("Influence of the cuts [%]");
149   for(Int_t i = 1; i <= nx; i++) {
150     hSecondaryProtons->SetBinContent(i,-10.);
151     hSecondaryProtons->GetXaxis()->SetBinLabel(i,fCutName[i-1]);
152   }
153   hSecondaryProtons->GetXaxis()->SetLabelOffset(0.01); 
154   hSecondaryProtons->GetXaxis()->SetLabelSize(0.045);
155
156   //primary antiprotons
157   TH1F *hPrimaryAntiProtons = new TH1F("hPrimaryAntiProtons","",nx,0,nx); 
158   hPrimaryAntiProtons->SetStats(kFALSE); 
159   hPrimaryAntiProtons->SetMarkerStyle(kFullCircle);
160   hPrimaryAntiProtons->SetLineColor(4); hPrimaryAntiProtons->SetLineWidth(2); 
161   hPrimaryAntiProtons->SetMarkerColor(4);
162   hPrimaryAntiProtons->GetYaxis()->SetTitle("Influence of the cuts [%]");
163   for(Int_t i = 1; i <= nx; i++) {
164     hPrimaryAntiProtons->SetBinContent(i,-10.);
165     hPrimaryAntiProtons->GetXaxis()->SetBinLabel(i,fCutName[i-1]);
166   }
167   hPrimaryAntiProtons->GetXaxis()->SetLabelOffset(0.01); 
168   hPrimaryAntiProtons->GetXaxis()->SetLabelSize(0.045);
169
170   //secondary antiprotons
171   TH1F *hSecondaryAntiProtons = new TH1F("hSecondaryAntiProtons","",nx,0,nx); 
172   hSecondaryAntiProtons->SetStats(kFALSE); 
173   hSecondaryAntiProtons->SetMarkerStyle(22);
174   hSecondaryAntiProtons->SetMarkerSize(1.4);
175   hSecondaryAntiProtons->SetLineColor(2); hSecondaryAntiProtons->SetLineWidth(2); 
176   hSecondaryAntiProtons->SetMarkerColor(2);
177   hSecondaryAntiProtons->GetYaxis()->SetTitle("Influence of the cuts [%]");
178   for(Int_t i = 1; i <= nx; i++) {
179     hSecondaryAntiProtons->SetBinContent(i,-10.);
180     hSecondaryAntiProtons->GetXaxis()->SetBinLabel(i,fCutName[i-1]);
181   }
182   hSecondaryAntiProtons->GetXaxis()->SetLabelOffset(0.01); 
183   hSecondaryAntiProtons->GetXaxis()->SetLabelSize(0.045);
184   //_______________________________________________________//
185
186   //1D for primary protons
187   //cout<<"_____________________________________________________"<<endl;
188   //cout<<"_______________PRIMARY PROTONS_______________________"<<endl;
189   hPrimaryProtons->SetBinContent(1,GetPercentage(gEntriesQA2DList[0],gEntriesQA2DList[1]));
190
191   for(Int_t i = 2; i < NQAHISTOSPERLIST-4; i++) 
192     hPrimaryProtons->SetBinContent(i+1,GetPercentage(gEntriesQAPrimaryProtonsAcceptedList[i-2],
193                                                      gEntriesQAPrimaryProtonsRejectedList[i-2]));
194   
195   //1D for secondary protons
196   //cout<<"_____________________________________________________"<<endl;
197   //cout<<"_______________SECONDARY PROTONS_____________________"<<endl;
198   hSecondaryProtons->SetBinContent(1,GetPercentage(gEntriesQA2DList[2],gEntriesQA2DList[3]));
199   
200   for(Int_t i = 2; i < NQAHISTOSPERLIST-4; i++) 
201     hSecondaryProtons->SetBinContent(i+1,GetPercentage(gEntriesQASecondaryProtonsAcceptedList[i-2],
202                                                        gEntriesQASecondaryProtonsRejectedList[i-2]));
203   hSecondaryProtons->SetBinContent(24,GetPercentage(gEntriesQA2DList[0],gEntriesQA2DList[2]));
204
205   //1D for primary antiprotons
206   //cout<<"_________________________________________________________"<<endl;
207   //cout<<"_______________PRIMARY ANTIPROTONS_______________________"<<endl;
208   hPrimaryAntiProtons->SetBinContent(1,GetPercentage(gEntriesQA2DList[4],gEntriesQA2DList[5]));
209   
210   for(Int_t i = 2; i < NQAHISTOSPERLIST-4; i++) 
211     hPrimaryAntiProtons->SetBinContent(i+1,GetPercentage(gEntriesQAPrimaryAntiProtonsAcceptedList[i-2],
212                                                          gEntriesQAPrimaryAntiProtonsRejectedList[i-2]));
213   
214   //1D for secondary antiprotons
215   //cout<<"_________________________________________________________"<<endl;
216   //cout<<"_______________SECONDARY ANTIPROTONS_____________________"<<endl;
217   hSecondaryAntiProtons->SetBinContent(1,GetPercentage(gEntriesQA2DList[6],gEntriesQA2DList[7]));
218
219   for(Int_t i = 2; i < NQAHISTOSPERLIST-4; i++) 
220     hSecondaryAntiProtons->SetBinContent(i+1,GetPercentage(gEntriesQASecondaryAntiProtonsAcceptedList[i-2],
221                                                            gEntriesQASecondaryAntiProtonsRejectedList[i-2]));
222   hSecondaryAntiProtons->SetBinContent(24,GetPercentage(gEntriesQA2DList[4],gEntriesQA2DList[6]));
223
224   TLatex *t1 = new TLatex();
225   t1->SetTextSize(0.04);
226   //_________________________________________________________//
227   TCanvas *c1 = new TCanvas("c1","Cut Influence - Protons",0,0,700,400);
228   c1->SetHighLightColor(10); c1->SetBottomMargin(0.15);
229   c1->SetGridx(); c1->SetGridy();
230
231   for(Int_t i = 1; i <= nx; i++) {
232     hPrimaryProtons->SetBinError(i,1.0);
233     hSecondaryProtons->SetBinError(i,1.0);
234   }
235   hEmpty->DrawCopy();
236   hPrimaryProtons->DrawCopy("EHISTSAME");
237   hSecondaryProtons->DrawCopy("EHISTSAME");
238   DrawMarker(20.5, 90, 20, 1.2, 4);
239   t1->DrawLatex(21,88,"Primary p");
240   DrawMarker(20.5, 80, 22, 1.2, 2);
241   t1->DrawLatex(21,78,"Secondary p");
242
243   c1->SaveAs("CutInfluence-Protons.gif");
244
245   //_________________________________________________________//
246   TCanvas *c2 = new TCanvas("c2","Cut Influence - AntiProtons",50,50,700,400);
247   c2->SetHighLightColor(10); c2->SetBottomMargin(0.15);
248   c2->SetGridx(); c2->SetGridy();
249
250   for(Int_t i = 1; i <= nx; i++) {
251     hPrimaryAntiProtons->SetBinError(i,1.0);
252     hSecondaryAntiProtons->SetBinError(i,1.0);
253   }
254   hEmpty->DrawCopy();
255   hPrimaryAntiProtons->DrawCopy("EHISTSAME");
256   hSecondaryAntiProtons->DrawCopy("EHISTSAME");
257   DrawMarker(20.5, 90, 20, 1.2, 4);
258   t1->DrawLatex(21,88,"Primary #bar{p}");
259   DrawMarker(20.5, 80, 22, 1.2, 2);
260   t1->DrawLatex(21,78,"Secondary #bar{p}");
261
262   c2->SaveAs("CutInfluence-AntiProtons.gif");
263
264   //_________________________________________________________//
265   //ITS layers influence
266   TH2F *hEmptyITS = new TH2F("hEmptyITS","",10,0,10,100,0,100); 
267   hEmptyITS->SetStats(kFALSE); 
268   hEmptyITS->SetMarkerStyle(kFullCircle);
269   hEmptyITS->SetLineColor(2); hEmptyITS->SetMarkerColor(2);
270   hEmptyITS->GetYaxis()->SetTitle("Influence of the ITS layers [%]");
271   hEmptyITS->GetYaxis()->SetTitleOffset(1.3);
272   for(Int_t i = 1; i <= 6; i++) 
273     hEmptyITS->GetXaxis()->SetBinLabel(i,fCutITSName[i-1]);
274   hEmptyITS->GetXaxis()->SetLabelOffset(0.01); 
275   hEmptyITS->GetXaxis()->SetLabelSize(0.045);
276
277   //_________________________________________________________//
278   //primary protons
279   TH1F *hPrimaryProtonsITS = new TH1F("hPrimaryProtonsITS","",7,0,7); 
280   hPrimaryProtonsITS->SetStats(kFALSE); 
281   hPrimaryProtonsITS->SetMarkerStyle(kFullCircle);
282   hPrimaryProtonsITS->SetLineColor(4); hPrimaryProtonsITS->SetLineWidth(2); 
283   hPrimaryProtonsITS->SetMarkerColor(4);
284   hPrimaryProtonsITS->GetYaxis()->SetTitle("Influence of the cuts [%]");
285   for(Int_t i = 1; i <= 6; i++) {
286     hPrimaryProtonsITS->SetBinContent(i,-10.);
287     hPrimaryProtonsITS->GetXaxis()->SetBinLabel(i,fCutITSName[i-1]);
288   }
289   hPrimaryProtonsITS->GetXaxis()->SetLabelOffset(0.01); 
290   hPrimaryProtonsITS->GetXaxis()->SetLabelSize(0.045);
291
292   //secondary protons
293   TH1F *hSecondaryProtonsITS = new TH1F("hSecondaryProtonsITS","",7,0,7); 
294   hSecondaryProtonsITS->SetStats(kFALSE); 
295   hSecondaryProtonsITS->SetMarkerStyle(22);
296   hSecondaryProtonsITS->SetMarkerSize(1.4);
297   hSecondaryProtonsITS->SetLineColor(2); hSecondaryProtonsITS->SetLineWidth(2); 
298   hSecondaryProtonsITS->SetMarkerColor(2);
299   hSecondaryProtonsITS->GetYaxis()->SetTitle("Influence of the cuts [%]");
300   for(Int_t i = 1; i <= 6; i++) {
301     hSecondaryProtonsITS->SetBinContent(i,-10.);
302     hSecondaryProtonsITS->GetXaxis()->SetBinLabel(i,fCutITSName[i-1]);
303   }
304   hSecondaryProtonsITS->GetXaxis()->SetLabelOffset(0.01); 
305   hSecondaryProtonsITS->GetXaxis()->SetLabelSize(0.045);
306
307   //primary antiprotons
308   TH1F *hPrimaryAntiProtonsITS = new TH1F("hPrimaryAntiProtonsITS","",7,0,7); 
309   hPrimaryAntiProtonsITS->SetStats(kFALSE); 
310   hPrimaryAntiProtonsITS->SetMarkerStyle(kFullCircle);
311   hPrimaryAntiProtonsITS->SetLineColor(4); hPrimaryAntiProtonsITS->SetLineWidth(2); 
312   hPrimaryAntiProtonsITS->SetMarkerColor(4);
313   hPrimaryAntiProtonsITS->GetYaxis()->SetTitle("Influence of the cuts [%]");
314   for(Int_t i = 1; i <= 6; i++) {
315     hPrimaryAntiProtonsITS->SetBinContent(i,-10.);
316     hPrimaryAntiProtonsITS->GetXaxis()->SetBinLabel(i,fCutITSName[i-1]);
317   }
318   hPrimaryAntiProtonsITS->GetXaxis()->SetLabelOffset(0.01); 
319   hPrimaryAntiProtonsITS->GetXaxis()->SetLabelSize(0.045);
320
321   //secondary antiprotons
322   TH1F *hSecondaryAntiProtonsITS = new TH1F("hSecondaryAntiProtonsITS","",7,0,7); 
323   hSecondaryAntiProtonsITS->SetStats(kFALSE); 
324   hSecondaryAntiProtonsITS->SetMarkerStyle(22);
325   hSecondaryAntiProtonsITS->SetMarkerSize(1.4);
326   hSecondaryAntiProtonsITS->SetLineColor(2); hSecondaryAntiProtonsITS->SetLineWidth(2); 
327   hSecondaryAntiProtonsITS->SetMarkerColor(2);
328   hSecondaryAntiProtonsITS->GetYaxis()->SetTitle("Influence of the cuts [%]");
329   for(Int_t i = 1; i <= 6; i++) {
330     hSecondaryAntiProtonsITS->SetBinContent(i,-10.);
331     hSecondaryAntiProtonsITS->GetXaxis()->SetBinLabel(i,fCutITSName[i-1]);
332   }
333   hSecondaryAntiProtonsITS->GetXaxis()->SetLabelOffset(0.01); 
334   hSecondaryAntiProtonsITS->GetXaxis()->SetLabelSize(0.045);
335
336   //_______________________________________________________//
337   TCanvas *c9 = new TCanvas("c9","ITS cluster map - (anti)protons",
338                             100,100,700,400);
339   c9->SetHighLightColor(10); c9->Divide(2,1);
340   for(Int_t i = 1; i <= 6; i++) {
341     hPrimaryProtonsITS->SetBinError(i,1.0);
342     hSecondaryProtonsITS->SetBinError(i,1.0);
343     hPrimaryAntiProtonsITS->SetBinError(i,1.0);
344     hSecondaryAntiProtonsITS->SetBinError(i,1.0);
345   }
346   c9->cd(1)->SetBottomMargin(0.15);
347   c9->cd(1)->SetLeftMargin(0.15);
348   c9->cd(1)->SetGridx(); c9->cd(1)->SetGridy();
349   hEmptyITS->SetTitle("Protons");
350   hEmptyITS->DrawCopy();
351
352   for(Int_t i = 1; i < 7; i++) {
353     hPrimaryProtonsITS->SetBinContent(i,GetPercentage(gEntriesQAPrimaryProtonsAcceptedList[19+i],
354                                                       gEntriesQAPrimaryProtonsRejectedList[19+i]));
355     hSecondaryProtonsITS->SetBinContent(i,GetPercentage(gEntriesQASecondaryProtonsAcceptedList[19+i],
356                                                         gEntriesQASecondaryProtonsRejectedList[19+i]));
357   }
358   hPrimaryProtonsITS->DrawCopy("EHISTSAME");
359   hSecondaryProtonsITS->DrawCopy("EHISTSAME");
360   DrawMarker(6.5, 90, 20, 1.2, 4);
361   t1->DrawLatex(7,88,"Primary p");
362   DrawMarker(6.5, 80, 22, 1.2, 2);
363   t1->DrawLatex(7,78,"Secondary p");
364
365   c9->cd(2)->SetBottomMargin(0.15);
366   c9->cd(2)->SetLeftMargin(0.15);
367   c9->cd(2)->SetGridx(); c9->cd(2)->SetGridy();
368   hEmptyITS->SetTitle("Antiprotons");
369   hEmptyITS->DrawCopy();
370   for(Int_t i = 1; i < 7; i++) {
371     hPrimaryAntiProtonsITS->SetBinContent(i,GetPercentage(gEntriesQAPrimaryAntiProtonsAcceptedList[19+i],
372                                                           gEntriesQAPrimaryAntiProtonsRejectedList[19+i]));
373     hSecondaryAntiProtonsITS->SetBinContent(i,GetPercentage(gEntriesQASecondaryAntiProtonsAcceptedList[19+i],
374                                                             gEntriesQASecondaryAntiProtonsRejectedList[19+i]));
375   }
376   hPrimaryAntiProtonsITS->DrawCopy("EHISTSAME");
377   hSecondaryAntiProtonsITS->DrawCopy("EHISTSAME");
378   DrawMarker(6.5, 90, 20, 1.2, 4);
379   t1->DrawLatex(7,88,"Primary #bar{p}");
380   DrawMarker(6.5, 80, 22, 1.2, 2);
381   t1->DrawLatex(7,78,"Secondary #bar{p}");
382
383   c9->SaveAs("CutInfluence-ITS.gif");
384   
385   //Efficiency - Contamination plots
386   DrawContamination(fQA2DList,analysisType);
387   DrawCutEfficiency(fQA2DList,analysisType);
388   DrawComposition(gHistYPtPDGProtonsPass,gHistYPtPDGAntiProtonsPass);
389 }
390
391 //________________________________________//
392 void DrawComposition(TH3F *gHistYPtPDGProtons,
393                      TH3F *gHistYPtPDGAntiProtons) {
394   //Function to display the composition of secondary (anti)protons
395   //that survive the quality criteria
396   Double_t nParticleCompositionProtonY[100], nParticleCompositionProtonPt[100];
397   Double_t nParticleCompositionProtonYError[100], nParticleCompositionProtonPtError[100];
398   Double_t nParticleCompositionAntiProtonY[100], nParticleCompositionAntiProtonPt[100];
399   Double_t nParticleCompositionAntiProtonYError[100], nParticleCompositionAntiProtonPtError[100];
400   Double_t gY[100], gPt[100];
401   Double_t gYError[100], gPtError[100];
402   for(Int_t iBins = 0; iBins < 100; iBins++) {
403     nParticleCompositionProtonY[iBins] = 0;
404     nParticleCompositionProtonPt[iBins] = 0;
405     nParticleCompositionProtonYError[iBins] = 0;
406     nParticleCompositionProtonPtError[iBins] = 0;
407     nParticleCompositionAntiProtonY[iBins] = 0;
408     nParticleCompositionAntiProtonPt[iBins] = 0;
409     nParticleCompositionAntiProtonYError[iBins] = 0;
410     nParticleCompositionAntiProtonPtError[iBins] = 0;
411     gY[iBins] = 0;
412     gPt[iBins] = 0;
413     gYError[iBins] = 0;
414     gPtError[iBins] = 0;
415   }
416   
417   TGraphErrors *gParticleProtonY[14];
418   TGraphErrors *gParticleProtonPt[14];
419   TGraphErrors *gParticleAntiProtonY[14];
420   TGraphErrors *gParticleAntiProtonPt[14];
421   for(Int_t iParticle = 0; iParticle < 14; iParticle++) {
422     GetComposition(iParticle,
423                    gHistYPtPDGProtons,
424                    nParticleCompositionProtonY,nParticleCompositionProtonYError,gY, gYError,
425                    nParticleCompositionProtonPt, nParticleCompositionProtonPtError, gPt, gPtError);
426     gParticleProtonY[iParticle] = new TGraphErrors(gHistYPtPDGProtons->GetNbinsX(),
427                                                   gY,nParticleCompositionProtonY,gYError,nParticleCompositionProtonYError);
428     gParticleProtonY[iParticle]->SetMarkerStyle(iParticle+20);
429     gParticleProtonY[iParticle]->SetMarkerSize(1.2);
430
431     gParticleProtonPt[iParticle] = new TGraphErrors(gHistYPtPDGProtons->GetNbinsY(),
432                                                    gPt,nParticleCompositionProtonPt,gPtError,nParticleCompositionProtonPtError);
433     gParticleProtonPt[iParticle]->SetMarkerStyle(iParticle+20);
434     gParticleProtonPt[iParticle]->SetMarkerSize(1.2);
435
436     GetComposition(iParticle,
437                    gHistYPtPDGAntiProtons,
438                    nParticleCompositionAntiProtonY,nParticleCompositionAntiProtonYError,gY, gYError, 
439                    nParticleCompositionAntiProtonPt, nParticleCompositionAntiProtonPtError, gPt, gPtError);
440     gParticleAntiProtonY[iParticle] = new TGraphErrors(gHistYPtPDGAntiProtons->GetNbinsX(),
441                                                       gY,nParticleCompositionAntiProtonY,gYError,nParticleCompositionAntiProtonYError);
442     gParticleAntiProtonY[iParticle]->SetMarkerStyle(iParticle+20);
443     gParticleAntiProtonY[iParticle]->SetMarkerSize(1.2);
444
445     gParticleAntiProtonPt[iParticle] = new TGraphErrors(gHistYPtPDGAntiProtons->GetNbinsY(),
446                                                        gPt,nParticleCompositionAntiProtonPt,gPtError,nParticleCompositionAntiProtonPtError);
447     gParticleAntiProtonPt[iParticle]->SetMarkerStyle(iParticle+20);
448     gParticleAntiProtonPt[iParticle]->SetMarkerSize(1.2);
449   }
450
451   //_________________________________________________________//
452   char *fParticleName[14] = {"Primary","K_{L}","#pi","K_{S}","K",
453                              "n","p","#Sigma^{-}","#Lambda","#Sigma^{+}",
454                              "#Xi^{-}","#Xi^{0}","#Omega^{-}"};
455   TLatex *t1 = new TLatex();
456   t1->SetTextSize(0.04);
457
458   TH2F *hEmptyY = new TH2F("hEmptyY","",100,-1.2,1.2,100,0,120); 
459   hEmptyY->SetStats(kFALSE); 
460   hEmptyY->GetYaxis()->SetTitle("Particle composition [%]");
461   hEmptyY->GetXaxis()->SetTitle(gHistYPtPDGProtons->GetXaxis()->GetTitle());
462
463   TCanvas *c12 = new TCanvas("c12",
464                              "Composition of accepted secondaries vs y",
465                              350,350,700,400);
466   c12->Divide(2,1);
467   c12->SetHighLightColor(10); c12->cd(1)->SetBottomMargin(0.15);
468   c12->cd(1)->SetGridx(); c12->cd(1)->SetGridy();
469   hEmptyY->SetTitle("Protons");
470   hEmptyY->DrawCopy();
471   for(Int_t iParticle = 0; iParticle < 10; iParticle++) {
472     //if((iParticle == 0)||(iParticle == 2)||(iParticle == 5)||(iParticle == 6)||(iParticle == 8))
473     if((iParticle == 2)||(iParticle == 6)||(iParticle == 8)) {
474       gParticleProtonY[iParticle]->Draw("P");
475       //if(iParticle < 5) {
476       //DrawMarker(-1.1, 115-5*iParticle, 20+iParticle, 1.2, 1);
477       //t1->DrawLatex(-1.0,113-5*iParticle,fParticleName[iParticle]);
478     }
479     /*else {
480       DrawMarker(0.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
481       t1->DrawLatex(0.3,113-5*(iParticle-5),fParticleName[iParticle]);
482       }*/
483   }
484   DrawMarker(0.0, 115, 22, 1.2, 1);
485   t1->DrawLatex(0.1,113,fParticleName[2]);
486   DrawMarker(0.0, 105, 26, 1.2, 1);
487   t1->DrawLatex(0.1,103,fParticleName[6]);
488   DrawMarker(0.0, 95, 28, 1.2, 1);
489   t1->DrawLatex(0.1,93,fParticleName[8]);
490
491   c12->SetHighLightColor(10); c12->cd(2)->SetBottomMargin(0.15);
492   c12->cd(2)->SetGridx(); c12->cd(2)->SetGridy();
493   hEmptyY->SetTitle("Antiprotons");
494   hEmptyY->DrawCopy();
495   for(Int_t iParticle = 0; iParticle < 10; iParticle++) {
496     if((iParticle == 6)||(iParticle == 8))
497       gParticleAntiProtonY[iParticle]->Draw("P");
498     /*if(iParticle < 5) {
499       DrawMarker(-1.1, 115-5*iParticle, 20+iParticle, 1.2, 1);
500       t1->DrawLatex(-1.0,113-5*iParticle,fParticleName[iParticle]);
501     }
502     else {
503       DrawMarker(0.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
504       t1->DrawLatex(0.3,113-5*(iParticle-5),fParticleName[iParticle]);
505       }*/
506   }
507   DrawMarker(0.0, 115, 26, 1.2, 1);
508   t1->DrawLatex(0.1,113,fParticleName[6]);
509   DrawMarker(0.0, 105, 28, 1.2, 1);
510   t1->DrawLatex(0.1,103,fParticleName[8]);
511   c12->SaveAs("SurvivedSecondaries-Composition-Rapidity.gif");
512
513   TH2F *hEmptyPt = new TH2F("hEmptyPt","",100,0.0,4.0,100,0,120); 
514   hEmptyPt->SetStats(kFALSE); 
515   hEmptyPt->GetYaxis()->SetTitle("Particle composition [%]");
516   hEmptyPt->GetXaxis()->SetTitle("P_{T} [GeV/c]");
517
518   TCanvas *c13 = new TCanvas("c13",
519                              "Composition of accepted secondaries vs pT",
520                              400,400,700,400);
521   c13->Divide(2,1);
522   c13->SetHighLightColor(10); c13->cd(1)->SetBottomMargin(0.15);
523   c13->cd(1)->SetGridx(); c13->cd(1)->SetGridy();
524   hEmptyPt->GetXaxis()->SetRangeUser(gParticleProtonPt[0]->GetXaxis()->GetXmin()-0.2,gParticleProtonPt[0]->GetXaxis()->GetXmax()+0.2);
525   hEmptyPt->SetTitle("Protons");
526   hEmptyPt->DrawCopy();
527   for(Int_t iParticle = 0; iParticle < 10; iParticle++) {
528     /*if(iParticle < 5) {
529       DrawMarker(gParticleProtonPt[0]->GetXaxis()->GetXmin()+0.1, 
530                  115-5*iParticle, 20+iParticle, 1.2, 1);
531       t1->DrawLatex(gParticleProtonPt[0]->GetXaxis()->GetXmin()+0.2,
532                     113-5*iParticle,fParticleName[iParticle]);
533     }
534     else {
535       DrawMarker(gParticleProtonPt[0]->GetXaxis()->GetXmax()*0.5, 
536                  115-5*(iParticle-5), 20+iParticle, 1.2, 1);
537       t1->DrawLatex(gParticleProtonPt[0]->GetXaxis()->GetXmax()*0.5+0.1,
538                     113-5*(iParticle-5),fParticleName[iParticle]);
539                     }*/
540     if((iParticle == 2)||(iParticle == 6)||(iParticle == 8))
541       gParticleProtonPt[iParticle]->Draw("P");
542   }
543   DrawMarker(0.5, 115, 22, 1.2, 1);
544   t1->DrawLatex(0.6,113,fParticleName[2]);
545   DrawMarker(0.5, 105, 26, 1.2, 1);
546   t1->DrawLatex(0.6,103,fParticleName[6]);
547   DrawMarker(0.5, 95, 28, 1.2, 1);
548   t1->DrawLatex(0.6,93,fParticleName[8]);
549
550   c13->SetHighLightColor(10); c13->cd(2)->SetBottomMargin(0.15);
551   c13->cd(2)->SetGridx(); c13->cd(2)->SetGridy();
552   hEmptyPt->SetTitle("Antiprotons");
553   hEmptyPt->DrawCopy();
554   for(Int_t iParticle = 0; iParticle < 10; iParticle++) {
555     /*if(iParticle < 5) {
556       DrawMarker(gParticleProtonPt[0]->GetXaxis()->GetXmin()+0.1, 
557                  115-5*iParticle, 20+iParticle, 1.2, 1);
558       t1->DrawLatex(gParticleProtonPt[0]->GetXaxis()->GetXmin()+0.2,
559                     113-5*iParticle,fParticleName[iParticle]);
560     }
561     else {
562       DrawMarker(gParticleProtonPt[0]->GetXaxis()->GetXmax()*0.5, 
563                  115-5*(iParticle-5), 20+iParticle, 1.2, 1);
564       t1->DrawLatex(gParticleProtonPt[0]->GetXaxis()->GetXmax()*0.5+0.1,
565                     113-5*(iParticle-5),fParticleName[iParticle]);
566                     }*/
567     if((iParticle == 6)||(iParticle == 8))
568       gParticleAntiProtonPt[iParticle]->Draw("P");
569   }
570   DrawMarker(0.5, 115, 26, 1.2, 1);
571   t1->DrawLatex(0.6,113,fParticleName[6]);
572   DrawMarker(0.5, 105, 28, 1.2, 1);
573   t1->DrawLatex(0.6,103,fParticleName[8]);
574   c13->SaveAs("SurvivedSecondaries-Composition-Pt.gif");
575 }
576
577 //________________________________________________//
578 void DrawContamination(TList *inputList,
579                        const char* analysisType) {
580   //loops over the list entries and
581   //draws the rapidity and pT dependence
582   //of the percentage of primary and secondary
583   //protons and antiprotons after the track cuts
584   cout<<"Extracting the entries for the histograms in the list: "<<
585     inputList->GetName()<<"..."<<endl;
586
587   TLatex *t1 = new TLatex();
588   t1->SetTextSize(0.04);
589
590   TH2F *hPrimaryProtons = (TH2F *)inputList->At(0);
591   TH2F *hSecondaryProtons = (TH2F *)inputList->At(2);
592   TH2F *hPrimaryAntiProtons = (TH2F *)inputList->At(4);
593   TH2F *hSecondaryAntiProtons = (TH2F *)inputList->At(6);
594
595   //rapidity dependence
596   //Protons
597   TH1D *gYPrimaryProtons = (TH1D *)hPrimaryProtons->ProjectionX("gYPrimaryProtons",0,hPrimaryProtons->GetXaxis()->GetNbins(),"e");
598   TH1D *gYSecondaryProtons = (TH1D *)hSecondaryProtons->ProjectionX("gYSecondaryProtons",0,hSecondaryProtons->GetXaxis()->GetNbins(),"e");
599   TH1D *gYTotalProtons = (TH1D *)hPrimaryProtons->ProjectionX("gYTotalProtons",0,hPrimaryProtons->GetXaxis()->GetNbins(),"e");
600   gYTotalProtons->Add(gYSecondaryProtons);
601
602   TH1D *gYPrimaryProtonsPercentage = new TH1D("gYPrimaryProtonsPercentage",
603                                               "",
604                                               hPrimaryProtons->GetXaxis()->GetNbins(),
605                                               hPrimaryProtons->GetXaxis()->GetXmin(),
606                                               hPrimaryProtons->GetXaxis()->GetXmax());                                        
607   gYPrimaryProtonsPercentage->Divide(gYPrimaryProtons,
608                                      gYTotalProtons,1.,1.0);
609   SetError(gYPrimaryProtonsPercentage,gYTotalProtons);
610   gYPrimaryProtonsPercentage->Scale(100.);
611   gYPrimaryProtonsPercentage->SetMarkerStyle(kFullCircle);
612
613   TH1D *gYSecondaryProtonsPercentage = new TH1D("gYSecondaryProtonsPercentage",
614                                                 "",
615                                                 hSecondaryProtons->GetXaxis()->GetNbins(),
616                                                 hSecondaryProtons->GetXaxis()->GetXmin(),
617                                                 hSecondaryProtons->GetXaxis()->GetXmax());                                            
618   gYSecondaryProtonsPercentage->Divide(gYSecondaryProtons,
619                                        gYTotalProtons,1.,1.0);
620   SetError(gYSecondaryProtonsPercentage,gYTotalProtons);
621   gYSecondaryProtonsPercentage->Scale(100.);
622   gYSecondaryProtonsPercentage->SetMarkerStyle(kOpenCircle);
623
624   //Antiprotons
625   TH1D *gYPrimaryAntiProtons = (TH1D *)hPrimaryAntiProtons->ProjectionX("gYPrimaryAntiProtons",0,hPrimaryAntiProtons->GetXaxis()->GetNbins(),"e");
626   TH1D *gYSecondaryAntiProtons = (TH1D *)hSecondaryAntiProtons->ProjectionX("gYSecondaryAntiProtons",0,hSecondaryAntiProtons->GetXaxis()->GetNbins(),"e");
627   TH1D *gYTotalAntiProtons = (TH1D *)hPrimaryAntiProtons->ProjectionX("gYTotalAntiProtons",0,hPrimaryAntiProtons->GetXaxis()->GetNbins(),"e");
628   gYTotalAntiProtons->Add(gYSecondaryAntiProtons);
629   
630   TH1D *gYPrimaryAntiProtonsPercentage = new TH1D("gYPrimaryAntiProtonsPercentage",
631                                                   "",
632                                                   hPrimaryAntiProtons->GetXaxis()->GetNbins(),
633                                                   hPrimaryAntiProtons->GetXaxis()->GetXmin(),
634                                                   hPrimaryAntiProtons->GetXaxis()->GetXmax());                                        
635   gYPrimaryAntiProtonsPercentage->Divide(gYPrimaryAntiProtons,
636                                          gYTotalAntiProtons,1.,1.0);
637   SetError(gYPrimaryAntiProtonsPercentage,gYTotalAntiProtons);
638   gYPrimaryAntiProtonsPercentage->Scale(100.);
639   gYPrimaryAntiProtonsPercentage->SetMarkerStyle(kFullCircle);
640   
641   TH1D *gYSecondaryAntiProtonsPercentage = new TH1D("gYSecondaryAntiProtonsPercentage",
642                                                     "",
643                                                     hSecondaryAntiProtons->GetXaxis()->GetNbins(),
644                                                     hSecondaryAntiProtons->GetXaxis()->GetXmin(),
645                                                     hSecondaryAntiProtons->GetXaxis()->GetXmax());                                            
646   gYSecondaryAntiProtonsPercentage->Divide(gYSecondaryAntiProtons,
647                                            gYTotalAntiProtons,1.,1.0);
648   SetError(gYSecondaryAntiProtonsPercentage,gYTotalAntiProtons);
649   gYSecondaryAntiProtonsPercentage->Scale(100.);
650   gYSecondaryAntiProtonsPercentage->SetMarkerStyle(kOpenCircle);
651   
652   
653   TH2F *hEmptyY = new TH2F("hEmptyCompositionY","",
654                            100,-1.2,1.2,100,-10.0,130); 
655   hEmptyY->SetStats(kFALSE); 
656   hEmptyY->GetYaxis()->SetTitle("Particle composition [%]");
657   hEmptyY->GetYaxis()->SetTitleOffset(1.3);
658   hEmptyY->GetXaxis()->SetTitle(hPrimaryProtons->GetXaxis()->GetTitle());
659
660   TCanvas *c7 = new TCanvas("c7","(Anti)Proton contamination vs y",
661                             150,150,700,400);
662   c7->SetHighLightColor(10); c7->Divide(2,1);
663
664   c7->cd(1)->SetBottomMargin(0.15); 
665   c7->cd(1)->SetLeftMargin(0.15); 
666   c7->cd(1)->SetGridx(); c7->cd(1)->SetGridy();
667   hEmptyY->SetTitle("Protons");
668   hEmptyY->DrawCopy();
669   gYPrimaryProtonsPercentage->DrawCopy("ESAME");
670   gYSecondaryProtonsPercentage->DrawCopy("ESAME");
671
672   DrawMarker(0, 55, kFullCircle, 1.2, 1);
673   t1->DrawLatex(0.1,53,"Primaries");
674   DrawMarker(0, 45, kOpenCircle, 1.2, 1);
675   t1->DrawLatex(0.1,43,"Secondaries");
676
677   c7->cd(2)->SetBottomMargin(0.15); 
678   c7->cd(2)->SetLeftMargin(0.15); 
679   c7->cd(2)->SetGridx(); c7->cd(2)->SetGridy();
680   hEmptyY->SetTitle("Antiprotons");
681   hEmptyY->DrawCopy();
682   gYPrimaryAntiProtonsPercentage->DrawCopy("ESAME");
683   gYSecondaryAntiProtonsPercentage->DrawCopy("ESAME");
684
685   DrawMarker(0, 55, kFullCircle, 1.2, 1);
686   t1->DrawLatex(0.1,53,"Primaries");
687   DrawMarker(0, 45, kOpenCircle, 1.2, 1);
688   t1->DrawLatex(0.1,41,"Secondaries");
689
690   c7->SaveAs("Contamination-Protons-Rapidity.gif");
691
692   //pT dependence
693   //Protons
694   TH1D *gPtPrimaryProtons = (TH1D *)hPrimaryProtons->ProjectionY("gPtPrimaryProtons",0,hPrimaryProtons->GetYaxis()->GetNbins(),"e");
695   TH1D *gPtSecondaryProtons = (TH1D *)hSecondaryProtons->ProjectionY("gPtSecondaryProtons",0,hSecondaryProtons->GetYaxis()->GetNbins(),"e");
696   TH1D *gPtTotalProtons = (TH1D *)hPrimaryProtons->ProjectionY("gPtTotalProtons",0,hPrimaryProtons->GetYaxis()->GetNbins(),"e");
697   gPtTotalProtons->Add(gPtSecondaryProtons);
698
699   TH1D *gPtPrimaryProtonsPercentage = new TH1D("gPtPrimaryProtonsPercentage",
700                                                "",
701                                                hPrimaryProtons->GetYaxis()->GetNbins(),
702                                                hPrimaryProtons->GetYaxis()->GetXmin(),
703                                                hPrimaryProtons->GetYaxis()->GetXmax());                                       
704   gPtPrimaryProtonsPercentage->Divide(gPtPrimaryProtons,
705                                       gPtTotalProtons,1.,1.0);
706   SetError(gPtPrimaryProtonsPercentage,gPtTotalProtons);
707   gPtPrimaryProtonsPercentage->Scale(100.);
708   gPtPrimaryProtonsPercentage->SetMarkerStyle(kFullCircle);
709   
710   TH1D *gPtSecondaryProtonsPercentage = new TH1D("gPtSecondaryProtonsPercentage",
711                                                  "",
712                                                  hSecondaryProtons->GetYaxis()->GetNbins(),
713                                                  hSecondaryProtons->GetYaxis()->GetXmin(),
714                                                  hSecondaryProtons->GetYaxis()->GetXmax());                                           
715   gPtSecondaryProtonsPercentage->Divide(gPtSecondaryProtons,
716                                         gPtTotalProtons,1.,1.0);
717   SetError(gPtSecondaryProtonsPercentage,gPtTotalProtons);
718   gPtSecondaryProtonsPercentage->Scale(100.);
719   gPtSecondaryProtonsPercentage->SetMarkerStyle(kOpenCircle);
720
721
722   //Antiprotons
723   TH1D *gPtPrimaryAntiProtons = (TH1D *)hPrimaryAntiProtons->ProjectionY("gPtPrimaryAntiProtons",0,hPrimaryAntiProtons->GetYaxis()->GetNbins(),"e");
724   TH1D *gPtSecondaryAntiProtons = (TH1D *)hSecondaryAntiProtons->ProjectionY("gPtSecondaryAntiProtons",0,hSecondaryAntiProtons->GetYaxis()->GetNbins(),"e");
725   TH1D *gPtTotalAntiProtons = (TH1D *)hPrimaryAntiProtons->ProjectionY("gPtTotalAntiProtons",0,hPrimaryAntiProtons->GetYaxis()->GetNbins(),"e");
726   gPtTotalAntiProtons->Add(gPtSecondaryAntiProtons);
727   
728   TH1D *gPtPrimaryAntiProtonsPercentage = new TH1D("gPtPrimaryAntiProtonsPercentage",
729                                                    "",
730                                                    hPrimaryAntiProtons->GetYaxis()->GetNbins(),
731                                                    hPrimaryAntiProtons->GetYaxis()->GetXmin(),
732                                                    hPrimaryAntiProtons->GetYaxis()->GetXmax());                                       
733   gPtPrimaryAntiProtonsPercentage->Divide(gPtPrimaryAntiProtons,
734                                           gPtTotalAntiProtons,1.,1.0);
735   SetError(gPtPrimaryAntiProtonsPercentage,gPtTotalAntiProtons);
736   gPtPrimaryAntiProtonsPercentage->Scale(100.);
737   gPtPrimaryAntiProtonsPercentage->SetMarkerStyle(kFullCircle);
738   
739   TH1D *gPtSecondaryAntiProtonsPercentage = new TH1D("gPtSecondaryAntiProtonsPercentage",
740                                                      "",
741                                                      hSecondaryAntiProtons->GetYaxis()->GetNbins(),
742                                                      hSecondaryAntiProtons->GetYaxis()->GetXmin(),
743                                                      hSecondaryAntiProtons->GetYaxis()->GetXmax());                                           
744   gPtSecondaryAntiProtonsPercentage->Divide(gPtSecondaryAntiProtons,
745                                             gPtTotalAntiProtons,1.,1.0);
746   SetError(gPtSecondaryAntiProtonsPercentage,gPtTotalAntiProtons);
747   gPtSecondaryAntiProtonsPercentage->Scale(100.);
748   gPtSecondaryAntiProtonsPercentage->SetMarkerStyle(kOpenCircle);
749   
750   TH2F *hEmptyPt = new TH2F("hEmptyCompositionPt","",
751                            100,0.0,4.0,100,-10.0,130); 
752   hEmptyPt->SetStats(kFALSE); 
753   hEmptyPt->GetYaxis()->SetTitle("Particle composition [%]");
754   hEmptyPt->GetYaxis()->SetTitleOffset(1.3);
755   hEmptyPt->GetXaxis()->SetTitle("P_{T} [GeV/c]");
756
757   TCanvas *c8 = new TCanvas("c8","(Anti)Proton comtamination vs pT",
758                             200,200,700,400);
759   c8->SetHighLightColor(10); c8->Divide(2,1);
760
761   c8->cd(1)->SetBottomMargin(0.15); 
762   c8->cd(1)->SetLeftMargin(0.15); 
763   c8->cd(1)->SetGridx(); c8->cd(1)->SetGridy();
764   hEmptyPt->SetTitle("Protons");
765   hEmptyPt->GetXaxis()->SetRangeUser(gPtPrimaryProtonsPercentage->GetXaxis()->GetXmin()-0.2,gPtPrimaryProtonsPercentage->GetXaxis()->GetXmax()+0.2);
766   hEmptyPt->DrawCopy();
767   gPtPrimaryProtonsPercentage->DrawCopy("ESAME");
768   gPtSecondaryProtonsPercentage->DrawCopy("ESAME");
769
770   DrawMarker(0.5, 55, kFullCircle, 1.2, 1);
771   t1->DrawLatex(0.6,53,"Primaries");
772   DrawMarker(0.5, 45, kOpenCircle, 1.2, 1);
773   t1->DrawLatex(0.6,41,"Secondaries");
774
775   c8->cd(2)->SetBottomMargin(0.15); 
776   c8->cd(2)->SetLeftMargin(0.15); 
777   c8->cd(2)->SetGridx(); c8->cd(2)->SetGridy();
778   hEmptyPt->SetTitle("Antirotons");
779   hEmptyPt->DrawCopy();
780   gPtPrimaryAntiProtonsPercentage->DrawCopy("ESAME");
781   gPtSecondaryAntiProtonsPercentage->DrawCopy("ESAME");
782
783   DrawMarker(2.0, 55, kFullCircle, 1.2, 1);
784   t1->DrawLatex(2.1,53,"Primaries");
785   DrawMarker(2.0, 45, kOpenCircle, 1.2, 1);
786   t1->DrawLatex(2.1,43,"Secondaries");
787
788   c8->SaveAs("Contamination-Protons-Pt.gif");
789
790   TString outputFileName = "Contamination."; 
791   outputFileName += analysisType; outputFileName += ".root";
792   TFile *fout = TFile::Open(outputFileName.Data(),"recreate");
793   gYPrimaryProtonsPercentage->Write();
794   gYSecondaryProtonsPercentage->Write();
795   gPtPrimaryProtonsPercentage->Write();
796   gPtSecondaryProtonsPercentage->Write();
797   gYPrimaryAntiProtonsPercentage->Write();
798   gYSecondaryAntiProtonsPercentage->Write();
799   gPtPrimaryAntiProtonsPercentage->Write();
800   gPtSecondaryAntiProtonsPercentage->Write();
801   fout->Close();
802 }
803
804 //________________________________________________//
805 void DrawCutEfficiency(TList *inputList,
806                        const char* analysisType) {
807   //loops over the list entries and
808   //draws the rapidity and pT dependence
809   //of the percentage of primary and secondary
810   //protons and antiprotons after the track cuts
811   cout<<"Extracting the entries for the histograms in the list: "<<
812     inputList->GetName()<<"..."<<endl;
813
814   TLatex *t1 = new TLatex();
815   t1->SetTextSize(0.04);
816
817   TH2F *hPrimaryESDProtons = (TH2F *)inputList->At(0);
818   TH2F *hPrimaryESDAntiProtons = (TH2F *)inputList->At(4);
819   TH2F *hPrimaryMCProtons = (TH2F *)inputList->At(8);
820   TH2F *hPrimaryMCAntiProtons = (TH2F *)inputList->At(9);
821
822   //rapidity dependence
823   //Protons
824   TH1D *gYPrimaryESDProtons = (TH1D *)hPrimaryESDProtons->ProjectionX("gYPrimaryESDProtons",0,hPrimaryESDProtons->GetXaxis()->GetNbins(),"e");
825   TH1D *gYPrimaryMCProtons = (TH1D *)hPrimaryMCProtons->ProjectionX("gYPrimaryMCProtons",0,hPrimaryMCProtons->GetXaxis()->GetNbins(),"e");
826   gYPrimaryESDProtons->Divide(gYPrimaryMCProtons);
827   SetError(gYPrimaryESDProtons,gYPrimaryMCProtons);
828   gYPrimaryESDProtons->Scale(100.);
829   gYPrimaryESDProtons->SetMarkerStyle(kFullCircle);
830
831   //Antiprotons
832   TH1D *gYPrimaryESDAntiProtons = (TH1D *)hPrimaryESDAntiProtons->ProjectionX("gYPrimaryESDAntiProtons",0,hPrimaryESDAntiProtons->GetXaxis()->GetNbins(),"e");
833   TH1D *gYPrimaryMCAntiProtons = (TH1D *)hPrimaryMCAntiProtons->ProjectionX("gYPrimaryMCAntiProtons",0,hPrimaryMCAntiProtons->GetXaxis()->GetNbins(),"e");
834   gYPrimaryESDAntiProtons->Divide(gYPrimaryMCAntiProtons);
835   SetError(gYPrimaryESDAntiProtons,gYPrimaryMCAntiProtons);
836   gYPrimaryESDAntiProtons->Scale(100.);
837   gYPrimaryESDAntiProtons->SetMarkerStyle(kFullCircle);
838   
839   TH2F *hEmptyY = new TH2F("hEmptyEfficiencyY","",
840                            100,-1.2,1.2,100,-10.0,130); 
841   hEmptyY->SetStats(kFALSE); 
842   hEmptyY->GetYaxis()->SetTitle("#epsilon [%]");
843   hEmptyY->GetYaxis()->SetTitleOffset(1.3);
844   hEmptyY->GetXaxis()->SetTitle(hPrimaryESDProtons->GetXaxis()->GetTitle());
845
846   TCanvas *c10 = new TCanvas("c10","(Anti)Proton cut efficiency vs y",
847                             250,250,700,400);
848   c10->SetHighLightColor(10); c10->Divide(2,1);
849
850   c10->cd(1)->SetBottomMargin(0.15); 
851   c10->cd(1)->SetLeftMargin(0.15); 
852   c10->cd(1)->SetGridx(); c10->cd(1)->SetGridy();
853   hEmptyY->SetTitle("Protons");
854   hEmptyY->GetXaxis()->SetRangeUser(gYPrimaryESDAntiProtons->GetXaxis()->GetXmin()-0.2,gYPrimaryESDAntiProtons->GetXaxis()->GetXmax()+0.2);
855   hEmptyY->DrawCopy();
856   gYPrimaryESDProtons->DrawCopy("ESAME");
857
858   c10->cd(2)->SetBottomMargin(0.15); 
859   c10->cd(2)->SetLeftMargin(0.15); 
860   c10->cd(2)->SetGridx(); c10->cd(2)->SetGridy();
861   hEmptyY->SetTitle("Antiprotons");
862   hEmptyY->DrawCopy();
863   gYPrimaryESDAntiProtons->DrawCopy("ESAME");
864
865   c10->SaveAs("CutEfficiency-Protons-Rapidity.gif");
866
867   //pT dependence
868   //Protons
869   TH1D *gPtPrimaryESDProtons = (TH1D *)hPrimaryESDProtons->ProjectionY("gPtPrimaryESDProtons",0,hPrimaryESDProtons->GetYaxis()->GetNbins(),"e");
870   TH1D *gPtPrimaryMCProtons = (TH1D *)hPrimaryMCProtons->ProjectionY("gPtPrimaryMCProtons",0,hPrimaryMCProtons->GetYaxis()->GetNbins(),"e");
871   gPtPrimaryESDProtons->Divide(gPtPrimaryMCProtons);
872   SetError(gPtPrimaryESDProtons,gPtPrimaryMCProtons);
873   gPtPrimaryESDProtons->Scale(100.);
874   gPtPrimaryESDProtons->SetMarkerStyle(kFullCircle);
875
876   //Antiprotons
877   TH1D *gPtPrimaryESDAntiProtons = (TH1D *)hPrimaryESDAntiProtons->ProjectionY("gPtPrimaryESDAntiProtons",0,hPrimaryESDAntiProtons->GetYaxis()->GetNbins(),"e");
878   TH1D *gPtPrimaryMCAntiProtons = (TH1D *)hPrimaryMCAntiProtons->ProjectionY("gPtPrimaryMCAntiProtons",0,hPrimaryMCAntiProtons->GetYaxis()->GetNbins(),"e");
879   gPtPrimaryESDAntiProtons->Divide(gPtPrimaryMCAntiProtons);
880   SetError(gPtPrimaryESDAntiProtons,gPtPrimaryMCAntiProtons);
881   gPtPrimaryESDAntiProtons->Scale(100.);
882   gPtPrimaryESDAntiProtons->SetMarkerStyle(kFullCircle);
883
884   TH2F *hEmptyPt = new TH2F("hEmptyEfficiencyPt","",
885                            100,0.0,4.0,100,-10.0,130); 
886   hEmptyPt->SetStats(kFALSE); 
887   hEmptyPt->GetYaxis()->SetTitle("#epsilon [%]");
888   hEmptyPt->GetYaxis()->SetTitleOffset(1.3);
889   hEmptyPt->GetXaxis()->SetTitle("P_{T} [GeV/c]");
890
891   TCanvas *c11 = new TCanvas("c11","(Anti)Proton cut efficiency vs pT",
892                             300,300,700,400);
893   c11->SetHighLightColor(10); c11->Divide(2,1);
894
895   c11->cd(1)->SetBottomMargin(0.15); 
896   c11->cd(1)->SetLeftMargin(0.15); 
897   c11->cd(1)->SetGridx(); c11->cd(1)->SetGridy();
898   hEmptyPt->SetTitle("Protons");
899   hEmptyPt->GetXaxis()->SetRangeUser(gPtPrimaryESDAntiProtons->GetXaxis()->GetXmin()-0.2,gPtPrimaryESDAntiProtons->GetXaxis()->GetXmax()+0.2);
900   hEmptyPt->DrawCopy();
901   gPtPrimaryESDProtons->DrawCopy("ESAME");
902
903   c11->cd(2)->SetBottomMargin(0.15); 
904   c11->cd(2)->SetLeftMargin(0.15); 
905   c11->cd(2)->SetGridx(); c11->cd(2)->SetGridy();
906   hEmptyPt->SetTitle("Antirotons");
907   hEmptyPt->DrawCopy();
908   gPtPrimaryESDAntiProtons->DrawCopy("ESAME");
909
910   c11->SaveAs("CutEfficiency-Protons-Pt.gif");
911
912   TString outputFileName = "CutEfficiency.";
913   outputFileName += analysisType; outputFileName += ".root";
914   TFile *fout = TFile::Open(outputFileName.Data(),"recreate");
915   gYPrimaryESDProtons->Write();
916   gYPrimaryESDAntiProtons->Write();
917   gPtPrimaryESDProtons->Write();
918   gPtPrimaryESDAntiProtons->Write();
919   fout->Close();
920 }
921
922 //________________________________________________//
923 void GetQAEntries(TList *inputList, Double_t *entries) {
924   //loops over the list entries
925   //extracts the entries for each histogram
926   //cout<<"Extracting the entries for the histograms in the list: "<<
927   //inputList->GetName()<<"..."<<endl;
928
929   for(Int_t i = 0; i < inputList->GetEntries(); i++) {
930     TH1F *gHist = (TH1F *)inputList->At(i);
931     entries[i] = gHist->GetEntries();
932     cout<<"Histogram: "<<gHist->GetName()<<
933       " - Entries: "<<entries[i]<<endl;
934     gHist = 0;
935   }
936 }
937
938 //________________________________________________//
939 Double_t GetPercentage(Double_t nPassEntries,
940                        Double_t nRejectEntries) {
941   //returns the percentage of tracks that were rejected by a cut
942   Int_t nTotalEntries = nPassEntries + nRejectEntries;
943
944   if(nTotalEntries == 0)
945     return -1;
946
947   return 100.*nRejectEntries/nTotalEntries;
948 }
949
950 //________________________________________//
951 void drawMCQA(TList *listPDG, TList *listMCProcesses) {
952   //Function to display the composition of secondary (anti)protons
953   //The histogram shows the percentage of secondary (anti)protons
954   //originating from each particle species.
955   //The box summarizes the MC process that gave these secondary (anti)protons
956   TDatabasePDG *db = TDatabasePDG::Instance();
957   TParticlePDG *p = 0x0;
958   
959   TH3F *gHistYPtPDGProtons = (TH3F *)listPDG->At(0);
960   TH3F *gHistYPtPDGAntiProtons = (TH3F *)listPDG->At(1);
961   readProcesses(listMCProcesses);
962   Double_t nParticleCompositionProtonY[100], nParticleCompositionProtonPt[100];
963   Double_t nParticleCompositionProtonYError[100], nParticleCompositionProtonPtError[100];
964   Double_t nParticleCompositionAntiProtonY[100], nParticleCompositionAntiProtonPt[100];
965   Double_t nParticleCompositionAntiProtonYError[100], nParticleCompositionAntiProtonPtError[100];
966   Double_t gY[100], gPt[100];
967   Double_t gYError[100], gPtError[100];
968   for(Int_t iBins = 0; iBins < 100; iBins++) {
969     nParticleCompositionProtonY[iBins] = 0;
970     nParticleCompositionProtonPt[iBins] = 0;
971     nParticleCompositionProtonYError[iBins] = 0;
972     nParticleCompositionProtonPtError[iBins] = 0;
973     nParticleCompositionAntiProtonY[iBins] = 0;
974     nParticleCompositionAntiProtonPt[iBins] = 0;
975     nParticleCompositionAntiProtonYError[iBins] = 0;
976     nParticleCompositionAntiProtonPtError[iBins] = 0;
977     gY[iBins] = 0;
978     gPt[iBins] = 0;
979     gYError[iBins] = 0;
980     gPtError[iBins] = 0;
981   }
982   
983   TGraphErrors *gParticleProtonY[14];
984   TGraphErrors *gParticleProtonPt[14];
985   TGraphErrors *gParticleAntiProtonY[14];
986   TGraphErrors *gParticleAntiProtonPt[14];
987   for(Int_t iParticle = 0; iParticle < 14; iParticle++) {
988     GetComposition(iParticle,
989                    gHistYPtPDGProtons,
990                    nParticleCompositionProtonY,
991                    nParticleCompositionProtonYError, gY, gYError, 
992                    nParticleCompositionProtonPt, 
993                    nParticleCompositionProtonPtError, gPt, gPtError);
994     gParticleProtonY[iParticle] = new TGraphErrors(gHistYPtPDGProtons->GetNbinsX(),
995                                                    gY,nParticleCompositionProtonY,
996                                                    gYError,nParticleCompositionProtonYError);
997     gParticleProtonY[iParticle]->SetMarkerStyle(iParticle+20);
998     gParticleProtonY[iParticle]->SetMarkerSize(1.2);
999
1000     gParticleProtonPt[iParticle] = new TGraphErrors(gHistYPtPDGProtons->GetNbinsY(),
1001                                                     gPt,nParticleCompositionProtonPt,
1002                                                     gPtError,nParticleCompositionProtonPtError);
1003     gParticleProtonPt[iParticle]->SetMarkerStyle(iParticle+20);
1004     gParticleProtonPt[iParticle]->SetMarkerSize(1.2);
1005
1006     GetComposition(iParticle,
1007                    gHistYPtPDGAntiProtons,
1008                    nParticleCompositionAntiProtonY,
1009                    nParticleCompositionAntiProtonYError, gY, gYError, 
1010                    nParticleCompositionAntiProtonPt, 
1011                    nParticleCompositionAntiProtonPtError, gPt, gPtError);
1012     gParticleAntiProtonY[iParticle] = new TGraphErrors(gHistYPtPDGAntiProtons->GetNbinsX(),
1013                                                        gY,nParticleCompositionAntiProtonY,
1014                                                        gYError,nParticleCompositionAntiProtonYError);
1015     gParticleAntiProtonY[iParticle]->SetMarkerStyle(iParticle+20);
1016     gParticleAntiProtonY[iParticle]->SetMarkerSize(1.2);
1017
1018     gParticleAntiProtonPt[iParticle] = new TGraphErrors(gHistYPtPDGAntiProtons->GetNbinsY(),
1019                                                         gPt,nParticleCompositionAntiProtonPt,
1020                                                         gPtError,nParticleCompositionAntiProtonPtError);
1021     gParticleAntiProtonPt[iParticle]->SetMarkerStyle(iParticle+20);
1022     gParticleAntiProtonPt[iParticle]->SetMarkerSize(1.2);
1023   }
1024
1025   //_________________________________________________________//
1026   char *fParticleName[14] = {"Primary","K_{L}","#pi","K_{S}","K",
1027                              "n","p","#Sigma^{-}","#Lambda","#Sigma^{+}",
1028                              "#Xi^{-}","#Xi^{0}","#Omega^{-}"};
1029   TLatex *t1 = new TLatex();
1030   t1->SetTextSize(0.04);
1031
1032   TH2F *hEmptyY = new TH2F("hEmptyY","",100,-1.2,1.2,100,0,120); 
1033   hEmptyY->SetStats(kFALSE); 
1034   hEmptyY->GetYaxis()->SetTitle("Particle composition [%]");
1035   hEmptyY->GetXaxis()->SetTitle(gHistYPtPDGProtons->GetXaxis()->GetTitle());
1036
1037   TCanvas *c3 = new TCanvas("c3","MC secondary composition vs y - Protons",
1038                             450,450,700,400);
1039   c3->SetHighLightColor(10); c3->SetBottomMargin(0.15);
1040   c3->SetGridx(); c3->SetGridy();
1041   hEmptyY->GetXaxis()->SetRangeUser(gParticleProtonY[0]->GetXaxis()->GetXmin()-0.2,gParticleProtonY[0]->GetXaxis()->GetXmax()+0.2);
1042   hEmptyY->DrawCopy();
1043   for(Int_t iParticle = 0; iParticle < 10; iParticle++) {
1044     //if((iParticle == 0)||(iParticle == 2)||(iParticle == 5)||(iParticle == 6)||(iParticle == 8))
1045     if((iParticle == 0)||(iParticle == 2)||(iParticle == 6)||(iParticle == 8))
1046       gParticleProtonY[iParticle]->Draw("P");
1047     /*if(iParticle < 5) {
1048       DrawMarker(-1.1, 115-5*iParticle, 20+iParticle, 1.2, 1);
1049       t1->DrawLatex(-1.0,113-5*iParticle,fParticleName[iParticle]);
1050     }
1051     else {
1052       DrawMarker(0.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
1053       t1->DrawLatex(0.3,113-5*(iParticle-5),fParticleName[iParticle]);
1054       }*/
1055   }
1056   DrawMarker(0.0, 115, 20, 1.2, 1);
1057   t1->DrawLatex(0.1,113,fParticleName[0]);
1058   DrawMarker(0.0, 108, 22, 1.2, 1);
1059   t1->DrawLatex(0.1,106,fParticleName[2]);
1060   DrawMarker(0.0, 101, 26, 1.2, 1);
1061   t1->DrawLatex(0.1,99,fParticleName[6]);
1062   DrawMarker(0.0, 94, 28, 1.2, 1);
1063   t1->DrawLatex(0.1,92,fParticleName[8]);
1064
1065   TCanvas *c5 = new TCanvas("c5","MC secondary composition vs y - antiProtons",
1066                             500,500,700,400);
1067   c5->SetHighLightColor(10); c5->SetBottomMargin(0.15);
1068   c5->SetGridx(); c5->SetGridy();
1069   hEmptyY->DrawCopy();
1070   for(Int_t iParticle = 0; iParticle < 10; iParticle++) {
1071     if((iParticle == 0)||(iParticle == 6)||(iParticle == 8))
1072       gParticleAntiProtonY[iParticle]->Draw("P");
1073     /*if(iParticle < 5) {
1074       DrawMarker(-1.1, 115-5*iParticle, 20+iParticle, 1.2, 1);
1075       t1->DrawLatex(-1.0,113-5*iParticle,fParticleName[iParticle]);
1076     }
1077     else {
1078       DrawMarker(0.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
1079       t1->DrawLatex(0.3,113-5*(iParticle-5),fParticleName[iParticle]);
1080       }*/
1081   }
1082   DrawMarker(0.0, 115, 20, 1.2, 1);
1083   t1->DrawLatex(0.1,113,fParticleName[0]);
1084   DrawMarker(0.0, 108, 26, 1.2, 1);
1085   t1->DrawLatex(0.1,106,fParticleName[6]);
1086   DrawMarker(0.0, 101, 28, 1.2, 1);
1087   t1->DrawLatex(0.1,99,fParticleName[8]);
1088
1089   TH2F *hEmptyPt = new TH2F("hEmptyPt","",100,0.0,4.0,100,0,120); 
1090   hEmptyPt->SetStats(kFALSE); 
1091   hEmptyPt->GetYaxis()->SetTitle("Particle composition [%]");
1092   hEmptyPt->GetXaxis()->SetTitle("P_{T} [GeV/c]");
1093
1094   TCanvas *c4 = new TCanvas("c4","MC secondary composition vs pT - Protons",
1095                             550,550,700,400);
1096   c4->SetHighLightColor(10); c4->SetBottomMargin(0.15);
1097   c4->SetGridx(); c4->SetGridy();
1098   hEmptyPt->GetXaxis()->SetRangeUser(gParticleProtonPt[0]->GetXaxis()->GetXmin()-0.2,gParticleProtonPt[0]->GetXaxis()->GetXmax()+0.2);
1099   hEmptyPt->DrawCopy();
1100   for(Int_t iParticle = 0; iParticle < 10; iParticle++) {
1101     /*if(iParticle < 5) {
1102       DrawMarker(0.2, 115-5*iParticle, 20+iParticle, 1.2, 1);
1103       t1->DrawLatex(0.3,113-5*iParticle,fParticleName[iParticle]);
1104     }
1105     else {
1106       DrawMarker(2.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
1107       t1->DrawLatex(2.3,113-5*(iParticle-5),fParticleName[iParticle]);
1108       }*/
1109     if((iParticle == 0)||(iParticle == 2)||(iParticle == 6)||(iParticle == 8))
1110       gParticleProtonPt[iParticle]->Draw("P");
1111   }
1112   DrawMarker(0.5, 115, 20, 1.2, 1);
1113   t1->DrawLatex(0.6,113,fParticleName[0]);
1114   DrawMarker(0.5, 108, 22, 1.2, 1);
1115   t1->DrawLatex(0.6,106,fParticleName[2]);
1116   DrawMarker(0.5, 101, 26, 1.2, 1);
1117   t1->DrawLatex(0.6,99,fParticleName[6]);
1118   DrawMarker(0.5, 94, 28, 1.2, 1);
1119   t1->DrawLatex(0.6,92,fParticleName[8]);
1120
1121   TCanvas *c6 = new TCanvas("c6",
1122                             "MC secondary composition vs pT - AntiProtons",
1123                             600,600,700,400);
1124   c6->SetHighLightColor(10); c6->SetBottomMargin(0.15);
1125   c6->SetGridx(); c6->SetGridy();
1126   hEmptyPt->DrawCopy();
1127   for(Int_t iParticle = 0; iParticle < 10; iParticle++) {
1128     /*if(iParticle < 5) {
1129       DrawMarker(0.2, 115-5*iParticle, 20+iParticle, 1.2, 1);
1130       t1->DrawLatex(0.3,113-5*iParticle,fParticleName[iParticle]);
1131     }
1132     else {
1133       DrawMarker(2.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
1134       t1->DrawLatex(2.3,113-5*(iParticle-5),fParticleName[iParticle]);
1135       }*/
1136     if((iParticle == 0)||(iParticle == 6)||(iParticle == 8))
1137       gParticleAntiProtonPt[iParticle]->Draw("P");
1138   }
1139   DrawMarker(0.5, 115, 20, 1.2, 1);
1140   t1->DrawLatex(0.6,113,fParticleName[0]);
1141   DrawMarker(0.5, 108, 26, 1.2, 1);
1142   t1->DrawLatex(0.6,106,fParticleName[6]);
1143   DrawMarker(0.5, 101, 28, 1.2, 1);
1144   t1->DrawLatex(0.6,99,fParticleName[8]);
1145 }
1146
1147 //________________________________________//
1148 void GetComposition(Int_t iSpecies,
1149                     TH3F *gHist, 
1150                     Double_t *nParticleCompositionY,
1151                     Double_t *nParticleCompositionYError,
1152                     Double_t *gY, Double_t *gYError,
1153                     Double_t *nParticleCompositionPt,
1154                     Double_t *nParticleCompositionPtError,
1155                     Double_t *gPt, Double_t *gPtError) {
1156   //Returns the pT and y dependence of the MC composition
1157   Double_t ymin = gHist->GetXaxis()->GetXmin();
1158   Double_t ymax = gHist->GetXaxis()->GetXmax();
1159   Double_t nybins = gHist->GetNbinsX();
1160   Double_t ptmin = gHist->GetYaxis()->GetXmin();
1161   Double_t ptmax = gHist->GetYaxis()->GetXmax();
1162   Double_t nptbins = gHist->GetNbinsY();
1163   Double_t nTotalY[100], nTotalPt[100];
1164   for(Int_t iBins = 0; iBins < 100; iBins++) {
1165     nParticleCompositionY[iBins] = 0;
1166     nParticleCompositionPt[iBins] = 0;
1167     nParticleCompositionYError[iBins] = 0;
1168     nParticleCompositionPtError[iBins] = 0;
1169     nTotalY[iBins] = 0.0;
1170     nTotalPt[iBins] = 0.0;
1171   }
1172
1173   //rapidity dependence
1174   //cout<<"Ymin: "<<ymin<<" - Ymax: "<<ymax<<" - Ybins: "<<nybins<<endl;
1175   for(Int_t iXbins = 1; iXbins <= gHist->GetNbinsX(); iXbins++) {
1176     for(Int_t iZbins = 1; iZbins <= gHist->GetNbinsZ(); iZbins++) {
1177       for(Int_t iYbins = 1; iYbins <= gHist->GetNbinsY(); iYbins++) {
1178         nTotalY[iXbins-1] += gHist->GetBinContent(iXbins,iYbins,iZbins);
1179       }
1180     }
1181   }
1182
1183   for(Int_t iXbins = 1; iXbins <= gHist->GetNbinsX(); iXbins++) {
1184     for(Int_t iYbins = 1; iYbins <= gHist->GetNbinsY(); iYbins++) {
1185       if(nTotalY[iXbins-1] > 0)
1186         nParticleCompositionY[iXbins-1] += 100.*gHist->GetBinContent(iXbins,iYbins,iSpecies+1)/nTotalY[iXbins-1];
1187       //nCompositionY[iXbins-1] += gHist->GetBinContent(iXbins,iYbins,iSpecies+1);
1188       //if(nParticleCompositionY[iXbins-1] == 0) 
1189       //nParticleCompositionY[iXbins-1] = -10.0;
1190     }//pt loop
1191     if((nParticleCompositionY[iXbins-1] <= 100.)&&(nTotalY[iXbins-1] != 0))
1192       nParticleCompositionYError[iXbins-1] = TMath::Sqrt(nParticleCompositionY[iXbins-1]*(100. - nParticleCompositionY[iXbins-1])/nTotalY[iXbins-1]);
1193     gY[iXbins-1] = ymin + (iXbins-1)*(ymax - ymin)/nybins + 0.5*(ymax - ymin)/nybins;
1194     gYError[iXbins-1] = 0.5*(ymax - ymin)/nybins;
1195     //cout<<"y: "<<gY[iXbins-1]<<
1196     //" - test: "<<ymin + (iXbins-1)*(ymax - ymin)/nybins + 0.5*(ymax - ymin)/nybins<<
1197     //" - Number of protons: "<<nY[iXbins-1]<<
1198     //" - Total: "<<nTotalY[iXbins-1]<<
1199     //" - Percentage: "<<nParticleCompositionY[iXbins-1]<<endl;
1200   }//y loop
1201
1202   //pt dependence
1203   //cout<<"Ptmin: "<<ptmin<<" - Ptmax: "<<ptmax<<" - Ptbins: "<<nptbins<<endl;
1204   for(Int_t iYbins = 1; iYbins <= gHist->GetNbinsY(); iYbins++) {
1205     for(Int_t iZbins = 1; iZbins <= gHist->GetNbinsZ(); iZbins++) {
1206       for(Int_t iXbins = 1; iXbins <= gHist->GetNbinsX(); iXbins++) {
1207         nTotalPt[iYbins-1] += gHist->GetBinContent(iXbins,iYbins,iZbins);
1208       }
1209     }
1210   }
1211
1212   for(Int_t iYbins = 1; iYbins <= gHist->GetNbinsY(); iYbins++) {
1213     for(Int_t iXbins = 1; iXbins <= gHist->GetNbinsX(); iXbins++) {
1214       if(nTotalPt[iYbins-1] > 0)
1215         nParticleCompositionPt[iYbins-1] += 100.*gHist->GetBinContent(iXbins,iYbins,iSpecies+1)/nTotalPt[iYbins-1];
1216       //if(nParticleCompositionPt[iYbins-1] == 0) 
1217       //nParticleCompositionPt[iYbins-1] = -10.0;
1218     }//pt loop
1219     if((nParticleCompositionPt[iYbins-1] <= 100.)&&(nTotalPt[iYbins-1] != 0))
1220       nParticleCompositionPtError[iYbins-1] = TMath::Sqrt(nParticleCompositionPt[iYbins-1]*(100. - nParticleCompositionPt[iYbins-1])/nTotalPt[iYbins-1]);
1221     gPt[iYbins-1] = ptmin + (iYbins-1)*(ptmax - ptmin)/nptbins + 0.5*(ptmax - ptmin)/nptbins;
1222     gPtError[iYbins-1] = 0.5*(ptmax - ptmin)/nptbins;
1223     //cout<<"Pt: "<<gPt[iYbins-1]<<
1224     //" - test: "<<ptmin + (iYbins-1)*(ptmax - ptmin)/nptbins + 0.5*(ptmax - ptmin)/nptbins<<
1225     //" - Number of protons: "<<nY[iXbins-1]<<
1226     //" - Total: "<<nTotalPt[iYbins-1]<<
1227     //" - Percentage: "<<nParticleCompositionPt[iYbins-1]<<endl;
1228   }//pt loop
1229 }
1230
1231 //________________________________________//
1232 void readProcesses(TList *list) {
1233   char *fParticleProtonName[12] = {"K_{L}","#pi","K_{S}","K",
1234                                    "n","p","#Sigma^{-}","#Lambda","#Sigma^{+}",
1235                                    "#Xi^{-}","#Xi^{0}","#Omega^{-}"};
1236   char *fParticleAntiProtonName[8] = {"K_{L}","#pi","K_{S}","K",
1237                                       "n","p","#Lambda","#Sigma^{+}"};
1238   Int_t iProtonCounter = 0, iAntiProtonCounter = 0;
1239   TH1F *gMCProcesses;
1240   for(Int_t iEntry = 0; iEntry < list->GetEntries(); iEntry++) {
1241     gMCProcesses = (TH1F *)list->At(iEntry);
1242     TString histName = gMCProcesses->GetName();
1243     if(histName.Contains("gHistProtons")) {
1244       cout<<"Protons coming from "<<fParticleProtonName[iProtonCounter]<<endl;
1245
1246       iProtonCounter += 1;
1247     }
1248     if(histName.Contains("gHistAntiProtons")) {
1249       cout<<"Antiprotons coming from "<<fParticleAntiProtonName[iAntiProtonCounter]<<endl;
1250
1251       iAntiProtonCounter += 1;
1252     }
1253     for(Int_t iBin = 1; iBin < gMCProcesses->GetNbinsX(); iBin++) {
1254       Double_t binContent = gMCProcesses->GetBinContent(iBin);
1255       if(binContent > 0) {
1256         Int_t processId = gMCProcesses->GetBinCenter(iBin);
1257         cout<<"\t Process ID: "<<processId<<" - "<<
1258           gMCProcessName[processId]<<" - "<<
1259           100.*binContent/gMCProcesses->GetEntries()<<"%"<<endl;
1260       }
1261     }
1262   }
1263 }
1264
1265 //________________________________________________//
1266 void SetError(TH1D *hEff, TH1D *hGen) {
1267   for(Int_t iBin = 1; iBin <= hEff->GetNbinsX(); iBin++) {
1268     Double_t error = 0.0;
1269     if((hEff->GetBinContent(iBin) <= 1  .)&&(hGen->GetBinContent(iBin) != 0))
1270       error = TMath::Sqrt(hEff->GetBinContent(iBin)*(1  . - hEff->GetBinContent(iBin))/hGen->GetBinContent(iBin));
1271     hEff->SetBinError(iBin,error);
1272   }
1273 }
1274
1275 //________________________________________//
1276 void drawEfficiency(TList *list,
1277                     const char* analysisType) {
1278   //Function to display the reconstruction and PID efficiencies
1279   //for protons and antiprotons vs y and pT
1280
1281   TH2F *hEmpty = new TH2F("hEmptyReconstructionEfficiency","",
1282                            100,-1.2,3.5,100,-10.0,130); 
1283   hEmpty->SetStats(kFALSE); 
1284   hEmpty->GetYaxis()->SetTitle("#epsilon [%]");
1285   hEmpty->GetYaxis()->SetTitleOffset(1.3);
1286
1287   //Reconstruction efficiency
1288   TH2D *gHistPrimariesMCYPtProtons = (TH2D *)list->At(0);
1289   TH2D *gHistPrimariesMCYPtAntiProtons = (TH2D *)list->At(1);
1290   TH2D *gHistMCYPtProtonsFromWeak = (TH2D *)list->At(2);
1291   TH2D *gHistMCYPtAntiProtonsFromWeak = (TH2D *)list->At(3);
1292   TH2D *gHistMCYPtProtonsFromHadronic = (TH2D *)list->At(4);
1293   TH2D *gHistMCYPtAntiProtonsFromHadronic = (TH2D *)list->At(5);
1294   TH2D *gHistPrimariesESDYPtProtons = (TH2D *)list->At(6);
1295   TH2D *gHistPrimariesESDYPtAntiProtons = (TH2D *)list->At(7);
1296   TH2D *gHistESDYPtProtonsFromWeak = (TH2D *)list->At(8);
1297   TH2D *gHistESDYPtAntiProtonsFromWeak = (TH2D *)list->At(9);
1298   TH2D *gHistESDYPtProtonsFromHadronic = (TH2D *)list->At(10);
1299   TH2D *gHistESDYPtAntiProtonsFromHadronic = (TH2D *)list->At(11);
1300
1301   //rapidity dependence
1302   TCanvas *c14 = new TCanvas("c14",
1303                              "(Anti)Proton reconstruction efficiency vs y",
1304                              650,650,700,400);
1305   c14->SetHighLightColor(10); c14->Divide(2,1);
1306
1307   //Primary Protons
1308   TH1D *gYPrimariesESDProtons = (TH1D *)gHistPrimariesESDYPtProtons->ProjectionX("gYPrimariesESDProtons",0,gHistPrimariesESDYPtProtons->GetXaxis()->GetNbins(),"e");
1309   TH1D *gYPrimariesMCProtons = (TH1D *)gHistPrimariesMCYPtProtons->ProjectionX("gYPrimariesMCProtons",0,gHistPrimariesMCYPtProtons->GetXaxis()->GetNbins(),"e");
1310   gYPrimariesESDProtons->Divide(gYPrimariesMCProtons);
1311   SetError(gYPrimariesESDProtons,gYPrimariesMCProtons);
1312   gYPrimariesESDProtons->Scale(100.);
1313   gYPrimariesESDProtons->SetMarkerStyle(kFullCircle);
1314
1315   //Primary AntiProtons
1316   TH1D *gYPrimariesESDAntiProtons = (TH1D *)gHistPrimariesESDYPtAntiProtons->ProjectionX("gYPrimariesESDAntiProtons",0,gHistPrimariesESDYPtAntiProtons->GetXaxis()->GetNbins(),"e");
1317   TH1D *gYPrimariesMCAntiProtons = (TH1D *)gHistPrimariesMCYPtAntiProtons->ProjectionX("gYPrimariesMCAntiProtons",0,gHistPrimariesMCYPtProtons->GetXaxis()->GetNbins(),"e");
1318   gYPrimariesESDAntiProtons->Divide(gYPrimariesMCAntiProtons);
1319   SetError(gYPrimariesESDAntiProtons,gYPrimariesMCAntiProtons);
1320   gYPrimariesESDAntiProtons->Scale(100.);
1321   gYPrimariesESDAntiProtons->SetMarkerStyle(kFullCircle);
1322
1323   //Protons from weak decays
1324   TH1D *gYESDProtonsFromWeak = (TH1D *)gHistESDYPtProtonsFromWeak->ProjectionX("gYESDProtonsFromWeak",0,gHistESDYPtProtonsFromWeak->GetXaxis()->GetNbins(),"e");
1325   TH1D *gYMCProtonsFromWeak = (TH1D *)gHistMCYPtProtonsFromWeak->ProjectionX("gYMCProtonsFromWeak",0,gHistMCYPtProtonsFromWeak->GetXaxis()->GetNbins(),"e");
1326   gYESDProtonsFromWeak->Divide(gYMCProtonsFromWeak);
1327   SetError(gYESDProtonsFromWeak,gYMCProtonsFromWeak);
1328   gYESDProtonsFromWeak->Scale(100.);
1329   gYESDProtonsFromWeak->SetMarkerStyle(21);
1330   gYESDProtonsFromWeak->SetMarkerColor(2);
1331
1332   //AntiProtons from weak decays
1333   TH1D *gYESDAntiProtonsFromWeak = (TH1D *)gHistESDYPtAntiProtonsFromWeak->ProjectionX("gYESDAntiProtonsFromWeak",0,gHistESDYPtAntiProtonsFromWeak->GetXaxis()->GetNbins(),"e");
1334   TH1D *gYMCAntiProtonsFromWeak = (TH1D *)gHistMCYPtAntiProtonsFromWeak->ProjectionX("gYMCAntiProtonsFromWeak",0,gHistMCYPtProtonsFromWeak->GetXaxis()->GetNbins(),"e");
1335   gYESDAntiProtonsFromWeak->Divide(gYMCAntiProtonsFromWeak);
1336   SetError(gYESDAntiProtonsFromWeak,gYMCAntiProtonsFromWeak);
1337   gYESDAntiProtonsFromWeak->Scale(100.);
1338   gYESDAntiProtonsFromWeak->SetMarkerStyle(21);
1339   gYESDAntiProtonsFromWeak->SetMarkerColor(2);
1340
1341   //Protons from hadronic interactions
1342   TH1D *gYESDProtonsFromHadronic = (TH1D *)gHistESDYPtProtonsFromHadronic->ProjectionX("gYESDProtonsFromHadronic",0,gHistESDYPtProtonsFromHadronic->GetXaxis()->GetNbins(),"e");
1343   TH1D *gYMCProtonsFromHadronic = (TH1D *)gHistMCYPtProtonsFromHadronic->ProjectionX("gYMCProtonsFromHadronic",0,gHistMCYPtProtonsFromHadronic->GetXaxis()->GetNbins(),"e");
1344   gYESDProtonsFromHadronic->Divide(gYMCProtonsFromHadronic);
1345   SetError(gYESDProtonsFromHadronic,gYMCProtonsFromHadronic);
1346   gYESDProtonsFromHadronic->Scale(100.);
1347   gYESDProtonsFromHadronic->SetMarkerStyle(22);
1348   gYESDProtonsFromHadronic->SetMarkerColor(3);
1349
1350   //AntiProtons from hadronic interactions
1351   TH1D *gYESDAntiProtonsFromHadronic = (TH1D *)gHistESDYPtAntiProtonsFromHadronic->ProjectionX("gYESDAntiProtonsFromHadronic",0,gHistESDYPtAntiProtonsFromHadronic->GetXaxis()->GetNbins(),"e");
1352   TH1D *gYMCAntiProtonsFromHadronic = (TH1D *)gHistMCYPtAntiProtonsFromHadronic->ProjectionX("gYMCAntiProtonsFromHadronic",0,gHistMCYPtProtonsFromHadronic->GetXaxis()->GetNbins(),"e");
1353   gYESDAntiProtonsFromHadronic->Divide(gYMCAntiProtonsFromHadronic);
1354   SetError(gYESDAntiProtonsFromHadronic,gYMCAntiProtonsFromHadronic);
1355   gYESDAntiProtonsFromHadronic->Scale(100.);
1356   gYESDAntiProtonsFromHadronic->SetMarkerStyle(22);
1357   gYESDAntiProtonsFromHadronic->SetMarkerColor(3);
1358
1359   c14->cd(1)->SetBottomMargin(0.15); 
1360   c14->cd(1)->SetLeftMargin(0.15); 
1361   c14->cd(1)->SetGridx(); c14->cd(1)->SetGridy();
1362   hEmpty->GetXaxis()->SetRangeUser(gYPrimariesESDAntiProtons->GetXaxis()->GetXmin()-0.2,
1363                                    gYPrimariesESDAntiProtons->GetXaxis()->GetXmax()+0.2);
1364   hEmpty->GetXaxis()->SetTitle(gYPrimariesESDAntiProtons->GetXaxis()->GetTitle());
1365   hEmpty->SetTitle("Protons");
1366   hEmpty->DrawCopy();
1367   gYPrimariesESDProtons->DrawCopy("ESAME");
1368   gYESDProtonsFromWeak->DrawCopy("ESAME");
1369   gYESDProtonsFromHadronic->DrawCopy("ESAME");
1370
1371   c14->cd(2)->SetBottomMargin(0.15); 
1372   c14->cd(2)->SetLeftMargin(0.15); 
1373   c14->cd(2)->SetGridx(); c14->cd(2)->SetGridy();
1374   hEmpty->SetTitle("Antiprotons");
1375   hEmpty->DrawCopy();
1376   gYPrimariesESDAntiProtons->DrawCopy("ESAME");
1377   gYESDAntiProtonsFromWeak->DrawCopy("ESAME");
1378   gYESDAntiProtonsFromHadronic->DrawCopy("ESAME");
1379   c14->SaveAs("ReconstructionEfficiency-Protons-Rapidity.gif");
1380
1381   //pT dependence
1382   TCanvas *c15 = new TCanvas("c15",
1383                              "(Anti)Proton reconstruction efficiency vs pT",
1384                              700,700,700,400);
1385   c15->SetHighLightColor(10); c15->Divide(2,1);
1386
1387   //Primary Protons
1388   TH1D *gPtPrimariesESDProtons = (TH1D *)gHistPrimariesESDYPtProtons->ProjectionY("gPtPrimariesESDProtons",0,gHistPrimariesESDYPtProtons->GetYaxis()->GetNbins(),"e");
1389   TH1D *gPtPrimariesMCProtons = (TH1D *)gHistPrimariesMCYPtProtons->ProjectionY("gPtPrimariesMCProtons",0,gHistPrimariesMCYPtProtons->GetYaxis()->GetNbins(),"e");
1390   gPtPrimariesESDProtons->Divide(gPtPrimariesMCProtons);
1391   SetError(gPtPrimariesESDProtons,gPtPrimariesMCProtons);
1392   gPtPrimariesESDProtons->Scale(100.);
1393   gPtPrimariesESDProtons->SetMarkerStyle(kFullCircle);
1394
1395   //Primary AntiProtons
1396   TH1D *gPtPrimariesESDAntiProtons = (TH1D *)gHistPrimariesESDYPtAntiProtons->ProjectionY("gPtPrimariesESDAntiProtons",0,gHistPrimariesESDYPtAntiProtons->GetYaxis()->GetNbins(),"e");
1397   TH1D *gPtPrimariesMCAntiProtons = (TH1D *)gHistPrimariesMCYPtAntiProtons->ProjectionY("gPtPrimariesMCAntiProtons",0,gHistPrimariesMCYPtProtons->GetYaxis()->GetNbins(),"e");
1398   gPtPrimariesESDAntiProtons->Divide(gPtPrimariesMCAntiProtons);
1399   SetError(gPtPrimariesESDAntiProtons,gPtPrimariesMCAntiProtons);
1400   gPtPrimariesESDAntiProtons->Scale(100.);
1401   gPtPrimariesESDAntiProtons->SetMarkerStyle(kFullCircle);
1402
1403   //Protons from weak decays
1404   TH1D *gPtESDProtonsFromWeak = (TH1D *)gHistESDYPtProtonsFromWeak->ProjectionY("gPtESDProtonsFromWeak",0,gHistESDYPtProtonsFromWeak->GetYaxis()->GetNbins(),"e");
1405   TH1D *gPtMCProtonsFromWeak = (TH1D *)gHistMCYPtProtonsFromWeak->ProjectionY("gPtMCProtonsFromWeak",0,gHistMCYPtProtonsFromWeak->GetYaxis()->GetNbins(),"e");
1406   gPtESDProtonsFromWeak->Divide(gPtMCProtonsFromWeak);
1407   SetError(gPtESDProtonsFromWeak,gPtMCProtonsFromWeak);
1408   gPtESDProtonsFromWeak->Scale(100.);
1409   gPtESDProtonsFromWeak->SetMarkerStyle(21);
1410   gPtESDProtonsFromWeak->SetMarkerColor(2);
1411
1412   //AntiProtons from weak decays
1413   TH1D *gPtESDAntiProtonsFromWeak = (TH1D *)gHistESDYPtAntiProtonsFromWeak->ProjectionY("gPtESDAntiProtonsFromWeak",0,gHistESDYPtAntiProtonsFromWeak->GetYaxis()->GetNbins(),"e");
1414   TH1D *gPtMCAntiProtonsFromWeak = (TH1D *)gHistMCYPtAntiProtonsFromWeak->ProjectionY("gPtMCAntiProtonsFromWeak",0,gHistMCYPtProtonsFromWeak->GetYaxis()->GetNbins(),"e");
1415   gPtESDAntiProtonsFromWeak->Divide(gPtMCAntiProtonsFromWeak);
1416   SetError(gPtESDAntiProtonsFromWeak,gPtMCAntiProtonsFromWeak);
1417   gPtESDAntiProtonsFromWeak->Scale(100.);
1418   gPtESDAntiProtonsFromWeak->SetMarkerStyle(21);
1419   gPtESDAntiProtonsFromWeak->SetMarkerColor(2);
1420
1421   //Protons from hadronic interactions
1422   TH1D *gPtESDProtonsFromHadronic = (TH1D *)gHistESDYPtProtonsFromHadronic->ProjectionY("gPtESDProtonsFromHadronic",0,gHistESDYPtProtonsFromHadronic->GetYaxis()->GetNbins(),"e");
1423   TH1D *gPtMCProtonsFromHadronic = (TH1D *)gHistMCYPtProtonsFromHadronic->ProjectionY("gPtMCProtonsFromHadronic",0,gHistMCYPtProtonsFromHadronic->GetYaxis()->GetNbins(),"e");
1424   gPtESDProtonsFromHadronic->Divide(gPtMCProtonsFromHadronic);
1425   SetError(gPtESDProtonsFromHadronic,gPtMCProtonsFromHadronic);
1426   gPtESDProtonsFromHadronic->Scale(100.);
1427   gPtESDProtonsFromHadronic->SetMarkerStyle(22);
1428   gPtESDProtonsFromHadronic->SetMarkerColor(3);
1429
1430   //AntiProtons from hadronic interactions
1431   TH1D *gPtESDAntiProtonsFromHadronic = (TH1D *)gHistESDYPtAntiProtonsFromHadronic->ProjectionY("gPtESDAntiProtonsFromHadronic",0,gHistESDYPtAntiProtonsFromHadronic->GetYaxis()->GetNbins(),"e");
1432   TH1D *gPtMCAntiProtonsFromHadronic = (TH1D *)gHistMCYPtAntiProtonsFromHadronic->ProjectionY("gPtMCAntiProtonsFromHadronic",0,gHistMCYPtProtonsFromHadronic->GetYaxis()->GetNbins(),"e");
1433   gPtESDAntiProtonsFromHadronic->Divide(gPtMCAntiProtonsFromHadronic);
1434   SetError(gPtESDAntiProtonsFromHadronic,gPtMCAntiProtonsFromHadronic);
1435   gPtESDAntiProtonsFromHadronic->Scale(100.);
1436   gPtESDAntiProtonsFromHadronic->SetMarkerStyle(22);
1437   gPtESDAntiProtonsFromHadronic->SetMarkerColor(3);
1438
1439
1440   c15->cd(1)->SetBottomMargin(0.15); 
1441   c15->cd(1)->SetLeftMargin(0.15); 
1442   c15->cd(1)->SetGridx(); c15->cd(1)->SetGridy();
1443   hEmpty->GetXaxis()->SetRangeUser(gPtPrimariesESDAntiProtons->GetXaxis()->GetXmin()-0.2,
1444                                    gPtPrimariesESDAntiProtons->GetXaxis()->GetXmax()+0.2);
1445   hEmpty->GetXaxis()->SetTitle("P_{T} [GeV/c]");
1446   hEmpty->SetTitle("Protons");
1447   hEmpty->DrawCopy();
1448   gPtPrimariesESDProtons->DrawCopy("ESAME");
1449   gPtESDProtonsFromWeak->DrawCopy("ESAME");
1450   gPtESDProtonsFromHadronic->DrawCopy("ESAME");
1451
1452   c15->cd(2)->SetBottomMargin(0.15); 
1453   c15->cd(2)->SetLeftMargin(0.15); 
1454   c15->cd(2)->SetGridx(); c15->cd(2)->SetGridy();
1455   hEmpty->SetTitle("Antiprotons");
1456   hEmpty->DrawCopy();
1457   gPtPrimariesESDAntiProtons->DrawCopy("ESAME");
1458   gPtESDAntiProtonsFromWeak->DrawCopy("ESAME");
1459   gPtESDAntiProtonsFromHadronic->DrawCopy("ESAME");
1460   c15->SaveAs("ReconstructionEfficiency-Protons-Pt.gif");
1461
1462   //______________//
1463   //PID efficiency//
1464   //______________//
1465   TH2D *gHistESDInitYPtProtons = (TH2D *)list->At(12);
1466   TH2D *gHistESDIdYPtProtons = (TH2D *)list->At(13);
1467   TH2D *gHistESDRecIdYPtProtons = (TH2D *)list->At(14);
1468   TH2D *gHistESDContamYPtProtons = (TH2D *)list->At(15);
1469
1470   TCanvas *c16 = new TCanvas("c16",
1471                              "(Anti)Proton PID efficiency vs y and pT",
1472                              750,750,700,400);
1473   c16->SetHighLightColor(10); c16->Divide(2,1);
1474
1475   //rapidity dependence
1476   //protons pid efficiency
1477   TH1D *gYESDIdProtons = (TH1D *)gHistESDIdYPtProtons->ProjectionX("gYESDIdProtons",0,gHistESDIdYPtProtons->GetXaxis()->GetNbins(),"e");
1478   TH1D *gYESDInitProtons = (TH1D *)gHistESDInitYPtProtons->ProjectionX("gYESDInitProtons",0,gHistESDInitYPtProtons->GetXaxis()->GetNbins(),"e");
1479   gYESDIdProtons->Divide(gYESDInitProtons);
1480   SetError(gYESDIdProtons,gYESDInitProtons);
1481   gYESDIdProtons->Scale(100.);
1482   gYESDIdProtons->SetMarkerStyle(kFullCircle);
1483
1484   //protons pid contamination
1485   TH1D *gYESDContamProtons = (TH1D *)gHistESDContamYPtProtons->ProjectionX("gYESDContamProtons",0,gHistESDContamYPtProtons->GetXaxis()->GetNbins(),"e");
1486   TH1D *gYESDRecIdProtons = (TH1D *)gHistESDRecIdYPtProtons->ProjectionX("gYESDRecIdProtons",0,gHistESDRecIdYPtProtons->GetXaxis()->GetNbins(),"e");
1487   gYESDContamProtons->Divide(gYESDRecIdProtons);
1488   SetError(gYESDContamProtons,gYESDRecIdProtons);
1489   gYESDContamProtons->Scale(100.);
1490   gYESDContamProtons->SetMarkerStyle(kOpenCircle);
1491
1492   c16->cd(1)->SetBottomMargin(0.15); 
1493   c16->cd(1)->SetLeftMargin(0.15); 
1494   c16->cd(1)->SetGridx(); c16->cd(1)->SetGridy();
1495   hEmpty->GetXaxis()->SetRangeUser(-1.0.,1.0);
1496   hEmpty->GetXaxis()->SetTitle(gYESDContamProtons->GetXaxis()->GetTitle());
1497   hEmpty->DrawCopy();
1498   gYESDIdProtons->DrawCopy("ESAME");
1499   gYESDContamProtons->DrawCopy("ESAME");
1500
1501   //pT dependence
1502   //protons pid efficiency
1503   TH1D *gPtESDIdProtons = (TH1D *)gHistESDIdYPtProtons->ProjectionY("gPtESDIdProtons",0,gHistESDIdYPtProtons->GetYaxis()->GetNbins(),"e");
1504   TH1D *gPtESDInitProtons = (TH1D *)gHistESDInitYPtProtons->ProjectionY("gPtESDInitProtons",0,gHistESDInitYPtProtons->GetYaxis()->GetNbins(),"e");
1505   gPtESDIdProtons->Divide(gPtESDInitProtons);
1506   SetError(gPtESDIdProtons,gPtESDInitProtons);
1507   gPtESDIdProtons->Scale(100.);
1508   gPtESDIdProtons->SetMarkerStyle(kFullCircle);
1509
1510   //protons pid contamination
1511   TH1D *gPtESDContamProtons = (TH1D *)gHistESDContamYPtProtons->ProjectionY("gPtESDContamProtons",0,gHistESDContamYPtProtons->GetYaxis()->GetNbins(),"e");
1512   TH1D *gPtESDRecIdProtons = (TH1D *)gHistESDRecIdYPtProtons->ProjectionY("gPtESDRecIdProtons",0,gHistESDRecIdYPtProtons->GetYaxis()->GetNbins(),"e");
1513   gPtESDContamProtons->Divide(gPtESDRecIdProtons);
1514   SetError(gPtESDContamProtons,gPtESDRecIdProtons);
1515   gPtESDContamProtons->Scale(100.);
1516   gPtESDContamProtons->SetMarkerStyle(kOpenCircle);
1517
1518   c16->cd(2)->SetBottomMargin(0.15); 
1519   c16->cd(2)->SetLeftMargin(0.15); 
1520   c16->cd(2)->SetGridx(); c16->cd(2)->SetGridy();
1521   hEmpty->GetXaxis()->SetRangeUser(0.0,1.2);
1522   hEmpty->GetXaxis()->SetTitle("P_{T} [GeV/c]");
1523   hEmpty->DrawCopy();
1524   gPtESDIdProtons->DrawCopy("ESAME");
1525   gPtESDContamProtons->DrawCopy("ESAME");
1526
1527   c16->SaveAs("PIDEfficiency-Protons.gif");
1528
1529   TString outputFileName = "Reconstruction-PID-Efficiency.";
1530   outputFileName += analysisType; outputFileName += ".root";
1531   TFile *fout = TFile::Open(outputFileName.Data(),"recreate");
1532   gYPrimariesESDProtons->Write();
1533   gYESDProtonsFromWeak->Write();
1534   gYESDProtonsFromHadronic->Write();
1535   gPtPrimariesESDProtons->Write();
1536   gPtESDProtonsFromWeak->Write();
1537   gPtESDProtonsFromHadronic->Write();
1538   gYPrimariesESDAntiProtons->Write();
1539   gYESDAntiProtonsFromWeak->Write();
1540   gYESDAntiProtonsFromHadronic->Write();
1541   gPtPrimariesESDAntiProtons->Write();
1542   gPtESDAntiProtonsFromWeak->Write();
1543   gPtESDAntiProtonsFromHadronic->Write();
1544   gYESDIdProtons->Write();
1545   gYESDContamProtons->Write();
1546   gPtESDIdProtons->Write();
1547   gPtESDContamProtons->Write();
1548   fout->Close();
1549 }
1550
1551 //________________________________________________//
1552 void DrawMarker(Double_t x, Double_t y, Int_t style, 
1553                 Double_t size, Int_t color) {
1554   TMarker *m = new TMarker(x,y,style);
1555   m->SetMarkerSize(size);
1556   m->SetMarkerColor(color);
1557   m->Draw();
1558 }
1559
1560 //________________________________________________//
1561 const char * const gMCProcessName[45] = {
1562   "Primary particle emission",
1563   "Multiple scattering",
1564   "Energy loss",
1565   "Bending in magnetic field",
1566   "Decay",
1567   "Lepton pair production",
1568   "Compton scattering",
1569   "Photoelectric effect",
1570   "Bremstrahlung",
1571   "Delta ray",
1572   "Positron annihilation",
1573   "Positron annihilation at rest",
1574   "Positron annihilation in flight",
1575   "Hadronic interaction",
1576   "Nuclear evaporation",
1577   "Nuclear fission",
1578   "Nuclear absorbtion",
1579   "Antiproton annihilation",
1580   "Antineutron annihilation",
1581   "Neutron capture",
1582   "Hadronic elastic",
1583   "Hadronic incoherent elastic",
1584   "Hadronic coherent elastic",
1585   "Hadronic inelastic",
1586   "Photon inelastic",
1587   "Muon nuclear interaction",
1588   "Electron nuclear interaction",
1589   "Positron nuclear interaction",
1590   "Time of flight limit",
1591   "Nuclear photofission",
1592   "Rayleigh effect",
1593   "No active process",
1594   "Energy threshold",
1595   "Light absorption",
1596   "Light detection",
1597   "Light scattering",
1598   "Maximum allowed step",
1599   "Cerenkov production",
1600   "Cerenkov feed back photon",
1601   "Cerenkov photon reflection",
1602   "Cerenkov photon refraction",
1603   "Synchrotron radiation",
1604   "Scintillation",
1605   "Transportation",
1606   "Unknown process"
1607 };