1 void drawProtonQAResults(const char *analysisType = "TPC") {
2 //Macro to visualize the results of the proton QA task
4 gStyle->SetPalette(1,0);
5 gStyle->SetCanvasColor(41);
6 gStyle->SetFrameFillColor(10);
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",
15 TFile *fQA = TFile::Open(filename1.Data());
16 TList *listGlobalQA = (TList *)fQA->Get("globalQAList");
17 drawCutStatistics(listGlobalQA,analysisType);
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);
24 TFile *fEfficiency = TFile::Open(filename3.Data());
25 TList *listEfficiency = (TList *)fEfficiency->Get("efficiencyList");
26 drawEfficiency(listEfficiency,analysisType);
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;
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];
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;
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);
63 TList *fQAPrimaryProtonsAcceptedList = (TList *)list->At(1);
64 GetQAEntries(fQAPrimaryProtonsAcceptedList,gEntriesQAPrimaryProtonsAcceptedList);
66 TList *fQAPrimaryProtonsRejectedList = (TList *)list->At(2);
67 GetQAEntries(fQAPrimaryProtonsRejectedList,gEntriesQAPrimaryProtonsRejectedList);
69 TList *fQASecondaryProtonsAcceptedList = (TList *)list->At(3);
70 GetQAEntries(fQASecondaryProtonsAcceptedList,gEntriesQASecondaryProtonsAcceptedList);
72 TList *fQASecondaryProtonsRejectedList = (TList *)list->At(4);
73 GetQAEntries(fQASecondaryProtonsRejectedList,gEntriesQASecondaryProtonsRejectedList);
75 TList *fQAPrimaryAntiProtonsAcceptedList = (TList *)list->At(5);
76 GetQAEntries(fQAPrimaryAntiProtonsAcceptedList,gEntriesQAPrimaryAntiProtonsAcceptedList);
78 TList *fQAPrimaryAntiProtonsRejectedList = (TList *)list->At(6);
79 GetQAEntries(fQAPrimaryAntiProtonsRejectedList,gEntriesQAPrimaryAntiProtonsRejectedList);
81 TList *fQASecondaryAntiProtonsAcceptedList = (TList *)list->At(7);
82 GetQAEntries(fQASecondaryAntiProtonsAcceptedList,gEntriesQASecondaryAntiProtonsAcceptedList);
84 TList *fQASecondaryAntiProtonsRejectedList = (TList *)list->At(8);
85 GetQAEntries(fQASecondaryAntiProtonsRejectedList,gEntriesQASecondaryAntiProtonsRejectedList);
87 //_______________________________________________________//
88 //Create the histograms
90 char *fCutName[nx] = {"Tracks","",
92 "#chi^{2}/N_{ITS-Clusters}",
94 "#chi^{2}/N_{TPC-Clusters}",
101 "#sigma_{Vertex-TPC}",
111 "N_{Secondaries}/N_{total}","",""};
112 char *fCutITSName[6] = {"SPD_{1}","SPD_{2}",
114 "SSD_{1}","SSD_{2}"};
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);
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]);
138 hPrimaryProtons->GetXaxis()->SetLabelOffset(0.01);
139 hPrimaryProtons->GetXaxis()->SetLabelSize(0.045);
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]);
153 hSecondaryProtons->GetXaxis()->SetLabelOffset(0.01);
154 hSecondaryProtons->GetXaxis()->SetLabelSize(0.045);
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]);
167 hPrimaryAntiProtons->GetXaxis()->SetLabelOffset(0.01);
168 hPrimaryAntiProtons->GetXaxis()->SetLabelSize(0.045);
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]);
182 hSecondaryAntiProtons->GetXaxis()->SetLabelOffset(0.01);
183 hSecondaryAntiProtons->GetXaxis()->SetLabelSize(0.045);
184 //_______________________________________________________//
186 //1D for primary protons
187 //cout<<"_____________________________________________________"<<endl;
188 //cout<<"_______________PRIMARY PROTONS_______________________"<<endl;
189 hPrimaryProtons->SetBinContent(1,GetPercentage(gEntriesQA2DList[0],gEntriesQA2DList[1]));
191 for(Int_t i = 2; i < NQAHISTOSPERLIST-4; i++)
192 hPrimaryProtons->SetBinContent(i+1,GetPercentage(gEntriesQAPrimaryProtonsAcceptedList[i-2],
193 gEntriesQAPrimaryProtonsRejectedList[i-2]));
195 //1D for secondary protons
196 //cout<<"_____________________________________________________"<<endl;
197 //cout<<"_______________SECONDARY PROTONS_____________________"<<endl;
198 hSecondaryProtons->SetBinContent(1,GetPercentage(gEntriesQA2DList[2],gEntriesQA2DList[3]));
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]));
205 //1D for primary antiprotons
206 //cout<<"_________________________________________________________"<<endl;
207 //cout<<"_______________PRIMARY ANTIPROTONS_______________________"<<endl;
208 hPrimaryAntiProtons->SetBinContent(1,GetPercentage(gEntriesQA2DList[4],gEntriesQA2DList[5]));
210 for(Int_t i = 2; i < NQAHISTOSPERLIST-4; i++)
211 hPrimaryAntiProtons->SetBinContent(i+1,GetPercentage(gEntriesQAPrimaryAntiProtonsAcceptedList[i-2],
212 gEntriesQAPrimaryAntiProtonsRejectedList[i-2]));
214 //1D for secondary antiprotons
215 //cout<<"_________________________________________________________"<<endl;
216 //cout<<"_______________SECONDARY ANTIPROTONS_____________________"<<endl;
217 hSecondaryAntiProtons->SetBinContent(1,GetPercentage(gEntriesQA2DList[6],gEntriesQA2DList[7]));
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]));
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();
231 for(Int_t i = 1; i <= nx; i++) {
232 hPrimaryProtons->SetBinError(i,1.0);
233 hSecondaryProtons->SetBinError(i,1.0);
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");
243 c1->SaveAs("CutInfluence-Protons.gif");
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();
250 for(Int_t i = 1; i <= nx; i++) {
251 hPrimaryAntiProtons->SetBinError(i,1.0);
252 hSecondaryAntiProtons->SetBinError(i,1.0);
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}");
262 c2->SaveAs("CutInfluence-AntiProtons.gif");
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);
277 //_________________________________________________________//
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]);
289 hPrimaryProtonsITS->GetXaxis()->SetLabelOffset(0.01);
290 hPrimaryProtonsITS->GetXaxis()->SetLabelSize(0.045);
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]);
304 hSecondaryProtonsITS->GetXaxis()->SetLabelOffset(0.01);
305 hSecondaryProtonsITS->GetXaxis()->SetLabelSize(0.045);
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]);
318 hPrimaryAntiProtonsITS->GetXaxis()->SetLabelOffset(0.01);
319 hPrimaryAntiProtonsITS->GetXaxis()->SetLabelSize(0.045);
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]);
333 hSecondaryAntiProtonsITS->GetXaxis()->SetLabelOffset(0.01);
334 hSecondaryAntiProtonsITS->GetXaxis()->SetLabelSize(0.045);
336 //_______________________________________________________//
337 TCanvas *c9 = new TCanvas("c9","ITS cluster map - (anti)protons",
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);
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();
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]));
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");
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]));
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}");
383 c9->SaveAs("CutInfluence-ITS.gif");
385 //Efficiency - Contamination plots
386 DrawContamination(fQA2DList,analysisType);
387 DrawCutEfficiency(fQA2DList,analysisType);
388 DrawComposition(gHistYPtPDGProtonsPass,gHistYPtPDGAntiProtonsPass);
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;
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,
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);
431 gParticleProtonPt[iParticle] = new TGraphErrors(gHistYPtPDGProtons->GetNbinsY(),
432 gPt,nParticleCompositionProtonPt,gPtError,nParticleCompositionProtonPtError);
433 gParticleProtonPt[iParticle]->SetMarkerStyle(iParticle+20);
434 gParticleProtonPt[iParticle]->SetMarkerSize(1.2);
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);
445 gParticleAntiProtonPt[iParticle] = new TGraphErrors(gHistYPtPDGAntiProtons->GetNbinsY(),
446 gPt,nParticleCompositionAntiProtonPt,gPtError,nParticleCompositionAntiProtonPtError);
447 gParticleAntiProtonPt[iParticle]->SetMarkerStyle(iParticle+20);
448 gParticleAntiProtonPt[iParticle]->SetMarkerSize(1.2);
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);
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());
463 TCanvas *c12 = new TCanvas("c12",
464 "Composition of accepted secondaries vs y",
467 c12->SetHighLightColor(10); c12->cd(1)->SetBottomMargin(0.15);
468 c12->cd(1)->SetGridx(); c12->cd(1)->SetGridy();
469 hEmptyY->SetTitle("Protons");
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]);
480 DrawMarker(0.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
481 t1->DrawLatex(0.3,113-5*(iParticle-5),fParticleName[iParticle]);
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]);
491 c12->SetHighLightColor(10); c12->cd(2)->SetBottomMargin(0.15);
492 c12->cd(2)->SetGridx(); c12->cd(2)->SetGridy();
493 hEmptyY->SetTitle("Antiprotons");
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]);
503 DrawMarker(0.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
504 t1->DrawLatex(0.3,113-5*(iParticle-5),fParticleName[iParticle]);
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");
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]");
518 TCanvas *c13 = new TCanvas("c13",
519 "Composition of accepted secondaries vs pT",
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]);
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]);
540 if((iParticle == 2)||(iParticle == 6)||(iParticle == 8))
541 gParticleProtonPt[iParticle]->Draw("P");
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]);
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]);
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]);
567 if((iParticle == 6)||(iParticle == 8))
568 gParticleAntiProtonPt[iParticle]->Draw("P");
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");
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;
587 TLatex *t1 = new TLatex();
588 t1->SetTextSize(0.04);
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);
595 //rapidity dependence
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);
602 TH1D *gYPrimaryProtonsPercentage = new TH1D("gYPrimaryProtonsPercentage",
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);
613 TH1D *gYSecondaryProtonsPercentage = new TH1D("gYSecondaryProtonsPercentage",
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);
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);
630 TH1D *gYPrimaryAntiProtonsPercentage = new TH1D("gYPrimaryAntiProtonsPercentage",
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);
641 TH1D *gYSecondaryAntiProtonsPercentage = new TH1D("gYSecondaryAntiProtonsPercentage",
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);
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());
660 TCanvas *c7 = new TCanvas("c7","(Anti)Proton contamination vs y",
662 c7->SetHighLightColor(10); c7->Divide(2,1);
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");
669 gYPrimaryProtonsPercentage->DrawCopy("ESAME");
670 gYSecondaryProtonsPercentage->DrawCopy("ESAME");
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");
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");
682 gYPrimaryAntiProtonsPercentage->DrawCopy("ESAME");
683 gYSecondaryAntiProtonsPercentage->DrawCopy("ESAME");
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");
690 c7->SaveAs("Contamination-Protons-Rapidity.gif");
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);
699 TH1D *gPtPrimaryProtonsPercentage = new TH1D("gPtPrimaryProtonsPercentage",
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);
710 TH1D *gPtSecondaryProtonsPercentage = new TH1D("gPtSecondaryProtonsPercentage",
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);
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);
728 TH1D *gPtPrimaryAntiProtonsPercentage = new TH1D("gPtPrimaryAntiProtonsPercentage",
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);
739 TH1D *gPtSecondaryAntiProtonsPercentage = new TH1D("gPtSecondaryAntiProtonsPercentage",
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);
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]");
757 TCanvas *c8 = new TCanvas("c8","(Anti)Proton comtamination vs pT",
759 c8->SetHighLightColor(10); c8->Divide(2,1);
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");
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");
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");
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");
788 c8->SaveAs("Contamination-Protons-Pt.gif");
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();
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;
814 TLatex *t1 = new TLatex();
815 t1->SetTextSize(0.04);
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);
822 //rapidity dependence
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);
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);
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());
846 TCanvas *c10 = new TCanvas("c10","(Anti)Proton cut efficiency vs y",
848 c10->SetHighLightColor(10); c10->Divide(2,1);
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);
856 gYPrimaryESDProtons->DrawCopy("ESAME");
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");
863 gYPrimaryESDAntiProtons->DrawCopy("ESAME");
865 c10->SaveAs("CutEfficiency-Protons-Rapidity.gif");
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);
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);
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]");
891 TCanvas *c11 = new TCanvas("c11","(Anti)Proton cut efficiency vs pT",
893 c11->SetHighLightColor(10); c11->Divide(2,1);
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");
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");
910 c11->SaveAs("CutEfficiency-Protons-Pt.gif");
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();
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;
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;
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;
944 if(nTotalEntries == 0)
947 return 100.*nRejectEntries/nTotalEntries;
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;
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;
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,
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);
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);
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);
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);
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);
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());
1037 TCanvas *c3 = new TCanvas("c3","MC secondary composition vs y - Protons",
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]);
1052 DrawMarker(0.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
1053 t1->DrawLatex(0.3,113-5*(iParticle-5),fParticleName[iParticle]);
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]);
1065 TCanvas *c5 = new TCanvas("c5","MC secondary composition vs y - antiProtons",
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]);
1078 DrawMarker(0.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
1079 t1->DrawLatex(0.3,113-5*(iParticle-5),fParticleName[iParticle]);
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]);
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]");
1094 TCanvas *c4 = new TCanvas("c4","MC secondary composition vs pT - Protons",
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]);
1106 DrawMarker(2.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
1107 t1->DrawLatex(2.3,113-5*(iParticle-5),fParticleName[iParticle]);
1109 if((iParticle == 0)||(iParticle == 2)||(iParticle == 6)||(iParticle == 8))
1110 gParticleProtonPt[iParticle]->Draw("P");
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]);
1121 TCanvas *c6 = new TCanvas("c6",
1122 "MC secondary composition vs pT - AntiProtons",
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]);
1133 DrawMarker(2.2, 115-5*(iParticle-5), 20+iParticle, 1.2, 1);
1134 t1->DrawLatex(2.3,113-5*(iParticle-5),fParticleName[iParticle]);
1136 if((iParticle == 0)||(iParticle == 6)||(iParticle == 8))
1137 gParticleAntiProtonPt[iParticle]->Draw("P");
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]);
1147 //________________________________________//
1148 void GetComposition(Int_t iSpecies,
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;
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);
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;
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;
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);
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;
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;
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;
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;
1246 iProtonCounter += 1;
1248 if(histName.Contains("gHistAntiProtons")) {
1249 cout<<"Antiprotons coming from "<<fParticleAntiProtonName[iAntiProtonCounter]<<endl;
1251 iAntiProtonCounter += 1;
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;
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);
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
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);
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);
1301 //rapidity dependence
1302 TCanvas *c14 = new TCanvas("c14",
1303 "(Anti)Proton reconstruction efficiency vs y",
1305 c14->SetHighLightColor(10); c14->Divide(2,1);
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);
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);
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);
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);
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);
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);
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");
1367 gYPrimariesESDProtons->DrawCopy("ESAME");
1368 gYESDProtonsFromWeak->DrawCopy("ESAME");
1369 gYESDProtonsFromHadronic->DrawCopy("ESAME");
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");
1376 gYPrimariesESDAntiProtons->DrawCopy("ESAME");
1377 gYESDAntiProtonsFromWeak->DrawCopy("ESAME");
1378 gYESDAntiProtonsFromHadronic->DrawCopy("ESAME");
1379 c14->SaveAs("ReconstructionEfficiency-Protons-Rapidity.gif");
1382 TCanvas *c15 = new TCanvas("c15",
1383 "(Anti)Proton reconstruction efficiency vs pT",
1385 c15->SetHighLightColor(10); c15->Divide(2,1);
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);
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);
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);
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);
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);
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);
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");
1448 gPtPrimariesESDProtons->DrawCopy("ESAME");
1449 gPtESDProtonsFromWeak->DrawCopy("ESAME");
1450 gPtESDProtonsFromHadronic->DrawCopy("ESAME");
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");
1457 gPtPrimariesESDAntiProtons->DrawCopy("ESAME");
1458 gPtESDAntiProtonsFromWeak->DrawCopy("ESAME");
1459 gPtESDAntiProtonsFromHadronic->DrawCopy("ESAME");
1460 c15->SaveAs("ReconstructionEfficiency-Protons-Pt.gif");
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);
1470 TCanvas *c16 = new TCanvas("c16",
1471 "(Anti)Proton PID efficiency vs y and pT",
1473 c16->SetHighLightColor(10); c16->Divide(2,1);
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);
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);
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());
1498 gYESDIdProtons->DrawCopy("ESAME");
1499 gYESDContamProtons->DrawCopy("ESAME");
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);
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);
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]");
1524 gPtESDIdProtons->DrawCopy("ESAME");
1525 gPtESDContamProtons->DrawCopy("ESAME");
1527 c16->SaveAs("PIDEfficiency-Protons.gif");
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();
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);
1560 //________________________________________________//
1561 const char * const gMCProcessName[45] = {
1562 "Primary particle emission",
1563 "Multiple scattering",
1565 "Bending in magnetic field",
1567 "Lepton pair production",
1568 "Compton scattering",
1569 "Photoelectric effect",
1572 "Positron annihilation",
1573 "Positron annihilation at rest",
1574 "Positron annihilation in flight",
1575 "Hadronic interaction",
1576 "Nuclear evaporation",
1578 "Nuclear absorbtion",
1579 "Antiproton annihilation",
1580 "Antineutron annihilation",
1583 "Hadronic incoherent elastic",
1584 "Hadronic coherent elastic",
1585 "Hadronic inelastic",
1587 "Muon nuclear interaction",
1588 "Electron nuclear interaction",
1589 "Positron nuclear interaction",
1590 "Time of flight limit",
1591 "Nuclear photofission",
1593 "No active process",
1598 "Maximum allowed step",
1599 "Cerenkov production",
1600 "Cerenkov feed back photon",
1601 "Cerenkov photon reflection",
1602 "Cerenkov photon refraction",
1603 "Synchrotron radiation",