extern TSystem* gSystem;
+void loadlibs()
+{
+ gSystem->Load("libANALYSIS");
+ gSystem->Load("libPWG0base");
+}
+
void SetRanges(TAxis* axis)
{
if (strcmp(axis->GetTitle(), "#eta") == 0)
hist->SetLineWidth(2);
hist->SetStats(kFALSE);
+ hist->GetXaxis()->SetLabelOffset(0.02);
+ hist->GetXaxis()->SetTitleOffset(1.3);
+ hist->GetYaxis()->SetTitleOffset(1.3);
+
SetRanges(hist);
}
gPad->SetLeftMargin(0.15);
//gPad->SetRightMargin(0.05);
//gPad->SetTopMargin(0.13);
- //gPad->SetBottomMargin(0.1);
+ gPad->SetBottomMargin(0.12);
- //gPad->SetGridx();
- //gPad->SetGridy();
+ gPad->SetGridx();
+ gPad->SetGridy();
}
void InitPadCOLZ()
gPad->SetGridy();
}
-void dNdEta(Bool_t onlyESD = kFALSE)
+// --- end of helpers --- begin functions ---
+
+void DrawOverview(const char* fileName = "correction_map.root", const char* dirName = "dndeta_correction")
{
- TFile* file = TFile::Open("analysis_esd.root");
- TH1* histESD = (TH1*) file->Get("dndeta/dndeta_dNdEta_corrected_2");
- TH1* histESDNoPt = (TH1*) file->Get("dndeta/dndeta_dNdEta_2");
- TH1* histESDMB = (TH1*) file->Get("dndeta_mb/dndeta_mb_dNdEta_corrected_2");
- TH1* histESDMBVtx = (TH1*) file->Get("dndeta_mbvtx/dndeta_mbvtx_dNdEta_corrected_2");
+ loadlibs();
+ if (!TFile::Open(fileName))
+ return;
- TCanvas* canvas = new TCanvas("dNdEta1", "dNdEta1", 500, 500);
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(dirName, dirName);
+ if (!dNdEtaCorrection->LoadHistograms())
+ return;
+
+ dNdEtaCorrection->Finish();
+
+ dNdEtaCorrection->DrawOverview();
+}
+
+void ComparedNdEta(const char* ESDfolder = "dndeta", const char* MCfolder = "dndeta", const char* esdFile = "analysis_esd.root", const char* mcFile = "analysis_mc.root")
+{
+ gSystem->Load("libPWG0base");
+
+ TFile::Open(esdFile);
+ dNdEtaAnalysis* fdNdEtaAnalysisESD = new dNdEtaAnalysis(ESDfolder, ESDfolder);
+ fdNdEtaAnalysisESD->LoadHistograms();
+
+ TFile::Open(mcFile);
+ dNdEtaAnalysis* fdNdEtaAnalysisMC = new dNdEtaAnalysis(MCfolder, MCfolder);
+ fdNdEtaAnalysisMC->LoadHistograms();
+ //fdNdEtaAnalysisMC->Finish(0, 0.3, AlidNdEtaCorrection::kNone);
+
+ for (Int_t i=0; i<dNdEtaAnalysis::kVertexBinning; ++i)
+ fdNdEtaAnalysisESD->GetdNdEtaPtCutOffCorrectedHistogram(i)->Divide(fdNdEtaAnalysisMC->GetdNdEtaPtCutOffCorrectedHistogram(i));
+
+ fdNdEtaAnalysisESD->DrawHistograms();
+}
+
+void CompareVertexDist(Int_t plot = 0, const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction")
+{
+ gSystem->Load("libPWG0base");
+
+ const char* ESDfolder = 0;
+
+ if (plot == 0) // all
+ ESDfolder = "dndeta";
+ else if (plot == 1) // mb
+ ESDfolder = "dndeta_mb";
+ else if (plot == 2) // mb vtx
+ ESDfolder = "dndeta_mbvtx";
+
+ TFile::Open("analysis_esd.root");
+ dNdEtaAnalysis* fdNdEtaAnalysisESD = new dNdEtaAnalysis(ESDfolder, ESDfolder);
+ fdNdEtaAnalysisESD->LoadHistograms();
+
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
+ dNdEtaCorrection->LoadHistograms(correctionMapFile, correctionMapFolder);
+
+ TH2F* hist = 0;
+
+ if (plot == 0) // all
+ hist = dNdEtaCorrection->GetTriggerBiasCorrection()->GetGeneratedHistogram();
+ else if (plot == 1) // mb
+ hist = dNdEtaCorrection->GetTriggerBiasCorrection()->GetMeasuredHistogram();
+ else if (plot == 2) // mb vtx
+ hist = dNdEtaCorrection->GetVertexRecoCorrection()->GetMeasuredHistogram();
+
+ TH1* proj = hist->ProjectionX();
+
+ TH1* vertex = fdNdEtaAnalysisESD->GetVtxHistogram();
+ for (Int_t i=1; i<=vertex->GetNbinsX(); ++i)
+ {
+ Float_t value = proj->GetBinContent(proj->FindBin(vertex->GetBinCenter(i)));
+ if (value != 0)
+ {
+ printf("vtx = %f, esd = %f, corr = %f, ratio = %f\n", vertex->GetBinCenter(i), vertex->GetBinContent(i), value, vertex->GetBinContent(i) / value);
+ vertex->SetBinContent(i, vertex->GetBinContent(i) / value);
+ }
+ }
+
+ new TCanvas;
+ vertex->DrawCopy();
+}
+
+void CompareTrack2ParticleWithAnalysisData(const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction")
+{
+ gSystem->Load("libPWG0base");
+
+ TFile::Open("analysis_esd.root");
+ dNdEtaAnalysis* fdNdEtaAnalysisESD = new dNdEtaAnalysis("dndeta_mbvtx", "dndeta_mbvtx");
+ fdNdEtaAnalysisESD->LoadHistograms();
+
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
+ dNdEtaCorrection->LoadHistograms(correctionMapFile, correctionMapFolder);
+
+ //TH1* histESD = fdNdEtaAnalysisESD->GetUncorrectedHistogram();
+ //TH1* histCorr = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
+
+ TH1* histESD = fdNdEtaAnalysisESD->GetHistogram();
+ TH1* histCorr = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
+
+ TH1F* diff = new TH1F("diff", "diff", 100, 0.98, 1.02);
+
+ new TCanvas;
+ histESD->Draw();
+
+ new TCanvas;
+ histCorr->Draw();
+
+ for (Int_t x=1; x<=histESD->GetNbinsX(); ++x)
+ for (Int_t y=1; y<=histESD->GetNbinsY(); ++y)
+ for (Int_t z=1; z<=histESD->GetNbinsZ(); ++z)
+ {
+ Float_t value1 = histESD->GetBinContent(x, y, z);
+ Float_t value2 = histCorr->GetBinContent(histCorr->FindBin(histESD->GetXaxis()->GetBinCenter(x), histESD->GetYaxis()->GetBinCenter(y), histESD->GetZaxis()->GetBinCenter(z)));
+
+ if (value2 > 0 && value1 > 0)
+ {
+ printf("%f %f %f\n", value1, value2, value1 / value2);
+ diff->Fill(value1 / value2);
+ }
+ }
+
+ new TCanvas;
+ diff->Draw();
+}
+
+Double_t PrintIntegratedDeviation(TH1* histMC, TH1* histESD, const char* desc = "")
+{
+ Double_t avgMC = 0;
+ Double_t avgESD = 0;
+ for (Int_t bin = histMC->FindBin(-0.7999); bin <= histMC->FindBin(0.7999); bin++)
+ {
+ avgMC += histMC->GetBinContent(bin);
+ avgESD += histESD->GetBinContent(bin);
+ }
+ Int_t nBins = histMC->FindBin(0.7999) - histMC->FindBin(-0.7999) + 1;
+
+ avgMC /= nBins;
+ avgESD /= nBins;
+
+ // deviation when integrate in |eta| < 0.8 between mc and esd
+ Double_t diffFullRange = (avgMC - avgESD) / avgMC;
+
+ Printf("%s: Integrated deviation in |eta| < 0.8 is %.2f %%", desc, diffFullRange * 100);
+
+ return diffFullRange;
+}
+
+void dNdEta(Bool_t onlyESD = kFALSE, Bool_t save = kTRUE)
+{
+ TFile* file = TFile::Open("analysis_esd.root");
+ TH1* histESD = (TH1*) file->Get("dndeta/dNdEta_corrected");
+ TH1* histESDnsd = (TH1*) file->Get("dndetaNSD/dNdEta_corrected");
+ TH1* histESDNoPt = (TH1*) file->Get("dndeta/dNdEta");
+ TH1* histESDMB = (TH1*) file->Get("dndetaTr/dNdEta_corrected");
+ TH1* histESDMBNoPt = (TH1*) file->Get("dndetaTr/dNdEta");
+ TH1* histESDMBVtx = (TH1*) file->Get("dndetaTrVtx/dNdEta_corrected");
+ TH1* histESDMBVtxNoPt = (TH1*) file->Get("dndetaTrVtx/dNdEta");
+ TH1* histESDMBTracksNoPt = (TH1*) file->Get("dndetaTracks/dNdEta");
Prepare1DPlot(histESD);
- Prepare1DPlot(histESDNoPt);
+ Prepare1DPlot(histESDnsd);
Prepare1DPlot(histESDMB);
Prepare1DPlot(histESDMBVtx);
- histESD->SetLineColor(kRed);
- histESDMB->SetLineColor(kBlue);
- histESDMBVtx->SetLineColor(103);
-
- TH2F* dummy = new TH2F("dummy", "", 100, -1.5, 1.5, 100, 0, histESDMBVtx->GetMaximum() * 1.1);
+ Prepare1DPlot(histESDNoPt);
+ Prepare1DPlot(histESDMBNoPt);
+ Prepare1DPlot(histESDMBVtxNoPt);
+ Prepare1DPlot(histESDMBTracksNoPt);
+
+ histESD->SetLineWidth(0);
+ histESDnsd->SetLineWidth(0);
+ histESDMB->SetLineWidth(0);
+ histESDMBVtx->SetLineWidth(0);
+
+ histESDNoPt->SetLineWidth(0);
+ histESDMBNoPt->SetLineWidth(0);
+ histESDMBVtxNoPt->SetLineWidth(0);
+
+ histESD->SetMarkerColor(1);
+ histESDnsd->SetMarkerColor(6);
+ histESDMB->SetMarkerColor(2);
+ histESDMBVtx->SetMarkerColor(3);
+
+ histESD->SetLineColor(1);
+ histESDnsd->SetLineColor(6);
+ histESDMB->SetLineColor(2);
+ histESDMBVtx->SetLineColor(3);
+
+ histESDNoPt->SetMarkerColor(1);
+ histESDMBNoPt->SetMarkerColor(2);
+ histESDMBVtxNoPt->SetMarkerColor(3);
+ histESDMBTracksNoPt->SetMarkerColor(4);
+
+ histESD->SetMarkerStyle(20);
+ histESDnsd->SetMarkerStyle(29);
+ histESDMB->SetMarkerStyle(21);
+ histESDMBVtx->SetMarkerStyle(22);
+
+ histESDNoPt->SetMarkerStyle(20);
+ histESDMBNoPt->SetMarkerStyle(21);
+ histESDMBVtxNoPt->SetMarkerStyle(22);
+ histESDMBTracksNoPt->SetMarkerStyle(23);
+
+ //Float_t etaLimit = 1.2999;
+ Float_t etaLimit = 2.01;
+ Float_t etaPlotLimit = 2.2;
+
+ histESDMBVtx->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histESDMB->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histESD->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histESDnsd->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+
+ histESDNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histESDMBNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histESDMBVtxNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histESDMBTracksNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+
+ Float_t max = TMath::Max(histESDMBVtx->GetMaximum(), histESDMB->GetMaximum());
+ max = TMath::Max(max, histESD->GetMaximum());
+
+ TH2F* dummy = new TH2F("dummy", "", 100, -etaPlotLimit, etaPlotLimit, 1000, 0, max * 1.1);
+ Prepare1DPlot(dummy);
dummy->SetStats(kFALSE);
dummy->SetXTitle("#eta");
- dummy->SetYTitle("dN/d#eta");
+ dummy->SetYTitle("dN_{ch}/d#eta");
+ dummy->GetYaxis()->SetTitleOffset(1);
- histESDMBVtx->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
- histESDMB->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
- histESD->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
- histESDNoPt->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
+ TCanvas* canvas = new TCanvas("dNdEta1", "dNdEta1", 500, 500);
dummy->DrawCopy();
histESDMBVtx->Draw("SAME");
histESDMB->Draw("SAME");
histESD->Draw("SAME");
- canvas->SaveAs("dNdEta1.gif");
- canvas->SaveAs("dNdEta1.eps");
+ if (save)
+ {
+ canvas->SaveAs("dNdEta1.gif");
+ canvas->SaveAs("dNdEta1.eps");
+ }
if (onlyESD)
return;
+ loadlibs();
+
TFile* file2 = TFile::Open("analysis_mc.root");
- TH1* histMC = (TH1*) file2->Get("dndeta/dndeta_dNdEta_corrected_2")->Clone("cloned");
+ TH1* histMC = (TH1*) file2->Get("dndeta/dNdEta_corrected")->Clone("cloned");
+ TH1* histMCnsd = (TH1*) file2->Get("dndetaNSD/dNdEta_corrected");
+ if (histMCnsd)
+ {
+ histMCnsd = (TH1*) histMCnsd->Clone("clonedNSD");
+ }
+ else
+ histMCnsd = new TH1F;
+
+ TH1* histMCTr = (TH1*) file2->Get("dndetaTr/dNdEta_corrected")->Clone("cloned2");
+ TH1* histMCTrVtx = (TH1*) file2->Get("dndetaTrVtx/dNdEta_corrected")->Clone("cloned3");
- gSystem->Load("libPWG0base");
dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
fdNdEtaAnalysis->LoadHistograms();
- fdNdEtaAnalysis->Finish(0, 0.3);
- TH1* histMCPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(2);
+ dNdEtaAnalysis* fdNdEtaAnalysis2 = (dNdEtaAnalysis*) fdNdEtaAnalysis->Clone();
- TCanvas* canvas2 = new TCanvas("dNdEta2", "dNdEta2", 500, 500);
+ fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone, "MC: full inelastic");
+ TH1* histMCPtCut = (TH1*) fdNdEtaAnalysis->GetdNdEtaHistogram(0)->Clone("histMCPtCut");
+
+ fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTr", "dndetaTr");
+ fdNdEtaAnalysis->LoadHistograms();
+ fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone, "MC: minimum bias");
+ TH1* histMCTrPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(0);
+
+ fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTrVtx", "dndetaTrVtx");
+ fdNdEtaAnalysis->LoadHistograms();
+ fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone, "MC: MB with trigger");
+ TH1* histMCTrVtxPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(0);
+
+ fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTracks", "dndetaTracks");
+ fdNdEtaAnalysis->LoadHistograms();
+ fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone, "MC: Tracks w/o resolution effect");
+ TH1* histMCTracksPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(0);
Prepare1DPlot(histMC);
+ Prepare1DPlot(histMCnsd);
+ Prepare1DPlot(histMCTr);
+ Prepare1DPlot(histMCTrVtx);
+
Prepare1DPlot(histMCPtCut);
+ Prepare1DPlot(histMCTrPtCut);
+ Prepare1DPlot(histMCTrVtxPtCut);
+ Prepare1DPlot(histMCTracksPtCut);
+
+ histMC->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histMCnsd->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histMCTr->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histMCTrVtx->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+
+ histMCPtCut->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histMCTrPtCut->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histMCTrVtxPtCut->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+ histMCTracksPtCut->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+
+ histMC->SetLineColor(1);
+ histMCnsd->SetLineColor(6);
+ histMCTr->SetLineColor(2);
+ histMCTrVtx->SetLineColor(3);
+
+ histMCPtCut->SetLineColor(1);
+ histMCTrPtCut->SetLineColor(2);
+ histMCTrVtxPtCut->SetLineColor(3);
+ if (histMCTracksPtCut)
+ histMCTracksPtCut->SetLineColor(4);
- histMC->SetLineColor(kBlue);
- histMCPtCut->SetLineColor(104);
- histESDNoPt->SetLineColor(102);
+ TCanvas* canvas2 = new TCanvas("dNdEta2", "dNdEta2", 500, 500);
TH2* dummy2 = (TH2F*) dummy->Clone("dummy2");
- dummy2->GetYaxis()->SetRangeUser(0, histESD->GetMaximum() * 1.1);
+ dummy2->GetYaxis()->SetRangeUser(0, max * 1.1);
dummy2->DrawCopy();
histMC->Draw("SAME");
-// histMC->Draw();
+ histMCnsd->Draw("SAME");
+ histMCTr->Draw("SAME");
+ histMCTrVtx->Draw("SAME");
histESD->Draw("SAME");
+ histESDnsd->Draw("SAME");
+ histESDMB->Draw("SAME");
+ histESDMBVtx->Draw("SAME");
histESDNoPt->Draw("SAME");
+ histESDMBNoPt->Draw("SAME");
+ histESDMBVtxNoPt->Draw("SAME");
+ histESDMBTracksNoPt->Draw("SAME");
histMCPtCut->Draw("SAME");
+ histMCTrPtCut->Draw("SAME");
+ histMCTrVtxPtCut->Draw("SAME");
+ if (histMCTracksPtCut)
+ histMCTracksPtCut->Draw("SAME");
+
+ if (save)
+ {
+ canvas2->SaveAs("dNdEta2.gif");
+ canvas2->SaveAs("dNdEta2.eps");
+ }
+
+ DrawdNdEtaRatio(histESD, histMC, "full_inelastic", etaPlotLimit);
+ DrawdNdEtaRatio(histESDMB, histMCTr, "triggered", etaPlotLimit);
+ DrawdNdEtaRatio(histESDMBVtx, histMCTrVtx, "triggered_vertex", etaPlotLimit);
+
+ new TCanvas;
+ dummy2->DrawCopy();
+ histMCnsd->Draw("SAME");
+ histESDnsd->Draw("SAME");
+
+ TH1* ratio = (TH1*) histMC->Clone("ratio");
+ TH1* ratioNoPt = (TH1*) histMCPtCut->Clone("ratioNoPt");
+
+ ratio->Divide(histESD);
+ ratioNoPt->Divide(histESDNoPt);
+
+ ratio->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+
+ ratio->SetLineColor(1);
+ ratioNoPt->SetLineColor(2);
+
+ Double_t average = 0; // average deviation from 1 in ratio (depends on the number of bins if statistical)
+ for (Int_t bin = ratio->FindBin(-0.7999); bin <= ratio->FindBin(0.7999); bin++)
+ average += TMath::Abs(ratio->GetBinContent(bin) - 1);
+ Int_t nBins = ratio->FindBin(0.7999) - ratio->FindBin(-0.7999) + 1;
+ average /= nBins;
+ Printf("Average deviation in |eta| < 0.8 is %.2f %%", average * 100);
+
+ PrintIntegratedDeviation(histMC, histESD, "all events");
+ PrintIntegratedDeviation(histMCTr, histESDMB, "triggered");
+ PrintIntegratedDeviation(histMCTrVtx, histESDMBVtx, "trigger, vertex");
+ PrintIntegratedDeviation(histMCPtCut, histESDNoPt, "all events (no pt corr)");
+ PrintIntegratedDeviation(histMCTrPtCut, histESDMBNoPt, "triggered (no pt corr)");
+ PrintIntegratedDeviation(histMCTrVtxPtCut, histESDMBVtxNoPt, "trigger, vertex (no pt corr)");
+
+ TCanvas* canvas3 = new TCanvas("dNdEta", "dNdEta", 700, 600);
+ canvas3->Range(0, 0, 1, 1);
+ //canvas3->Divide(1, 2, 0, 0);
+
+ //canvas3->cd(1);
+ TPad* pad1 = new TPad("dNdEta_1", "", 0, 0.5, 0.98, 0.98);
+ pad1->Draw();
+
+ TPad* pad2 = new TPad("dNdEta_2", "", 0, 0.02, 0.98, 0.5);
+ pad2->Draw();
+
+ pad1->SetRightMargin(0.05);
+ pad2->SetRightMargin(0.05);
+
+ // no border between them
+ pad1->SetBottomMargin(0);
+ pad2->SetTopMargin(0);
+
+ pad1->cd();
+
+ TLegend* legend = new TLegend(0.4, 0.05, 0.65, 0.3);
+ legend->SetFillColor(0);
+ legend->AddEntry(histESDMBVtx, "triggered, vertex");
+ legend->AddEntry(histESDMB, "triggered");
+ legend->AddEntry(histESD, "all events");
+ legend->AddEntry(histMC, "MC prediction");
+
+ dummy->GetXaxis()->SetLabelSize(0.06);
+ dummy->GetYaxis()->SetLabelSize(0.06);
+ dummy->GetXaxis()->SetTitleSize(0.06);
+ dummy->GetYaxis()->SetTitleSize(0.06);
+ dummy->GetYaxis()->SetTitleOffset(0.7);
+ dummy->DrawCopy();
+ histESDMBVtx->Draw("SAME");
+ histESDMB->Draw("SAME");
+ histESD->Draw("SAME");
+ histMC->Draw("SAME");
- canvas2->SaveAs("dNdEta2.gif");
- canvas2->SaveAs("dNdEta2.eps");
+ legend->Draw();
- TCanvas* canvas3 = new TCanvas("dNdEta", "dNdEta", 1000, 500);
- canvas3->Divide(2, 1);
+ pad2->cd();
+ pad2->SetBottomMargin(0.15);
- dummy->SetTitle("a)");
- dummy2->SetTitle("b)");
+ Float_t minR = TMath::Min(0.961, ratio->GetMinimum() * 0.95);
+ Float_t maxR = TMath::Max(1.049, ratio->GetMaximum() * 1.05);
- canvas3->cd(1);
- dummy->Draw();
- histESDMBVtx->Draw("SAME");
- histESDMB->Draw("SAME");
- histESD->Draw("SAME");
+ TH1F dummy3("dummy3", ";#eta;Ratio: MC / ESD", 100, -etaPlotLimit, etaPlotLimit);
+ dummy3.SetStats(kFALSE);
+ for (Int_t i=1; i<=100; ++i)
+ dummy3.SetBinContent(i, 1);
+ dummy3.GetYaxis()->SetRangeUser(minR, maxR);
+ dummy3.SetLineWidth(2);
+ dummy3.GetXaxis()->SetLabelSize(0.06);
+ dummy3.GetYaxis()->SetLabelSize(0.06);
+ dummy3.GetXaxis()->SetTitleSize(0.06);
+ dummy3.GetYaxis()->SetTitleSize(0.06);
+ dummy3.GetYaxis()->SetTitleOffset(0.7);
+ dummy3.DrawCopy();
- canvas3->cd(2);
- dummy2->Draw();
- histMC->Draw("SAME");
- histESD->Draw("SAME");
- histESDNoPt->Draw("SAME");
- histMCPtCut->Draw("SAME");
+ ratio->Draw("SAME");
+
+ //pad2->Draw();
+
+ canvas3->Modified();
+
+ if (save)
+ {
+ canvas3->SaveAs("dNdEta.gif");
+ canvas3->SaveAs("dNdEta.eps");
+ }
+
+ TCanvas* canvas4 = new TCanvas("ratio", "ratio", 700, 500);
+
+ ratio->Draw();
+ ratioNoPt->Draw("SAME");
+
+ TLegend* legend = new TLegend(0.6, 0.7, 0.95, 0.9);
+ legend->SetFillColor(0);
+ legend->AddEntry(ratio, "mc/esd");
+ legend->AddEntry(ratioNoPt, "mc/esd, not pt cut off corrected");
+ legend->Draw();
+}
+
+void DrawdNdEtaRatio(TH1* corr, TH1* mc, const char* name, Float_t etaPlotLimit)
+{
+ TCanvas* canvas3 = new TCanvas(name, name, 700, 600);
+ canvas3->Range(0, 0, 1, 1);
+
+ TPad* pad1 = new TPad(Form("%s_1", name), "", 0, 0.5, 0.98, 0.98);
+ pad1->Draw();
+
+ TPad* pad2 = new TPad(Form("%s_2", name), "", 0, 0.02, 0.98, 0.5);
+ pad2->Draw();
+
+ pad1->SetRightMargin(0.05);
+ pad2->SetRightMargin(0.05);
+
+ // no border between them
+ pad1->SetBottomMargin(0);
+ pad2->SetTopMargin(0);
+
+ pad1->cd();
- canvas3->SaveAs("dNdEta.gif");
- canvas3->SaveAs("dNdEta.eps");
+ TLegend* legend = new TLegend(0.4, 0.05, 0.65, 0.3);
+ legend->SetFillColor(0);
+ legend->AddEntry(corr, "corrected");
+ legend->AddEntry(mc, "MC prediction");
+
+ TH2F* dummy = new TH2F("dummy", "", 100, -etaPlotLimit, etaPlotLimit, 1000, 0, corr->GetMaximum() * 1.1);
+ Prepare1DPlot(dummy);
+ dummy->SetStats(kFALSE);
+ dummy->SetXTitle("#eta");
+ dummy->SetYTitle("dN_{ch}/d#eta");
+ dummy->GetYaxis()->SetTitleOffset(1);
+
+ dummy->GetXaxis()->SetLabelSize(0.06);
+ dummy->GetYaxis()->SetLabelSize(0.06);
+ dummy->GetXaxis()->SetTitleSize(0.06);
+ dummy->GetYaxis()->SetTitleSize(0.06);
+ dummy->GetYaxis()->SetTitleOffset(0.7);
+ dummy->DrawCopy();
+
+ corr->Draw("SAME");
+ mc->Draw("SAME");
+
+ legend->Draw();
+
+ pad2->cd();
+ pad2->SetBottomMargin(0.15);
+
+ TH1* ratio = (TH1*) mc->Clone("ratio");
+ ratio->Divide(corr);
+
+ Float_t minR = TMath::Min(0.961, ratio->GetMinimum() * 0.95);
+ Float_t maxR = TMath::Max(1.049, ratio->GetMaximum() * 1.05);
+
+ TH1F dummy3("dummy3", ";#eta;Ratio: MC / corr", 100, -etaPlotLimit, etaPlotLimit);
+ dummy3.SetStats(kFALSE);
+ for (Int_t i=1; i<=100; ++i)
+ dummy3.SetBinContent(i, 1);
+ dummy3.GetYaxis()->SetRangeUser(minR, maxR);
+ dummy3.SetLineWidth(2);
+ dummy3.GetXaxis()->SetLabelSize(0.06);
+ dummy3.GetYaxis()->SetLabelSize(0.06);
+ dummy3.GetXaxis()->SetTitleSize(0.06);
+ dummy3.GetYaxis()->SetTitleSize(0.06);
+ dummy3.GetYaxis()->SetTitleOffset(0.7);
+ dummy3.DrawCopy();
+
+ ratio->Draw("SAME");
+
+ canvas3->Modified();
}
void ptSpectrum()
{
gSystem->Load("libPWG0base");
+ TFile::Open("correction_map.root");
AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
- dNdEtaCorrection->LoadHistograms("correction_map.root","dndeta_correction");
+ dNdEtaCorrection->LoadHistograms();
- dNdEtaCorrection->GetMeasuredFraction(0.3, -1, kTRUE);
+ dNdEtaCorrection->GetMeasuredFraction(AlidNdEtaCorrection::kINEL, 0.3, -100, kTRUE);
- TH1* hist = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_pt"));
+ TH1* hist = dynamic_cast<TH1*> (gROOT->FindObject("generated_pt")->Clone("ptcutoff"));
hist->GetXaxis()->SetRangeUser(0, 0.9999);
hist->SetMinimum(0);
hist->SetTitle("Generated Particles");
Prepare1DPlot(hist);
- TCanvas* canvas = new TCanvas("ptCutoff", "ptCutoff", 500, 500);
- hist->Draw();
+ TCanvas* canvas = new TCanvas("ptCutoff", "ptCutoff", 700, 500);
+ hist->DrawCopy();
TLine* line = new TLine(0.3, 0 - hist->GetMaximum() * 0, 0.3, hist->GetMaximum() * 1.1);
line->SetLineWidth(3);
canvas->SaveAs("ptCutoff.gif");
canvas->SaveAs("ptCutoff.eps");
+
+ TH1F* factor = new TH1F("factor", ";#eta;correction factor", 20, -1, 1.000001);
+ factor->SetLineWidth(2);
+ for (Float_t eta = -0.95; eta<1; eta += 0.1)
+ factor->Fill(eta, 1.0 / dNdEtaCorrection->GetMeasuredFraction(AlidNdEtaCorrection::kINEL, 0.3, eta, kFALSE));
+
+ TCanvas* canvas = new TCanvas("ptCutoff_factor", "ptCutoff_factor", 700, 500);
+ InitPad();
+
+ Prepare1DPlot(factor);
+ factor->GetYaxis()->SetRangeUser(1, 2);
+ factor->GetYaxis()->SetTitleOffset(1);
+ factor->Draw();
+
+ canvas->SaveAs("ptCutoff_factor.eps");
}
-void TriggerBiasVtxRecon(const char* fileName = "correction_map.root")
+void TriggerBiasVtxRecon(const char* fileName = "correction_map.root", const char* folder = "dndeta_correction")
{
- TFile* file = TFile::Open(fileName);
+ gSystem->Load("libPWG0base");
- TH2* corrTrigger = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_trigger"));
- TH2* corrVtx = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_vtxReco"));
+ TFile::Open(fileName);
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
+ dNdEtaCorrection->LoadHistograms();
+
+ TH2* corrTrigger = dNdEtaCorrection->GetTriggerBiasCorrectionINEL()->GetEventCorrection()->GetCorrectionHistogram();
+ TH2* corrVtx = dNdEtaCorrection->GetVertexRecoCorrection()->GetEventCorrection()->GetCorrectionHistogram();
Prepare2DPlot(corrTrigger);
- corrTrigger->SetTitle("a) Trigger bias correction");
+ corrTrigger->SetTitle("b) Trigger bias correction");
Prepare2DPlot(corrVtx);
- corrVtx->SetTitle("b) Vertex reconstruction correction");
+ corrVtx->SetTitle("a) Vertex reconstruction correction");
+
+ corrTrigger->GetYaxis()->SetTitle("Multiplicity");
+ corrVtx->GetYaxis()->SetTitle("Multiplicity");
TCanvas* canvas = new TCanvas("TriggerBiasVtxRecon", "TriggerBiasVtxRecon", 1000, 500);
canvas->Divide(2, 1);
canvas->cd(1);
InitPadCOLZ();
- corrTrigger->DrawCopy("COLZ");
+ corrVtx->DrawCopy("COLZ");
canvas->cd(2);
InitPadCOLZ();
- corrVtx->DrawCopy("COLZ");
+ corrTrigger->DrawCopy("COLZ");
canvas->SaveAs(Form("TriggerBiasVtxRecon_%d.gif", gMax));
canvas->SaveAs(Form("TriggerBiasVtxRecon_%d.eps", gMax));
canvas->cd(1);
InitPadCOLZ();
- corrTrigger->DrawCopy("COLZ");
+ corrVtx->DrawCopy("COLZ");
canvas->cd(2);
InitPadCOLZ();
- corrVtx->DrawCopy("COLZ");
+ corrTrigger->DrawCopy("COLZ");
canvas->SaveAs(Form("TriggerBiasVtxReconZoom_%d.gif", gMax));
canvas->SaveAs(Form("TriggerBiasVtxReconZoom_%d.eps", gMax));
{
TFile* file = TFile::Open(fileName);
- TH2* corr = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_trigger"));
+ TH2* corr = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_dndeta_correction_trigger"));
Prepare2DPlot(corr);
corr->SetTitle("Trigger bias correction");
canvas->SaveAs(Form("TriggerBiasZoom_%d.eps", gMax));
}
+void TriggerBias1D(const char* fileName = "correction_map.root", const char* folderName = "dndeta_correction")
+{
+ gSystem->Load("libPWG0base");
+
+ TFile* file = TFile::Open(fileName);
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(folderName, folderName);
+ dNdEtaCorrection->LoadHistograms();
+
+ TH1* hist = dNdEtaCorrection->GetTriggerBiasCorrectionINEL()->GetEventCorrection()->Get1DCorrection("x");
+ TH1* hist2 = dNdEtaCorrection->GetTriggerBiasCorrectionINEL()->GetEventCorrection()->Get1DCorrection("y", -10, 10);
+
+ TCanvas* canvas = new TCanvas("TriggerBias1D", "TriggerBias1D", 1000, 500);
+ canvas->Divide(2, 1);
+
+ canvas->cd(1);
+ InitPad();
+
+ Prepare1DPlot(hist);
+ hist->SetTitle("");
+ hist->GetYaxis()->SetTitle("correction factor");
+ hist->GetYaxis()->SetRangeUser(1, 1.5);
+ hist->GetYaxis()->SetTitleOffset(1.6);
+ hist->Draw();
+
+ canvas->cd(2);
+ InitPad();
+
+ Prepare1DPlot(hist2);
+ hist2->SetTitle("");
+ hist2->GetYaxis()->SetTitle("correction factor");
+ hist2->GetXaxis()->SetRangeUser(0, 5);
+ hist2->GetYaxis()->SetTitleOffset(1.6);
+ hist2->GetXaxis()->SetTitle("multiplicity");
+ hist2->Draw();
+
+ TPaveText* pave = new TPaveText(0.6, 0.8, 0.8, 0.85, "NDC");
+ pave->SetFillColor(0);
+ pave->AddText("|z| < 10 cm");
+ pave->Draw();
+
+ canvas->SaveAs("TriggerBias1D.eps");
+}
+
void VtxRecon()
{
TFile* file = TFile::Open("correction_map.root");
- TH2* corr = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_vtxReco"));
+ TH2* corr = dynamic_cast<TH2*> (file->Get("dndeta_correction/corr_dndeta_correction_vtxReco"));
Prepare2DPlot(corr);
corr->SetTitle("Vertex reconstruction correction");
canvas->SaveAs(Form("VtxReconZoom_%d.eps", gMax));
}
+void VtxRecon1D(const char* fileName = "correction_map.root", const char* folderName = "dndeta_correction")
+{
+ gSystem->Load("libPWG0base");
+
+ TFile* file = TFile::Open(fileName);
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(folderName, folderName);
+ dNdEtaCorrection->LoadHistograms();
+
+ TH1* hist = dNdEtaCorrection->GetVertexRecoCorrection()->GetEventCorrection()->Get1DCorrection("x");
+ TH1* hist2 = dNdEtaCorrection->GetVertexRecoCorrection()->GetEventCorrection()->Get1DCorrection("y", -10, 10);
+
+ TCanvas* canvas = new TCanvas("VtxRecon1D", "VtxRecon1D", 1000, 500);
+ canvas->Divide(2, 1);
+
+ canvas->cd(1);
+ InitPad();
+
+ Prepare1DPlot(hist);
+ hist->SetTitle("");
+ hist->GetYaxis()->SetTitle("correction factor");
+ hist->GetYaxis()->SetRangeUser(1, 1.8);
+ hist->GetYaxis()->SetTitleOffset(1.6);
+ hist->DrawCopy();
+
+ canvas->cd(2);
+ InitPad();
+
+ Prepare1DPlot(hist2);
+ hist2->SetTitle("");
+ hist2->GetYaxis()->SetTitle("correction factor");
+ hist2->GetXaxis()->SetRangeUser(0, 20);
+ hist2->GetYaxis()->SetTitleOffset(1.6);
+ hist2->GetXaxis()->SetTitle("multiplicity");
+ hist2->Draw();
+
+ TPaveText* pave = new TPaveText(0.6, 0.8, 0.8, 0.85, "NDC");
+ pave->SetFillColor(0);
+ pave->AddText("|z| < 10 cm");
+ pave->Draw();
+
+ canvas->SaveAs("VtxRecon1D.eps");
+
+ Correction1DCreatePlots(fileName, folderName, 9.9, 2);
+
+ TH1* corrX = dynamic_cast<TH1*> (gROOT->FindObject("generated_x_div_measured_x"));
+ TH1* corrZ = dynamic_cast<TH1*> (gROOT->FindObject("generated_z_div_measured_z"));
+
+ Prepare1DPlot(corrX);
+ Prepare1DPlot(corrZ);
+
+ corrX->GetYaxis()->SetTitleOffset(1.5);
+ corrZ->GetYaxis()->SetTitleOffset(1.5);
+
+ corrX->SetTitle("a) z projection");
+ corrZ->SetTitle("b) p_{T} projection");
+
+ corrX->GetYaxis()->SetTitle("correction factor");
+ corrZ->GetYaxis()->SetTitle("correction factor");
+
+ corrZ->GetXaxis()->SetRangeUser(0.11, 9.9);
+
+ TString canvasName;
+ canvasName.Form("VtxRecon1D_Track");
+ TCanvas* canvas = new TCanvas(canvasName, canvasName, 800, 400);
+ canvas->Divide(2, 1);
+
+ canvas->cd(1);
+ InitPad();
+ corrX->DrawCopy();
+
+ canvas->cd(2);
+ InitPad();
+ gPad->SetLogx();
+ corrZ->Draw();
+
+ canvas->SaveAs("VtxRecon1D_Track.eps");
+ canvas->SaveAs("VtxRecon1D_Track.gif");
+}
+
void Track2ParticleAsNumber(const char* fileName = "correction_map.root")
{
gSystem->Load("libPWG0base");
printf("Correction with 0.3 < pT < 0.5: %f +- %f\n", eff3, error3);
}
-void Track2Particle1DCreatePlots(const char* fileName = "correction_map.root", Float_t upperPtLimit = 10)
+void Correction1DCreatePlots(const char* fileName = "correction_map.root", const char* folderName = "dndeta_correction", Float_t upperPtLimit = 9.9, Int_t correctionType = 0)
{
TFile::Open(fileName);
- AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
- dNdEtaCorrection->LoadHistograms(fileName, "dndeta_correction");
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(folderName, folderName);
+ dNdEtaCorrection->LoadHistograms();
- TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
- TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
+ TH3F* gene = dNdEtaCorrection->GetCorrection(correctionType)->GetTrackCorrection()->GetGeneratedHistogram();
+ TH3F* meas = dNdEtaCorrection->GetCorrection(correctionType)->GetTrackCorrection()->GetMeasuredHistogram();
gene->GetZaxis()->SetRangeUser(0.3, upperPtLimit);
meas->GetZaxis()->SetRangeUser(0.3, upperPtLimit);
AliPWG0Helper::CreateDividedProjections(gene, meas, "z", kTRUE);
}
-void Track2Particle1D(const char* fileName = "correction_map.root", Float_t upperPtLimit = 9.9)
+void Correction1D(Int_t correctionType = 0, const char* fileName = "correction_map.root", const char* folder = "dndeta_correction", Float_t upperPtLimit = 9.9)
{
gSystem->Load("libPWG0base");
- Track2Particle1DCreatePlots(fileName, upperPtLimit);
+ Correction1DCreatePlots(fileName, folder, upperPtLimit, correctionType);
- TH1* corrX = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_x_div_meas_nTrackToNPart_x"));
- TH1* corrY = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_y_div_meas_nTrackToNPart_y"));
- TH1* corrZ = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_z_div_meas_nTrackToNPart_z"));
+ TH1* corrX = dynamic_cast<TH1*> (gROOT->FindObject(Form("generated_x_div_measured_x", folder, folder)));
+ TH1* corrY = dynamic_cast<TH1*> (gROOT->FindObject(Form("generated_y_div_measured_y", folder, folder)));
+ TH1* corrZ = dynamic_cast<TH1*> (gROOT->FindObject(Form("generated_z_div_measured_z", folder, folder)));
Prepare1DPlot(corrX);
Prepare1DPlot(corrY);
Prepare1DPlot(corrZ);
- const char* title = "Track2Particle Correction";
- corrX->SetTitle(title);
- corrY->SetTitle(title);
- corrZ->SetTitle(title);
+ corrX->SetTitle("a) z projection");
+ corrY->SetTitle("b) #eta projection");
+ corrZ->SetTitle("c) p_{T} projection");
+
+ corrX->GetYaxis()->SetTitle("correction factor");
+ corrY->GetYaxis()->SetTitle("correction factor");
+ corrZ->GetYaxis()->SetTitle("correction factor");
corrZ->GetXaxis()->SetRangeUser(0, upperPtLimit);
- TCanvas* canvas = new TCanvas("Track2Particle2D", "Track2Particle2D", 1200, 400);
+ TString canvasName;
+ canvasName.Form("Correction1D_%s", folder);
+ TCanvas* canvas = new TCanvas(canvasName, canvasName, 1200, 400);
canvas->Divide(3, 1);
canvas->cd(1);
InitPad();
- corrX->Draw();
+ corrX->DrawCopy();
canvas->cd(2);
InitPad();
InitPad();
corrZ->Draw();
- canvas->SaveAs(Form("Track2Particle1D_%s_%d_%f.gif", fileName, gMax, upperPtLimit));
- canvas->SaveAs(Form("Track2Particle1D_%s_%d_%f.eps", fileName, gMax, upperPtLimit));
+ canvas->SaveAs(Form("Correction1D_%d_%s_%f.gif", correctionType, fileName, upperPtLimit));
+ canvas->SaveAs(Form("Correction1D_%d_%s_%f.eps", correctionType, fileName, upperPtLimit));
}
-void CompareTrack2Particle1D(Float_t upperPtLimit = 9.9)
+void Track2Particle1D(const char* fileName = "correction_map.root", const char* folder = "dndeta_correction", Float_t upperPtLimit = 9.9)
{
gSystem->Load("libPWG0base");
- Track2Particle1DCreatePlots("correction_maponly-positive.root", upperPtLimit);
+ Correction1DCreatePlots(fileName, folder, upperPtLimit, AlidNdEtaCorrection::kTrack2Particle);
- TH1* posX = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_x_div_meas_nTrackToNPart_x")->Clone("pos_x"));
- TH1* posY = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_y_div_meas_nTrackToNPart_y")->Clone("pos_y"));
- TH1* posZ = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_z_div_meas_nTrackToNPart_z")->Clone("pos_z"));
+ TH1* corrX = dynamic_cast<TH1*> (gROOT->FindObject(Form("generated_x_div_measured_x", folder, folder)));
+ TH1* corrY = dynamic_cast<TH1*> (gROOT->FindObject(Form("generated_y_div_measured_y", folder, folder)));
+ TH1* corrZ = dynamic_cast<TH1*> (gROOT->FindObject(Form("generated_z_div_measured_z", folder, folder)));
- Track2Particle1DCreatePlots("correction_maponly-negative.root", upperPtLimit);
+ Prepare1DPlot(corrX);
+ Prepare1DPlot(corrY);
+ Prepare1DPlot(corrZ);
- TH1* negX = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_x_div_meas_nTrackToNPart_x")->Clone("neg_x"));
- TH1* negY = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_y_div_meas_nTrackToNPart_y")->Clone("neg_y"));
- TH1* negZ = dynamic_cast<TH1*> (gROOT->FindObject("gene_nTrackToNPart_z_div_meas_nTrackToNPart_z")->Clone("neg_z"));
+ corrX->SetTitle("a) z projection");
+ corrY->SetTitle("a) #eta projection");
+ corrZ->SetTitle("b) p_{T} projection");
- //printf("%f %f %f %f\n", posX->GetBinContent(20), posX->GetBinError(20), negX->GetBinContent(20), negX->GetBinError(20));
+ corrY->GetYaxis()->SetTitle("correction factor");
+ corrZ->GetYaxis()->SetTitle("correction factor");
- posX->Divide(negX);
- posY->Divide(negY);
- posZ->Divide(negZ);
+ corrZ->GetXaxis()->SetRangeUser(0, upperPtLimit);
- //printf("%f %f\n", posX->GetBinContent(20), posX->GetBinError(20));
+ TString canvasName;
+ canvasName.Form("Track2Particle1D_%s", folder);
+ TCanvas* canvas = new TCanvas(canvasName, canvasName, 1200, 400);
+ canvas->Divide(3, 1);
- Prepare1DPlot(posX);
- Prepare1DPlot(posY);
- Prepare1DPlot(posZ);
+ canvas->cd(1);
+ InitPad();
+ corrX->DrawCopy();
- Float_t min = 0.8;
- Float_t max = 1.2;
+ canvas->cd(2);
+ InitPad();
+ corrY->Draw();
- posX->SetMinimum(min);
- posX->SetMaximum(max);
- posY->SetMinimum(min);
- posY->SetMaximum(max);
- posZ->SetMinimum(min);
- posZ->SetMaximum(max);
+ canvas->cd(3);
+ InitPad();
+ corrZ->Draw();
- posZ->GetXaxis()->SetRangeUser(0, upperPtLimit);
+ canvas->SaveAs(Form("Track2Particle1D_%s_%f.gif", fileName, upperPtLimit));
+ canvas->SaveAs(Form("Track2Particle1D_%s_%f.eps", fileName, upperPtLimit));
- posX->GetYaxis()->SetTitleOffset(1.7);
- posX->GetYaxis()->SetTitle("C_{+} / C_{-}");
- posY->GetYaxis()->SetTitleOffset(1.7);
- posY->GetYaxis()->SetTitle("C_{+} / C_{-}");
- posZ->GetYaxis()->SetTitleOffset(1.7);
- posZ->GetYaxis()->SetTitle("C_{+} / C_{-}");
+ //TPaveText* pave = new TPaveText(-0.4, 1.35, 0.4, 1.45);
- TCanvas* canvas = new TCanvas("CompareTrack2Particle1D", "CompareTrack2Particle1D", 1200, 400);
- canvas->Divide(3, 1);
+ canvasName.Form("Track2Particle1D_%s_etapt", folder);
+ TCanvas* canvas = new TCanvas(canvasName, canvasName, 1000, 500);
+ canvas->Divide(2, 1);
canvas->cd(1);
InitPad();
- posX->Draw();
+ corrY->GetXaxis()->SetRangeUser(-0.99, 0.99);
+ corrY->GetYaxis()->SetRangeUser(1, 1.5);
+ corrY->GetYaxis()->SetTitleOffset(1.5);
+ corrY->DrawCopy();
+ TPaveText* pave = new TPaveText(0.3, 0.7, 0.7, 0.8, "NDC");
+ pave->AddText("|z| < 10 cm");
+ pave->AddText("0.3 GeV/c < p_{T} < 10 GeV/c");
+ pave->Draw();
canvas->cd(2);
InitPad();
- posY->Draw();
+ gPad->SetLogx();
+ corrZ->GetYaxis()->SetRangeUser(1, 2.5);
+ corrZ->GetXaxis()->SetRangeUser(0.101, upperPtLimit);
+ corrZ->GetYaxis()->SetTitleOffset(1.5);
+ corrZ->DrawCopy();
+ pave = new TPaveText(0.5, 0.7, 0.8, 0.8, "NDC");
+ pave->AddText("|z| < 10 cm");
+ pave->AddText("|#eta| < 0.8");
+ pave->Draw();
+
+ canvas->SaveAs(Form("Track2Particle1D_etapt_%s_%f.eps", fileName, upperPtLimit));
+ canvas->SaveAs(Form("Track2Particle1D_etapt_%s_%f.gif", fileName, upperPtLimit));
+}
- canvas->cd(3);
- InitPad();
- posZ->Draw();
+void CompareTrack2Particle1D(Float_t upperPtLimit = 9.9)
+{
+ gSystem->Load("libPWG0base");
+
+ // particle type
+ for (Int_t particle=0; particle<4; ++particle)
+ {
+ TString dirName;
+ dirName.Form("correction_%d", particle);
+ Track2Particle1DCreatePlots("systematics-detail-only-positive.root", dirName, upperPtLimit);
+
+ TString tmpx, tmpy, tmpz;
+ tmpx.Form("gene_%s_nTrackToNPart_x_div_meas_%s_nTrackToNPart_x", dirName.Data(), dirName.Data());
+ tmpy.Form("gene_%s_nTrackToNPart_y_div_meas_%s_nTrackToNPart_y", dirName.Data(), dirName.Data());
+ tmpz.Form("gene_%s_nTrackToNPart_z_div_meas_%s_nTrackToNPart_z", dirName.Data(), dirName.Data());
+
+ TH1* posX = dynamic_cast<TH1*> (gROOT->FindObject(tmpx)->Clone("pos_x"));
+ TH1* posY = dynamic_cast<TH1*> (gROOT->FindObject(tmpy)->Clone("pos_y"));
+ TH1* posZ = dynamic_cast<TH1*> (gROOT->FindObject(tmpz)->Clone("pos_z"));
+
+ Track2Particle1DCreatePlots("systematics-detail-only-negative.root", dirName, upperPtLimit);
+
+ TH1* negX = dynamic_cast<TH1*> (gROOT->FindObject(tmpx)->Clone("neg_x"));
+ TH1* negY = dynamic_cast<TH1*> (gROOT->FindObject(tmpy)->Clone("neg_y"));
+ TH1* negZ = dynamic_cast<TH1*> (gROOT->FindObject(tmpz)->Clone("neg_z"));
+
+ posX->Divide(negX);
+ posY->Divide(negY);
+ posZ->Divide(negZ);
+
+ Prepare1DPlot(posX);
+ Prepare1DPlot(posY);
+ Prepare1DPlot(posZ);
+
+ Float_t min = 0.8;
+ Float_t max = 1.2;
+
+ posX->SetMinimum(min);
+ posX->SetMaximum(max);
+ posY->SetMinimum(min);
+ posY->SetMaximum(max);
+ posZ->SetMinimum(min);
+ posZ->SetMaximum(max);
+
+ posZ->GetXaxis()->SetRangeUser(0, upperPtLimit);
+
+ posX->GetYaxis()->SetTitleOffset(1.7);
+ posX->GetYaxis()->SetTitle("C_{+} / C_{-}");
+ posY->GetYaxis()->SetTitleOffset(1.7);
+ posY->GetYaxis()->SetTitle("C_{+} / C_{-}");
+ posZ->GetYaxis()->SetTitleOffset(1.7);
+ posZ->GetYaxis()->SetTitle("C_{+} / C_{-}");
+
+ posZ->GetXaxis()->SetRangeUser(0, 1);
- canvas->SaveAs(Form("CompareTrack2Particle1D_%f.gif", upperPtLimit));
- canvas->SaveAs(Form("CompareTrack2Particle1D_%f.eps", upperPtLimit));
+ TString canvasName;
+ canvasName.Form("PosNegRatios_%s_%f", ((particle == 0) ? "Pi" : ((particle == 1) ? "K" : ((particle == 2) ? "p" : "other"))), upperPtLimit);
+
+ TCanvas* canvas = new TCanvas(canvasName, canvasName, 1200, 400);
+ canvas->Divide(3, 1);
+
+ canvas->cd(1);
+ InitPad();
+ posX->DrawCopy();
+
+ canvas->cd(2);
+ InitPad();
+ posY->DrawCopy();
+
+ canvas->cd(3);
+ InitPad();
+ posZ->DrawCopy();
+
+ canvas->SaveAs(Form("%s.gif", canvas->GetName()));
+ canvas->SaveAs(Form("%s.eps", canvas->GetName()));
+ }
}
void Track2Particle2DCreatePlots(const char* fileName = "correction_map.root")
{
TFile::Open(fileName);
AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
- dNdEtaCorrection->LoadHistograms(fileName, "dndeta_correction");
+ dNdEtaCorrection->LoadHistograms();
- TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetGeneratedHistogram();
- TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetMeasuredHistogram();
+ TH3F* gene = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetTrackCorrection()->GetGeneratedHistogram();
+ TH3F* meas = dNdEtaCorrection->GetTrack2ParticleCorrection()->GetTrackCorrection()->GetMeasuredHistogram();
gene->GetZaxis()->SetRangeUser(0.3, 10);
meas->GetZaxis()->SetRangeUser(0.3, 10);
meas->GetXaxis()->SetRange(0, 0);
}
-void Track2Particle2D(const char* fileName = "correction_map.root")
+void Track2Particle2D(const char* fileName = "correction_map.root", const char* folder = "dndeta_correction")
{
gSystem->Load("libPWG0base");
Track2Particle2DCreatePlots(fileName);
- TH2* corrYX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx"));
- TH2* corrZX = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zx_div_meas_nTrackToNPart_zx"));
- TH2* corrZY = dynamic_cast<TH2*> (gROOT->FindObject("gene_nTrackToNPart_zy_div_meas_nTrackToNPart_zy"));
+ TH2* corrYX = dynamic_cast<TH2*> (gROOT->FindObject("generated_yx_div_measured_yx"));
+ TH2* corrZX = dynamic_cast<TH2*> (gROOT->FindObject("generated_zx_div_measured_zx"));
+ TH2* corrZY = dynamic_cast<TH2*> (gROOT->FindObject("generated_zy_div_measured_zy"));
/* this reads them from the file
TH2* corrYX = dynamic_cast<TH2*> (file->Get("dndeta_correction/gene_nTrackToNPart_yx_div_meas_nTrackToNPart_yx"));
canvas->SaveAs("Track2Particle3DAll.eps");
}
+void MultiplicityMC(Int_t xRangeMax = 50)
+{
+ TFile* file = TFile::Open("multiplicityMC.root");
+
+ if (!file)
+ {
+ printf("multiplicityMC.root could not be opened.\n");
+ return;
+ }
+
+ TH1F* fMultiplicityESD = dynamic_cast<TH1F*> (file->Get("fMultiplicityESD"));
+ TH1F* fMultiplicityMC = dynamic_cast<TH1F*> (file->Get("fMultiplicityMC"));
+ TH2F* fCorrelation = dynamic_cast<TH2F*> (file->Get("fCorrelation"));
+
+ TH1F* correction = new TH1F("MultiplicityMC_correction", "MultiplicityMC_correction;Ntracks;Npart", 76, -0.5, 75.5);
+ TH1F* correctionWidth = new TH1F("MultiplicityMC_correctionwidth", "MultiplicityMC_correctionwidth;Ntracks;Npart", 76, -0.5, 75.5);
+ //fMultiplicityMC->GetNbinsX(), fMultiplicityMC->GetXaxis()->GetXmin(), fMultiplicityMC->GetXaxis()->GetXmax());
+ for (Int_t i=1; i<=correction->GetNbinsX(); ++i)
+ {
+ TH1D* proj = fCorrelation->ProjectionX("_px", i, i+1);
+ proj->Fit("gaus", "0");
+ correction->SetBinContent(i, proj->GetFunction("gaus")->GetParameter(1));
+ correctionWidth->SetBinContent(i, proj->GetFunction("gaus")->GetParameter(2));
+
+ continue;
+
+ // draw for debugging
+ new TCanvas;
+ proj->DrawCopy();
+ proj->GetFunction("gaus")->DrawCopy("SAME");
+ }
+
+ TH1F* fMultiplicityESDCorrected = new TH1F("fMultiplicityESDCorrected", "fMultiplicityESDCorrected", 2010, -0.5, 200.5);
+
+ for (Int_t i=1; i<=correction->GetNbinsX(); ++i)
+ {
+ Float_t mean = correction->GetBinContent(i);
+ Float_t width = correctionWidth->GetBinContent(i);
+
+ Int_t fillBegin = fMultiplicityESDCorrected->FindBin(mean - width * 3);
+ Int_t fillEnd = fMultiplicityESDCorrected->FindBin(mean + width * 3);
+ printf("bin %d mean %f width %f, filling from %d to %d\n", i, mean, width, fillBegin, fillEnd);
+
+ for (Int_t j=fillBegin; j <= fillEnd; ++j)
+ {
+ fMultiplicityESDCorrected->AddBinContent(j, TMath::Gaus(fMultiplicityESDCorrected->GetXaxis()->GetBinCenter(j), mean, width, kTRUE) * fMultiplicityESD->GetBinContent(i));
+ }
+ }
+
+ TH1F* fMultiplicityESDCorrectedRebinned = dynamic_cast<TH1F*> (fMultiplicityESDCorrected->Clone("fMultiplicityESDCorrectedRebinned"));
+ fMultiplicityESDCorrectedRebinned->Rebin(10);
+ fMultiplicityESDCorrectedRebinned->Scale(0.1);
+
+ TH1F* ratio = dynamic_cast<TH1F*> (fMultiplicityESD->Clone("multiplicity_ratio"));
+ ratio->SetTitle("ratio;Ntracks;Nreco/Ngene");
+ ratio->Divide(fMultiplicityMC);
+
+ TH1F* ratio2 = dynamic_cast<TH1F*> (fMultiplicityESDCorrectedRebinned->Clone("multiplicity_ratio_corrected"));
+ ratio2->Divide(fMultiplicityMC);
+
+ TCanvas* canvas = new TCanvas("MultiplicityMC", "MultiplicityMC", 1500, 1000);
+ canvas->Divide(3, 2);
+
+ fMultiplicityESD->GetXaxis()->SetRangeUser(0, xRangeMax);
+ ratio->GetXaxis()->SetRangeUser(0, xRangeMax);
+ fCorrelation->GetXaxis()->SetRangeUser(0, xRangeMax);
+ fCorrelation->GetYaxis()->SetRangeUser(0, xRangeMax);
+ correction->GetXaxis()->SetRangeUser(0, xRangeMax);
+ fMultiplicityESDCorrected->GetXaxis()->SetRangeUser(0, xRangeMax);
+ fMultiplicityESDCorrectedRebinned->GetXaxis()->SetRangeUser(0, xRangeMax);
+
+ canvas->cd(1); //InitPad();
+ fMultiplicityESD->Draw();
+ fMultiplicityMC->SetLineColor(2);
+ fMultiplicityMC->Draw("SAME");
+
+ TLegend* legend = new TLegend(0.6, 0.7, 0.85, 0.85);
+ legend->AddEntry(fMultiplicityESD, "ESD");
+ legend->AddEntry(fMultiplicityMC, "MC");
+ legend->Draw();
+
+ canvas->cd(2);
+ fCorrelation->Draw("COLZ");
+
+ canvas->cd(3);
+ correction->Draw();
+ //correction->Fit("pol1");
+ correctionWidth->SetLineColor(2);
+ correctionWidth->Draw("SAME");
+
+ legend = new TLegend(0.2, 0.7, 0.45, 0.85);
+ legend->AddEntry(correction, "#bar{x}");
+ legend->AddEntry(correctionWidth, "#sigma");
+ legend->Draw();
+
+ canvas->cd(4);
+ ratio->Draw();
+
+ ratio2->SetLineColor(2);
+ ratio2->Draw("SAME");
+
+ legend = new TLegend(0.6, 0.7, 0.85, 0.85);
+ legend->AddEntry(ratio, "uncorrected");
+ legend->AddEntry(ratio2, "corrected");
+ legend->Draw();
+
+ canvas->cd(5);
+ fMultiplicityESDCorrected->SetLineColor(kBlue);
+ fMultiplicityESDCorrected->Draw();
+ fMultiplicityMC->Draw("SAME");
+ fMultiplicityESD->Draw("SAME");
+
+ legend = new TLegend(0.6, 0.7, 0.85, 0.85);
+ legend->AddEntry(fMultiplicityESDCorrected, "ESD corrected");
+ legend->AddEntry(fMultiplicityMC, "MC");
+ legend->AddEntry(fMultiplicityESD, "ESD");
+ legend->Draw();
+
+ canvas->cd(6);
+ fMultiplicityESDCorrectedRebinned->SetLineColor(kBlue);
+ fMultiplicityESDCorrectedRebinned->Draw();
+ fMultiplicityMC->Draw("SAME");
+
+ legend = new TLegend(0.6, 0.7, 0.85, 0.85);
+ legend->AddEntry(fMultiplicityESDCorrectedRebinned, "ESD corrected");
+ legend->AddEntry(fMultiplicityMC, "MC");
+ legend->Draw();
+
+ canvas->SaveAs("MultiplicityMC.gif");
+}
+
+void MultiplicityESD()
+{
+ TFile* file = TFile::Open("multiplicityESD.root");
+
+ if (!file)
+ {
+ printf("multiplicityESD.root could not be opened.\n");
+ return;
+ }
+
+ TH1F* fMultiplicityESD = dynamic_cast<TH1F*> (file->Get("fMultiplicity"));
+
+ TCanvas* canvas = new TCanvas("MultiplicityESD", "MultiplicityESD", 500, 500);
+
+ fMultiplicityESD->Draw();
+}
+
void drawPlots(Int_t max)
{
gMax = max;
drawPlots(5);
drawPlots(2);
}
+
+void CompareCorrection2Measured(const char* dataInput = "analysis_esd_raw.root", const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction")
+{
+ loadlibs();
+
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
+ TFile::Open(correctionMapFile);
+ dNdEtaCorrection->LoadHistograms();
+
+ TFile* file = TFile::Open(dataInput);
+
+ if (!file)
+ {
+ cout << "Error. File not found" << endl;
+ return;
+ }
+
+ dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
+ fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
+
+ gROOT->cd();
+
+ TH3* hist1 = (TH3*) dNdEtaCorrection->GetTrack2ParticleCorrection()->GetTrackCorrection()->GetMeasuredHistogram()->Clone("mc");
+ hist1->SetTitle("mc");
+ Printf("mc contains %f entries", hist1->Integral());
+ Printf("mc contains %f entries in |vtx-z| < 10, pt > 0.3", hist1->Integral(hist1->GetXaxis()->FindBin(-9.9), hist1->GetXaxis()->FindBin(9.9), 1, hist1->GetNbinsY(), hist1->GetZaxis()->FindBin(0.301), hist1->GetNbinsZ()));
+
+ TH3* hist2 = (TH3*) fdNdEtaAnalysis->GetData()->GetTrackCorrection()->GetMeasuredHistogram()->Clone("esd");
+ hist2->SetTitle("esd");
+ Printf("esd contains %f entries", hist2->Integral());
+ Printf("esd contains %f entries in |vtx-z| < 10, pt > 0.3", hist2->Integral(hist2->GetXaxis()->FindBin(-9.9), hist2->GetXaxis()->FindBin(9.9), 1, hist2->GetNbinsY(), hist2->GetZaxis()->FindBin(0.301), hist2->GetNbinsZ()));
+
+ AliPWG0Helper::CreateDividedProjections(hist1, hist2);
+ AliPWG0Helper::CreateDividedProjections(hist1, hist2, "x");
+
+ hist1->GetXaxis()->SetRange(hist1->GetXaxis()->FindBin(-10), hist2->GetXaxis()->FindBin(10));
+ hist2->GetXaxis()->SetRange(hist1->GetXaxis()->FindBin(-10), hist2->GetXaxis()->FindBin(10));
+ AliPWG0Helper::CreateDividedProjections(hist1, hist2, "y");
+
+ new TCanvas; gROOT->FindObject("mc_yx_div_esd_yx")->Draw("COLZ");
+ new TCanvas; gROOT->FindObject("mc_zx_div_esd_zx")->Draw("COLZ");
+ new TCanvas; gROOT->FindObject("mc_zy_div_esd_zy")->Draw("COLZ");
+ new TCanvas; gROOT->FindObject("mc_x_div_esd_x")->Draw("COLZ");
+ new TCanvas; gROOT->FindObject("mc_y_div_esd_y")->Draw("COLZ");
+}
+
+void CompareMeasured2Measured(const char* dataInput = "analysis_esd_raw.root", const char* dataInput2 = "analysis_esd_raw.root")
+{
+ loadlibs();
+
+ TFile* file = TFile::Open(dataInput);
+
+ if (!file)
+ {
+ cout << "Error. File not found" << endl;
+ return;
+ }
+
+ dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
+ fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
+
+ TFile* file = TFile::Open(dataInput2);
+
+ if (!file)
+ {
+ cout << "Error. File not found" << endl;
+ return;
+ }
+
+ dNdEtaAnalysis* fdNdEtaAnalysis2 = new dNdEtaAnalysis("dndeta2", "dndeta2");
+ fdNdEtaAnalysis2->LoadHistograms("fdNdEtaAnalysisESD");
+
+ gROOT->cd();
+
+ TH3* hist1 = (TH3*) fdNdEtaAnalysis->GetData()->GetTrackCorrection()->GetMeasuredHistogram()->Clone("esd1");
+ hist1->SetTitle("esd1");
+ Printf("esd1 contains %f entries", hist1->GetEntries());
+ Printf("esd1 contains %f entries in |vtx-z| < 10, pt > 0.3", hist1->Integral(hist1->GetXaxis()->FindBin(-9.9), hist1->GetXaxis()->FindBin(9.9), 1, hist1->GetNbinsY(), hist1->GetZaxis()->FindBin(0.301), hist1->GetNbinsZ()));
+
+ TH3* hist2 = (TH3*) fdNdEtaAnalysis2->GetData()->GetTrackCorrection()->GetMeasuredHistogram()->Clone("esd2");
+ hist2->SetTitle("esd2");
+ Printf("esd2 contains %f entries", hist2->GetEntries());
+ Printf("esd2 contains %f entries in |vtx-z| < 10, pt > 0.3", hist2->Integral(hist2->GetXaxis()->FindBin(-9.9), hist2->GetXaxis()->FindBin(9.9), 1, hist2->GetNbinsY(), hist2->GetZaxis()->FindBin(0.301), hist2->GetNbinsZ()));
+
+ AliPWG0Helper::CreateDividedProjections(hist1, hist2);
+
+ new TCanvas; gROOT->FindObject("esd1_yx_div_esd2_yx")->Draw("COLZ");
+ new TCanvas; gROOT->FindObject("esd1_zx_div_esd2_zx")->Draw("COLZ");
+ new TCanvas; gROOT->FindObject("esd1_zy_div_esd2_zy")->Draw("COLZ");
+
+ TH2* event1 = (TH2*) fdNdEtaAnalysis->GetData()->GetEventCorrection()->GetMeasuredHistogram()->Clone("event1");
+ TH2* event2 = (TH2*) fdNdEtaAnalysis2->GetData()->GetEventCorrection()->GetMeasuredHistogram()->Clone("event2");
+
+ Printf("event1 contains %f entries", event1->GetEntries());
+ Printf("event2 contains %f entries", event2->GetEntries());
+ Printf("event1 integral is %f", event1->Integral());
+ Printf("event2 integral is %f", event2->Integral());
+ Printf("event1 contains %f entries in |vtx-z| < 10", event1->Integral(event1->GetXaxis()->FindBin(-9.9), event1->GetXaxis()->FindBin(9.9), 1, event1->GetNbinsY()));
+ Printf("event2 contains %f entries in |vtx-z| < 10", event2->Integral(event2->GetXaxis()->FindBin(-9.9), event2->GetXaxis()->FindBin(9.9), 1, event2->GetNbinsY()));
+
+ projx1 = event1->ProjectionX();
+ projx2 = event2->ProjectionX();
+
+ new TCanvas; projx1->DrawCopy(); projx2->SetLineColor(2); projx2->DrawCopy("SAME");
+
+ projx1->Divide(projx2);
+ new TCanvas; projx1->Draw();
+
+ event1->Divide(event2);
+ new TCanvas; event1->Draw("COLZ");
+
+}
+
+void DrawTrackletOrigin()
+{
+ TFile::Open("correction_map.root");
+
+ Int_t colors[] = {1,2,3,4,6,7,8,102};
+
+ Int_t maxHists = 8;
+ TH1* hist[8];
+
+ const char* titles[] = { "PP", "SS", "PP'", "PS", "PS*", "SP", "SS'", "" };
+
+ TLegend* legend = new TLegend(0.75, 0.6, 0.95, 0.95);
+
+ Int_t total = 0;
+ for (Int_t i=0; i<maxHists; i++)
+ {
+ hist[i] = (TH1*) gFile->Get(Form("fDeltaPhi_%d", i));
+ //hist[i]->Rebin(20);
+ hist[i]->SetStats(kFALSE);
+ hist[i]->SetLineColor(colors[i]);
+ hist[i]->GetXaxis()->SetRangeUser(-0.2, 0.2);
+ hist[i]->Draw(((i == 0) ? "" : "SAME"));
+
+ total += hist[i]->GetEntries();
+
+ if (i != 7)
+ legend->AddEntry(hist[i], titles[i]);
+ }
+
+ legend->Draw();
+ gPad->SetLogy();
+
+ Printf("Total: %d", total);
+ for (Int_t i=0; i<maxHists; i++)
+ Printf("Histogram %d (%s) containts %.2f %% of the entries", i, titles[i], 100.0 * hist[i]->GetEntries() / total);
+
+ printf("| Delta phi | Acc. %% | ");
+ for (Int_t i=0; i<maxHists; i++)
+ printf("%3s %% | ", titles[i]);
+ Printf("");
+
+ for (Float_t f = 0.01; f < 0.09; f += 0.01)
+ {
+ Int_t integralBegin = hist[0]->GetXaxis()->FindBin(-f);
+ Int_t integralEnd = hist[0]->GetXaxis()->FindBin(f);
+
+ Int_t total2 = 0;
+ for (Int_t i=0; i<maxHists; i++)
+ total2 += (Int_t) hist[i]->Integral(integralBegin, integralEnd);
+
+ printf("| %.2f | %6.2f | ", f, 100.0 * total2 / total);
+
+ for (Int_t i=0; i<maxHists; i++)
+ printf("%6.2f | ", (hist[i]->GetEntries() > 0) ? (100.0 * hist[i]->Integral(integralBegin, integralEnd) / hist[i]->GetEntries()) : -1.0);
+ Printf("");
+ }
+}