]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/dNdEta/drawPlots.C
added correction for events with vertex but 0 tracks
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / drawPlots.C
index 420370519611d77a4123ade5b63cd4c0a890d268..4e1f19f83f980a27bb9ea93f9aea3b120d02d7e0 100644 (file)
@@ -20,6 +20,12 @@ Int_t gMax = 5;
 
 extern TSystem* gSystem;
 
+void loadlibs()
+{
+  gSystem->Load("libANALYSIS");
+  gSystem->Load("libPWG0base");
+}
+
 void SetRanges(TAxis* axis)
 {
   if (strcmp(axis->GetTitle(), "#eta") == 0)
@@ -94,6 +100,23 @@ void InitPadCOLZ()
   gPad->SetGridy();
 }
 
+// --- end of helpers --- begin functions ---
+
+void DrawOverview(const char* fileName = "correction_map.root", const char* dirName = "dndeta_correction")
+{
+  loadlibs();
+  if (!TFile::Open(fileName))
+    return;
+
+  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");
@@ -105,10 +128,10 @@ void ComparedNdEta(const char* ESDfolder = "dndeta", const char* MCfolder = "dnd
   TFile::Open(mcFile);
   dNdEtaAnalysis* fdNdEtaAnalysisMC = new dNdEtaAnalysis(MCfolder, MCfolder);
   fdNdEtaAnalysisMC->LoadHistograms();
-  fdNdEtaAnalysisMC->Finish(0, 0.3);
+  //fdNdEtaAnalysisMC->Finish(0, 0.3, AlidNdEtaCorrection::kNone);
 
   for (Int_t i=0; i<dNdEtaAnalysis::kVertexBinning; ++i)
-    fdNdEtaAnalysisESD->GetdNdEtaHistogram(i)->Divide(fdNdEtaAnalysisMC->GetdNdEtaHistogram(i));
+    fdNdEtaAnalysisESD->GetdNdEtaPtCutOffCorrectedHistogram(i)->Divide(fdNdEtaAnalysisMC->GetdNdEtaPtCutOffCorrectedHistogram(i));
 
   fdNdEtaAnalysisESD->DrawHistograms();
 }
@@ -202,89 +225,204 @@ void CompareTrack2ParticleWithAnalysisData(const char* correctionMapFile = "corr
   diff->Draw();
 }
 
-void dNdEta(Bool_t onlyESD = kFALSE)
+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_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");
+  TH1* histESD = (TH1*) file->Get("dndeta/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");
 
-  TCanvas* canvas = new TCanvas("dNdEta1", "dNdEta1", 500, 500);
+  TH1* histESDNoEvCorr = (TH1*) file->Get("dndeta/dNdEta_noteventcorrected");
 
   Prepare1DPlot(histESD);
-  Prepare1DPlot(histESDNoPt);
   Prepare1DPlot(histESDMB);
   Prepare1DPlot(histESDMBVtx);
 
-  histESD->SetLineColor(0);
-  histESDMB->SetLineColor(0);
-  histESDMBVtx->SetLineColor(0);
+  Prepare1DPlot(histESDNoPt);
+  Prepare1DPlot(histESDMBNoPt);
+  Prepare1DPlot(histESDMBVtxNoPt);
+  Prepare1DPlot(histESDMBTracksNoPt);
+
+  Prepare1DPlot(histESDNoEvCorr);
+  
+  histESD->SetLineWidth(0);
+  histESDMB->SetLineWidth(0);
+  histESDMBVtx->SetLineWidth(0);
+
+  histESDNoPt->SetLineWidth(0);
+  histESDMBNoPt->SetLineWidth(0);
+  histESDMBVtxNoPt->SetLineWidth(0);
+
+  histESD->SetMarkerColor(1);
+  histESDMB->SetMarkerColor(2);
+  histESDMBVtx->SetMarkerColor(3);
+
+  histESD->SetLineColor(1);
+  histESDMB->SetLineColor(2);
+  histESDMBVtx->SetLineColor(3);
 
-  histESD->SetMarkerColor(kRed);
-  histESDMB->SetMarkerColor(kBlue);
-  histESDMBVtx->SetMarkerColor(103);
+  histESDNoPt->SetMarkerColor(1);
+  histESDMBNoPt->SetMarkerColor(2);
+  histESDMBVtxNoPt->SetMarkerColor(3);
+  histESDMBTracksNoPt->SetMarkerColor(4);
+
+  histESDNoEvCorr->SetMarkerColor(6);
 
   histESD->SetMarkerStyle(20);
   histESDMB->SetMarkerStyle(21);
   histESDMBVtx->SetMarkerStyle(22);
 
-  TH2F* dummy = new TH2F("dummy", "", 100, -1.5, 1.5, 1000, 0.1, histESDMBVtx->GetMaximum() * 1.1);
+  histESDNoPt->SetMarkerStyle(20);
+  histESDMBNoPt->SetMarkerStyle(21);
+  histESDMBVtxNoPt->SetMarkerStyle(22);
+  histESDMBTracksNoPt->SetMarkerStyle(23);
+  
+  histESDNoEvCorr->SetMarkerStyle(29);
+
+  TH2F* dummy = new TH2F("dummy", "", 100, -1.5, 1.5, 1000, 0, histESDMBVtx->GetMaximum() * 1.1);
   Prepare1DPlot(dummy);
   dummy->SetStats(kFALSE);
   dummy->SetXTitle("#eta");
   dummy->SetYTitle("dN_{ch}/d#eta");
   dummy->GetYaxis()->SetTitleOffset(1);
 
-  Float_t etaLimit = 0.7999;
+  Float_t etaLimit = 1.2999;
 
   histESDMBVtx->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
   histESDMB->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
   histESD->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+
   histESDNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+  histESDMBNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+  histESDMBVtxNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+  histESDMBTracksNoPt->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
+
+  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* 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();
+
+  fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone);
+  TH1* histMCPtCut = (TH1*) fdNdEtaAnalysis->GetdNdEtaHistogram(0)->Clone("histMCPtCut");
+
+  fdNdEtaAnalysis2->Finish(0, 0.3, AlidNdEtaCorrection::kNone, 1);
+  TH1* histMCPtCutNoEvCorr = (TH1*) fdNdEtaAnalysis2->GetdNdEtaHistogram(0)->Clone("histMCPtCutNoEvCorr");
+
+  fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTr", "dndetaTr");
+  fdNdEtaAnalysis->LoadHistograms();
+  fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone);
+  TH1* histMCTrPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(0);
+
+  fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTrVtx", "dndetaTrVtx");
+  fdNdEtaAnalysis->LoadHistograms();
+  fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone, 1);
+  TH1* histMCTrVtxPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(0);
+
+  fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTracks", "dndetaTracks");
+  fdNdEtaAnalysis->LoadHistograms();
+  fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone, 1);
+  TH1* histMCTracksPtCut = fdNdEtaAnalysis->GetdNdEtaHistogram(0);
 
   TCanvas* canvas2 = new TCanvas("dNdEta2", "dNdEta2", 500, 500);
 
   Prepare1DPlot(histMC);
-  Prepare1DPlot(histMCPtCut);
+  Prepare1DPlot(histMCTr);
+  Prepare1DPlot(histMCTrVtx);
 
-  histMC->SetLineColor(kBlue);
-  histMCPtCut->SetLineColor(104);
-  histESDNoPt->SetLineColor(102);
+  Prepare1DPlot(histMCPtCut);
+  Prepare1DPlot(histMCPtCutNoEvCorr);
+  Prepare1DPlot(histMCTrPtCut);
+  Prepare1DPlot(histMCTrVtxPtCut);
+  if (histMCTracksPtCut)
+    Prepare1DPlot(histMCTracksPtCut);
+
+  histMC->SetLineColor(1);
+  histMCTr->SetLineColor(2);
+  histMCTrVtx->SetLineColor(3);
+
+  histMCPtCut->SetLineColor(1);
+  histMCTrPtCut->SetLineColor(2);
+  histMCTrVtxPtCut->SetLineColor(3);
+  if (histMCTracksPtCut)
+    histMCTracksPtCut->SetLineColor(4);
+  histMCPtCutNoEvCorr->SetLineColor(6);
 
   TH2* dummy2 = (TH2F*) dummy->Clone("dummy2");
   Prepare1DPlot(dummy2);
-  dummy2->GetYaxis()->SetRangeUser(0, histESD->GetMaximum() * 1.1);
+  dummy2->GetYaxis()->SetRangeUser(0, histESDMBVtx->GetMaximum() * 1.1);
 
   dummy2->DrawCopy();
   histMC->Draw("SAME");
-//  histMC->Draw();
+  histMCTr->Draw("SAME");
+  histMCTrVtx->Draw("SAME");
   histESD->Draw("SAME");
+  histESDMB->Draw("SAME");
+  histESDMBVtx->Draw("SAME");
   histESDNoPt->Draw("SAME");
+  histESDMBNoPt->Draw("SAME");
+  histESDMBVtxNoPt->Draw("SAME");
+  histESDMBTracksNoPt->Draw("SAME");
+  histESDNoEvCorr->Draw("SAME");
   histMCPtCut->Draw("SAME");
+  histMCPtCutNoEvCorr->Draw("SAME");
+  histMCTrPtCut->Draw("SAME");
+  histMCTrVtxPtCut->Draw("SAME");
+  if (histMCTracksPtCut)
+    histMCTracksPtCut->Draw("SAME");
 
-  canvas2->SaveAs("dNdEta2.gif");
-  canvas2->SaveAs("dNdEta2.eps");
+  if (save)
+  {
+    canvas2->SaveAs("dNdEta2.gif");
+    canvas2->SaveAs("dNdEta2.eps");
+  }
 
   TH1* ratio = (TH1*) histMC->Clone("ratio");
   TH1* ratioNoPt = (TH1*) histMCPtCut->Clone("ratioNoPt");
@@ -292,20 +430,34 @@ void dNdEta(Bool_t onlyESD = kFALSE)
   ratio->Divide(histESD);
   ratioNoPt->Divide(histESDNoPt);
 
-  ratio->GetXaxis()->SetRangeUser(-0.7999, 0.7999);
+  ratio->GetXaxis()->SetRangeUser(-etaLimit, etaLimit);
 
   ratio->SetLineColor(1);
   ratioNoPt->SetLineColor(2);
 
-  TCanvas* canvas3 = new TCanvas("dNdEta", "dNdEta", 700, 700);
+  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.4, 0.98, 0.98);
+  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.4);
+  TPad* pad2 = new TPad("dNdEta_2", "", 0, 0.02, 0.98, 0.5);
   pad2->Draw();
 
   pad1->SetRightMargin(0.05);
@@ -317,13 +469,18 @@ void dNdEta(Bool_t onlyESD = kFALSE)
 
   pad1->cd();
 
-  TLegend* legend = new TLegend(0.4, 0.2, 0.65, 0.4);
+  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");
@@ -335,10 +492,13 @@ void dNdEta(Bool_t onlyESD = kFALSE)
   pad2->cd();
   pad2->SetBottomMargin(0.15);
 
+  Float_t min = TMath::Min(0.961, ratio->GetMinimum() * 0.95);
+  Float_t max = TMath::Max(1.049, ratio->GetMaximum() * 1.05);
+
   TH1F dummy3("dummy3", ";#eta;Ratio: MC / ESD", 1, -1.5, 1.5);
   dummy3.SetStats(kFALSE);
   dummy3.SetBinContent(1, 1);
-  dummy3.GetYaxis()->SetRangeUser(0.961, 1.049);
+  dummy3.GetYaxis()->SetRangeUser(min, max);
   dummy3.SetLineWidth(2);
   dummy3.GetXaxis()->SetLabelSize(0.06);
   dummy3.GetYaxis()->SetLabelSize(0.06);
@@ -353,8 +513,11 @@ void dNdEta(Bool_t onlyESD = kFALSE)
 
   canvas3->Modified();
 
-  canvas3->SaveAs("dNdEta.gif");
-  canvas3->SaveAs("dNdEta.eps");
+  if (save)
+  {
+    canvas3->SaveAs("dNdEta.gif");
+    canvas3->SaveAs("dNdEta.eps");
+  }
 
   TCanvas* canvas4 = new TCanvas("ratio", "ratio", 700, 500);
 
@@ -406,12 +569,13 @@ void ptCutoff()
 {
   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, -100, kTRUE);
+  dNdEtaCorrection->GetMeasuredFraction(AlidNdEtaCorrection::kINEL, 0.3, -100, kTRUE);
 
-  TH1* hist = dynamic_cast<TH1*> (gROOT->FindObject("gene_dndeta_correction_nTrackToNPart_pt")->Clone("ptcutoff"));
+  TH1* hist = dynamic_cast<TH1*> (gROOT->FindObject("generated_pt")->Clone("ptcutoff"));
 
   hist->GetXaxis()->SetRangeUser(0, 0.9999);
   hist->SetMinimum(0);
@@ -430,9 +594,10 @@ void ptCutoff()
   canvas->SaveAs("ptCutoff.gif");
   canvas->SaveAs("ptCutoff.eps");
 
-  TH1F* factor = new TH1F("factor", ";#eta;correction factor", 10, -1, 1.000001);
-  for (Float_t eta = -0.9; eta<1; eta += 0.2)
-    factor->Fill(eta, 1.0 / dNdEtaCorrection->GetMeasuredFraction(0.3, eta, kFALSE));
+  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();
@@ -447,16 +612,20 @@ void ptCutoff()
 
 void TriggerBiasVtxRecon(const char* fileName = "correction_map.root", const char* folder = "dndeta_correction")
 {
-  TFile* file = TFile::Open(fileName);
+  gSystem->Load("libPWG0base");
+
+  TFile::Open(fileName);
+  AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection("dndeta_correction", "dndeta_correction");
+  dNdEtaCorrection->LoadHistograms();
 
-  TH2* corrTrigger = dynamic_cast<TH2*> (file->Get(Form("%s/corr_%s_trigger", folder, folder)));
-  TH2* corrVtx = dynamic_cast<TH2*> (file->Get(Form("%s/corr_%s_vtxReco", folder, folder)));
+  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");
@@ -466,11 +635,11 @@ void TriggerBiasVtxRecon(const char* fileName = "correction_map.root", const cha
 
   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));
@@ -483,11 +652,11 @@ void TriggerBiasVtxRecon(const char* fileName = "correction_map.root", const cha
 
   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));
@@ -525,12 +694,12 @@ void TriggerBias1D(const char* fileName = "correction_map.root", const char* fol
 
   TFile* file = TFile::Open(fileName);
   AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(folderName, folderName);
-  dNdEtaCorrection->LoadHistograms(fileName, folderName);
+  dNdEtaCorrection->LoadHistograms();
 
-  TH1* hist = dNdEtaCorrection->GetTriggerBiasCorrection()->Get1DCorrection("x");
-  TH1* hist2 = dNdEtaCorrection->GetTriggerBiasCorrection()->Get1DCorrection("y", -10, 10);
+  TH1* hist = dNdEtaCorrection->GetTriggerBiasCorrectionINEL()->GetEventCorrection()->Get1DCorrection("x");
+  TH1* hist2 = dNdEtaCorrection->GetTriggerBiasCorrectionINEL()->GetEventCorrection()->Get1DCorrection("y", -10, 10);
 
-  TCanvas* canvas = new TCanvas("VtxRecon1D", "VtxRecon1D", 1000, 500);
+  TCanvas* canvas = new TCanvas("TriggerBias1D", "TriggerBias1D", 1000, 500);
   canvas->Divide(2, 1);
 
   canvas->cd(1);
@@ -594,10 +763,10 @@ void VtxRecon1D(const char* fileName = "correction_map.root", const char* folder
 
   TFile* file = TFile::Open(fileName);
   AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(folderName, folderName);
-  dNdEtaCorrection->LoadHistograms(fileName, folderName);
+  dNdEtaCorrection->LoadHistograms();
 
-  TH1* hist = dNdEtaCorrection->GetVertexRecoCorrection()->Get1DCorrection("x");
-  TH1* hist2 = dNdEtaCorrection->GetVertexRecoCorrection()->Get1DCorrection("y", -10, 10);
+  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);
@@ -630,14 +799,41 @@ void VtxRecon1D(const char* fileName = "correction_map.root", const char* folder
 
   canvas->SaveAs("VtxRecon1D.eps");
 
-  for (Int_t i=1; i<=hist->GetNbinsX() / 2; ++i)
-    if (hist->GetBinContent(hist->GetNbinsX() + 1 - i) != 0)
-      hist->SetBinContent(i, hist->GetBinContent(i) / hist->GetBinContent(hist->GetNbinsX() + 1 - i));
+  Correction1DCreatePlots(fileName, folderName, 9.9, 2);
 
-  new TCanvas;
-  hist->GetXaxis()->SetRange(1, hist->GetNbinsX() / 2);
-  hist->GetYaxis()->SetRangeUser(0.8, 1.2);
-  hist->DrawCopy();
+  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")
@@ -681,14 +877,14 @@ void Track2ParticleAsNumber(const char* fileName = "correction_map.root")
   printf("Correction with 0.3 < pT < 0.5: %f +- %f\n", eff3, error3);
 }
 
-void Track2Particle1DCreatePlots(const char* fileName = "correction_map.root", const char* folderName = "dndeta_correction", 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(folderName, folderName);
-  dNdEtaCorrection->LoadHistograms(fileName, 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);
@@ -709,21 +905,66 @@ void Track2Particle1DCreatePlots(const char* fileName = "correction_map.root", c
   AliPWG0Helper::CreateDividedProjections(gene, meas, "z", kTRUE);
 }
 
+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");
+
+  Correction1DCreatePlots(fileName, folder, upperPtLimit, correctionType);
+
+  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);
+
+  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);
+
+  TString canvasName;
+  canvasName.Form("Correction1D_%s", folder);
+  TCanvas* canvas = new TCanvas(canvasName, canvasName, 1200, 400);
+  canvas->Divide(3, 1);
+
+  canvas->cd(1);
+  InitPad();
+  corrX->DrawCopy();
+
+  canvas->cd(2);
+  InitPad();
+  corrY->Draw();
+
+  canvas->cd(3);
+  InitPad();
+  corrZ->Draw();
+
+  canvas->SaveAs(Form("Correction1D_%d_%s_%f.gif", correctionType, fileName, upperPtLimit));
+  canvas->SaveAs(Form("Correction1D_%d_%s_%f.eps", correctionType, fileName, upperPtLimit));
+}
+
 void Track2Particle1D(const char* fileName = "correction_map.root", const char* folder = "dndeta_correction", Float_t upperPtLimit = 9.9)
 {
   gSystem->Load("libPWG0base");
 
-  Track2Particle1DCreatePlots(fileName, folder, upperPtLimit);
+  Correction1DCreatePlots(fileName, folder, upperPtLimit, AlidNdEtaCorrection::kTrack2Particle);
 
-  TH1* corrX = dynamic_cast<TH1*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_x_div_meas_%s_nTrackToNPart_x", folder, folder)));
-  TH1* corrY = dynamic_cast<TH1*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_y_div_meas_%s_nTrackToNPart_y", folder, folder)));
-  TH1* corrZ = dynamic_cast<TH1*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_z_div_meas_%s_nTrackToNPart_z", folder, folder)));
+  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);
 
-  //corrX->SetTitle("a) z projection");
+  corrX->SetTitle("a) z projection");
   corrY->SetTitle("a) #eta projection");
   corrZ->SetTitle("b) p_{T} projection");
 
@@ -743,11 +984,11 @@ void Track2Particle1D(const char* fileName = "correction_map.root", const char*
 
   canvas->cd(2);
   InitPad();
-  corrY->DrawCopy();
+  corrY->Draw();
 
   canvas->cd(3);
   InitPad();
-  corrZ->DrawCopy();
+  corrZ->Draw();
 
   canvas->SaveAs(Form("Track2Particle1D_%s_%f.gif", fileName, upperPtLimit));
   canvas->SaveAs(Form("Track2Particle1D_%s_%f.eps", fileName, upperPtLimit));
@@ -867,10 +1108,10 @@ 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);
@@ -897,9 +1138,9 @@ void Track2Particle2D(const char* fileName = "correction_map.root", const char*
 
   Track2Particle2DCreatePlots(fileName);
 
-  TH2* corrYX = dynamic_cast<TH2*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_yx_div_meas_%s_nTrackToNPart_yx", folder, folder)));
-  TH2* corrZX = dynamic_cast<TH2*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_zx_div_meas_%s_nTrackToNPart_zx", folder, folder)));
-  TH2* corrZY = dynamic_cast<TH2*> (gROOT->FindObject(Form("gene_%s_nTrackToNPart_zy_div_meas_%s_nTrackToNPart_zy", folder, folder)));
+  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"));
@@ -1209,3 +1450,109 @@ void drawPlots()
   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);
+
+  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");
+}
+
+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");
+
+}
+