]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Updating macros for hadronic et. Implements centrality dependence of efficiency.
authorcnattras <cnattras@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 15 Mar 2011 21:50:38 +0000 (21:50 +0000)
committercnattras <cnattras@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 15 Mar 2011 21:50:38 +0000 (21:50 +0000)
PWG4/totEt/macros/CorrNeutral.C [deleted file]
PWG4/totEt/macros/hadEt/CorrEfficiency.C
PWG4/totEt/macros/hadEt/GetCorrections.C [moved from PWG4/totEt/macros/GetCorrections.C with 59% similarity]

diff --git a/PWG4/totEt/macros/CorrNeutral.C b/PWG4/totEt/macros/CorrNeutral.C
deleted file mode 100644 (file)
index d54989e..0000000
+++ /dev/null
@@ -1,430 +0,0 @@
-
-//Christine Nattrass, University of Tennessee at Knoxville
-//This macro is for calculating the correction for the neutral energy considered part of HadEt not recorded by the tracking detectors, that from lambdas, antilambdas, K0S, K0L, neutrons, and antineutrons.
-//Since PYTHIA does not get the spectra of lambdas, antilambdas, and K0S correct, this is not a very good way of determining the correction used for data and as such should be used with great caution.
-//Uses the output of AliAnalysisTaskHadEt
-//This is not actually what gets used in the correction class AliAnalysisHadEtCorrections - that is done in the macro GetCorrections.C - but this is useful for making plots and playing around with different options
-
-
-
-TH1D *GetHisto(float cut = 0.12, char *name, int mycase, bool eta, int color, int marker, bool hadronic, bool reweight,float kaonFactor=1.0, float lambdaFactor = 1.0, float baryonEnhancement = 1.0){
-  //TFile *file = new TFile("Et.ESD.new.sim.merged.root");
-  TFile *file = new TFile("Et.ESD.new.sim.LHC10d4.pp.merged.root");
-  TList *list = file->FindObject("out2");
-  char *reweightname = "";
-  if(reweight) reweightname = "Reweighted";
-  TH2F *numeratorParent; 
-  switch(mycase){
-  case 0:
-    numeratorParent= (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedLambda",reweightname)))->Clone("v0");
-    numeratorParent->Scale(lambdaFactor*baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda",reweightname)),lambdaFactor*baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)),kaonFactor);
-    break;
-  case 1:
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)))->Clone("Knnbar");
-    numeratorParent->Scale(kaonFactor);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"),baryonEnhancement);
-    break;
-  case 2:
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject("EtSimulatedOmega"))->Clone("ch2ndary");
-    numeratorParent->Scale(baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"),baryonEnhancement);
-    //numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedSigma"));
-    //numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiSigma"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi0"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"),baryonEnhancement);
-    break;
-  case 3:
-    numeratorParent= (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)))->Clone("allneutral");
-    numeratorParent->Scale(lambdaFactor*baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)),lambdaFactor*baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)),kaonFactor);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)),kaonFactor);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"),baryonEnhancement);
-    break;
-  case 4:
-    numeratorParent= (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)))->Clone("allneutral");
-    numeratorParent->Scale(lambdaFactor*baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)),lambdaFactor*baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)),kaonFactor);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)),kaonFactor);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedOmega"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"),baryonEnhancement);
-    //numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedSigma"));
-    //numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiSigma"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi0"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"),baryonEnhancement);
-    break;
-  case 5:
-    numeratorParent= (TH2F*)((TH2F*) out2->FindObject("EtSimulatedXi"))->Clone("allxi");
-    numeratorParent->Scale(baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi0"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"),baryonEnhancement);
-    break;
-  case 6:
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject("EtSimulatedOmega"))->Clone("allomega");
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"),baryonEnhancement);
-    break;
-  case 7:
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject("EtSimulatedSigma"))->Clone("allsigma");
-    numeratorParent->Scale(baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiSigma"),baryonEnhancement);
-    break;
-  case 8:
-    numeratorParent= (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)))->Clone("allneutral");
-    numeratorParent->Scale(baryonEnhancement);
-    numeratorParent->Scale(lambdaFactor*baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)),lambdaFactor*baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)),kaonFactor);
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)),kaonFactor);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedOmega"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi0"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"),baryonEnhancement);
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedGamma"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEta"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedPi0"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedOmega0"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEPlus"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEMinus"));
-    break;
-  case 9:
-    numeratorParent= (TH2F*)((TH2F*) out2->FindObject("EtSimulatedGamma"))->Clone("allem");
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEta"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedPi0"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedOmega0"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEPlus"));
-    numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEMinus"));
-    break;
-  }
-
-  TH2F *allhad;
-  //allhad=(TH2F*) ((TH2F*) out2->FindObject("EtSimulatedAllHadron"))->Clone("id");
-  allhad=(TH2F*) ((TH2F*) out2->FindObject("EtSimulatedPiPlus"))->Clone("id");
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedPiMinus"));
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedKMinus"),kaonFactor);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedKPlus"),kaonFactor);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedProton"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiProton"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)),lambdaFactor*baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)),lambdaFactor*baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)),kaonFactor);
-  allhad->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)),kaonFactor);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedEPlus"));
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedEMinus"));
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedOmega"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedXi"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedSigma"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiSigma"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedXi0"),baryonEnhancement);
-  allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"),baryonEnhancement);
-
-  if(hadronic){//if we are getting the correction for the hadronic only case...    
-    allhad->Add((TH2F*) out2->FindObject("EtSimulatedGamma"));
-    allhad->Add((TH2F*) out2->FindObject("EtSimulatedEta"));
-    allhad->Add((TH2F*) out2->FindObject("EtSimulatedPi0"));
-    allhad->Add((TH2F*) out2->FindObject("EtSimulatedOmega0"));
-    allhad->Add((TH2F*) out2->FindObject("EtSimulatedEPlus"));
-    allhad->Add((TH2F*) out2->FindObject("EtSimulatedEMinus"));
-  }
-
-  numeratorParent->Sumw2();
-  allhad->Sumw2();
-  TH1D *denominator;
-  TH1D *numerator;
-  if(eta){
-    int lowbin = numeratorParent->GetYaxis()->FindBin(-cut+.001);//make sure we don't accv0entally get the wrong bin
-    int highbin = numeratorParent->GetYaxis()->FindBin(cut-.001);
-    cout<<"Projecting from "<<numeratorParent->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<numeratorParent->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
-    denominator = allhad->ProjectionX("name",lowbin,highbin);
-    numerator = numeratorParent->ProjectionX("numerator",lowbin,highbin);
-  }
-  else{
-    int lowbin = allhad->GetXaxis()->FindBin(cut);//make sure we don't accidentally get the wrong bin
-    int highbin = allhad->GetXaxis()->GetNbins();
-    cout<<"Projecting from "<<allhad->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<allhad->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
-    numerator = numeratorParent->ProjectionY("name",lowbin,highbin);
-    denominator = allhad->ProjectionY("denominator",lowbin,highbin);
-  }
-  numerator->Divide(denominator);
-  if(hadronic){
-    numerator->SetYTitle("E_{T}^{sample}/E_{T}^{total}");
-  }
-  else{
-    numerator->SetYTitle("E_{T}^{had,sample}/E_{T}^{had,total}");
-  }
-  numerator->GetYaxis()->SetTitleOffset(1.2);
-  numerator->SetMarkerColor(color);
-  numerator->SetLineColor(color);
-  numerator->SetMarkerStyle(marker);
-  //numerator->Draw("e");
-  return numerator;
-
-}
-
-void CorrNeutral(char *prodname = "LHC10d4 PYTHIA D6T 7 TeV p+p", char *shortprodname = "LHC10d4", bool hadronic = false, bool reweighted = false, float kaonFactor=1.0, float lambdaFactor = 1.0, float baryonEnhancement = 1.0){
-  gStyle->SetOptTitle(0);
-  gStyle->SetOptStat(0);
-  gStyle->SetOptFit(0);
-//   TCanvas *c = new TCanvas("c","c",800,400);
-//   c->SetTopMargin(0.0);
-//   c->SetRightMargin(0.0);
-//   c->SetBorderSize(0);
-//   c->SetFillColor(0);
-//   c->SetFillColor(0);
-//   c->SetBorderMode(0);
-//   c->SetFrameFillColor(0);
-//   c->SetFrameBorderMode(0);
-//   c->Divide(2);
-//  TPad *ptpad = c->cd(1);
-  TCanvas *ptpad = new TCanvas("ptpad","ptpad",400,400);
-  ptpad->SetTopMargin(0.04);
-  ptpad->SetRightMargin(0.04);
-  ptpad->SetLeftMargin(0.149288);
-  ptpad->SetBorderSize(0);
-  ptpad->SetFillColor(0);
-  ptpad->SetFillColor(0);
-  ptpad->SetBorderMode(0);
-  ptpad->SetFrameFillColor(0);
-  ptpad->SetFrameBorderMode(0);
-
-  int phosmarker = 20;
-  int emcalmarker = 24;
-  float ptcut1 = 0.05;
-  float ptcut2 = 0.1;
-
-  int colortotal = 1;
-  int casetotal = 4;
-  if(hadronic) casetotal = 8;
-  TH1D *PHOStotal = GetHisto(0.12,"PHOStotal",casetotal,true,colortotal,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *EMCALtotal = GetHisto(0.7,"EMCALtotal",casetotal,true,colortotal,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt1total = GetHisto(ptcut2,"pt1total",casetotal,false,colortotal,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt2total = GetHisto(ptcut1,"pt2total",casetotal,false,colortotal,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-
-  int colorallneutral = 2;
-  TH1D *PHOSallneutral = GetHisto(0.12,"PHOSallneutral",3,true,colorallneutral,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *EMCALallneutral = GetHisto(0.7,"EMCALallneutral",3,true,colorallneutral,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt1allneutral = GetHisto(ptcut2,"pt1allneutral",3,false,colorallneutral,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt2allneutral = GetHisto(ptcut1,"pt2allneutral",3,false,colorallneutral,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-
-  int colorchargedsecondary = TColor::kViolet-3;
-  TH1D *PHOSchargedsecondary = GetHisto(0.12,"PHOSchargedsecondary",2,true,colorchargedsecondary,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *EMCALchargedsecondary = GetHisto(0.7,"EMCALchargedsecondary",2,true,colorchargedsecondary,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt1chargedsecondary = GetHisto(ptcut2,"pt1chargedsecondary",2,false,colorchargedsecondary,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt2chargedsecondary = GetHisto(ptcut1,"pt2chargedsecondary",2,false,colorchargedsecondary,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-
-  int colorneutralUndet = 4;
-  TH1D *PHOSneutralUndet = GetHisto(0.12,"PHOSneutralUndet",1,true,colorneutralUndet,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *EMCALneutralUndet = GetHisto(0.7,"EMCALneutralUndet",1,true,colorneutralUndet,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt1neutralUndet = GetHisto(ptcut2,"pt1neutralUndet",1,false,colorneutralUndet,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt2neutralUndet = GetHisto(ptcut1,"pt2neutralUndet",1,false,colorneutralUndet,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-
-  int colorv0 = TColor::kGreen+2;
-  TH1D *PHOSv0 = GetHisto(0.12,"PHOSv0",0,true,colorv0,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *EMCALv0 = GetHisto(0.7,"EMCALv0",0,true,colorv0,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt1v0 = GetHisto(ptcut2,"pt1v0",0,false,colorv0,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt2v0 = GetHisto(ptcut1,"pt2v0",0,false,colorv0,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-
-  int colorem = TColor::kCyan;
-  TH1D *PHOSem = GetHisto(0.12,"PHOSem",9,true,colorem,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *EMCALem = GetHisto(0.7,"EMCALem",9,true,colorem,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt1em = GetHisto(ptcut2,"pt1em",9,false,colorem,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  TH1D *pt2em = GetHisto(ptcut1,"pt2em",9,false,colorem,emcalmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-
-  PHOStotal->SetMaximum(0.5);
-  PHOStotal->SetMinimum(0.0);
-  if(hadronic){
-    PHOStotal->SetMaximum(0.75);
-  }
-  PHOStotal->SetAxisRange(0.0,4);
-  PHOStotal->GetXaxis()->SetLabelSize(0.05);
-  PHOStotal->GetYaxis()->SetLabelSize(0.045);
-  PHOStotal->GetXaxis()->SetTitleSize(0.05);
-  PHOStotal->GetYaxis()->SetTitleSize(0.06);
-  PHOStotal->Draw();
-  EMCALtotal->Draw("same");
-  PHOSallneutral->Draw("same");
-  EMCALallneutral->Draw("same");
-  PHOSchargedsecondary->Draw("same");
-  EMCALchargedsecondary->Draw("same");
-  PHOSneutralUndet->Draw("same");
-  EMCALneutralUndet->Draw("same");
-  PHOSv0->Draw("same");
-  EMCALv0->Draw("same");
-  if(hadronic){
-    PHOSem->Draw("same");
-    EMCALem->Draw("same");
-  }
-  TLatex *tex = new TLatex(0.161478,1.0835,prodname);
-  tex->SetTextSize(0.0537634);
-  tex->Draw();
-  TLegend *leg = new TLegend(0.193781,0.796248,0.450272,0.944371);
-  leg->AddEntry(PHOStotal,"|#eta|<0.12");
-  leg->AddEntry(EMCALtotal,"|#eta|<0.70");
-  leg->SetFillStyle(0);
-  leg->SetFillColor(0);
-  leg->SetBorderSize(0);
-  leg->Draw();
-  TLegend *leg2 = new TLegend(0.518321,0.612903,0.774812,0.955343);
-  leg2->AddEntry(PHOStotal,"Total");
-  leg2->AddEntry(PHOSallneutral,"#Lambda,#bar{#Lambda},K^{0}_{S},K^{0}_{L},n,#bar{n}");
-  leg2->AddEntry(PHOSneutralUndet,"K^{0}_{L},n,#bar{n}");
-  leg2->AddEntry(PHOSv0,"#Lambda,#bar{#Lambda},K^{0}_{S}");
-  leg2->AddEntry(PHOSchargedsecondary,"#Xi,#Omega");
-  leg2->SetFillStyle(0);
-  leg2->SetFillColor(0);
-  leg2->SetBorderSize(0);
-  leg2->SetTextSize(0.0548607);
-  leg2->Draw();
-
-
-  TCanvas *etapad = new TCanvas("etapad","etapad",400,400);//  TPad *etapad = c->cd(2);
-  etapad->SetTopMargin(0.04);
-  etapad->SetRightMargin(0.04);
-  etapad->SetBorderSize(0);
-  etapad->SetFillColor(0);
-  etapad->SetFillColor(0);
-  etapad->SetBorderMode(0);
-  etapad->SetFrameFillColor(0);
-  etapad->SetFrameBorderMode(0);
-  etapad->SetLeftMargin(0.149288);
-
-
-
-  pt1total->GetXaxis()->SetLabelSize(0.05);
-  pt1total->GetYaxis()->SetLabelSize(0.045);
-  pt1total->GetXaxis()->SetTitleSize(0.05);
-  pt1total->GetYaxis()->SetTitleSize(0.06);
-  pt1total->SetMinimum(0.0);
-  pt1total->SetMaximum(0.5);
-  if(hadronic){
-    pt1total->SetMaximum(0.7);
-  }
-
-  TF1 *func = new TF1("func","[0]",-.7,.7);
-  func->SetParameter(0,0.2);
-  pt1total->Fit(func);
-  pt1total->Draw();
-  pt2total->Draw("same");
-  pt1allneutral->Draw("same");
-  pt2allneutral->Draw("same");
-  pt1chargedsecondary->Draw("same");
-  pt2chargedsecondary->Draw("same");
-  pt1neutralUndet->Draw("same");
-  pt2neutralUndet->Draw("same");
-  pt1v0->Draw("same");
-  pt2v0->Draw("same");
-  if(hadronic){
-    pt1em->Draw("same");
-    pt2em->Draw("same");
-  }
-  TLatex *tex = new TLatex(-.65,.23,Form("%2.5f#pm%2.5f",func->GetParameter(0),func->GetParError(0)));
-  tex->Draw();
-
-  TLegend *leg3 = new TLegend(0.539259,0.801734,0.79575,0.949857);
-  leg3->AddEntry(pt1total,"p_{T} cut = 0.1");
-  leg3->AddEntry(pt2total,"p_{T} cut = 0.05");
-  leg3->SetFillStyle(0);
-  leg3->SetFillColor(0);
-  leg3->SetBorderSize(0);
-  leg3->SetTextSize(0.0548607);
-  leg3->Draw();
-  TLegend *leg4 = new TLegend(0.199016,0.785275,0.455507,0.955343);
-  leg4->AddEntry(PHOSv0,"#Lambda,#bar{#Lambda},K^{0}_{S}");
-  //leg4->AddEntry(PHOSchargedsecondary,"#Sigma,#bar{#Sigma},#Xi,#bar{#Xi},#Xi^{0},#bar{#Xi^0},#Omega,#bar{#Omega}");
-  leg4->AddEntry(PHOSchargedsecondary,"#Xi,#Omega");
-  if(hadronic) leg4->AddEntry(PHOSem,"e^{#pm},#gamma,#eta,#pi^{0},#omega");
-  leg4->SetFillStyle(0);
-  leg4->SetFillColor(0);
-  leg4->SetBorderSize(0);
-  leg4->SetTextSize(0.0548607);
-  //leg4->Draw();
-
-  float y = 0.0237534;
-  if(hadronic) y = 0.158129;
-  TLatex *tex = new TLatex(-0.719565,y,prodname);
-  tex->SetTextSize(0.0537634);
-  tex->Draw();
-
-  char ptnameeps[200];
-  char ptnamepng[200];
-  char ptnamepdf[200];
-  char etanameeps[200];
-  char etanamepng[200];
-  char etanamepdf[200];
-  TString *Total = new TString("total");
-  TString *Neutral = new TString("neutral");
-  TString *Cut = Neutral;
-  if(hadronic) Cut = Total;
-  TString *None = new TString("");
-  TString *Factors = None;
-  if(kaonFactor!=1.0||lambdaFactor!=1.0||baryonEnhancement!=1.0){
-    Factors = new TString(Form("Lambda%2.2fKaon%2.2fBaryon%2.2f",lambdaFactor,kaonFactor,baryonEnhancement));
-  }
-  sprintf(ptnameeps,"pics/f%spt%s.eps",Cut->Data(),Factors->Data());
-  sprintf(ptnamepng,"pics/f%spt%s.png",Cut->Data(),Factors->Data());
-  sprintf(ptnamepdf,"pics/f%spt%s.pdf",Cut->Data(),Factors->Data());
-  sprintf(etanameeps,"pics/f%seta%s.eps",Cut->Data(),Factors->Data());
-  sprintf(etanamepng,"pics/f%seta%s.png",Cut->Data(),Factors->Data());
-  sprintf(etanamepdf,"pics/f%seta%s.pdf",Cut->Data(),Factors->Data());
-  ptpad->SaveAs(ptnameeps);
-  ptpad->SaveAs(ptnamepng);
-  ptpad->SaveAs(ptnamepdf);
-  etapad->SaveAs(etanameeps);
-  etapad->SaveAs(etanamepng);
-  etapad->SaveAs(etanamepdf);
-
-  TCanvas *c2 = new TCanvas("c2","c2",500,400);
-  c2->SetTopMargin(0.03);
-  c2->SetRightMargin(0.03);
-  c2->SetBorderSize(0);
-  c2->SetFillColor(0);
-  c2->SetFillColor(0);
-  c2->SetBorderMode(0);
-  c2->SetFrameFillColor(0);
-  c2->SetFrameBorderMode(0);
-
-
-  int colorchargedall = 1;
-  TH1D *chargedall = GetHisto(ptcut2,"chargedall",2,false,colorchargedall,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  int colorxi =TColor::kGreen+2;
-  TH1D *xi = GetHisto(ptcut2,"xi",5,false,colorxi,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  int coloromega = 4;
-  TH1D *omega = GetHisto(ptcut2,"omega",6,false,coloromega,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  int colorsigma = 2;
-  TH1D *sigma = GetHisto(ptcut2,"sigma",7,false,colorsigma,phosmarker,hadronic,reweighted,kaonFactor,lambdaFactor,baryonEnhancement);
-  chargedall->SetMinimum(0.0);
-  chargedall->SetMaximum(0.02);
-  chargedall->Draw();
-  xi->Draw("same");
-  omega->Draw("same");
-  //sigma->Draw("same");
-  TLegend *leg5 = new TLegend(0.199016,0.785275,0.455507,0.955343);
-  leg5->AddEntry(chargedall,"#Sigma,#Xi,#Xi^{0},#Omega");
-  //leg5->AddEntry(sigma,"#Sigma");
-  leg5->AddEntry(xi,"#Xi,#Xi^{0}");
-  leg5->AddEntry(omega,"#Omega");
-  leg5->SetFillStyle(0);
-  leg5->SetFillColor(0);
-  leg5->SetBorderSize(0);
-  leg5->SetTextSize(0.0548607);
-  leg5->Draw();
-}
index 44884e5e007336439d1ac597c9fcd8194e9590ae..43ba119fc1b1c99fdfb0d8f11c84db90b17a2b9c 100644 (file)
@@ -47,9 +47,10 @@ TH1D* bayneseffdiv(TH1D* numerator, TH1D* denominator,Char_t* name)
 
 
 //This is a somewhat messy function that gets the efficiency for different particles
-TH1D *GetHisto(float cut = 0.12, char *name, int mycase, bool eta, int color, int marker,bool TPC, bool ITS){
+TH1D *GetHisto(float cut = 0.12, char *name, int mycase, bool eta, int color, int marker,bool TPC, bool ITS, bool PbPb, int cb, int cblast){
   //TFile *file = new TFile("Et.ESD.new.sim.merged.root");
-  TFile *file = new TFile("Et.ESD.new.sim.LHC10d4.pp.merged.root");
+  TFile *file = new TFile("rootFiles/LHC11a4_bis/Et.ESD.new.sim.LHC11a4_bis.root");
+  //TFile *file = new TFile("rootFiles/LHC10d7/Et.ESD.new.sim.LHC10d7.root");
   TList *list = file->FindObject("out2");
   char *myname = "ITS";
   if(TPC&&!ITS) myname = "TPC";
@@ -58,58 +59,139 @@ TH1D *GetHisto(float cut = 0.12, char *name, int mycase, bool eta, int color, in
   TH2F *numeratorParent; 
   switch(mycase){
   case 0:
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoHadron");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")));
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")));
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)))->Clone("RecoHadron");
+       else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)));}
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiMinus",i)));
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KMinus",i)));
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)));
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)));
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"AntiProton",i)));
+      }
+    }
+    else{
+      numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoHadron");
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")));
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")));
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
+    }
     break;
   case 1://pion
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoPion");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)))->Clone("RecoPion");
+       else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)));}
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiMinus",i)));
+      }
+    }
+    else{
+      numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoPion");
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
+    }
     break;
   case 2://kaon
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")))->Clone("RecoKaon");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)))->Clone("RecoKaon");
+       else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)));}
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KMinus",i)));
+      }
+    }
+    else{
+      cout<<"I am kaoning here !"<<endl;
+      numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")))->Clone("RecoKaon");
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
+      cout<<"Numerator "<<numeratorParent->GetEntries()<<endl;
+    }
     break;
   case 3://proton
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")))->Clone("RecoProton");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)))->Clone("RecoProton");
+       else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)));}
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"AntiProton",i)));
+      }
+    }
+    else{
+      cout<<"I am protoning here !"<<endl;
+      numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")))->Clone("RecoProton");
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
+      cout<<"Numerator "<<numeratorParent->GetEntries()<<endl;
+    }
     break;
   case 4://electron
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"EPlus")))->Clone("RecoElectron");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"EMinus")));
+    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s%s",myname,"EPlus",cbname)))->Clone("RecoElectron");
+    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s%s",myname,"EMinus",cbname)));
     break;
   }
   TH2F *denominatorParent; 
   switch(mycase){
   case 0:
-    denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedChargedHadron"))->Clone("RecoHadron");
-//     denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedPiPlus"))->Clone("RecoHadron");
-//     denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedPiMinus"));
-//     denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedKMinus"));
-//     denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedKPlus"));
-//     denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedProton"));
-//     denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedAntiProton"));
+    if(cblast != -1){//add more centrality bins
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedChargedHadronCB%i",cb)))->Clone("RecoHadron");
+      for(int i=cb+1;i<=cblast;i++){
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedChargedHadronCB%i",i)));
+      }
+    }
+    else{
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedChargedHadron"))->Clone("RecoHadron");
+    }
     break;
   case 1://pion
-    denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedPiPlus"))->Clone("RecoPion");
-    denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedPiMinus"));
+    if(cblast != -1){//add more centrality bins
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedPiPlusCB%i",cb)))->Clone("RecoPion");
+      denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiMinusCB%i",cb)));
+      for(int i=cb+1;i<=cblast;i++){
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiPlusCB%i",i)));
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiMinusCB%i",i)));
+      }
+    }
+    else{
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedPiPlus"))->Clone("RecoPion");
+      denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedPiMinus"));
+    }
     break;
   case 2://kaon
-    denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedKPlus"))->Clone("RecoKaon");
-    denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedKMinus"));
+    if(cblast != -1){//add more centrality bins
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedKPlusCB%i",cb)))->Clone("RecoKaon");
+      denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKMinusCB%i",cb)));
+      for(int i=cb+1;i<=cblast;i++){
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKPlusCB%i",i)));
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKMinusCB%i",i)));
+      }
+    }
+    else{
+      cout<<"I am here kaoning"<<endl;
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedKPlus"))->Clone("RecoKaon");
+      denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedKMinus"));
+      cout<<"Denominator "<<denominatorParent->GetEntries()<<endl;
+    }
     break;
   case 3://proton
-    denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedProton"))->Clone("RecoProton");
-    denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedAntiProton"));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(cb==i)denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedProtonCB%i",i)))->Clone("RecoProton");
+       else{denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedProtonCB%i",i)));}
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedAntiProtonCB%i",i)));
+      }
+    }
+    else{
+      cout<<"I am here protoning"<<endl;
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedProton"))->Clone("RecoProton");
+      denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedAntiProton"));
+      cout<<"Denominator "<<denominatorParent->GetEntries()<<endl;
+    }
     break;
   case 4://electron
     denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedEPlus"))->Clone("RecoElectron");
     denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedEMinus"));
     break;
   }
+      cout<<"Numerator "<<numeratorParent->GetEntries()<<endl;
+      cout<<"Denominator "<<denominatorParent->GetEntries()<<endl;
   numeratorParent->Sumw2();
   denominatorParent->Sumw2();
   TH1D *denominator;
@@ -151,7 +233,7 @@ TH1D *GetHisto(float cut = 0.12, char *name, int mycase, bool eta, int color, in
 
 
 //this is a method that makes pretty plots
-void CorrEfficiency(char *prodname= "LHC10d4", char *shortprodname = "LHC10d4 PYTHIA D6T 7 TeV p+p", bool TPC = true,bool ITS = true, bool eta = false){
+void CorrEfficiency(char *shortprodname= "LHC11a4_bis", char *prodname = "LHC11a4_bis HIJING 2.76 TeV Pb+Pb", bool TPC = true,bool ITS = true, bool eta = true, bool PbPb = true, int cb = 0, int cblast = -1){
 
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
@@ -181,10 +263,10 @@ void CorrEfficiency(char *prodname= "LHC10d4", char *shortprodname = "LHC10d4 PY
     phoscut = 0.1;
     emcalcut = 0.15;
   }
-  TH1D *PHOStotal = GetHisto(phoscut,"PHOStotal",0,eta,colortotal,phosmarker,TPC,ITS);
-  TH1D *PHOSpi = GetHisto(phoscut,"PHOSpi",1,eta,colorpi,phosmarker,TPC,ITS);
-  TH1D *PHOSp = GetHisto(phoscut,"PHOSp",2,eta,colork,phosmarker,TPC,ITS);
-  TH1D *PHOSk = GetHisto(phoscut,"PHOSk",3,eta,colorp,phosmarker,TPC,ITS);
+  TH1D *PHOStotal = GetHisto(phoscut,"PHOStotal",0,eta,colortotal,phosmarker,TPC,ITS,PbPb,cb,cblast);
+  TH1D *PHOSpi = GetHisto(phoscut,"PHOSpi",1,eta,colorpi,phosmarker,TPC,ITS,PbPb,cb,cblast);
+  TH1D *PHOSp = GetHisto(phoscut,"PHOSp",3,eta,colork,phosmarker,TPC,ITS,PbPb,cb,cblast);
+  TH1D *PHOSk = GetHisto(phoscut,"PHOSk",2,eta,colorp,phosmarker,TPC,ITS,PbPb,cb,cblast);
   if(eta) PHOStotal->GetXaxis()->SetRange(PHOStotal->GetXaxis()->FindBin(0.05),PHOStotal->GetXaxis()->FindBin(1.0));
 //if(ITS&&!TPC){PHOStotal->GetXaxis()->SetRange(PHOStotal->GetXaxis()->FindBin(0.05),PHOStotal->GetXaxis()->FindBin(1.0));}
 //else{PHOStotal->GetXaxis()->SetRange(PHOStotal->GetXaxis()->FindBin(0.0),PHOStotal->GetXaxis()->FindBin(3.0));}
@@ -201,10 +283,14 @@ void CorrEfficiency(char *prodname= "LHC10d4", char *shortprodname = "LHC10d4 PY
   PHOSpi->Draw("same");
   PHOSp->Draw("same");
   PHOSk->Draw("same");
-  TH1D *EMCALtotal = GetHisto(emcalcut,"EMCALtotal",0,eta,colortotal,emcalmarker,TPC,ITS);
-  TH1D *EMCALpi = GetHisto(emcalcut,"EMCALpi",1,eta,colorpi,emcalmarker,TPC,ITS);
-  TH1D *EMCALp = GetHisto(emcalcut,"EMCALp",2,eta,colork,emcalmarker,TPC,ITS);
-  TH1D *EMCALk = GetHisto(emcalcut,"EMCALk",3,eta,colorp,emcalmarker,TPC,ITS);
+  cout<<"Hadrons"<<endl;
+  TH1D *EMCALtotal = GetHisto(emcalcut,"EMCALtotal",0,eta,colortotal,emcalmarker,TPC,ITS,PbPb,cb,cblast);
+  cout<<endl<<endl<<"=================================PIONS================================="<<endl;
+  TH1D *EMCALpi = GetHisto(emcalcut,"EMCALpi",1,eta,colorpi,emcalmarker,TPC,ITS,PbPb,cb,cblast);
+  cout<<endl<<endl<<"=================================PROTONS================================="<<endl;
+  TH1D *EMCALp = GetHisto(emcalcut,"EMCALp",3,eta,colork,emcalmarker,TPC,ITS,PbPb,cb,cblast);
+  cout<<endl<<endl<<"=================================KAONS================================="<<endl;
+  TH1D *EMCALk = GetHisto(emcalcut,"EMCALk",2,eta,colorp,emcalmarker,TPC,ITS,PbPb,cb,cblast);
   EMCALtotal->Draw("same");
   EMCALpi->Draw("same");
   EMCALp->Draw("same");
@@ -227,7 +313,7 @@ void CorrEfficiency(char *prodname= "LHC10d4", char *shortprodname = "LHC10d4 PY
   line->SetLineWidth(3.0);
   //line->SetLineColor(TColor::kYellow);
   line->SetLineStyle(2);
-  TLatex *tex = new TLatex(0.497269,0.0513196,prodname);
+  TLatex *tex = new TLatex(0.398954,0.0513196,prodname);
   tex->SetTextSize(0.0537634);
   tex->Draw();
   TLatex *tex3 = new TLatex(1.16186,0.28348,"Closed symbols |#eta|<0.12 (PHOS)");
@@ -260,4 +346,47 @@ void CorrEfficiency(char *prodname= "LHC10d4", char *shortprodname = "LHC10d4 PY
     c->SaveAs("pics/CorrEfficiencyTPCITS.eps");
     c->SaveAs("pics/CorrEfficiencyTPCITS.png");
   }
+
+  if(PbPb){//make one more plot
+    //pions - no real centrality dependence
+    //three centrality bins for efficiency 0-25%, 25-50%, 50-90%
+    //use same for unidentified hadrons
+    //kaons & protons - centrality dependence is more significant but I don't think I can do better on the binning
+    int pid = 0;//h=0,pi=1,p=3,k=2
+  TCanvas *c2 = new TCanvas("c2","c2",600,400);
+  c2->SetTopMargin(0.02);
+  c2->SetRightMargin(0.02);
+  c2->SetBorderSize(0);
+  c2->SetFillColor(0);
+  c2->SetFillColor(0);
+  c2->SetBorderMode(0);
+  c2->SetFrameFillColor(0);
+  c2->SetFrameBorderMode(0);
+  cout<<endl<<endl;
+
+  TH1D *cb0 = GetHisto(phoscut,"cb0",pid,eta,1,20,TPC,ITS,PbPb,0,4);
+  TH1D *cb4 = GetHisto(phoscut,"cb5",pid,eta,4,20,TPC,ITS,PbPb,5,9);
+  //TH1D *cb9 = GetHisto(phoscut,"cb9",pid,eta,TColor::kGreen+4,20,TPC,ITS,PbPb,10,14);
+  TH1D *cb14 = GetHisto(phoscut,"cb14",pid,eta,2,20,TPC,ITS,PbPb,10,18);
+  cb0->GetXaxis()->SetRange(cb0->GetXaxis()->FindBin(0.05),cb0->GetXaxis()->FindBin(1.0));
+  cb0->SetMaximum(1.0);
+  cb0->Draw();
+  cb4->Draw("same");
+  // cb9->Draw("same");
+  cb14->Draw("same");
+  TLegend *leg = new TLegend(0.124161,0.747312,0.318792,0.959677);//(left,bottom,right,top)
+   leg->SetTextSize(0.0537634);
+   leg->SetBorderSize(0);
+   leg->SetLineColor(0);
+   leg->SetLineStyle(0);
+   leg->SetLineWidth(0);
+   leg->SetFillColor(0);
+   leg->SetFillStyle(0);
+   leg->AddEntry(cb0,"0-25%");
+   leg->AddEntry(cb4,"25-50%");
+   //leg->AddEntry(cb9,"45-50%");
+   leg->AddEntry(cb14,"50-90%");
+   leg->Draw();
+   c2->SaveAs(Form("pics/CorrEfficiency%i.png",pid));
+  }
 }
similarity index 59%
rename from PWG4/totEt/macros/GetCorrections.C
rename to PWG4/totEt/macros/hadEt/GetCorrections.C
index 6f9114f7660a9185b0e2c62ba3e74dbc9f161357..75dcbfb594725fd3e5a3299ca4e7c8a838ea3af5 100644 (file)
 // #include <TSystem.h>
 // #include "TStopwatch.h"
 
-Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp = true, bool forSim = true, bool TPC, char *infilename, bool hadronic = false, float etacut = 0.7);
-TH1D *GetHistoCorrNeutral(float cut, char *name, bool ispp, bool forSim, int mycase, bool eta, int color, int marker, char *infilename, bool hadronic = false);
+Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp = true, bool forSim = true, bool TPC, bool hadronic = false, float etacut = 0.7);
+TH1D *GetHistoCorrNeutral(float cut, char *name, bool ispp, bool forSim, int mycase, bool eta, int color, int marker, bool hadronic = false);
 
-Float_t CorrPtCut(float ptcut, char *prodname = "Enter Production Name", char *shortprodname = "EnterProductionName", char *filename="Et.ESD.new.sim.merged.root", bool ispp = true, bool forSim = true);
-TH1D *GetHistoCorrPtCut(float ptcut = 0.15, char *name, char *filename, bool ispp = true, bool forSim = true);
+Float_t CorrPtCut(float ptcut, char *prodname = "Enter Production Name", char *shortprodname = "EnterProductionName", bool ispp = true, bool forSim = true, int mycase = 0);
+TH1D *GetHistoCorrPtCut(float ptcut = 0.15, char *name, bool ispp = true, bool forSim = true, int mycase);
 
-TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, char *infilename, bool eta, bool ispp = true, bool forSim = true);
-TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bool TPC, char *infilename, bool ispp = true, bool forSim = true);
-Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, char *shortprodname, bool TPC, char *infilename, bool ispp, bool forSim);
+TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, bool eta, bool ispp = true, bool forSim = true);
+TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bool TPC, bool ispp = true, bool forSim = true);
+Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, char *shortprodname, bool TPC, bool ispp, bool forSim);
 
-TH1D *GetHistoNoID(float etacut, char *name, char *infilename, bool eta, bool TPC, bool ispp, bool forSim);
-TH1D *CorrNoID(float etacut,char *name, char *prodname, char *shortprodname, char *infilename, bool ispp, bool forSim);
-Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char *shortprodname, char *infilename, bool ispp, bool forSim);
+TH1D *GetHistoNoID(float etacut, char *name, bool eta, bool TPC, bool ispp, bool forSim);
+TH1D *CorrNoID(float etacut,char *name, char *prodname, char *shortprodname, bool ispp, bool forSim);
+Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char *shortprodname, bool ispp, bool forSim);
 
 TH1D* bayneseffdiv(TH1D* numerator, TH1D* denominator,Char_t* name);
-TH1D *GetHistoEfficiency(float cut, char *name, int mycase, int color, int marker,bool TPC, bool ITS, char *infilename);
-void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname, char *infilename);
-
-TH1D *GetHistoCorrBkgd(float etacut,char *name, bool TPC, char *infilename,bool ispp,bool forSim);
-void CorrBkgdPlots(char *prodname, char *shortprodname, bool TPC, char *infilename,bool ispp,bool forSim);
+TH1D *GetHistoEfficiency(float cut, char *name, int mycase, int color, int marker,bool TPC, bool ITS, int cb = -1, int cblast = -1);
+void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname);
+
+TH1D *GetHistoCorrBkgd(float etacut,char *name, bool TPC,bool ispp,bool forSim);
+void CorrBkgdPlots(char *prodname, char *shortprodname, bool TPC,bool ispp,bool forSim);
+
+//Some variables that we'll use multiple times.  We'll declare them here since they don't seem to delete right in the functions
+char prefix[100];
+char histoname[100];
+char epsname[100];
+char pngname[100];
+TFile *file = NULL;//initiated in main function
+const char *mynameTPC = "TPC";
+const char *mynameITS = "ITS";
+const char *mynameTPCITS = "TPCITS";
+const char *detectorEMCAL = "EMCAL";
+const char *detectorPHOS = "PHOS";
+const char *reweightedNo = "";
+const char *reweightedYes = "Reweighted";
 
 //===========================================================================================
 
-void GetCorrections(char *prodname = "Enter Production Name", char *shortprodname = "EnterProductionName", bool ispp = true, bool forSim = true, bool TPC = true, char *infilename="Et.ESD.new.sim.merged.root"){
+void GetCorrections(char *prodname = "Enter Production Name", char *shortprodname = "EnterProductionName", bool ispp = true, bool forSim = true, bool TPC = true, char *infilename="Et.ESD.new.sim.merged.root", int dataset = 2009){
     TStopwatch timer;
     timer.Start();
     gSystem->Load("libTree.so");
@@ -51,6 +65,7 @@ void GetCorrections(char *prodname = "Enter Production Name", char *shortprodnam
     gSystem->AddIncludePath("-I$ALICE_ROOT/include");
    gROOT->ProcessLine(".L AliAnalysisEtCuts.cxx+g");
    gROOT->ProcessLine(".L AliAnalysisHadEtCorrections.cxx+g");
+   file = new TFile(infilename);
 
    char outfilename[200];
    char *sim = "ForData";
@@ -63,106 +78,178 @@ void GetCorrections(char *prodname = "Enter Production Name", char *shortprodnam
    hadCorrectionEMCAL->SetName("hadCorrectionEMCAL");
    float etacut = 0.7;
    hadCorrectionEMCAL->SetEtaCut(etacut);
+   hadCorrectionEMCAL->IsData(!forSim);
+   hadCorrectionEMCAL->IsEMCal(kTRUE);
+   hadCorrectionEMCAL->SetProduction(shortprodname);
+   hadCorrectionEMCAL->SetProductionDescription(prodname);
+   hadCorrectionEMCAL->SetDataSet(dataset);
    //float etacut = hadCorrectionEMCAL->GetEtaCut();
    //cout<<"eta cut is "<<etacut<<endl;
-   cout<<"My name is "<<hadCorrectionEMCAL->GetName()<<endl;
    hadCorrectionEMCAL->SetAcceptanceCorrectionFull(1.0);
-   cout<<"Warning:  Acceptance corrections will have to be updated to include real acceptance maps of the EMCAL and the PHOS"<<endl;
+   cout<<"Warning:  Acceptance corrections will have to be updated to include real acceptance maps of the EMCAL"<<endl;
    hadCorrectionEMCAL->SetAcceptanceCorrectionPHOS(360.0/60.0);
    hadCorrectionEMCAL->SetAcceptanceCorrectionEMCAL(360.0/60.0);
 
    float ptcut = 0.1;
-   float neutralCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,infilename,false,etacut);
+   float neutralCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,false,etacut);
    hadCorrectionEMCAL->SetNeutralCorrection(neutralCorr);
-   cout<<"Warning:  Setting neutral correction error bars to STAR value of +/-2%.  Use for development purposes only!"<<endl;
-   hadCorrectionEMCAL->SetNeutralCorrectionLowBound(neutralCorr*0.98);
-   hadCorrectionEMCAL->SetNeutralCorrectionHighBound(neutralCorr*1.02);
-
-
-   float hadronicCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,infilename,true,etacut);
+   //Using error from data, see analysis note for details
+   if(ispp){
+     hadCorrectionEMCAL->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.013));
+     hadCorrectionEMCAL->SetNeutralCorrectionHighBound(neutralCorr*(1.0+0.013));
+   }
+   else{
+     hadCorrectionEMCAL->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.049));
+     hadCorrectionEMCAL->SetNeutralCorrectionHighBound(neutralCorr*(1.0+0.049));
+   }
+
+   float hadronicCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,true,etacut);
    hadCorrectionEMCAL->SetNotHadronicCorrection(hadronicCorr);
-   cout<<"Warning:  Setting hadronic correction error bars to value of +/-2%.  Use for development purposes only!"<<endl;
-   hadCorrectionEMCAL->SetNotHadronicCorrectionLowBound(neutralCorr*0.98);
-   hadCorrectionEMCAL->SetNotHadronicCorrectionHighBound(neutralCorr*1.02);
-
-   float ptcutITS = CorrPtCut(0.1,prodname,shortprodname,infilename,ispp,forSim);
+   if(ispp){
+     hadCorrectionEMCAL->SetNotHadronicCorrectionLowBound(hadronicCorr*(1.0-0.008));
+     hadCorrectionEMCAL->SetNotHadronicCorrectionHighBound(hadronicCorr*(1.0+0.008));
+   }
+   else{
+     hadCorrectionEMCAL->SetNotHadronicCorrectionLowBound(hadronicCorr*(1.0-0.023));
+     hadCorrectionEMCAL->SetNotHadronicCorrectionHighBound(hadronicCorr*(1.0+0.023));
+   }
+
+   float ptcutITS = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim);
    hadCorrectionEMCAL->SetpTCutCorrectionITS(ptcutITS);
-   float ptcutTPC = CorrPtCut(0.15,prodname,shortprodname,infilename,ispp,forSim);
+   float ptcutTPC = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim);
    hadCorrectionEMCAL->SetpTCutCorrectionTPC(ptcutTPC);
-   cout<<"Setting ITS pt cut corr to "<<ptcutITS<<endl;
-   cout<<"Setting TPC pt cut corr to "<<ptcutTPC<<endl;
-   cout<<"Warning:  Setting pt cut correction error bars to STAR value of +/-3%.  Use for development purposes only!"<<endl;
-   hadCorrectionEMCAL->SetpTCutCorrectionITSLowBound(ptcutITS*0.97);
-   hadCorrectionEMCAL->SetpTCutCorrectionTPCLowBound(ptcutTPC*0.97);
-   hadCorrectionEMCAL->SetpTCutCorrectionITSHighBound(ptcutITS*1.03);
-   hadCorrectionEMCAL->SetpTCutCorrectionTPCHighBound(ptcutTPC*1.03);
-
-   TH1D *NotIDTPC = CorrNotID(etacut,"CorrNotIDEMCALTPC",prodname,shortprodname,true,infilename,ispp,forSim);
-   TH1D *NotIDITS = CorrNotID(etacut,"CorrNotIDEMCALITS",prodname,shortprodname,false,infilename,ispp,forSim);
+   float ptcutITSLow = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim,-1);
+   float ptcutTPCLow = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim,-1);
+   hadCorrectionEMCAL->SetpTCutCorrectionITSLowBound(ptcutITSLow);
+   hadCorrectionEMCAL->SetpTCutCorrectionTPCLowBound(ptcutTPCLow);
+   float ptcutITSHigh = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim,1);
+   float ptcutTPCHigh = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim,1);
+   hadCorrectionEMCAL->SetpTCutCorrectionITSHighBound(ptcutITSHigh);
+   hadCorrectionEMCAL->SetpTCutCorrectionTPCHighBound(ptcutTPCHigh);
+
+   TH1D *NotIDTPC = CorrNotID(etacut,"CorrNotIDEMCALTPC",prodname,shortprodname,true,ispp,forSim);
+   TH1D *NotIDITS = CorrNotID(etacut,"CorrNotIDEMCALITS",prodname,shortprodname,false,ispp,forSim);
    hadCorrectionEMCAL->SetNotIDCorrectionTPC(NotIDTPC);
    hadCorrectionEMCAL->SetNotIDCorrectionITS(NotIDITS);
 
-   Float_t NotIDConstTPC = CorrNotIDConst(0.15,etacut,"CorrNotIDEMCALTPC2",prodname,shortprodname,true,infilename,ispp,forSim);
-   Float_t NotIDConstITS = CorrNotIDConst(0.10,etacut,"CorrNotIDEMCALTPC2",prodname,shortprodname,true,infilename,ispp,forSim);
+   Float_t NotIDConstTPC = CorrNotIDConst(0.15,etacut,"CorrNotIDEMCALTPC2",prodname,shortprodname,true,ispp,forSim);
+   Float_t NotIDConstITS = CorrNotIDConst(0.10,etacut,"CorrNotIDEMCALTPC2",prodname,shortprodname,true,ispp,forSim);
    hadCorrectionEMCAL->SetNotIDConstCorrectionTPC(1.0/NotIDConstTPC);
    hadCorrectionEMCAL->SetNotIDConstCorrectionITS(1.0/NotIDConstITS);
-   cout<<"Setting constant PID corrections to "<<NotIDConstTPC<<" and "<<NotIDConstITS<<endl;
-   cout<<"Warning:  Setting systematic errors on constant correction from unidentified particles at 1%!  For testing and development purposes only!"<<endl;
-   hadCorrectionEMCAL->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*.99);
-   hadCorrectionEMCAL->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*.99);
-   hadCorrectionEMCAL->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*1.01);
-   hadCorrectionEMCAL->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*1.01);
-
-
-   TH1D *NoID = CorrNoID(etacut,"CorrNoIDEMCAL",prodname,shortprodname,infilename,ispp,forSim);
+   if(ispp){
+     hadCorrectionEMCAL->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*(1.0-0.010)/0.996);
+     hadCorrectionEMCAL->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*(1.0-0.010)/0.996);
+     hadCorrectionEMCAL->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*(1.0+0.010)/0.996);
+     hadCorrectionEMCAL->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*(1.0+0.010)/0.996);
+   }
+   else{
+     hadCorrectionEMCAL->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*(1.0-0.022)/0.976);
+     hadCorrectionEMCAL->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*(1.0-0.022)/0.976);
+     hadCorrectionEMCAL->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*(1.0+0.022)/0.976);
+     hadCorrectionEMCAL->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*(1.0+0.022)/0.976);
+   }
+
+   TH1D *NoID = CorrNoID(etacut,"CorrNoIDEMCAL",prodname,shortprodname,ispp,forSim);
    hadCorrectionEMCAL->SetNotIDCorrectionNoPID(NoID);
 
-   Float_t NoIDTPC = CorrNoIDConst(etacut,0.15,"CorrNoIDEMCAL2",prodname,shortprodname,infilename,ispp,forSim);
-   Float_t NoIDITS = CorrNoIDConst(etacut,0.1,"CorrNoIDEMCAL2",prodname,shortprodname,infilename,ispp,forSim);
-   cout<<"Setting constant PID corrections with no PID to "<<NoIDTPC<<" and "<<NoIDITS<<endl;
+   Float_t NoIDTPC = CorrNoIDConst(etacut,0.15,"CorrNoIDEMCAL2",prodname,shortprodname,ispp,forSim);
+   Float_t NoIDITS = CorrNoIDConst(etacut,0.1,"CorrNoIDEMCAL2",prodname,shortprodname,ispp,forSim);
    hadCorrectionEMCAL->SetNotIDConstCorrectionTPCNoID(1./NoIDTPC);
    hadCorrectionEMCAL->SetNotIDConstCorrectionITSNoID(1./NoIDITS);
-   cout<<"Warning:  Setting systematic errors on constant correction from unidentified particles at 2%!  For testing and development purposes only!"<<endl;
-   hadCorrectionEMCAL->SetNotIDConstCorrectionTPCNoIDLowBound(1./NoIDTPC*.99);
-   hadCorrectionEMCAL->SetNotIDConstCorrectionITSNoIDLowBound(1./NoIDITS*.99);
-   hadCorrectionEMCAL->SetNotIDConstCorrectionTPCNoIDHighBound(1./NoIDTPC*1.01);
-   hadCorrectionEMCAL->SetNotIDConstCorrectionITSNoIDHighBound(1./NoIDITS*1.01);
+   hadCorrectionEMCAL->SetNotIDConstCorrectionTPCNoIDLowBound(1./NoIDTPC*.98);
+   hadCorrectionEMCAL->SetNotIDConstCorrectionITSNoIDLowBound(1./NoIDITS*.98);
+   hadCorrectionEMCAL->SetNotIDConstCorrectionTPCNoIDHighBound(1./NoIDTPC*1.02);
+   hadCorrectionEMCAL->SetNotIDConstCorrectionITSNoIDHighBound(1./NoIDITS*1.02);
 
-   TH1D *efficiencyPionTPC = GetHistoEfficiency(etacut,"hEfficiencyPionTPC",1,1,20,true,true,infilename);
+   TH1D *efficiencyPionTPC = GetHistoEfficiency(etacut,"hEfficiencyPionTPC",1,1,20,true,true);
    hadCorrectionEMCAL->SetEfficiencyPionTPC(efficiencyPionTPC);
-   if(!efficiencyPionTPC){cerr<<"NOOOOOOOOOOOOOOOOOO!!  We have failed you, Christine!"<<endl;}
-//    else{
-//      hadCorrectionEMCAL->GetEfficiencyPionTPC()->Draw();
-//      cout<< "My name "<<hadCorrectionEMCAL->GetEfficiencyPionTPC()->GetName() <<endl;
-//      return;
-//    }
-
-   TH1D *efficiencyKaonTPC = GetHistoEfficiency(etacut,"hEfficiencyKaonTPC",2,1,20,true,true,infilename);
-   if(!efficiencyKaonTPC){cerr<<"NOOOOOOOOOOOOOOOOOO!!  We have failed you, Christine!"<<endl;}
+   TH1D *efficiencyKaonTPC = GetHistoEfficiency(etacut,"hEfficiencyKaonTPC",2,1,20,true,true);
    hadCorrectionEMCAL->SetEfficiencyKaonTPC(efficiencyKaonTPC);
-   TH1D *efficiencyProtonTPC = GetHistoEfficiency(etacut,"hEfficiencyProtonTPC",3,1,20,true,true,infilename);
+   TH1D *efficiencyProtonTPC = GetHistoEfficiency(etacut,"hEfficiencyProtonTPC",3,1,20,true,true);
    hadCorrectionEMCAL->SetEfficiencyProtonTPC(efficiencyProtonTPC);
-   TH1D *efficiencyHadronTPC = GetHistoEfficiency(etacut,"hEfficiencyHadronTPC",0,1,20,true,true,infilename);
+   TH1D *efficiencyHadronTPC = GetHistoEfficiency(etacut,"hEfficiencyHadronTPC",0,1,20,true,true);
    hadCorrectionEMCAL->SetEfficiencyHadronTPC(efficiencyHadronTPC);
-   TH1D *efficiencyPionITS = GetHistoEfficiency(etacut,"hEfficiencyPionITS",1,1,20,false,true,infilename);
+   TH1D *efficiencyPionITS = GetHistoEfficiency(etacut,"hEfficiencyPionITS",1,1,20,false,true);
    hadCorrectionEMCAL->SetEfficiencyPionITS(efficiencyPionITS);
-   TH1D *efficiencyKaonITS = GetHistoEfficiency(etacut,"hEfficiencyKaonITS",2,1,20,false,true,infilename);
+   TH1D *efficiencyKaonITS = GetHistoEfficiency(etacut,"hEfficiencyKaonITS",2,1,20,false,true);
    hadCorrectionEMCAL->SetEfficiencyKaonITS(efficiencyKaonITS);
-   TH1D *efficiencyProtonITS = GetHistoEfficiency(etacut,"hEfficiencyProtonITS",3,1,20,false,true,infilename);
+   TH1D *efficiencyProtonITS = GetHistoEfficiency(etacut,"hEfficiencyProtonITS",3,1,20,false,true);
    hadCorrectionEMCAL->SetEfficiencyProtonITS(efficiencyProtonITS);
-   TH1D *efficiencyHadronITS = GetHistoEfficiency(etacut,"hEfficiencyHadronITS",0,1,20,false,true,infilename);
+   TH1D *efficiencyHadronITS = GetHistoEfficiency(etacut,"hEfficiencyHadronITS",0,1,20,false,true);
    hadCorrectionEMCAL->SetEfficiencyHadronITS(efficiencyHadronITS);
 
-   //CorrEfficiencyPlots(true,prodname,shortprodname,infilename);
+   if(!ispp){
+     TH1D *efficiencyPionTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB0",1,1,20,true,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyPionTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB5",1,1,20,true,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyPionTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB10",1,1,20,true,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB10->Clone(Form("Test%i",i)),i);
+
+     TH1D *efficiencyKaonTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB0",2,1,20,true,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyKaonTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB5",2,1,20,true,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyKaonTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB10",2,1,20,true,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB10->Clone(Form("Test%i",i)),i);//Kaon
+
+     TH1D *efficiencyProtonTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB0",3,1,20,true,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyProtonTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB5",3,1,20,true,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyProtonTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB10",3,1,20,true,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB10->Clone(Form("Test%i",i)),i);//Proton
+
+     TH1D *efficiencyHadronTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB0",0,1,20,true,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyHadronTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB5",0,1,20,true,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyHadronTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB10",0,1,20,true,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB10->Clone(Form("Test%i",i)),i);//Hadron
+
+
+     TH1D *efficiencyPionITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB0",1,1,20,false,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyPionITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB5",1,1,20,false,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyPionITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB10",1,1,20,false,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB10->Clone(Form("Test%i",i)),i);//Pion
+
+     TH1D *efficiencyKaonITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB0",2,1,20,false,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyKaonITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB5",2,1,20,false,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyKaonITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB10",2,1,20,false,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB10->Clone(Form("Test%i",i)),i);//Kaon
+
+     TH1D *efficiencyProtonITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB0",3,1,20,false,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyProtonITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB5",3,1,20,false,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyProtonITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB10",3,1,20,false,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB10->Clone(Form("Test%i",i)),i);//Proton
+
+     TH1D *efficiencyHadronITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB0",0,1,20,false,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyHadronITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB5",0,1,20,false,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyHadronITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB10",0,1,20,false,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB10->Clone(Form("Test%i",i)),i);//Hadron
+   }//EMCAL
+
+   //CorrEfficiencyPlots(true,prodname,shortprodname);
    //CorrEfficiencyPlots(false,prodname,shortprodname,infilename);
 
-   hadCorrectionEMCAL->GetEfficiencyHadronTPC()->Draw();
-   TH1D *backgroundTPC = GetHistoCorrBkgd(etacut,"hBackgroundTPC",true,infilename,ispp,forSim);
-   TH1D *backgroundITS = GetHistoCorrBkgd(etacut,"hBackgroundITS",false,infilename,ispp,forSim);
+
+   //hadCorrectionEMCAL->GetEfficiencyHadronTPC()->Draw();
+   TH1D *backgroundTPC = GetHistoCorrBkgd(etacut,"hBackgroundTPC",true,ispp,forSim);
+   TH1D *backgroundITS = GetHistoCorrBkgd(etacut,"hBackgroundITS",false,ispp,forSim);
    hadCorrectionEMCAL->SetBackgroundCorrectionTPC(backgroundTPC);
    hadCorrectionEMCAL->SetBackgroundCorrectionITS(backgroundITS);
-   CorrBkgdPlots(prodname,shortprodname,true,infilename,ispp,forSim);
-   CorrBkgdPlots(prodname,shortprodname,false,infilename,ispp,forSim);
+   //CorrBkgdPlots(prodname,shortprodname,true,ispp,forSim);
+   //CorrBkgdPlots(prodname,shortprodname,false,ispp,forSim);
+
+   hadCorrectionEMCAL->Report();
 
    outfile->cd();
    hadCorrectionEMCAL->Write();
@@ -173,80 +260,102 @@ void GetCorrections(char *prodname = "Enter Production Name", char *shortprodnam
    hadCorrectionPHOS->SetName("hadCorrectionPHOS");
    float etacut = 0.12;
    hadCorrectionPHOS->SetEtaCut(etacut);
+   hadCorrectionPHOS->IsData(!forSim);
+   hadCorrectionPHOS->IsEMCal(kTRUE);
+   hadCorrectionPHOS->SetProduction(shortprodname);
+   hadCorrectionPHOS->SetProductionDescription(prodname);
+   hadCorrectionPHOS->SetDataSet(dataset);
    //float etacut = hadCorrectionPHOS->GetEtaCut();
    //cout<<"eta cut is "<<etacut<<endl;
-   cout<<"My name is "<<hadCorrectionPHOS->GetName()<<endl;
    hadCorrectionPHOS->SetAcceptanceCorrectionFull(1.0);
-   cout<<"Warning:  Acceptance corrections will have to be updated to include real acceptance maps of the PHOS and the PHOS"<<endl;
+   cout<<"Warning:  Acceptance corrections will have to be updated to include real acceptance maps of the PHOS"<<endl;
    hadCorrectionPHOS->SetAcceptanceCorrectionPHOS(360.0/60.0);
    hadCorrectionPHOS->SetAcceptanceCorrectionEMCAL(360.0/60.0);
 
    float ptcut = 0.1;
-   float neutralCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,infilename,false,etacut);
+   float neutralCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,false,etacut);
    hadCorrectionPHOS->SetNeutralCorrection(neutralCorr);
-   cout<<"Warning:  Setting neutral correction error bars to STAR value of +/-2%.  Use for development purposes only!"<<endl;
-   hadCorrectionPHOS->SetNeutralCorrectionLowBound(neutralCorr*0.98);
-   hadCorrectionPHOS->SetNeutralCorrectionHighBound(neutralCorr*1.02);
-
-
-   float hadronicCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,infilename,true,etacut);
+   //Using error from data, see analysis note for details
+   if(ispp){
+     hadCorrectionPHOS->SetNeutralCorrectionLowBound(neutralCorr*(1.0-.013)/0.736);
+     hadCorrectionPHOS->SetNeutralCorrectionHighBound(neutralCorr*(1.0+.013)/0.736);
+   }
+   else{
+     hadCorrectionPHOS->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.049)/0.689);
+     hadCorrectionPHOS->SetNeutralCorrectionHighBound(neutralCorr*(1.0+0.049)/0.689);
+   }
+
+   float hadronicCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,true,etacut);
    hadCorrectionPHOS->SetNotHadronicCorrection(hadronicCorr);
-   cout<<"Warning:  Setting hadronic correction error bars to value of +/-2%.  Use for development purposes only!"<<endl;
-   hadCorrectionPHOS->SetNotHadronicCorrectionLowBound(neutralCorr*0.98);
-   hadCorrectionPHOS->SetNotHadronicCorrectionHighBound(neutralCorr*1.02);
-   
-
-   float ptcutITS = CorrPtCut(0.1,prodname,shortprodname,infilename,ispp,forSim);
+   if(ispp){
+     hadCorrectionPHOS->SetNotHadronicCorrectionLowBound(neutralCorr*(1.0-0.008)/0.571);
+     hadCorrectionPHOS->SetNotHadronicCorrectionHighBound(neutralCorr*(1.0+0.008)/0.571);
+   }
+   else{
+     hadCorrectionPHOS->SetNotHadronicCorrectionLowBound(neutralCorr*(1.0-0.023)/0.549);
+     hadCorrectionPHOS->SetNotHadronicCorrectionHighBound(neutralCorr*(1.0+0.023)/0.549);
+   }
+
+   float ptcutITS = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim);
    hadCorrectionPHOS->SetpTCutCorrectionITS(ptcutITS);
-   float ptcutTPC = CorrPtCut(0.15,prodname,shortprodname,infilename,ispp,forSim);
+   float ptcutTPC = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim);
    hadCorrectionPHOS->SetpTCutCorrectionTPC(ptcutTPC);
-   cout<<"Warning:  Setting pt cut correction error bars to STAR value of +/-3%.  Use for development purposes only!"<<endl;
-   hadCorrectionPHOS->SetpTCutCorrectionITSLowBound(ptcutITS*0.97);
-   hadCorrectionPHOS->SetpTCutCorrectionTPCLowBound(ptcutTPC*0.97);
-   hadCorrectionPHOS->SetpTCutCorrectionITSHighBound(ptcutITS*1.03);
-   hadCorrectionPHOS->SetpTCutCorrectionTPCHighBound(ptcutTPC*1.03);
-
-   TH1D *NotIDTPC = CorrNotID(etacut,"CorrNotIDPHOSTPC",prodname,shortprodname,true,infilename,ispp,forSim);
-   TH1D *NotIDITS = CorrNotID(etacut,"CorrNotIDPHOSITS",prodname,shortprodname,false,infilename,ispp,forSim);
+
+   float ptcutITSLow = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim,-1);
+   float ptcutTPCLow = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim,-1);
+   hadCorrectionPHOS->SetpTCutCorrectionITSLowBound(ptcutITSLow);
+   hadCorrectionPHOS->SetpTCutCorrectionTPCLowBound(ptcutTPCLow);
+   float ptcutITSHigh = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim,1);
+   float ptcutTPCHigh = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim,1);
+   hadCorrectionPHOS->SetpTCutCorrectionITSHighBound(ptcutITSHigh);
+   hadCorrectionPHOS->SetpTCutCorrectionTPCHighBound(ptcutTPCHigh);
+
+   TH1D *NotIDTPC = CorrNotID(etacut,"CorrNotIDPHOSTPC",prodname,shortprodname,true,ispp,forSim);
+   TH1D *NotIDITS = CorrNotID(etacut,"CorrNotIDPHOSITS",prodname,shortprodname,false,ispp,forSim);
    hadCorrectionPHOS->SetNotIDCorrectionTPC(NotIDTPC);
    hadCorrectionPHOS->SetNotIDCorrectionITS(NotIDITS);
 
-   Float_t NotIDConstTPC = CorrNotIDConst(0.15,etacut,"CorrNotIDPHOSTPC2",prodname,shortprodname,true,infilename,ispp,forSim);
-   Float_t NotIDConstITS = CorrNotIDConst(0.10,etacut,"CorrNotIDPHOSTPC2",prodname,shortprodname,true,infilename,ispp,forSim);
+   Float_t NotIDConstTPC = CorrNotIDConst(0.15,etacut,"CorrNotIDPHOSTPC2",prodname,shortprodname,true,ispp,forSim);
+   Float_t NotIDConstITS = CorrNotIDConst(0.10,etacut,"CorrNotIDPHOSTPC2",prodname,shortprodname,true,ispp,forSim);
    hadCorrectionPHOS->SetNotIDConstCorrectionTPC(1./NotIDConstTPC);
    hadCorrectionPHOS->SetNotIDConstCorrectionITS(1./NotIDConstITS);
-   cout<<"Warning:  Setting systematic errors on constant correction from unidentified particles at 1%!  For testing and development purposes only!"<<endl;
-   hadCorrectionPHOS->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*.99);
-   hadCorrectionPHOS->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*.99);
-   hadCorrectionPHOS->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*1.01);
-   hadCorrectionPHOS->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*1.01);
-
-
-   TH1D *NoID = CorrNoID(etacut,"CorrNoIDPHOS",prodname,shortprodname,infilename,ispp,forSim);
+   if(ispp){
+     hadCorrectionPHOS->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*(1.0-0.010)/0.996);
+     hadCorrectionPHOS->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*(1.0-0.010)/0.996);
+     hadCorrectionPHOS->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*(1.0+0.010)/0.996);
+     hadCorrectionPHOS->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*(1.0+0.010)/0.996);
+   }
+   else{
+     hadCorrectionPHOS->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*(1.0-0.022)/0.976);
+     hadCorrectionPHOS->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*(1.0-0.022)/0.976);
+     hadCorrectionPHOS->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*(1.0+0.022)/0.976);
+     hadCorrectionPHOS->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*(1.0+0.022)/0.976);
+   }
+
+
+   TH1D *NoID = CorrNoID(etacut,"CorrNoIDPHOS",prodname,shortprodname,ispp,forSim);
    hadCorrectionPHOS->SetNotIDCorrectionNoPID(NoID);
 
 
-   Float_t NoIDTPC = CorrNoIDConst(etacut,0.15,"CorrNoIDPHOS2",prodname,shortprodname,infilename,ispp,forSim);
-   Float_t NoIDITS = CorrNoIDConst(etacut,0.1,"CorrNoIDPHOS2",prodname,shortprodname,infilename,ispp,forSim);
-   cout<<"Setting constant PID corrections with no PID to "<<NoIDTPC<<" and "<<NoIDITS<<endl;
+   Float_t NoIDTPC = CorrNoIDConst(etacut,0.15,"CorrNoIDPHOS2",prodname,shortprodname,ispp,forSim);
+   Float_t NoIDITS = CorrNoIDConst(etacut,0.1,"CorrNoIDPHOS2",prodname,shortprodname,ispp,forSim);
    hadCorrectionPHOS->SetNotIDConstCorrectionTPCNoID(1./NoIDTPC);
    hadCorrectionPHOS->SetNotIDConstCorrectionITSNoID(1./NoIDITS);
-   cout<<"Warning:  Setting systematic errors on constant correction from unidentified particles at 2%!  For testing and development purposes only!"<<endl;
-   hadCorrectionPHOS->SetNotIDConstCorrectionTPCNoIDLowBound(1./NoIDTPC*.99);
-   hadCorrectionPHOS->SetNotIDConstCorrectionITSNoIDLowBound(1./NoIDITS*.99);
-   hadCorrectionPHOS->SetNotIDConstCorrectionTPCNoIDHighBound(1./NoIDTPC*1.01);
-   hadCorrectionPHOS->SetNotIDConstCorrectionITSNoIDHighBound(1./NoIDITS*1.01);
-
-   TH1D *efficiencyPionTPC = GetHistoEfficiency(etacut,"hEfficiencyPionTPC",1,1,20,true,true,infilename);
-   TH1D *efficiencyKaonTPC = GetHistoEfficiency(etacut,"hEfficiencyKaonTPC",2,1,20,true,true,infilename);
-   TH1D *efficiencyProtonTPC = GetHistoEfficiency(etacut,"hEfficiencyProtonTPC",3,1,20,true,true,infilename);
-   TH1D *efficiencyHadronTPC = GetHistoEfficiency(etacut,"hEfficiencyHadronTPC",0,1,20,true,true,infilename);
-   TH1D *efficiencyPionITS = GetHistoEfficiency(etacut,"hEfficiencyPionITS",1,1,20,false,true,infilename);
-   TH1D *efficiencyKaonITS = GetHistoEfficiency(etacut,"hEfficiencyKaonITS",2,1,20,false,true,infilename);
-   TH1D *efficiencyProtonITS = GetHistoEfficiency(etacut,"hEfficiencyProtonITS",3,1,20,false,true,infilename);
-   TH1D *efficiencyHadronITS = GetHistoEfficiency(etacut,"hEfficiencyHadronITS",0,1,20,false,true,infilename);
-   //CorrEfficiencyPlots(true,prodname,shortprodname,infilename);
-   //CorrEfficiencyPlots(false,prodname,shortprodname,infilename);
+   hadCorrectionPHOS->SetNotIDConstCorrectionTPCNoIDLowBound(1./NoIDTPC*.98);
+   hadCorrectionPHOS->SetNotIDConstCorrectionITSNoIDLowBound(1./NoIDITS*.98);
+   hadCorrectionPHOS->SetNotIDConstCorrectionTPCNoIDHighBound(1./NoIDTPC*1.02);
+   hadCorrectionPHOS->SetNotIDConstCorrectionITSNoIDHighBound(1./NoIDITS*1.02);
+
+   TH1D *efficiencyPionTPC = GetHistoEfficiency(etacut,"hEfficiencyPionTPC",1,1,20,true,true);
+   TH1D *efficiencyKaonTPC = GetHistoEfficiency(etacut,"hEfficiencyKaonTPC",2,1,20,true,true);
+   TH1D *efficiencyProtonTPC = GetHistoEfficiency(etacut,"hEfficiencyProtonTPC",3,1,20,true,true);
+   TH1D *efficiencyHadronTPC = GetHistoEfficiency(etacut,"hEfficiencyHadronTPC",0,1,20,true,true);
+   TH1D *efficiencyPionITS = GetHistoEfficiency(etacut,"hEfficiencyPionITS",1,1,20,false,true);
+   TH1D *efficiencyKaonITS = GetHistoEfficiency(etacut,"hEfficiencyKaonITS",2,1,20,false,true);
+   TH1D *efficiencyProtonITS = GetHistoEfficiency(etacut,"hEfficiencyProtonITS",3,1,20,false,true);
+   TH1D *efficiencyHadronITS = GetHistoEfficiency(etacut,"hEfficiencyHadronITS",0,1,20,false,true);
+   //CorrEfficiencyPlots(true,prodname,shortprodname);
+   //CorrEfficiencyPlots(false,prodname,shortprodname);
    hadCorrectionPHOS->SetEfficiencyPionTPC(efficiencyPionTPC);
    hadCorrectionPHOS->SetEfficiencyKaonTPC(efficiencyKaonTPC);
    hadCorrectionPHOS->SetEfficiencyProtonTPC(efficiencyProtonTPC);
@@ -256,30 +365,105 @@ void GetCorrections(char *prodname = "Enter Production Name", char *shortprodnam
    hadCorrectionPHOS->SetEfficiencyProtonITS(efficiencyProtonITS);
    hadCorrectionPHOS->SetEfficiencyHadronITS(efficiencyHadronITS);
 
-   TH1D *backgroundTPC = GetHistoCorrBkgd(etacut,"hBackgroundTPC",true,infilename,ispp,forSim);
-   TH1D *backgroundITS = GetHistoCorrBkgd(etacut,"hBackgroundITS",false,infilename,ispp,forSim);
+
+   if(!ispp){
+     TH1D *efficiencyPionTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB0",1,1,20,true,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyPionTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB5",1,1,20,true,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyPionTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB10",1,1,20,true,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB10->Clone(Form("Test%i",i)),i);
+
+     TH1D *efficiencyKaonTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB0",2,1,20,true,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyKaonTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB5",2,1,20,true,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyKaonTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB10",2,1,20,true,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB10->Clone(Form("Test%i",i)),i);//Kaon
+
+     TH1D *efficiencyProtonTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB0",3,1,20,true,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyProtonTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB5",3,1,20,true,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyProtonTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB10",3,1,20,true,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB10->Clone(Form("Test%i",i)),i);//Proton
+
+     TH1D *efficiencyHadronTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB0",0,1,20,true,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyHadronTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB5",0,1,20,true,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyHadronTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB10",0,1,20,true,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB10->Clone(Form("Test%i",i)),i);//Hadron
+
+
+     TH1D *efficiencyPionITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB0",1,1,20,false,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyPionITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB5",1,1,20,false,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyPionITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB10",1,1,20,false,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB10->Clone(Form("Test%i",i)),i);//Pion
+
+     TH1D *efficiencyKaonITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB0",2,1,20,false,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyKaonITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB5",2,1,20,false,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyKaonITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB10",2,1,20,false,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB10->Clone(Form("Test%i",i)),i);//Kaon
+
+     TH1D *efficiencyProtonITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB0",3,1,20,false,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyProtonITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB5",3,1,20,false,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyProtonITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB10",3,1,20,false,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB10->Clone(Form("Test%i",i)),i);//Proton
+
+     TH1D *efficiencyHadronITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB0",0,1,20,false,true,0,4);
+     for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB0->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyHadronITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB5",0,1,20,false,true,5,9);
+     for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB5->Clone(Form("Test%i",i)),i);
+     TH1D *efficiencyHadronITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB10",0,1,20,false,true,10,15);
+     for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB10->Clone(Form("Test%i",i)),i);//Hadron
+   }//EMCAL
+
+   TH1D *backgroundTPC = GetHistoCorrBkgd(etacut,"hBackgroundTPC",true,ispp,forSim);
+   TH1D *backgroundITS = GetHistoCorrBkgd(etacut,"hBackgroundITS",false,ispp,forSim);
    hadCorrectionPHOS->SetBackgroundCorrectionTPC(backgroundTPC);
    hadCorrectionPHOS->SetBackgroundCorrectionITS(backgroundITS);
-   CorrBkgdPlots(prodname,shortprodname,true,infilename,ispp,forSim);
-   CorrBkgdPlots(prodname,shortprodname,false,infilename,ispp,forSim);
+   CorrBkgdPlots(prodname,shortprodname,true,ispp,forSim);
+   CorrBkgdPlots(prodname,shortprodname,false,ispp,forSim);
 
+   hadCorrectionPHOS->Report();
    //Write the output
    outfile->cd();
    hadCorrectionPHOS->Write();
    outfile->Write();
    outfile->Close();
 
-   TFile *junk = new TFile("junk.root","RECREATE");
-   efficiencyPionTPC->Write();
-   junk->Write();
-   junk->Close();
 
   timer.Stop();
   timer.Print();
 }
 
 //==================================CorrNeutral==============================================
-Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp, bool forSim, bool TPC, char *infilename, bool hadronic, float etacut){
+Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp, bool forSim, bool TPC, bool hadronic, float etacut){
+  if(!forSim){//for data we have evaluated the neutral correction from ALICE data
+    if(hadronic){//for tot et from had et
+      if(ispp){
+       return 1.0/0.571;
+      }
+      else{
+       return 1.0/0.549;
+      }
+    }
+    else{//for had et only
+      if(ispp){
+       return 1.0/0.736;
+      }
+      else{
+       return 1.0/0.689;
+      }
+    }
+  }
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
   gStyle->SetOptFit(0);
@@ -306,30 +490,28 @@ Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp,
 
   int phosmarker = 20;
 
-  char prefix[100];
   sprintf(prefix,"%s%2.1f",shortprodname,ptcut);
 
-  char histoname[100];
   sprintf(histoname,"%stotal",histoname);
   int colortotal = 1;
   int casetotal = 4;
   if(hadronic) casetotal = 8;
-  TH1D *total = GetHistoCorrNeutral(ptcut,histoname,ispp,forSim,casetotal,false,colortotal,phosmarker,infilename,hadronic);
+  TH1D *total = GetHistoCorrNeutral(ptcut,histoname,ispp,forSim,casetotal,false,colortotal,phosmarker,hadronic);
 
   int colorallneutral = 2;
-  TH1D *allneutral = GetHistoCorrNeutral(ptcut,"allneutral",ispp,forSim,3,false,colorallneutral,phosmarker,infilename,hadronic);
+  TH1D *allneutral = GetHistoCorrNeutral(ptcut,"allneutral",ispp,forSim,3,false,colorallneutral,phosmarker,hadronic);
 
   int colorchargedsecondary = TColor::kViolet-3;
-  TH1D *chargedsecondary = GetHistoCorrNeutral(ptcut,"chargedsecondary",ispp,forSim,2,false,colorchargedsecondary,phosmarker,infilename,hadronic);
+  TH1D *chargedsecondary = GetHistoCorrNeutral(ptcut,"chargedsecondary",ispp,forSim,2,false,colorchargedsecondary,phosmarker,hadronic);
 
   int colorneutralUndet = 4;
-  TH1D *neutralUndet = GetHistoCorrNeutral(ptcut,"neutralUndet",ispp,forSim,1,false,colorneutralUndet,phosmarker,infilename,hadronic);
+  TH1D *neutralUndet = GetHistoCorrNeutral(ptcut,"neutralUndet",ispp,forSim,1,false,colorneutralUndet,phosmarker,hadronic);
 
   int colorv0 = TColor::kGreen+2;
-  TH1D *v0 = GetHistoCorrNeutral(ptcut,"v0",ispp,forSim,0,false,colorv0,phosmarker,infilename,hadronic);
+  TH1D *v0 = GetHistoCorrNeutral(ptcut,"v0",ispp,forSim,0,false,colorv0,phosmarker,hadronic);
 
   int colorem = TColor::kCyan;
-  TH1D *em = GetHistoCorrNeutral(ptcut,"em",ispp,forSim,9,false,colorem,phosmarker,infilename,hadronic);
+  TH1D *em = GetHistoCorrNeutral(ptcut,"em",ispp,forSim,9,false,colorem,phosmarker,hadronic);
 
   TF1 *func = new TF1("func","[0]",-.7,.7);
   func->SetParameter(0,0.2);
@@ -368,8 +550,6 @@ Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp,
   leg2->SetBorderSize(0);
   leg2->SetTextSize(0.0548607);
   leg2->Draw();
-  char epsname[100];
-  char pngname[100];
   if(hadronic){
     sprintf(epsname,"pics/%s/fhadronic.eps",shortprodname);
     sprintf(pngname,"pics/%s/fhadronic.png",shortprodname);
@@ -381,7 +561,6 @@ Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp,
   c->SaveAs(epsname);
   c->SaveAs(pngname);
 
-
   delete total;
   delete allneutral;
   delete chargedsecondary;
@@ -389,16 +568,15 @@ Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp,
   delete v0;
   delete em;
   delete c;
-
   float corr = func->GetParameter(0);
-  //cout<<"Neutral correction: "<<1.0/(1.0-corr)<<endl;
   delete func;
+  delete tex;
+  delete leg2;
   return 1.0/(1.0-corr);
 
 }
-TH1D *GetHistoCorrNeutral(float cut, char *name, bool ispp, bool forSim, int mycase, bool eta, int color, int marker, char *infilename, bool hadronic){
-  TFile *file = new TFile(infilename);
-  TList *list = file->FindObject("out2");
+TH1D *GetHistoCorrNeutral(float cut, char *name, bool ispp, bool forSim, int mycase, bool eta, int color, int marker, bool hadronic){
+  file->cd();
   char *reweightname = "";
   if(!forSim) reweightname = "Reweighted";
   TH2F *numeratorParent; 
@@ -549,15 +727,23 @@ TH1D *GetHistoCorrNeutral(float cut, char *name, bool ispp, bool forSim, int myc
   delete numeratorParent;
   delete allhad;
   //file->Close();
+  numerator->SetName(name);
   return numerator;
 
 }
 
 //===============================CorrPtCut=========================================
-TH1D *GetHistoCorrPtCut(float ptcut, char *name, char *filename, bool ispp, bool forSim){
-  TFile *file = new TFile(filename);
-  TList *list = file->FindObject("out2");
+TH1D *GetHistoCorrPtCut(float ptcut, char *name, bool ispp, bool forSim, int mycase){
+  file->cd();
   TH2F *allhad = ((TH2F*) out2->FindObject("EtSimulatedAllHadron"))->Clone("allhad");
+  TH2F *ptlow = ((TH2F*) out2->FindObject("EtSimulatedChargedHadronAssumingNoPt"))->Clone("ptlow");
+  TH2F *pthigh;
+  if(ptcut>0.14){//TPC cut off
+    (TH2F*)pthigh =(TH2F*) ((TH2F*) out2->FindObject("EtSimulatedChargedHadronAssumingPtTPCCut"))->Clone("pthigh");
+  }
+  else{
+    (TH2F*)pthigh =(TH2F*) ((TH2F*) out2->FindObject("EtSimulatedChargedHadronAssumingPtITSCut"))->Clone("pthigh");
+  }
 
   int lowbin = allhad->GetXaxis()->FindBin(0.0);//make sure we don't accidentally get the wrong bin
   int highbin = allhad->GetXaxis()->FindBin(ptcut);
@@ -566,9 +752,23 @@ TH1D *GetHistoCorrPtCut(float ptcut, char *name, char *filename, bool ispp, bool
   //cout<<"Projecting from "<<allhad->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<allhad->GetXaxis()->GetBinLowEdge(nbins)<<endl;
 
   //allhad->Sumw2();
-
-  TH1D *numerator = allhad->ProjectionY("name",lowbin,highbin);
-  TH1D *denominator = allhad->ProjectionY("denominator",lowbin,nbins);
+  TH1D *numerator;
+  TH1D *denominator;
+  switch(mycase){
+  case -1:
+    numerator = ptlow->ProjectionY("nameLow",lowbin,highbin);
+    denominator = allhad->ProjectionY("denominatorLow",highbin,nbins);
+    denominator->Add(ptlow);
+    break;
+  case 1:
+    numerator = pthigh->ProjectionY("nameHigh",lowbin,highbin);
+    denominator = allhad->ProjectionY("denominatorHigh",highbin,nbins);
+    denominator->Add(pthigh);
+    break;
+  default:
+    numerator = allhad->ProjectionY("name",lowbin,highbin);
+    denominator = allhad->ProjectionY("denominator",lowbin,nbins);
+  }
   numerator->Divide(denominator);
   numerator->SetYTitle("E_{T}^{had, p_{T}<cut-off}/E_{T}^{had, all p_{T}}");
   numerator->GetYaxis()->SetTitleOffset(1.);
@@ -582,12 +782,14 @@ TH1D *GetHistoCorrPtCut(float ptcut, char *name, char *filename, bool ispp, bool
   //numerator->Draw("e");
   delete allhad;
   delete denominator;
-  
+  delete ptlow;
+  delete pthigh;
+  numerator->SetName(name);
   return numerator;
 
 }
 
-Float_t CorrPtCut(float ptcut, char *prodname, char *shortprodname, char *filename, bool ispp, bool forSim){
+Float_t CorrPtCut(float ptcut, char *prodname, char *shortprodname, bool ispp, bool forSim, int mycase){
 
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
@@ -606,9 +808,9 @@ Float_t CorrPtCut(float ptcut, char *prodname, char *shortprodname, char *filena
 
 
 
-  TH1D *High = GetHistoCorrPtCut(0.15-.001,"High",filename);
-  TH1D *Low = GetHistoCorrPtCut(0.1-.001,"Low",filename);
-  TH1D *Lowest = GetHistoCorrPtCut(0.05-.001,"Lowest",filename);
+  TH1D *High = GetHistoCorrPtCut(0.15-.001,"High",ispp,forSim,mycase);
+  TH1D *Low = GetHistoCorrPtCut(0.1-.001,"Low",ispp,forSim,mycase);
+  TH1D *Lowest = GetHistoCorrPtCut(0.05-.001,"Lowest",ispp,forSim,mycase);
 
   TF1 *func = new TF1("func","[0]",-.7,.7);
   func->SetParameter(0,0.2);
@@ -664,21 +866,22 @@ Float_t CorrPtCut(float ptcut, char *prodname, char *shortprodname, char *filena
   delete Lowest;
   delete func;
   delete c;
+  delete tex;
+  delete leg;
   return 1.0/(1.0-corr);
 }
 
 
 
 //==================================CorrNotID=================================================
-TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, char *infilename, bool eta, bool ispp, bool forSim){
-  TFile *file = new TFile(infilename);
-  TList *list = file->FindObject("out2");
-  char *myname = "ITS";
-  if(TPC) myname = "TPC";
+TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, bool eta, bool ispp, bool forSim){
+  file->cd();
+  char *myname = mynameITS;
+  if(TPC) myname = mynameTPC;
   TH2F *notid = ((TH2F*) out2->FindObject(Form("EtReconstructed%sUnidentifiedAssumingPion",myname)))->Clone("notid");
   TH2F *nNotid = ((TH2F*) out2->FindObject(Form("EtNReconstructed%sUnidentified",myname)))->Clone("nNotid");
   if(!eta){
-    cout<<"Correction determined for all charged hadrons"<<endl;
+    //cout<<"Correction determined for all charged hadrons"<<endl;
     notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiPlus",myname)));
     notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiMinus",myname)));
     notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedKPlus",myname)));
@@ -709,13 +912,13 @@ TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, char *infilename, boo
   if(eta){
     int lowbin = notid->GetYaxis()->FindBin(-etacut+.001);//make sure we don't accv0entally get the wrong bin
     int highbin = notid->GetYaxis()->FindBin(etacut-.001);
-    cout<<"Projecting from "<<notid->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<notid->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
+    //cout<<"Projecting from "<<notid->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<notid->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
     denominator = id->ProjectionX("name",lowbin,highbin);
     numerator = notid->ProjectionX("numerator",lowbin,highbin);
     nNotidProj = nNotid->ProjectionX("nNotidProj",lowbin,highbin);
   }
   else{
-    cout<<"Getting eta dependence"<<endl;
+    //cout<<"Getting eta dependence"<<endl;
     int lowbin = id->GetXaxis()->FindBin(etacut);//make sure we don't accidentally get the wrong bin
     int highbin;
     if(etacut<0.15){//then we actually have ITS standalone tracks and we only want this to run from 0.1 to 0.15 because this will be used only for ITS standalone tracks
@@ -724,7 +927,7 @@ TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, char *infilename, boo
     else{
       highbin = id->GetXaxis()->GetNbins();
     }
-    cout<<"Projecting from "<<id->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<id->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
+    //cout<<"Projecting from "<<id->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<id->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
     numerator = notid->ProjectionY("name",lowbin,highbin);
     denominator = id->ProjectionY("denominator",lowbin,highbin);
     nNotidProj = nNotid->ProjectionY("nNotidProj",lowbin,highbin);
@@ -758,11 +961,15 @@ TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, char *infilename, boo
   result->GetYaxis()->SetTitleOffset(1.2);
   delete denominator;
   delete nNotidProj;
+  delete notid;
+  delete nNotid;
+  delete id;
+  result->SetName(name);
   return result;
 
 }
 
-TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bool TPC, char *infilename, bool ispp, bool forSim){
+TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bool TPC, bool ispp, bool forSim){
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
   gStyle->SetOptFit(0);
@@ -776,7 +983,7 @@ TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bo
   c->SetFrameFillColor(0);
   c->SetFrameBorderMode(0);
 
-  TH1D *PHOS = GetHistoCorrNotID(etacut,name,TPC,infilename,true,ispp,forSim);
+  TH1D *PHOS = GetHistoCorrNotID(etacut,name,TPC,true,ispp,forSim);
   PHOS->SetMarkerColor(2);
   PHOS->SetLineColor(2);
   PHOS->SetAxisRange(0.0,4);
@@ -792,10 +999,8 @@ TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bo
   TLatex *tex = new TLatex(0.161478,1.0835,prodname);
   tex->SetTextSize(0.0537634);
   tex->Draw();
-  char epsname[100];
-  char pngname[100];
-  char *detector = "EMCAL";
-  if(etacut<0.2) detector = "PHOS";
+  char *detector = detectorEMCAL;
+  if(etacut<0.2) detector = detectorPHOS;
   if(TPC){
     sprintf(epsname,"pics/%s/fnotidTPC%s.eps",shortprodname,detector);
     sprintf(pngname,"pics/%s/fnotidTPC%s.png",shortprodname,detector);
@@ -808,10 +1013,20 @@ TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bo
   c->SaveAs(epsname);
   c->SaveAs(pngname);
   delete c;
+  delete tex;
+  PHOS->SetName(name);
   return PHOS;
 }
 
-Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, char *shortprodname, bool TPC, char *infilename, bool ispp, bool forSim){
+Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, char *shortprodname, bool TPC, bool ispp, bool forSim){
+  if(!forSim){
+    if(ispp){
+      return 0.996;
+    }
+    else{
+      return 0.976;
+    }
+  }
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
   gStyle->SetOptFit(0);
@@ -825,7 +1040,7 @@ Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, cha
   c->SetFrameFillColor(0);
   c->SetFrameBorderMode(0);
 
-  TH1D *PHOS = GetHistoCorrNotID(ptcut,name,TPC,infilename,false,ispp,forSim);
+  TH1D *PHOS = GetHistoCorrNotID(ptcut,name,TPC,false,ispp,forSim);
   PHOS->SetMarkerColor(2);
   PHOS->SetLineColor(2);
   PHOS->SetMaximum(1.01);
@@ -837,10 +1052,8 @@ Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, cha
   TLatex *tex = new TLatex(0.161478,1.0835,prodname);
   tex->SetTextSize(0.0537634);
   tex->Draw();
-  char epsname[100];
-  char pngname[100];
-  char *detector = "EMCAL";
-  if(etacut<0.2) detector = "PHOS";
+  char *detector = detectorEMCAL;
+  if(etacut<0.2) detector = detectorPHOS;
   if(TPC){
     sprintf(epsname,"pics/%s/fnotidConstTPC%s.eps",shortprodname,detector);
     sprintf(pngname,"pics/%s/fnotidConstTPC%s.png",shortprodname,detector);
@@ -853,15 +1066,18 @@ Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, cha
   c->SaveAs(epsname);
   c->SaveAs(pngname);
   delete c;
-  return func->GetParameter(0);
+  delete PHOS;
+  float value = func->GetParameter(0);
+  delete func;
+  delete tex;
+  return value;
 }
 
 //==================================CorrNoID=================================================
-TH1D *GetHistoNoID(float etacut, char *name, char *infilename, bool eta, bool TPC, bool ispp, bool forSim){
-  TFile *file = new TFile(infilename);
-  char *myname = "ITS";
-  if(TPC) myname = "TPC";
-  TList *list = file->FindObject("out2");
+TH1D *GetHistoNoID(float etacut, char *name, bool eta, bool TPC, bool ispp, bool forSim){
+  file->cd();
+  char *myname = mynameITS;
+  if(TPC) myname = mynameTPC;
   TH2F *notid = ((TH2F*) out2->FindObject(Form("EtReconstructed%sChargedHadronAssumingPion",myname)))->Clone("notid");
   TH2F *nNotid = ((TH2F*) out2->FindObject(Form("EtNReconstructed%sChargedHadron",myname)))->Clone("nNotid");
 
@@ -875,13 +1091,13 @@ TH1D *GetHistoNoID(float etacut, char *name, char *infilename, bool eta, bool TP
   if(eta){
     int lowbin = notid->GetYaxis()->FindBin(-etacut+.001);//make sure we don't accv0entally get the wrong bin
     int highbin = notid->GetYaxis()->FindBin(etacut-.001);
-    cout<<"Projecting from "<<notid->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<notid->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
+    //cout<<"Projecting from "<<notid->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<notid->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
     denominator = id->ProjectionX("name",lowbin,highbin);
     numerator = notid->ProjectionX("numerator",lowbin,highbin);
     nNotidProj = nNotid->ProjectionX("nNotidProj",lowbin,highbin);
   }
   else{
-    cout<<"Getting eta dependence"<<endl;
+    //cout<<"Getting eta dependence"<<endl;
     int lowbin = id->GetXaxis()->FindBin(etacut);//make sure we don't accidentally get the wrong bin
     int highbin;
     if(etacut<0.15){//then we actually have ITS standalone tracks and we only want this to run from 0.1 to 0.15 because this will be used only for ITS standalone tracks
@@ -890,7 +1106,7 @@ TH1D *GetHistoNoID(float etacut, char *name, char *infilename, bool eta, bool TP
     else{
       highbin = id->GetXaxis()->GetNbins();
     }
-    cout<<"Projecting from "<<id->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<id->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
+    //cout<<"Projecting from "<<id->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<id->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
     numerator = notid->ProjectionY("name",lowbin,highbin);
     denominator = id->ProjectionY("denominator",lowbin,highbin);
     nNotidProj = nNotid->ProjectionY("nNotidProj",lowbin,highbin);
@@ -916,11 +1132,15 @@ TH1D *GetHistoNoID(float etacut, char *name, char *infilename, bool eta, bool TP
   numerator->GetYaxis()->SetTitleOffset(1.2);
   delete denominator;
   delete nNotidProj;
+  delete notid;
+  delete nNotid;
+  delete id;
+  numerator->SetName(name);
   return numerator;
 
 }
 
-TH1D *CorrNoID(float etacut,char *name, char *prodname, char *shortprodname, char *infilename, bool ispp, bool forSim){
+TH1D *CorrNoID(float etacut,char *name, char *prodname, char *shortprodname, bool ispp, bool forSim){
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
   gStyle->SetOptFit(0);
@@ -934,7 +1154,7 @@ TH1D *CorrNoID(float etacut,char *name, char *prodname, char *shortprodname, cha
   c->SetFrameFillColor(0);
   c->SetFrameBorderMode(0);
 
-  TH1D *PHOS = GetHistoNoID(etacut,name,infilename,true,true,ispp,forSim);
+  TH1D *PHOS = GetHistoNoID(etacut,name,true,true,ispp,forSim);
   PHOS->SetMarkerColor(2);
   PHOS->SetLineColor(2);
   PHOS->SetAxisRange(0.0,4);
@@ -947,21 +1167,21 @@ TH1D *CorrNoID(float etacut,char *name, char *prodname, char *shortprodname, cha
   tex->Draw();
 
 
-  char epsname[100];
-  char pngname[100];
-  char *detector = "EMCAL";
-  if(etacut<0.2) detector = "PHOS";
+  char *detector = detectorEMCAL;
+  if(etacut<0.2) detector = detectorPHOS;
   sprintf(epsname,"pics/%s/fnoid%s.eps",shortprodname,detector);
   sprintf(pngname,"pics/%s/fnoid%s.png",shortprodname,detector);
 
   c->SaveAs(epsname);
   c->SaveAs(pngname);
   delete c;
+  delete tex;
+  PHOS->SetName(name);
   return PHOS;
 
 }
 
-Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char *shortprodname, char *infilename, bool ispp, bool forSim){
+Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char *shortprodname, bool ispp, bool forSim){
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
   gStyle->SetOptFit(0);
@@ -977,7 +1197,7 @@ Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char
 
   bool TPC = true;
   if(ptcut<.15) TPC = false;
-  TH1D *PHOS = GetHistoNoID(ptcut,name,infilename,false,TPC,ispp,forSim);
+  TH1D *PHOS = GetHistoNoID(ptcut,name,false,TPC,ispp,forSim);
   TF1 *func = new TF1("func","[0]",-etacut,etacut);
   PHOS->Fit(func,"","",-etacut,etacut);
   PHOS->SetMarkerColor(2);
@@ -991,10 +1211,8 @@ Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char
   tex->Draw();
 
 
-  char epsname[100];
-  char pngname[100];
-  char *detector = "EMCAL";
-  if(etacut<0.2) detector = "PHOS";
+  char *detector = detectorEMCAL;
+  if(etacut<0.2) detector = detectorPHOS;
   if(TPC){
     sprintf(epsname,"pics/%s/fnoid%sTPC.eps",shortprodname,detector);
     sprintf(pngname,"pics/%s/fnoid%sTPC.png",shortprodname,detector);
@@ -1007,7 +1225,11 @@ Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char
   c->SaveAs(epsname);
   c->SaveAs(pngname);
   delete c;
-  return func->GetParameter(0);
+  delete PHOS;
+  float value = func->GetParameter(0);
+  delete func;
+  delete tex;
+  return value;
 
 }
 //==================================Efficiency=================================================
@@ -1059,58 +1281,132 @@ TH1D* bayneseffdiv(TH1D* numerator, TH1D* denominator,Char_t* name)
 
 
 
-TH1D *GetHistoEfficiency(float cut, char *name, int mycase, int color, int marker,bool TPC,bool ITS, char *infilename){
+TH1D *GetHistoEfficiency(float cut, char *name, int mycase, int color, int marker,bool TPC,bool ITS, int cb, int cblast){
   bool eta = true;
-  TFile *file = new TFile(infilename);
-  TList *list = file->FindObject("out2");
-  char *myname = "ITS";
-  if(TPC&&!ITS) myname = "TPC";
-  if(TPC&&ITS) myname = "TPCITS";
-  cout<<"Using tracks from "<<myname<<" for efficiency"<<endl;
+  file->cd();
+  char *myname = mynameITS;
+  if(TPC&&!ITS) myname = mynameTPC;
+  if(TPC&&ITS) myname = mynameTPCITS;
   TH2F *numeratorParent; 
   switch(mycase){
   case 0:
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoHadron");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")));
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")));
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
-    //numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Unidentified")));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)))->Clone("RecoHadron");
+       else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)));}
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiMinus",i)));
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KMinus",i)));
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)));
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)));
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"AntiProton",i)));
+      }
+    }
+    else{
+      numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoHadron");
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")));
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")));
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
+    }
     break;
   case 1://pion
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoPion");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)))->Clone("RecoPion");
+       else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)));}
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiMinus",i)));
+      }
+    }
+    else{
+      numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoPion");
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
+    }
     break;
   case 2://kaon
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")))->Clone("RecoKaon");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)))->Clone("RecoKaon");
+       else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)));}
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KMinus",i)));
+      }
+    }
+    else{
+      numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")))->Clone("RecoKaon");
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
+    }
     break;
   case 3://proton
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")))->Clone("RecoProton");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)))->Clone("RecoProton");
+       else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)));}
+       numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"AntiProton",i)));
+      }
+    }
+    else{
+      numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")))->Clone("RecoProton");
+      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
+    }
     break;
   case 4://electron
-    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"EPlus")))->Clone("RecoElectron");
-    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"EMinus")));
+    numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s%s",myname,"EPlus",cbname)))->Clone("RecoElectron");
+    numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s%s",myname,"EMinus",cbname)));
     break;
   }
   TH2F *denominatorParent; 
   switch(mycase){
   case 0:
-    denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedChargedHadron"))->Clone("RecoHadron");
+    if(cblast != -1){//add more centrality bins
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedChargedHadronCB%i",cb)))->Clone("RecoHadron");
+      for(int i=cb+1;i<=cblast;i++){
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedChargedHadronCB%i",i)));
+      }
+    }
+    else{
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedChargedHadron"))->Clone("RecoHadron");
+    }
     break;
   case 1://pion
-    denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedPiPlus"))->Clone("RecoPion");
-    denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedPiMinus"));
+    if(cblast != -1){//add more centrality bins
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedPiPlusCB%i",cb)))->Clone("RecoPion");
+      denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiMinusCB%i",cb)));
+      for(int i=cb+1;i<=cblast;i++){
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiPlusCB%i",i)));
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiMinusCB%i",i)));
+      }
+    }
+    else{
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedPiPlus"))->Clone("RecoPion");
+      denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedPiMinus"));
+    }
     break;
   case 2://kaon
-    denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedKPlus"))->Clone("RecoKaon");
-    denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedKMinus"));
+    if(cblast != -1){//add more centrality bins
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedKPlusCB%i",cb)))->Clone("RecoKaon");
+      denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKMinusCB%i",cb)));
+      for(int i=cb+1;i<=cblast;i++){
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKPlusCB%i",i)));
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKMinusCB%i",i)));
+      }
+    }
+    else{
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedKPlus"))->Clone("RecoKaon");
+      denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedKMinus"));
+    }
     break;
   case 3://proton
-    denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedProton"))->Clone("RecoProton");
-    denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedAntiProton"));
+    if(cblast != -1){//add more centrality bins
+      for(int i=cb;i<=cblast;i++){
+       if(cb==i)denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedProtonCB%i",i)))->Clone("RecoProton");
+       else{denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedProtonCB%i",i)));}
+       denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedAntiProtonCB%i",i)));
+      }
+    }
+    else{
+      denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedProton"))->Clone("RecoProton");
+      denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedAntiProton"));
+    }
     break;
   case 4://electron
     denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedEPlus"))->Clone("RecoElectron");
@@ -1153,11 +1449,14 @@ TH1D *GetHistoEfficiency(float cut, char *name, int mycase, int color, int marke
   //result->Draw("e");
   delete denominator;
   delete numerator;
+  delete numeratorParent;
+  delete denominatorParent;
+  result->SetName(name);
   return result;
 
 }
 
-void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname, char *infilename){
+void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname){
   bool ITS = true;
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
@@ -1181,10 +1480,10 @@ void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname, char *in
   int emcalmarker = 24;
   float ptcut1 = 0.05;
   float ptcut2 = 0.1;
-  TH1D *PHOStotal = GetHistoEfficiency(0.12,"PHOStotal",0,colortotal,phosmarker,TPC,ITS,infilename);
-  TH1D *PHOSpi = GetHistoEfficiency(0.12,"PHOSpi",1,colorpi,phosmarker,TPC,ITS,infilename);
-  TH1D *PHOSp = GetHistoEfficiency(0.12,"PHOSp",2,colork,phosmarker,TPC,ITS,infilename);
-  TH1D *PHOSk = GetHistoEfficiency(0.12,"PHOSk",3,colorp,phosmarker,TPC,ITS,infilename);
+  TH1D *PHOStotal = GetHistoEfficiency(0.12,"PHOStotal",0,colortotal,phosmarker,TPC,ITS);
+  TH1D *PHOSpi = GetHistoEfficiency(0.12,"PHOSpi",1,colorpi,phosmarker,TPC,ITS);
+  TH1D *PHOSp = GetHistoEfficiency(0.12,"PHOSp",2,colork,phosmarker,TPC,ITS);
+  TH1D *PHOSk = GetHistoEfficiency(0.12,"PHOSk",3,colorp,phosmarker,TPC,ITS);
   if(!TPC){PHOStotal->GetXaxis()->SetRange(PHOStotal->GetXaxis()->FindBin(0.05),PHOStotal->GetXaxis()->FindBin(1.0));}
   else{PHOStotal->GetXaxis()->SetRange(PHOStotal->GetXaxis()->FindBin(0.15),PHOStotal->GetXaxis()->FindBin(3.0));}
   PHOStotal->SetMinimum(0.0);
@@ -1193,10 +1492,10 @@ void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname, char *in
   PHOSpi->Draw("same");
   PHOSp->Draw("same");
   PHOSk->Draw("same");
-  TH1D *EMCALtotal = GetHistoEfficiency(0.7,"EMCALtotal",0,colortotal,emcalmarker,TPC,ITS,infilename);
-  TH1D *EMCALpi = GetHistoEfficiency(0.7,"EMCALpi",1,colorpi,emcalmarker,TPC,ITS,infilename);
-  TH1D *EMCALp = GetHistoEfficiency(0.7,"EMCALp",2,colork,emcalmarker,TPC,ITS,infilename);
-  TH1D *EMCALk = GetHistoEfficiency(0.7,"EMCALk",3,colorp,emcalmarker,TPC,ITS,infilename);
+  TH1D *EMCALtotal = GetHistoEfficiency(0.7,"EMCALtotal",0,colortotal,emcalmarker,TPC,ITS);
+  TH1D *EMCALpi = GetHistoEfficiency(0.7,"EMCALpi",1,colorpi,emcalmarker,TPC,ITS);
+  TH1D *EMCALp = GetHistoEfficiency(0.7,"EMCALp",2,colork,emcalmarker,TPC,ITS);
+  TH1D *EMCALk = GetHistoEfficiency(0.7,"EMCALk",3,colorp,emcalmarker,TPC,ITS);
   EMCALtotal->Draw("same");
   EMCALpi->Draw("same");
   EMCALp->Draw("same");
@@ -1231,8 +1530,6 @@ void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname, char *in
   TLatex *tex2 = new TLatex(0.241937,0.448436,"Likely TPC cut-off 200 MeV/c");
   tex2->SetTextSize(0.0537634);
   tex2->Draw();
-  char epsname[100];
-  char pngname[100];
   if(TPC){
     if(ITS){
       sprintf(epsname,"pics/%s/CorrEfficiencyITSTPC.eps",shortprodname);
@@ -1259,16 +1556,18 @@ void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname, char *in
   c->SaveAs(epsname);
   c->SaveAs(pngname);
   delete c;
+  delete line;
+  delete tex;
+  delete tex3;
 }
 
 //==================================CorrBkgd=================================================
-TH1D *GetHistoCorrBkgd(float etacut,char *name, bool TPC, char *infilename,bool ispp,bool forSim){
-  TFile *file = new TFile(infilename);
-  TList *list = file->FindObject("out2");
-  char *reweightname = "";
-  if(!forSim) reweightname = "Reweighted";
-  char *myname = "ITS";
-  if(TPC) myname = "TPC";
+TH1D *GetHistoCorrBkgd(float etacut,char *name, bool TPC,bool ispp,bool forSim){
+  file->cd();
+  char *reweightname = reweightedNo;
+  if(!forSim) reweightname = reweightedYes;
+  char *myname = mynameITS;
+  if(TPC) myname = mynameTPC;
   TH2F *signal = ((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiPlus",myname)))->Clone("signal");
   signal->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiMinus",myname)));
   signal->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedKMinus",myname)));
@@ -1299,11 +1598,12 @@ TH1D *GetHistoCorrBkgd(float etacut,char *name, bool TPC, char *infilename,bool
   delete signal;
   delete bkgd;
   delete denominator;
+  numerator->SetName(name);
   return numerator;
 
 }
 
-void CorrBkgdPlots(char *prodname, char *shortprodname, bool TPC, char *infilename,bool ispp,bool forSim){
+void CorrBkgdPlots(char *prodname, char *shortprodname, bool TPC,bool ispp,bool forSim){
   gStyle->SetOptTitle(0);
   gStyle->SetOptStat(0);
   gStyle->SetOptFit(0);
@@ -1317,8 +1617,8 @@ void CorrBkgdPlots(char *prodname, char *shortprodname, bool TPC, char *infilena
   c->SetFrameFillColor(0);
   c->SetFrameBorderMode(0);
 
-  TH1D *PHOS = GetHistoCorrBkgd(0.12,"PHOS2",TPC,infilename,ispp,forSim);
-  TH1D *EMCAL = GetHistoCorrBkgd(0.7,"EMCAL2",TPC,infilename,ispp,forSim);
+  TH1D *PHOS = GetHistoCorrBkgd(0.12,"PHOS2",TPC,ispp,forSim);
+  TH1D *EMCAL = GetHistoCorrBkgd(0.7,"EMCAL2",TPC,ispp,forSim);
   PHOS->SetMarkerColor(2);
   EMCAL->SetMarkerColor(4);
   PHOS->SetLineColor(2);
@@ -1361,5 +1661,7 @@ void CorrBkgdPlots(char *prodname, char *shortprodname, bool TPC, char *infilena
   delete c;
   delete PHOS;
   delete EMCAL;
+  delete tex;
+  delete leg;
 
 }