3 #if !defined(__CINT__) || defined(__MAKECINT__)
5 #include "AliPWG0Helper.h"
6 #include "dNdEtaAnalysis.h"
7 #include "AlidNdEtaCorrection.h"
21 extern TSystem* gSystem;
23 void SetRanges(TAxis* axis)
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);
35 void SetRanges(TH1* hist)
37 SetRanges(hist->GetXaxis());
38 SetRanges(hist->GetYaxis());
39 SetRanges(hist->GetZaxis());
43 void Prepare3DPlot(TH3* hist)
45 hist->GetXaxis()->SetTitleOffset(1.5);
46 hist->GetYaxis()->SetTitleOffset(1.5);
47 hist->GetZaxis()->SetTitleOffset(1.5);
49 hist->SetStats(kFALSE);
52 void Prepare2DPlot(TH2* hist)
54 hist->SetStats(kFALSE);
55 hist->GetYaxis()->SetTitleOffset(1.4);
58 hist->SetMaximum(gMax);
63 void Prepare1DPlot(TH1* hist)
65 hist->SetLineWidth(2);
66 hist->SetStats(kFALSE);
68 hist->GetXaxis()->SetLabelOffset(0.02);
69 hist->GetXaxis()->SetTitleOffset(1.3);
70 hist->GetYaxis()->SetTitleOffset(1.3);
77 gPad->Range(0, 0, 1, 1);
78 gPad->SetLeftMargin(0.15);
79 //gPad->SetRightMargin(0.05);
80 //gPad->SetTopMargin(0.13);
81 gPad->SetBottomMargin(0.12);
89 gPad->Range(0, 0, 1, 1);
90 gPad->SetRightMargin(0.15);
91 gPad->SetLeftMargin(0.12);
97 void dNdEta(Bool_t onlyESD = kFALSE)
99 TFile* file = TFile::Open("analysis_esd.root");
100 TH1* histESD = (TH1*) file->Get("dndeta/dndeta_dNdEta_corrected_2");
101 TH1* histESDNoPt = (TH1*) file->Get("dndeta/dndeta_dNdEta_2");
102 TH1* histESDMB = (TH1*) file->Get("dndeta_mb/dndeta_mb_dNdEta_corrected_2");
103 TH1* histESDMBVtx = (TH1*) file->Get("dndeta_mbvtx/dndeta_mbvtx_dNdEta_corrected_2");
105 TCanvas* canvas = new TCanvas("dNdEta1", "dNdEta1", 500, 500);
107 Prepare1DPlot(histESD);
108 Prepare1DPlot(histESDNoPt);
109 Prepare1DPlot(histESDMB);
110 Prepare1DPlot(histESDMBVtx);
112 histESD->SetLineColor(0);
113 histESDMB->SetLineColor(0);
114 histESDMBVtx->SetLineColor(0);
116 histESD->SetMarkerColor(kRed);
117 histESDMB->SetMarkerColor(kBlue);
118 histESDMBVtx->SetMarkerColor(103);
120 histESD->SetMarkerStyle(20);
121 histESDMB->SetMarkerStyle(21);
122 histESDMBVtx->SetMarkerStyle(22);
124 TH2F* dummy = new TH2F("dummy", "", 100, -1.5, 1.5, 100, 0, histESDMBVtx->GetMaximum() * 1.1);
125 Prepare1DPlot(dummy);
126 dummy->SetStats(kFALSE);
127 dummy->SetXTitle("#eta");
128 dummy->SetYTitle("dN_{ch}/d#eta");
129 dummy->GetYaxis()->SetTitleOffset(1);
131 Float_t etaLimit = 1.1999;
133 histESDMBVtx->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
134 histESDMB->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
135 histESD->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
136 histESDNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
139 histESDMBVtx->Draw("SAME");
140 histESDMB->Draw("SAME");
141 histESD->Draw("SAME");
143 canvas->SaveAs("dNdEta1.gif");
144 canvas->SaveAs("dNdEta1.eps");
149 TFile* file2 = TFile::Open("analysis_mc.root");
150 TH1* histMC = (TH1*) file2->Get("dndeta/dndeta_dNdEta_corrected_2")->Clone("cloned");
152 gSystem->Load("libPWG0base");
153 dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
154 fdNdEtaAnalysis->LoadHistograms();
155 fdNdEtaAnalysis->Finish(0, 0.3);
156 TH1* histMCPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(2);
158 TCanvas* canvas2 = new TCanvas("dNdEta2", "dNdEta2", 500, 500);
160 Prepare1DPlot(histMC);
161 Prepare1DPlot(histMCPtCut);
163 histMC->SetLineColor(kBlue);
164 histMCPtCut->SetLineColor(104);
165 histESDNoPt->SetLineColor(102);
167 TH2* dummy2 = (TH2F*) dummy->Clone("dummy2");
168 Prepare1DPlot(dummy2);
169 dummy2->GetYaxis()->SetRangeUser(0, histESD->GetMaximum() * 1.1);
172 histMC->Draw("SAME");
174 histESD->Draw("SAME");
175 histESDNoPt->Draw("SAME");
176 histMCPtCut->Draw("SAME");
178 canvas2->SaveAs("dNdEta2.gif");
179 canvas2->SaveAs("dNdEta2.eps");
181 TCanvas* canvas3 = new TCanvas("dNdEta", "dNdEta", 700, 500);
183 gPad->SetBottomMargin(0.12);
185 TLegend* legend = new TLegend(0.35, 0.2, 0.6, 0.4);
186 legend->SetFillColor(0);
187 legend->AddEntry(histESDMBVtx, "triggered, vertex");
188 legend->AddEntry(histESDMB, "triggered");
189 legend->AddEntry(histESD, "all events");
190 legend->AddEntry(histMC, "MC prediction");
193 histESDMBVtx->Draw("SAME");
194 histESDMB->Draw("SAME");
195 histESD->Draw("SAME");
196 histMC->Draw("SAME");
200 canvas3->SaveAs("dNdEta.gif");
201 canvas3->SaveAs("dNdEta.eps");
203 TH1* ratio = (TH1*) histMC->Clone("ratio");
204 TH1* ratioNoPt = (TH1*) histMCPtCut->Clone("ratioNoPt");
206 ratio->Divide(histESD);
207 ratioNoPt->Divide(histESDNoPt);
209 TCanvas* canvas4 = new TCanvas("ratio", "ratio", 700, 500);
211 ratio->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
213 ratio->SetLineColor(1);
214 ratioNoPt->SetLineColor(2);
217 ratioNoPt->Draw("SAME");
219 TLegend* legend = new TLegend(0.6, 0.7, 0.95, 0.9);
220 legend->SetFillColor(0);
221 legend->AddEntry(ratio, "mc/esd");
222 legend->AddEntry(ratioNoPt, "mc/esd, not pt cut off corrected");
228 TFile* file = TFile::Open("analysis_esd.root");
229 TH1* histESD = (TH1*) file->Get("dndeta/dndeta_pt");
231 TFile* file2 = TFile::Open("analysis_mc.root");
232 TH1* histMC = (TH1*) file2->Get("dndeta/dndeta_pt");
234 TCanvas* canvas = new TCanvas("ptSpectrum", "ptSpectrum", 500, 500);
238 Prepare1DPlot(histMC);
239 Prepare1DPlot(histESD);
241 histESD->SetTitle("");
242 histESD->GetXaxis()->SetTitle("p_{T} [GeV/c]");
243 histESD->GetYaxis()->SetTitle("#frac{dN}{d#eta dp_{T}} [c/GeV]");
245 histMC->SetLineColor(kBlue);
246 histESD->SetLineColor(kRed);
248 histESD->GetYaxis()->SetTitleOffset(1.5);
249 histESD->GetXaxis()->SetRangeUser(0, 4.9999);
251 histESD->SetMaximum(TMath::Max(histESD->GetMaximum(), histMC->GetMaximum()) * 2);
254 histMC->Draw("SAME");
256 canvas->SaveAs("ptSpectrum.gif");
257 canvas->SaveAs("ptSpectrum.eps");
262 gSystem->Load("libPWG0base");
264 AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
265 dNdEtaCorrection->LoadHistograms("correction_map.root","dndeta_correction");
267 dNdEtaCorrection->GetMeasuredFraction(0.3, -100, kTRUE);
269 TH1* hist = dynamic_cast<TH1*> (gROOT->FindObject("gene_dndeta_correction_nTrackToNPart_pt")->Clone("ptcutoff"));
271 hist->GetXaxis()->SetRangeUser(0, 0.9999);
274 hist->SetTitle("Generated Particles");
277 TCanvas* canvas = new TCanvas("ptCutoff", "ptCutoff", 700, 500);
280 TLine* line = new TLine(0.3, 0 - hist->GetMaximum() * 0, 0.3, hist->GetMaximum() * 1.1);
281 line->SetLineWidth(3);
282 line->SetLineColor(kRed);
285 canvas->SaveAs("ptCutoff.gif");
286 canvas->SaveAs("ptCutoff.eps");
288 TH1F* factor = new TH1F("factor", ";#eta;correction factor", 10, -1, 1.000001);
289 for (Float_t eta = -0.9; eta<1; eta += 0.2)
290 factor->Fill(eta, 1.0 / dNdEtaCorrection->GetMeasuredFraction(0.3, eta, kFALSE));
292 TCanvas* canvas = new TCanvas("ptCutoff_factor", "ptCutoff_factor", 700, 500);
295 Prepare1DPlot(factor);
296 factor->GetYaxis()->SetRangeUser(1, 2);
297 factor->GetYaxis()->SetTitleOffset(1);
300 canvas->SaveAs("ptCutoff_factor.eps");
303 void TriggerBiasVtxRecon(const char* fileName = "correction_map.root", const char* folder = "dndeta_correction")
305 TFile* file = TFile::Open(fileName);
307 TH2* corrTrigger = dynamic_cast<TH2*> (file->Get(Form("%s/corr_%s_trigger", folder, folder)));
308 TH2* corrVtx = dynamic_cast<TH2*> (file->Get(Form("%s/corr_%s_vtxReco", folder, folder)));
310 Prepare2DPlot(corrTrigger);
311 corrTrigger->SetTitle("a) Trigger bias correction");
313 Prepare2DPlot(corrVtx);
314 corrVtx->SetTitle("b) Vertex reconstruction correction");
316 corrTrigger->GetYaxis()->SetTitle("Multiplicity");
317 corrVtx->GetYaxis()->SetTitle("Multiplicity");
319 TCanvas* canvas = new TCanvas("TriggerBiasVtxRecon", "TriggerBiasVtxRecon", 1000, 500);
320 canvas->Divide(2, 1);
324 corrTrigger->DrawCopy("COLZ");
328 corrVtx->DrawCopy("COLZ");
330 canvas->SaveAs(Form("TriggerBiasVtxRecon_%d.gif", gMax));
331 canvas->SaveAs(Form("TriggerBiasVtxRecon_%d.eps", gMax));
333 canvas = new TCanvas("TriggerBiasVtxReconZoom", "TriggerBiasVtxReconZoom", 1000, 500);
334 canvas->Divide(2, 1);
336 corrTrigger->GetYaxis()->SetRangeUser(0, 5);
337 corrVtx->GetYaxis()->SetRangeUser(0, 5);
341 corrTrigger->DrawCopy("COLZ");
345 corrVtx->DrawCopy("COLZ");
347 canvas->SaveAs(Form("TriggerBiasVtxReconZoom_%d.gif", gMax));
348 canvas->SaveAs(Form("TriggerBiasVtxReconZoom_%d.eps", gMax));
351 void TriggerBias(const char* fileName = "correction_map.root")
353 TFile* file = TFile::Open(fileName);
355 TH2* corr = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_dndeta_correction_trigger"));
358 corr->SetTitle("Trigger bias correction");
360 TCanvas* canvas = new TCanvas("TriggerBias", "TriggerBias", 500, 500);
362 corr->DrawCopy("COLZ");
364 canvas->SaveAs(Form("TriggerBias_%d.gif", gMax));
365 canvas->SaveAs(Form("TriggerBias_%d.eps", gMax));
367 corr->GetYaxis()->SetRangeUser(0, 5);
369 canvas = new TCanvas("TriggerBiasZoom", "TriggerBiasZoom", 500, 500);
371 corr->DrawCopy("COLZ");
373 canvas->SaveAs(Form("TriggerBiasZoom_%d.gif", gMax));
374 canvas->SaveAs(Form("TriggerBiasZoom_%d.eps", gMax));
377 void TriggerBias1D(const char* fileName = "correction_map.root", const char* folderName = "dndeta_correction")
379 gSystem->Load("libPWG0base");
381 TFile* file = TFile::Open(fileName);
382 AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(folderName, folderName);
383 dNdEtaCorrection->LoadHistograms(fileName, folderName);
385 TH1* hist = dNdEtaCorrection->GetTriggerCorrection()->Get1DCorrection("x");
387 TCanvas* canvas = new TCanvas("TriggerBias1D", "TriggerBias1D", 500, 500);
392 hist->GetYaxis()->SetTitle("correction factor");
393 hist->GetYaxis()->SetRangeUser(1, 1.5);
394 hist->GetYaxis()->SetTitleOffset(1.6);
397 canvas->SaveAs("TriggerBias1D.eps");
402 TFile* file = TFile::Open("correction_map.root");
404 TH2* corr = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_dndeta_correction_vtxReco"));
407 corr->SetTitle("Vertex reconstruction correction");
409 TCanvas* canvas = new TCanvas("VtxRecon", "VtxRecon", 500, 500);
411 corr->DrawCopy("COLZ");
413 canvas->SaveAs(Form("VtxRecon_%d.eps", gMax));
414 canvas->SaveAs(Form("VtxRecon_%d.eps", gMax));
416 corr->GetYaxis()->SetRangeUser(0, 5);
418 canvas = new TCanvas("VtxReconZoom", "VtxReconZoom", 500, 500);
420 corr->DrawCopy("COLZ");
422 canvas->SaveAs(Form("VtxReconZoom_%d.gif", gMax));
423 canvas->SaveAs(Form("VtxReconZoom_%d.eps", gMax));
426 void VtxRecon1D(const char* fileName = "correction_map.root", const char* folderName = "dndeta_correction")
428 gSystem->Load("libPWG0base");
430 TFile* file = TFile::Open(fileName);
431 AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(folderName, folderName);
432 dNdEtaCorrection->LoadHistograms(fileName, folderName);
434 TH1* hist = dNdEtaCorrection->GetVertexRecoCorrection()->Get1DCorrection("x");
436 TCanvas* canvas = new TCanvas("VtxRecon1D", "VtxRecon1D", 500, 500);
441 hist->GetYaxis()->SetTitle("correction factor");
442 hist->GetYaxis()->SetRangeUser(1, 1.8);
443 hist->GetYaxis()->SetTitleOffset(1.6);
446 canvas->SaveAs("VtxRecon1D.eps");
449 void Track2ParticleAsNumber(const char* fileName = "correction_map.root")
451 gSystem->Load("libPWG0base");
453 TFile::Open(fileName);
454 AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
455 dNdEtaCorrection->LoadHistograms(fileName, "dndeta_correction");
457 TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
458 TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
460 TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
461 TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
463 gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
464 meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
465 gene->GetXaxis()->SetRangeUser(-10, 10);
466 meas->GetXaxis()->SetRangeUser(-10, 10);
468 Float_t eff1 = gene->Integral() / meas->Integral();
469 Float_t error1 = TMath::Sqrt(gene->Integral()) / meas->Integral();
471 printf("Correction without pT cut: %f +- %f\n", eff1, error1);
473 gene->GetZaxis()->SetRangeUser(0.3, 10);
474 meas->GetZaxis()->SetRangeUser(0.3, 10);
476 Float_t eff2 = gene->Integral() / meas->Integral();
477 Float_t error2 = TMath::Sqrt(gene->Integral()) / meas->Integral();
479 printf("Correction with pT cut: %f +- %f\n", eff2, error2);
481 gene->GetZaxis()->SetRangeUser(0.3, 1);
482 meas->GetZaxis()->SetRangeUser(0.3, 1);
484 Float_t eff3 = gene->Integral() / meas->Integral();
485 Float_t error3 = TMath::Sqrt(gene->Integral()) / meas->Integral();
487 printf("Correction with 0.3 < pT < 0.5: %f +- %f\n", eff3, error3);
490 void Track2Particle1DCreatePlots(const char* fileName = "correction_map.root", const char* folderName = "dndeta_correction", Float_t upperPtLimit = 10)
492 TFile::Open(fileName);
493 AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(folderName, folderName);
494 dNdEtaCorrection->LoadHistograms(fileName, folderName);
496 TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
497 TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
499 gene->GetZaxis()->SetRangeUser(0.3, upperPtLimit);
500 meas->GetZaxis()->SetRangeUser(0.3, upperPtLimit);
501 gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
502 meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
503 AliPWG0Helper::CreateDividedProjections(gene, meas, "x", kTRUE);
504 gene->GetYaxis()->SetRange(0, 0);
505 meas->GetYaxis()->SetRange(0, 0);
507 gene->GetXaxis()->SetRangeUser(-10, 10);
508 meas->GetXaxis()->SetRangeUser(-10, 10);
509 AliPWG0Helper::CreateDividedProjections(gene, meas, "y", kTRUE);
510 gene->GetZaxis()->SetRange(0, 0);
511 meas->GetZaxis()->SetRange(0, 0);
513 gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
514 meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
515 AliPWG0Helper::CreateDividedProjections(gene, meas, "z", kTRUE);
518 void Track2Particle1D(const char* fileName = "correction_map.root", const char* folder = "dndeta_correction", Float_t upperPtLimit = 9.9)
520 gSystem->Load("libPWG0base");
522 Track2Particle1DCreatePlots(fileName, folder, upperPtLimit);
524 TH1* corrX = dynamic_cast<TH1*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_x_div_meas_%s_nTrackToNPart_x", folder, folder)));
525 TH1* corrY = dynamic_cast<TH1*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_y_div_meas_%s_nTrackToNPart_y", folder, folder)));
526 TH1* corrZ = dynamic_cast<TH1*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_z_div_meas_%s_nTrackToNPart_z", folder, folder)));
528 Prepare1DPlot(corrX);
529 Prepare1DPlot(corrY);
530 Prepare1DPlot(corrZ);
532 //corrX->SetTitle("a) z projection");
533 corrY->SetTitle("a) #eta projection");
534 corrZ->SetTitle("b) p_{T} projection");
536 corrY->GetYaxis()->SetTitle("correction factor");
537 corrZ->GetYaxis()->SetTitle("correction factor");
539 corrZ->GetXaxis()->SetRangeUser(0, upperPtLimit);
542 canvasName.Form("Track2Particle1D_%s", folder);
543 TCanvas* canvas = new TCanvas(canvasName, canvasName, 1200, 400);
544 canvas->Divide(3, 1);
558 canvas->SaveAs(Form("Track2Particle1D_%s_%f.gif", fileName, upperPtLimit));
559 canvas->SaveAs(Form("Track2Particle1D_%s_%f.eps", fileName, upperPtLimit));
561 //TPaveText* pave = new TPaveText(-0.4, 1.35, 0.4, 1.45);
563 canvasName.Form("Track2Particle1D_%s_etapt", folder);
564 TCanvas* canvas = new TCanvas(canvasName, canvasName, 1000, 500);
565 canvas->Divide(2, 1);
569 corrY->GetXaxis()->SetRangeUser(-0.99, 0.99);
570 corrY->GetYaxis()->SetRangeUser(1, 1.5);
571 corrY->GetYaxis()->SetTitleOffset(1.5);
573 TPaveText* pave = new TPaveText(0.3, 0.7, 0.7, 0.8, "NDC");
574 pave->AddText("|z| < 10 cm");
575 pave->AddText("0.3 GeV/c < p_{T} < 10 GeV/c");
581 corrZ->GetYaxis()->SetRangeUser(1, 2.5);
582 corrZ->GetXaxis()->SetRangeUser(0.101, upperPtLimit);
583 corrZ->GetYaxis()->SetTitleOffset(1.5);
585 pave = new TPaveText(0.5, 0.7, 0.8, 0.8, "NDC");
586 pave->AddText("|z| < 10 cm");
587 pave->AddText("|#eta| < 0.8");
590 canvas->SaveAs(Form("Track2Particle1D_etapt_%s_%f.eps", fileName, upperPtLimit));
591 canvas->SaveAs(Form("Track2Particle1D_etapt_%s_%f.gif", fileName, upperPtLimit));
594 void CompareTrack2Particle1D(Float_t upperPtLimit = 9.9)
596 gSystem->Load("libPWG0base");
598 Track2Particle1DCreatePlots("correction_maponly-positive.root", "dndeta_correction", upperPtLimit);
600 TH1* posX = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_x_div_meas_nTrackToNPart_x")->Clone("pos_x"));
601 TH1* posY = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_y_div_meas_nTrackToNPart_y")->Clone("pos_y"));
602 TH1* posZ = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_z_div_meas_nTrackToNPart_z")->Clone("pos_z"));
604 Track2Particle1DCreatePlots("correction_maponly-negative.root", "dndeta_correction", upperPtLimit);
606 TH1* negX = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_x_div_meas_nTrackToNPart_x")->Clone("neg_x"));
607 TH1* negY = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_y_div_meas_nTrackToNPart_y")->Clone("neg_y"));
608 TH1* negZ = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_z_div_meas_nTrackToNPart_z")->Clone("neg_z"));
610 //printf("%f %f %f %f\n", posX->GetBinContent(20), posX->GetBinError(20), negX->GetBinContent(20), negX->GetBinError(20));
616 //printf("%f %f\n", posX->GetBinContent(20), posX->GetBinError(20));
625 posX->SetMinimum(min);
626 posX->SetMaximum(max);
627 posY->SetMinimum(min);
628 posY->SetMaximum(max);
629 posZ->SetMinimum(min);
630 posZ->SetMaximum(max);
632 posZ->GetXaxis()->SetRangeUser(0, upperPtLimit);
634 posX->GetYaxis()->SetTitleOffset(1.7);
635 posX->GetYaxis()->SetTitle("C_{+} / C_{-}");
636 posY->GetYaxis()->SetTitleOffset(1.7);
637 posY->GetYaxis()->SetTitle("C_{+} / C_{-}");
638 posZ->GetYaxis()->SetTitleOffset(1.7);
639 posZ->GetYaxis()->SetTitle("C_{+} / C_{-}");
641 TCanvas* canvas = new TCanvas("CompareTrack2Particle1D", "CompareTrack2Particle1D", 1200, 400);
642 canvas->Divide(3, 1);
656 canvas->SaveAs(Form("CompareTrack2Particle1D_%f.gif", upperPtLimit));
657 canvas->SaveAs(Form("CompareTrack2Particle1D_%f.eps", upperPtLimit));
660 void Track2Particle2DCreatePlots(const char* fileName = "correction_map.root")
662 TFile::Open(fileName);
663 AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
664 dNdEtaCorrection->LoadHistograms(fileName, "dndeta_correction");
666 TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
667 TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
669 gene->GetZaxis()->SetRangeUser(0.3, 10);
670 meas->GetZaxis()->SetRangeUser(0.3, 10);
671 AliPWG0Helper::CreateDividedProjections(gene, meas, "yx");
672 gene->GetZaxis()->SetRange(0, 0);
673 meas->GetZaxis()->SetRange(0, 0);
675 gene->GetYaxis()->SetRangeUser(-0.8, 0.8);
676 meas->GetYaxis()->SetRangeUser(-0.8, 0.8);
677 AliPWG0Helper::CreateDividedProjections(gene, meas, "zx");
678 gene->GetYaxis()->SetRange(0, 0);
679 meas->GetYaxis()->SetRange(0, 0);
681 gene->GetXaxis()->SetRangeUser(-10, 10);
682 meas->GetXaxis()->SetRangeUser(-10, 10);
683 AliPWG0Helper::CreateDividedProjections(gene, meas, "zy");
684 gene->GetXaxis()->SetRange(0, 0);
685 meas->GetXaxis()->SetRange(0, 0);
688 void Track2Particle2D(const char* fileName = "correction_map.root", const char* folder = "dndeta_correction")
690 gSystem->Load("libPWG0base");
692 Track2Particle2DCreatePlots(fileName);
694 TH2* corrYX = dynamic_cast<TH2*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_yx_div_meas_%s_nTrackToNPart_yx", folder, folder)));
695 TH2* corrZX = dynamic_cast<TH2*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_zx_div_meas_%s_nTrackToNPart_zx", folder, folder)));
696 TH2* corrZY = dynamic_cast<TH2*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_zy_div_meas_%s_nTrackToNPart_zy", folder, folder)));
698 /* this reads them from the file
699 TH2* corrYX = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx"));
700 TH2* corrZX = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx"));
701 TH2* corrZY = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy"));*/
703 Prepare2DPlot(corrYX);
704 Prepare2DPlot(corrZX);
705 Prepare2DPlot(corrZY);
707 const char* title = "";
708 corrYX->SetTitle(title);
709 corrZX->SetTitle(title);
710 corrZY->SetTitle(title);
712 TCanvas* canvas = new TCanvas("Track2Particle2D", "Track2Particle2D", 1200, 400);
713 canvas->Divide(3, 1);
717 corrYX->Draw("COLZ");
721 corrZX->Draw("COLZ");
725 corrZY->Draw("COLZ");
727 canvas->SaveAs(Form("Track2Particle2D_%d.gif", gMax));
728 canvas->SaveAs(Form("Track2Particle2D_%d.eps", gMax));
731 void CompareTrack2Particle2D()
733 gSystem->Load("libPWG0base");
735 Track2Particle2DCreatePlots("correction_maponly-positive.root");
737 TH2* posYX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx")->Clone("pos_yx"));
738 TH2* posZX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx")->Clone("pos_zx"));
739 TH2* posZY = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy")->Clone("pos_zy"));
741 Track2Particle2DCreatePlots("correction_maponly-negative.root");
743 TH2* negYX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx")->Clone("neg_yx"));
744 TH2* negZX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx")->Clone("neg_zx"));
745 TH2* negZY = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy")->Clone("neg_zy"));
747 posYX->Divide(negYX);
748 posZX->Divide(negZX);
749 posZY->Divide(negZY);
751 Prepare2DPlot(posYX);
752 Prepare2DPlot(posZX);
753 Prepare2DPlot(posZY);
758 posYX->SetMinimum(min);
759 posYX->SetMaximum(max);
760 posZX->SetMinimum(min);
761 posZX->SetMaximum(max);
762 posZY->SetMinimum(min);
763 posZY->SetMaximum(max);
765 TCanvas* canvas = new TCanvas("CompareTrack2Particle2D", "CompareTrack2Particle2D", 1200, 400);
766 canvas->Divide(3, 1);
780 canvas->SaveAs("CompareTrack2Particle2D.gif");
781 canvas->SaveAs("CompareTrack2Particle2D.eps");
784 void Track2Particle3D()
786 // get left margin proper
788 TFile* file = TFile::Open("correction_map.root");
790 TH3* corr = dynamic_cast<TH3*> (file->Get("dndeta_correction/corr_nTrackToNPart"));
792 corr->SetTitle("Correction Factor");
793 SetRanges(corr->GetZaxis());
797 TCanvas* canvas = new TCanvas("Track2Particle3D", "Track2Particle3D", 500, 500);
798 canvas->SetTheta(29.428);
799 canvas->SetPhi(16.5726);
803 canvas->SaveAs("Track2Particle3D.gif");
804 canvas->SaveAs("Track2Particle3D.eps");
807 void Track2Particle3DAll()
809 TFile* file = TFile::Open("correction_map.root");
811 TH3* gene = dynamic_cast<TH3*> (file->Get("dndeta_correction/gene_nTrackToNPart"));
812 TH3* meas = dynamic_cast<TH3*> (file->Get("dndeta_correction/meas_nTrackToNPart"));
813 TH3* corr = dynamic_cast<TH3*> (file->Get("dndeta_correction/corr_nTrackToNPart"));
815 gene->SetTitle("Generated Particles");
816 meas->SetTitle("Measured Tracks");
817 corr->SetTitle("Correction Factor");
823 TCanvas* canvas = new TCanvas("Track2Particle3DAll", "Track2Particle3DAll", 1200, 400);
824 canvas->Divide(3, 1);
836 canvas->SaveAs("Track2Particle3DAll.gif");
837 canvas->SaveAs("Track2Particle3DAll.eps");
840 void MultiplicityMC(Int_t xRangeMax = 50)
842 TFile* file = TFile::Open("multiplicityMC.root");
846 printf("multiplicityMC.root could not be opened.\n");
850 TH1F* fMultiplicityESD = dynamic_cast<TH1F*> (file->Get("fMultiplicityESD"));
851 TH1F* fMultiplicityMC = dynamic_cast<TH1F*> (file->Get("fMultiplicityMC"));
852 TH2F* fCorrelation = dynamic_cast<TH2F*> (file->Get("fCorrelation"));
854 TH1F* correction = new TH1F("MultiplicityMC_correction", "MultiplicityMC_correction;Ntracks;Npart", 76, -0.5, 75.5);
855 TH1F* correctionWidth = new TH1F("MultiplicityMC_correctionwidth", "MultiplicityMC_correctionwidth;Ntracks;Npart", 76, -0.5, 75.5);
856 //fMultiplicityMC->GetNbinsX(), fMultiplicityMC->GetXaxis()->GetXmin(), fMultiplicityMC->GetXaxis()->GetXmax());
857 for (Int_t i=1; i<=correction->GetNbinsX(); ++i)
859 TH1D* proj = fCorrelation->ProjectionX("_px", i, i+1);
860 proj->Fit("gaus", "0");
861 correction->SetBinContent(i, proj->GetFunction("gaus")->GetParameter(1));
862 correctionWidth->SetBinContent(i, proj->GetFunction("gaus")->GetParameter(2));
866 // draw for debugging
869 proj->GetFunction("gaus")->DrawCopy("SAME");
872 TH1F* fMultiplicityESDCorrected = new TH1F("fMultiplicityESDCorrected", "fMultiplicityESDCorrected", 2010, -0.5, 200.5);
874 for (Int_t i=1; i<=correction->GetNbinsX(); ++i)
876 Float_t mean = correction->GetBinContent(i);
877 Float_t width = correctionWidth->GetBinContent(i);
879 Int_t fillBegin = fMultiplicityESDCorrected->FindBin(mean - width * 3);
880 Int_t fillEnd = fMultiplicityESDCorrected->FindBin(mean + width * 3);
881 printf("bin %d mean %f width %f, filling from %d to %d\n", i, mean, width, fillBegin, fillEnd);
883 for (Int_t j=fillBegin; j <= fillEnd; ++j)
885 fMultiplicityESDCorrected->AddBinContent(j, TMath::Gaus(fMultiplicityESDCorrected->GetXaxis()->GetBinCenter(j), mean, width, kTRUE) * fMultiplicityESD->GetBinContent(i));
889 TH1F* fMultiplicityESDCorrectedRebinned = dynamic_cast<TH1F*> (fMultiplicityESDCorrected->Clone("fMultiplicityESDCorrectedRebinned"));
890 fMultiplicityESDCorrectedRebinned->Rebin(10);
891 fMultiplicityESDCorrectedRebinned->Scale(0.1);
893 TH1F* ratio = dynamic_cast<TH1F*> (fMultiplicityESD->Clone("multiplicity_ratio"));
894 ratio->SetTitle("ratio;Ntracks;Nreco/Ngene");
895 ratio->Divide(fMultiplicityMC);
897 TH1F* ratio2 = dynamic_cast<TH1F*> (fMultiplicityESDCorrectedRebinned->Clone("multiplicity_ratio_corrected"));
898 ratio2->Divide(fMultiplicityMC);
900 TCanvas* canvas = new TCanvas("MultiplicityMC", "MultiplicityMC", 1500, 1000);
901 canvas->Divide(3, 2);
903 fMultiplicityESD->GetXaxis()->SetRangeUser(0, xRangeMax);
904 ratio->GetXaxis()->SetRangeUser(0, xRangeMax);
905 fCorrelation->GetXaxis()->SetRangeUser(0, xRangeMax);
906 fCorrelation->GetYaxis()->SetRangeUser(0, xRangeMax);
907 correction->GetXaxis()->SetRangeUser(0, xRangeMax);
908 fMultiplicityESDCorrected->GetXaxis()->SetRangeUser(0, xRangeMax);
909 fMultiplicityESDCorrectedRebinned->GetXaxis()->SetRangeUser(0, xRangeMax);
911 canvas->cd(1); //InitPad();
912 fMultiplicityESD->Draw();
913 fMultiplicityMC->SetLineColor(2);
914 fMultiplicityMC->Draw("SAME");
916 TLegend* legend = new TLegend(0.6, 0.7, 0.85, 0.85);
917 legend->AddEntry(fMultiplicityESD, "ESD");
918 legend->AddEntry(fMultiplicityMC, "MC");
922 fCorrelation->Draw("COLZ");
926 //correction->Fit("pol1");
927 correctionWidth->SetLineColor(2);
928 correctionWidth->Draw("SAME");
930 legend = new TLegend(0.2, 0.7, 0.45, 0.85);
931 legend->AddEntry(correction, "#bar{x}");
932 legend->AddEntry(correctionWidth, "#sigma");
938 ratio2->SetLineColor(2);
939 ratio2->Draw("SAME");
941 legend = new TLegend(0.6, 0.7, 0.85, 0.85);
942 legend->AddEntry(ratio, "uncorrected");
943 legend->AddEntry(ratio2, "corrected");
947 fMultiplicityESDCorrected->SetLineColor(kBlue);
948 fMultiplicityESDCorrected->Draw();
949 fMultiplicityMC->Draw("SAME");
950 fMultiplicityESD->Draw("SAME");
952 legend = new TLegend(0.6, 0.7, 0.85, 0.85);
953 legend->AddEntry(fMultiplicityESDCorrected, "ESD corrected");
954 legend->AddEntry(fMultiplicityMC, "MC");
955 legend->AddEntry(fMultiplicityESD, "ESD");
959 fMultiplicityESDCorrectedRebinned->SetLineColor(kBlue);
960 fMultiplicityESDCorrectedRebinned->Draw();
961 fMultiplicityMC->Draw("SAME");
963 legend = new TLegend(0.6, 0.7, 0.85, 0.85);
964 legend->AddEntry(fMultiplicityESDCorrectedRebinned, "ESD corrected");
965 legend->AddEntry(fMultiplicityMC, "MC");
968 canvas->SaveAs("MultiplicityMC.gif");
971 void MultiplicityESD()
973 TFile* file = TFile::Open("multiplicityESD.root");
977 printf("multiplicityESD.root could not be opened.\n");
981 TH1F* fMultiplicityESD = dynamic_cast<TH1F*> (file->Get("fMultiplicity"));
983 TCanvas* canvas = new TCanvas("MultiplicityESD", "MultiplicityESD", 500, 500);
985 fMultiplicityESD->Draw();
988 void drawPlots(Int_t max)