adding selector that creates histograms needed for systematic uncertainty
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / drawPlots.C
1 /* $Id$ */
2
3 #if !defined(__CINT__) || defined(__MAKECINT__)
4
5 #include "AliPWG0Helper.h"
6 #include "dNdEtaAnalysis.h"
7 #include "AlidNdEtaCorrection.h"
8
9 #include <TCanvas.h>
10 #include <TFile.h>
11 #include <TH1.h>
12 #include <TH2F.h>
13 #include <TH3F.h>
14 #include <TLine.h>
15 #include <TSystem.h>
16
17 #endif
18
19 Int_t gMax = 5;
20
21 extern TSystem* gSystem;
22
23 void SetRanges(TAxis* axis)
24 {
25   if (strcmp(axis->GetTitle(), "#eta") == 0)
26     axis->SetRangeUser(-1.7999, 1.7999);
27   if (strcmp(axis->GetTitle(), "p_{T} [GeV/c]") == 0)
28     axis->SetRangeUser(0, 9.9999);
29   if (strcmp(axis->GetTitle(), "vtx z [cm]") == 0)
30     axis->SetRangeUser(-15, 14.9999);
31   if (strcmp(axis->GetTitle(), "Ntracks") == 0)
32     axis->SetRangeUser(0, 99.9999);
33 }
34
35 void SetRanges(TH1* hist)
36 {
37   SetRanges(hist->GetXaxis());
38   SetRanges(hist->GetYaxis());
39   SetRanges(hist->GetZaxis());
40 }
41
42
43 void Prepare3DPlot(TH3* hist)
44 {
45   hist->GetXaxis()->SetTitleOffset(1.5);
46   hist->GetYaxis()->SetTitleOffset(1.5);
47   hist->GetZaxis()->SetTitleOffset(1.5);
48
49   hist->SetStats(kFALSE);
50 }
51
52 void Prepare2DPlot(TH2* hist)
53 {
54   hist->SetStats(kFALSE);
55   hist->GetYaxis()->SetTitleOffset(1.4);
56
57   hist->SetMinimum(0);
58   hist->SetMaximum(gMax);
59
60   SetRanges(hist);
61 }
62
63 void Prepare1DPlot(TH1* hist)
64 {
65   hist->SetLineWidth(2);
66   hist->SetStats(kFALSE);
67
68   SetRanges(hist);
69 }
70
71 void InitPad()
72 {
73   gPad->Range(0, 0, 1, 1);
74   gPad->SetLeftMargin(0.15);
75   //gPad->SetRightMargin(0.05);
76   //gPad->SetTopMargin(0.13);
77   //gPad->SetBottomMargin(0.1);
78
79   //gPad->SetGridx();
80   //gPad->SetGridy();
81 }
82
83 void InitPadCOLZ()
84 {
85   gPad->Range(0, 0, 1, 1);
86   gPad->SetRightMargin(0.15);
87   gPad->SetLeftMargin(0.12);
88
89   gPad->SetGridx();
90   gPad->SetGridy();
91 }
92
93 void dNdEta(Bool_t onlyESD = kFALSE)
94 {
95   TFile* file = TFile::Open("analysis_esd.root");
96   TH1* histESD = (TH1*) file->Get("dndeta/dndeta_dNdEta_corrected_2");
97   TH1* histESDNoPt = (TH1*) file->Get("dndeta/dndeta_dNdEta_2");
98   TH1* histESDMB = (TH1*) file->Get("dndeta_mb/dndeta_mb_dNdEta_corrected_2");
99   TH1* histESDMBVtx = (TH1*) file->Get("dndeta_mbvtx/dndeta_mbvtx_dNdEta_corrected_2");
100
101   TCanvas* canvas = new TCanvas("dNdEta1", "dNdEta1", 500, 500);
102
103   Prepare1DPlot(histESD);
104   Prepare1DPlot(histESDNoPt);
105   Prepare1DPlot(histESDMB);
106   Prepare1DPlot(histESDMBVtx);
107
108   histESD->SetLineColor(kRed);
109   histESDMB->SetLineColor(kBlue);
110   histESDMBVtx->SetLineColor(103);
111
112   TH2F* dummy = new TH2F("dummy", "", 100, -1.5, 1.5, 100, 0, histESDMBVtx->GetMaximum() * 1.1);
113   dummy->SetStats(kFALSE);
114   dummy->SetXTitle("#eta");
115   dummy->SetYTitle("dN/d#eta");
116
117   histESDMBVtx->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
118   histESDMB->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
119   histESD->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
120   histESDNoPt->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
121
122   dummy->DrawCopy();
123   histESDMBVtx->Draw("SAME");
124   histESDMB->Draw("SAME");
125   histESD->Draw("SAME");
126
127   canvas->SaveAs("dNdEta1.gif");
128   canvas->SaveAs("dNdEta1.eps");
129
130   if (onlyESD)
131     return;
132
133   TFile* file2 = TFile::Open("analysis_mc.root");
134   TH1* histMC = (TH1*) file2->Get("dndeta/dndeta_dNdEta_corrected_2")->Clone("cloned");
135
136   gSystem->Load("libPWG0base");
137   dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
138   fdNdEtaAnalysis->LoadHistograms();
139   fdNdEtaAnalysis->Finish(0, 0.3);
140   TH1* histMCPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(2);
141
142   TCanvas* canvas2 = new TCanvas("dNdEta2", "dNdEta2", 500, 500);
143
144   Prepare1DPlot(histMC);
145   Prepare1DPlot(histMCPtCut);
146
147   histMC->SetLineColor(kBlue);
148   histMCPtCut->SetLineColor(104);
149   histESDNoPt->SetLineColor(102);
150
151   TH2* dummy2 = (TH2F*) dummy->Clone("dummy2");
152   dummy2->GetYaxis()->SetRangeUser(0, histESD->GetMaximum() * 1.1);
153
154   dummy2->DrawCopy();
155   histMC->Draw("SAME");
156 //  histMC->Draw();
157   histESD->Draw("SAME");
158   histESDNoPt->Draw("SAME");
159   histMCPtCut->Draw("SAME");
160
161   canvas2->SaveAs("dNdEta2.gif");
162   canvas2->SaveAs("dNdEta2.eps");
163
164   TCanvas* canvas3 = new TCanvas("dNdEta", "dNdEta", 1000, 500);
165   canvas3->Divide(2, 1);
166
167   dummy->SetTitle("a)");
168   dummy2->SetTitle("b)");
169
170   canvas3->cd(1);
171   dummy->Draw();
172   histESDMBVtx->Draw("SAME");
173   histESDMB->Draw("SAME");
174   histESD->Draw("SAME");
175
176   canvas3->cd(2);
177   dummy2->Draw();
178   histMC->Draw("SAME");
179   histESD->Draw("SAME");
180   histESDNoPt->Draw("SAME");
181   histMCPtCut->Draw("SAME");
182
183   canvas3->SaveAs("dNdEta.gif");
184   canvas3->SaveAs("dNdEta.eps");
185 }
186
187 void ptSpectrum()
188 {
189   TFile* file = TFile::Open("analysis_esd.root");
190   TH1* histESD = (TH1*) file->Get("dndeta/dndeta_pt");
191
192   TFile* file2 = TFile::Open("analysis_mc.root");
193   TH1* histMC = (TH1*) file2->Get("dndeta/dndeta_pt");
194
195   TCanvas* canvas = new TCanvas("ptSpectrum", "ptSpectrum", 500, 500);
196   InitPad();
197   gPad->SetLogy();
198
199   Prepare1DPlot(histMC);
200   Prepare1DPlot(histESD);
201
202   histESD->SetTitle("");
203   histESD->GetXaxis()->SetTitle("p_{T} [GeV/c]");
204   histESD->GetYaxis()->SetTitle("#frac{dN}{d#eta dp_{T}} [c/GeV]");
205
206   histMC->SetLineColor(kBlue);
207   histESD->SetLineColor(kRed);
208
209   histESD->GetYaxis()->SetTitleOffset(1.5);
210   histESD->GetXaxis()->SetRangeUser(0, 4.9999);
211
212   histESD->SetMaximum(TMath::Max(histESD->GetMaximum(), histMC->GetMaximum()) * 2);
213
214   histESD->Draw();
215   histMC->Draw("SAME");
216
217   canvas->SaveAs("ptSpectrum.gif");
218   canvas->SaveAs("ptSpectrum.eps");
219 }
220
221 void ptCutoff()
222 {
223   gSystem->Load("libPWG0base");
224
225   AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
226   dNdEtaCorrection->LoadHistograms("correction_map.root","dndeta_correction");
227
228   dNdEtaCorrection->GetMeasuredFraction(0.3, -1, kTRUE);
229
230   TH1* hist = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_pt"));
231
232   hist->GetXaxis()->SetRangeUser(0, 0.9999);
233   hist->SetMinimum(0);
234
235   hist->SetTitle("Generated Particles");
236   Prepare1DPlot(hist);
237
238   TCanvas* canvas = new TCanvas("ptCutoff", "ptCutoff", 500, 500);
239   hist->Draw();
240
241   TLine* line = new TLine(0.3, 0 - hist->GetMaximum() * 0, 0.3, hist->GetMaximum() * 1.1);
242   line->SetLineWidth(3);
243   line->SetLineColor(kRed);
244   line->Draw();
245
246   canvas->SaveAs("ptCutoff.gif");
247   canvas->SaveAs("ptCutoff.eps");
248 }
249
250 void TriggerBiasVtxRecon(const char* fileName = "correction_map.root")
251 {
252   TFile* file = TFile::Open(fileName);
253
254   TH2* corrTrigger = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_trigger"));
255   TH2* corrVtx = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_vtxReco"));
256
257   Prepare2DPlot(corrTrigger);
258   corrTrigger->SetTitle("a) Trigger bias correction");
259
260   Prepare2DPlot(corrVtx);
261   corrVtx->SetTitle("b) Vertex reconstruction correction");
262
263   TCanvas* canvas = new TCanvas("TriggerBiasVtxRecon", "TriggerBiasVtxRecon", 1000, 500);
264   canvas->Divide(2, 1);
265
266   canvas->cd(1);
267   InitPadCOLZ();
268   corrTrigger->DrawCopy("COLZ");
269
270   canvas->cd(2);
271   InitPadCOLZ();
272   corrVtx->DrawCopy("COLZ");
273
274   canvas->SaveAs(Form("TriggerBiasVtxRecon_%d.gif", gMax));
275   canvas->SaveAs(Form("TriggerBiasVtxRecon_%d.eps", gMax));
276
277   canvas = new TCanvas("TriggerBiasVtxReconZoom", "TriggerBiasVtxReconZoom", 1000, 500);
278   canvas->Divide(2, 1);
279
280   corrTrigger->GetYaxis()->SetRangeUser(0, 5);
281   corrVtx->GetYaxis()->SetRangeUser(0, 5);
282
283   canvas->cd(1);
284   InitPadCOLZ();
285   corrTrigger->DrawCopy("COLZ");
286
287   canvas->cd(2);
288   InitPadCOLZ();
289   corrVtx->DrawCopy("COLZ");
290
291   canvas->SaveAs(Form("TriggerBiasVtxReconZoom_%d.gif", gMax));
292   canvas->SaveAs(Form("TriggerBiasVtxReconZoom_%d.eps", gMax));
293 }
294
295 void TriggerBias(const char* fileName = "correction_map.root")
296 {
297   TFile* file = TFile::Open(fileName);
298
299   TH2* corr = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_trigger"));
300
301   Prepare2DPlot(corr);
302   corr->SetTitle("Trigger bias correction");
303
304   TCanvas* canvas = new TCanvas("TriggerBias", "TriggerBias", 500, 500);
305   InitPadCOLZ();
306   corr->DrawCopy("COLZ");
307
308   canvas->SaveAs(Form("TriggerBias_%d.gif", gMax));
309   canvas->SaveAs(Form("TriggerBias_%d.eps", gMax));
310
311   corr->GetYaxis()->SetRangeUser(0, 5);
312
313   canvas = new TCanvas("TriggerBiasZoom", "TriggerBiasZoom", 500, 500);
314   InitPadCOLZ();
315   corr->DrawCopy("COLZ");
316
317   canvas->SaveAs(Form("TriggerBiasZoom_%d.gif", gMax));
318   canvas->SaveAs(Form("TriggerBiasZoom_%d.eps", gMax));
319 }
320
321 void VtxRecon()
322 {
323   TFile* file = TFile::Open("correction_map.root");
324
325   TH2* corr = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_vtxReco"));
326
327   Prepare2DPlot(corr);
328   corr->SetTitle("Vertex reconstruction correction");
329
330   TCanvas* canvas = new TCanvas("VtxRecon", "VtxRecon", 500, 500);
331   InitPadCOLZ();
332   corr->DrawCopy("COLZ");
333
334   canvas->SaveAs(Form("VtxRecon_%d.eps", gMax));
335   canvas->SaveAs(Form("VtxRecon_%d.eps", gMax));
336
337   corr->GetYaxis()->SetRangeUser(0, 5);
338
339   canvas = new TCanvas("VtxReconZoom", "VtxReconZoom", 500, 500);
340   InitPadCOLZ();
341   corr->DrawCopy("COLZ");
342
343   canvas->SaveAs(Form("VtxReconZoom_%d.gif", gMax));
344   canvas->SaveAs(Form("VtxReconZoom_%d.eps", gMax));
345 }
346
347 void Track2ParticleAsNumber(const char* fileName = "correction_map.root")
348 {
349   gSystem->Load("libPWG0base");
350
351   TFile::Open(fileName);
352   AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
353   dNdEtaCorrection->LoadHistograms(fileName, "dndeta_correction");
354
355   TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
356   TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
357
358   TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
359   TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
360
361   gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
362   meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
363   gene->GetXaxis()->SetRangeUser(-10, 10);
364   meas->GetXaxis()->SetRangeUser(-10, 10);
365
366   Float_t eff1 = gene->Integral() / meas->Integral();
367   Float_t error1 = TMath::Sqrt(gene->Integral()) / meas->Integral();
368
369   printf("Correction without pT cut: %f +- %f\n", eff1, error1);
370
371   gene->GetZaxis()->SetRangeUser(0.3, 10);
372   meas->GetZaxis()->SetRangeUser(0.3, 10);
373
374   Float_t eff2 = gene->Integral() / meas->Integral();
375   Float_t error2 = TMath::Sqrt(gene->Integral()) / meas->Integral();
376
377   printf("Correction with pT cut: %f +- %f\n", eff2, error2);
378
379   gene->GetZaxis()->SetRangeUser(0.3, 1);
380   meas->GetZaxis()->SetRangeUser(0.3, 1);
381
382   Float_t eff3 = gene->Integral() / meas->Integral();
383   Float_t error3 = TMath::Sqrt(gene->Integral()) / meas->Integral();
384
385   printf("Correction with 0.3 < pT < 0.5: %f +- %f\n", eff3, error3);
386 }
387
388 void Track2Particle1DCreatePlots(const char* fileName = "correction_map.root", Float_t upperPtLimit = 10)
389 {
390   TFile::Open(fileName);
391   AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
392   dNdEtaCorrection->LoadHistograms(fileName, "dndeta_correction");
393
394   TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
395   TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
396
397   gene->GetZaxis()->SetRangeUser(0.3, upperPtLimit);
398   meas->GetZaxis()->SetRangeUser(0.3, upperPtLimit);
399   gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
400   meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
401   AliPWG0Helper::CreateDividedProjections(gene, meas, "x", kTRUE);
402   gene->GetYaxis()->SetRange(0, 0);
403   meas->GetYaxis()->SetRange(0, 0);
404
405   gene->GetXaxis()->SetRangeUser(-10, 10);
406   meas->GetXaxis()->SetRangeUser(-10, 10);
407   AliPWG0Helper::CreateDividedProjections(gene, meas, "y", kTRUE);
408   gene->GetZaxis()->SetRange(0, 0);
409   meas->GetZaxis()->SetRange(0, 0);
410
411   gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
412   meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
413   AliPWG0Helper::CreateDividedProjections(gene, meas, "z", kTRUE);
414 }
415
416 void Track2Particle1D(const char* fileName = "correction_map.root", Float_t upperPtLimit = 9.9)
417 {
418   gSystem->Load("libPWG0base");
419
420   Track2Particle1DCreatePlots(fileName, upperPtLimit);
421
422   TH1* corrX = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_x_div_meas_nTrackToNPart_x"));
423   TH1* corrY = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_y_div_meas_nTrackToNPart_y"));
424   TH1* corrZ = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_z_div_meas_nTrackToNPart_z"));
425
426   Prepare1DPlot(corrX);
427   Prepare1DPlot(corrY);
428   Prepare1DPlot(corrZ);
429
430   const char* title = "Track2Particle Correction";
431   corrX->SetTitle(title);
432   corrY->SetTitle(title);
433   corrZ->SetTitle(title);
434
435   corrZ->GetXaxis()->SetRangeUser(0, upperPtLimit);
436
437   TCanvas* canvas = new TCanvas("Track2Particle1D", "Track2Particle1D", 1200, 400);
438   canvas->Divide(3, 1);
439
440   canvas->cd(1);
441   InitPad();
442   corrX->Draw();
443
444   canvas->cd(2);
445   InitPad();
446   corrY->Draw();
447
448   canvas->cd(3);
449   InitPad();
450   corrZ->Draw();
451
452   canvas->SaveAs(Form("Track2Particle1D_%s_%d_%f.gif", fileName, gMax, upperPtLimit));
453   canvas->SaveAs(Form("Track2Particle1D_%s_%d_%f.eps", fileName, gMax, upperPtLimit));
454 }
455
456 void CompareTrack2Particle1D(Float_t upperPtLimit = 9.9)
457 {
458   gSystem->Load("libPWG0base");
459
460   Track2Particle1DCreatePlots("correction_maponly-positive.root", upperPtLimit);
461
462   TH1* posX = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_x_div_meas_nTrackToNPart_x")->Clone("pos_x"));
463   TH1* posY = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_y_div_meas_nTrackToNPart_y")->Clone("pos_y"));
464   TH1* posZ = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_z_div_meas_nTrackToNPart_z")->Clone("pos_z"));
465
466   Track2Particle1DCreatePlots("correction_maponly-negative.root", upperPtLimit);
467
468   TH1* negX = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_x_div_meas_nTrackToNPart_x")->Clone("neg_x"));
469   TH1* negY = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_y_div_meas_nTrackToNPart_y")->Clone("neg_y"));
470   TH1* negZ = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_z_div_meas_nTrackToNPart_z")->Clone("neg_z"));
471
472   //printf("%f %f %f %f\n", posX->GetBinContent(20), posX->GetBinError(20), negX->GetBinContent(20), negX->GetBinError(20));
473
474   posX->Divide(negX);
475   posY->Divide(negY);
476   posZ->Divide(negZ);
477
478   //printf("%f %f\n", posX->GetBinContent(20), posX->GetBinError(20));
479
480   Prepare1DPlot(posX);
481   Prepare1DPlot(posY);
482   Prepare1DPlot(posZ);
483
484   Float_t min = 0.8;
485   Float_t max = 1.2;
486
487   posX->SetMinimum(min);
488   posX->SetMaximum(max);
489   posY->SetMinimum(min);
490   posY->SetMaximum(max);
491   posZ->SetMinimum(min);
492   posZ->SetMaximum(max);
493
494   posZ->GetXaxis()->SetRangeUser(0, upperPtLimit);
495
496   posX->GetYaxis()->SetTitleOffset(1.7);
497   posX->GetYaxis()->SetTitle("C_{+} / C_{-}");
498   posY->GetYaxis()->SetTitleOffset(1.7);
499   posY->GetYaxis()->SetTitle("C_{+} / C_{-}");
500   posZ->GetYaxis()->SetTitleOffset(1.7);
501   posZ->GetYaxis()->SetTitle("C_{+} / C_{-}");
502
503   TCanvas* canvas = new TCanvas("CompareTrack2Particle1D", "CompareTrack2Particle1D", 1200, 400);
504   canvas->Divide(3, 1);
505
506   canvas->cd(1);
507   InitPad();
508   posX->Draw();
509
510   canvas->cd(2);
511   InitPad();
512   posY->Draw();
513
514   canvas->cd(3);
515   InitPad();
516   posZ->Draw();
517
518   canvas->SaveAs(Form("CompareTrack2Particle1D_%f.gif", upperPtLimit));
519   canvas->SaveAs(Form("CompareTrack2Particle1D_%f.eps", upperPtLimit));
520 }
521
522 void Track2Particle2DCreatePlots(const char* fileName = "correction_map.root")
523 {
524   TFile::Open(fileName);
525   AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
526   dNdEtaCorrection->LoadHistograms(fileName, "dndeta_correction");
527
528   TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
529   TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
530
531   gene->GetZaxis()->SetRangeUser(0.3, 10);
532   meas->GetZaxis()->SetRangeUser(0.3, 10);
533   AliPWG0Helper::CreateDividedProjections(gene, meas, "yx");
534   gene->GetZaxis()->SetRange(0, 0);
535   meas->GetZaxis()->SetRange(0, 0);
536
537   gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
538   meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
539   AliPWG0Helper::CreateDividedProjections(gene, meas, "zx");
540   gene->GetYaxis()->SetRange(0, 0);
541   meas->GetYaxis()->SetRange(0, 0);
542
543   gene->GetXaxis()->SetRangeUser(-10, 10);
544   meas->GetXaxis()->SetRangeUser(-10, 10);
545   AliPWG0Helper::CreateDividedProjections(gene, meas, "zy");
546   gene->GetXaxis()->SetRange(0, 0);
547   meas->GetXaxis()->SetRange(0, 0);
548 }
549
550 void Track2Particle2D(const char* fileName = "correction_map.root")
551 {
552   gSystem->Load("libPWG0base");
553
554   Track2Particle2DCreatePlots(fileName);
555
556   TH2* corrYX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx"));
557   TH2* corrZX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx"));
558   TH2* corrZY = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy"));
559
560   /* this reads them from the file
561   TH2* corrYX = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx"));
562   TH2* corrZX = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx"));
563   TH2* corrZY = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy"));*/
564
565   Prepare2DPlot(corrYX);
566   Prepare2DPlot(corrZX);
567   Prepare2DPlot(corrZY);
568
569   const char* title = "";
570   corrYX->SetTitle(title);
571   corrZX->SetTitle(title);
572   corrZY->SetTitle(title);
573
574   TCanvas* canvas = new TCanvas("Track2Particle2D", "Track2Particle2D", 1200, 400);
575   canvas->Divide(3, 1);
576
577   canvas->cd(1);
578   InitPadCOLZ();
579   corrYX->Draw("COLZ");
580
581   canvas->cd(2);
582   InitPadCOLZ();
583   corrZX->Draw("COLZ");
584
585   canvas->cd(3);
586   InitPadCOLZ();
587   corrZY->Draw("COLZ");
588
589   canvas->SaveAs(Form("Track2Particle2D_%d.gif", gMax));
590   canvas->SaveAs(Form("Track2Particle2D_%d.eps", gMax));
591 }
592
593 void CompareTrack2Particle2D()
594 {
595   gSystem->Load("libPWG0base");
596
597   Track2Particle2DCreatePlots("correction_maponly-positive.root");
598
599   TH2* posYX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx")->Clone("pos_yx"));
600   TH2* posZX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx")->Clone("pos_zx"));
601   TH2* posZY = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy")->Clone("pos_zy"));
602
603   Track2Particle2DCreatePlots("correction_maponly-negative.root");
604
605   TH2* negYX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx")->Clone("neg_yx"));
606   TH2* negZX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx")->Clone("neg_zx"));
607   TH2* negZY = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy")->Clone("neg_zy"));
608
609   posYX->Divide(negYX);
610   posZX->Divide(negZX);
611   posZY->Divide(negZY);
612
613   Prepare2DPlot(posYX);
614   Prepare2DPlot(posZX);
615   Prepare2DPlot(posZY);
616
617   Float_t min = 0.8;
618   Float_t max = 1.2;
619
620   posYX->SetMinimum(min);
621   posYX->SetMaximum(max);
622   posZX->SetMinimum(min);
623   posZX->SetMaximum(max);
624   posZY->SetMinimum(min);
625   posZY->SetMaximum(max);
626
627   TCanvas* canvas = new TCanvas("CompareTrack2Particle2D", "CompareTrack2Particle2D", 1200, 400);
628   canvas->Divide(3, 1);
629
630   canvas->cd(1);
631   InitPadCOLZ();
632   posYX->Draw("COLZ");
633
634   canvas->cd(2);
635   InitPadCOLZ();
636   posZX->Draw("COLZ");
637
638   canvas->cd(3);
639   InitPadCOLZ();
640   posZY->Draw("COLZ");
641
642   canvas->SaveAs("CompareTrack2Particle2D.gif");
643   canvas->SaveAs("CompareTrack2Particle2D.eps");
644 }
645
646 void Track2Particle3D()
647 {
648   // get left margin proper
649
650   TFile* file = TFile::Open("correction_map.root");
651
652   TH3* corr = dynamic_cast<TH3*> (file->Get("dndeta_correction/corr_nTrackToNPart"));
653
654   corr->SetTitle("Correction Factor");
655   SetRanges(corr->GetZaxis());
656
657   Prepare3DPlot(corr);
658
659   TCanvas* canvas = new TCanvas("Track2Particle3D", "Track2Particle3D", 500, 500);
660   canvas->SetTheta(29.428);
661   canvas->SetPhi(16.5726);
662
663   corr->Draw();
664
665   canvas->SaveAs("Track2Particle3D.gif");
666   canvas->SaveAs("Track2Particle3D.eps");
667 }
668
669 void Track2Particle3DAll()
670 {
671   TFile* file = TFile::Open("correction_map.root");
672
673   TH3* gene = dynamic_cast<TH3*> (file->Get("dndeta_correction/gene_nTrackToNPart"));
674   TH3* meas = dynamic_cast<TH3*> (file->Get("dndeta_correction/meas_nTrackToNPart"));
675   TH3* corr = dynamic_cast<TH3*> (file->Get("dndeta_correction/corr_nTrackToNPart"));
676
677   gene->SetTitle("Generated Particles");
678   meas->SetTitle("Measured Tracks");
679   corr->SetTitle("Correction Factor");
680
681   Prepare3DPlot(gene);
682   Prepare3DPlot(meas);
683   Prepare3DPlot(corr);
684
685   TCanvas* canvas = new TCanvas("Track2Particle3DAll", "Track2Particle3DAll", 1200, 400);
686   canvas->Divide(3, 1);
687
688   canvas->cd(1);
689   InitPad();
690   gene->Draw();
691
692   canvas->cd(2);
693   meas->Draw();
694
695   canvas->cd(3);
696   corr->Draw();
697
698   canvas->SaveAs("Track2Particle3DAll.gif");
699   canvas->SaveAs("Track2Particle3DAll.eps");
700 }
701
702 void drawPlots(Int_t max)
703 {
704   gMax = max;
705
706   ptCutoff();
707   TriggerBias();
708   VtxRecon();
709   Track2Particle2D();
710   Track2Particle3D();
711   ptSpectrum();
712   dNdEta();
713 }
714
715 void drawPlots()
716 {
717   drawPlots(5);
718   drawPlots(2);
719 }