ROOT logo
//Christine Nattrass, University of Tennessee at Knoxville
//This macro is for calculating the single track efficiency for the hadronic transverse energy measurement
//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

TFile *file;// = new TFile(filename);

//this function calculates the efficiency propagating errors properly
TH1D* bayneseffdiv(TH1D* numerator, TH1D* denominator,Char_t* name) 
{
    if(!numerator){
      cerr<<"Error:  numerator does not exist!"<<endl;
      return NULL;
    }
    if(!denominator){
      cerr<<"Error:  denominator does not exist!"<<endl;
      return NULL;
    }
    TH1D* result = (TH1D*)numerator->Clone(name);
    Int_t nbins = numerator->GetNbinsX();
    for (Int_t ibin=0; ibin<= nbins+1; ++ibin) {
      Double_t numeratorVal = numerator->GetBinContent(ibin);
      Double_t denominatorVal = denominator->GetBinContent(ibin);
      // Check if the errors are right or the thing is scaled
      Double_t numeratorValErr = numerator->GetBinError(ibin);
      if (!(numeratorValErr==0. || numeratorVal ==0.) ) {
	Double_t rescale = numeratorValErr*numeratorValErr/numeratorVal;
	numeratorVal /= rescale;
      }
      Double_t denominatorValErr = denominator->GetBinError(ibin);
      if (!(denominatorValErr==0. || denominatorVal==0. )) {
	Double_t rescale = denominatorValErr*denominatorValErr/denominatorVal;
	denominatorVal /= rescale;
      }
      Double_t quotient = 0.;
      if (denominatorVal!=0.) {
	quotient = numeratorVal/denominatorVal;
      }
      Double_t quotientErr=0;
      quotientErr = TMath::Sqrt(
				(numeratorVal+1.0)/(denominatorVal+2.0)*
				((numeratorVal+2.0)/(denominatorVal+3.0)-(numeratorVal+1.0)/(denominatorVal+2.0)));
      result->SetBinContent(ibin,quotient);
      result->SetBinError(ibin,quotientErr);
      //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;
    }
    return result;
}


//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, bool PbPb, int cb, int cblast, char *filename){
  //TFile *file = new TFile("Et.ESD.new.sim.merged.root");
  //TFile *file = new TFile("rootFiles/LHC11a4_bis/Et.ESD.new.sim.LHC11a4_bis.root");
  file->cd();
  //TFile *file = new TFile("rootFiles/LHC10d7/Et.ESD.new.sim.LHC10d7.root");
  TList *list = file->FindObject("out2");
  char *myname = "ITS";
  if(TPC&&!ITS){ delete myname; myname = "TPC";}
  if(TPC&&ITS) {delete myname; myname = "TPCITS";}
  char *mynamealt = "TPCITS";
  //cout<<"Using tracks from "<<myname<<" for efficiency"<<endl;
  TH2F *numeratorParent; 
  switch(mycase){
  case 0:
    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)));
	if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"PiPlus",i)));
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"PiMinus",i)));
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"KMinus",i)));
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"KPlus",i)));
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"Proton",i)));
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"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")));
      if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"PiPlus")));
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"PiMinus")));
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"KMinus")));
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"KPlus")));
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"Proton")));
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"AntiProton")));
      }
    }
    break;
  case 1://pion
    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)));
	if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"PiMinus",i)));
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"PiPlus",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")));
      if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"PiPlus")));
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"PiMinus")));
      }
    }
    break;
  case 2://kaon
    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)));
	if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"KPlus",i)));
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"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")));
      if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"KPlus")));
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"KMinus")));
      }
      //cout<<"Numerator "<<numeratorParent->GetEntries()<<endl;
    }
    break;
  case 3://proton
    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)));
	if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"Proton",i)));
	  numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",mynamealt,"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")));
      if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"Proton")));
	numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",mynamealt,"AntiProton")));
      }
      //cout<<"Numerator "<<numeratorParent->GetEntries()<<endl;
    }
    break;
  case 4://electron
    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)));
    if(!TPC&&ITS){//ITS Standalone tracks - from leftover hits, don't want to double count
      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s%s",mynamealt,"EPlus",cbname)));
      numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s%s",mynamealt,"EMinus",cbname)));
    }
    break;
  }
  TH2F *denominatorParent; 
  switch(mycase){
  case 0:
    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
    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
    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
    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;
  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 = denominatorParent->ProjectionX(Form("garbage%s",name),lowbin,highbin);
    numerator = numeratorParent->ProjectionX(name,lowbin,highbin);
  }
  else{
    int lowbin = denominatorParent->GetXaxis()->FindBin(cut);//make sure we don't accidentally get the wrong bin
    int highbin = denominatorParent->GetXaxis()->GetNbins();
    // cout<<"Here Projecting from "<<denominatorParent->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<denominatorParent->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
    numerator = numeratorParent->ProjectionY(name,lowbin,highbin);
    denominator = denominatorParent->ProjectionY(Form("denominator%s",name),lowbin,highbin);
  }
  delete numeratorParent;
  delete denominatorParent;
  //numerator->Divide(denominator);
  TH1D *result = bayneseffdiv((TH1D*) numerator,(TH1D*)denominator,name);
  //result->Rebin(2);
  //result->Scale(0.5);
  result->SetYTitle("Efficiency");
  result->GetYaxis()->SetTitleOffset(0.8);
  result->GetXaxis()->SetTitleOffset(0.8);
  result->GetYaxis()->SetLabelSize(0.05);
  result->GetXaxis()->SetLabelSize(0.05);
  result->GetYaxis()->SetTitleSize(0.05);
  result->GetXaxis()->SetTitleSize(0.05);
  result->SetMarkerColor(color);
  result->SetLineColor(color);
  result->SetMarkerStyle(marker);
  //result->Draw("e");
  //file->Close();
  //delete file;
  delete numerator;
  delete denominator;
  result->SetName(name);
  return result;

}


//this is a method that makes pretty plots
void CorrEfficiency(char *prodname = "LHC11a4_bis HIJING 2.76 TeV Pb+Pb",char *shortprodname= "LHC11a4_bis", char *filename = "rootFiles/LHC11a4_bis/Et.ESD.new.sim.LHC11a4_bis.root", bool TPC = false,bool ITS = true, bool eta = true, bool PbPb = true, int cb = 0, int cblast = -1){

  file = new TFile(filename);
  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(0);
  TCanvas *c = new TCanvas("c","c",600,400);
  c->SetTopMargin(0.02);
  c->SetRightMargin(0.02);
  c->SetBorderSize(0);
  c->SetFillColor(0);
  c->SetFillColor(0);
  c->SetBorderMode(0);
  c->SetFrameFillColor(0);
  c->SetFrameBorderMode(0);
  //c->SetLogx();

  int colortotal = 1;
  int colorpi = 2;
  int colork = 3;
  int colorp = 4;
  int phosmarker = 20;
  int emcalmarker = 24;
  float ptcut1 = 0.05;
  float ptcut2 = 0.1;
  float phoscut = 0.12;
  float emcalcut = 0.7;
  if(!eta){
    phoscut = 0.1;
    emcalcut = 0.15;
  }
  TH1D *PHOStotal = GetHisto(phoscut,"PHOStotal",0,eta,colortotal,phosmarker,TPC,ITS,PbPb,cb,cblast,filename);
  TH1D *PHOSpi = GetHisto(phoscut,"PHOSpi",1,eta,colorpi,phosmarker,TPC,ITS,PbPb,cb,cblast,filename);
  TH1D *PHOSp = GetHisto(phoscut,"PHOSp",3,eta,colork,phosmarker,TPC,ITS,PbPb,cb,cblast,filename);
  TH1D *PHOSk = GetHisto(phoscut,"PHOSk",2,eta,colorp,phosmarker,TPC,ITS,PbPb,cb,cblast,filename);
  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));}
  PHOStotal->SetMinimum(0.0);
  PHOStotal->SetMaximum(1.0);
  //parameters[centbin][0]*exp(-pow(parameters[centbin][1]/pt,parameters[centbin][2]))
  TF1 *func = new TF1("func","[0]*exp(-pow([1]/x,[2]))");
  func->SetParameter(0,.9);
  func->SetParameter(1,.05);
  func->SetParLimits(1,1e-3,1);
  func->SetParameter(2,.1);
  //PHOStotal->Fit(func);
  PHOStotal->Draw();
  PHOSpi->Draw("same");
  PHOSp->Draw("same");
  PHOSk->Draw("same");
  //cout<<"Hadrons"<<endl;
  TH1D *EMCALtotal = GetHisto(emcalcut,"EMCALtotal",0,eta,colortotal,emcalmarker,TPC,ITS,PbPb,cb,cblast,filename);
  //cout<<endl<<endl<<"=================================PIONS================================="<<endl;
  TH1D *EMCALpi = GetHisto(emcalcut,"EMCALpi",1,eta,colorpi,emcalmarker,TPC,ITS,PbPb,cb,cblast,filename);
  //cout<<endl<<endl<<"=================================PROTONS================================="<<endl;
  TH1D *EMCALp = GetHisto(emcalcut,"EMCALp",3,eta,colork,emcalmarker,TPC,ITS,PbPb,cb,cblast,filename);
  //cout<<endl<<endl<<"=================================KAONS================================="<<endl;
  TH1D *EMCALk = GetHisto(emcalcut,"EMCALk",2,eta,colorp,emcalmarker,TPC,ITS,PbPb,cb,cblast,filename);
  EMCALtotal->Draw("same");
  EMCALpi->Draw("same");
  EMCALp->Draw("same");
  EMCALk->Draw("same");


  TLegend *leg = new  TLegend(0.22651,0.247312,0.370805,0.438172);
  leg->AddEntry(PHOStotal,"#pi,K,p");
  leg->AddEntry(PHOSpi,"#pi^{#pm}");
  leg->AddEntry(PHOSk,"K^{#pm}");
  leg->AddEntry(PHOSp,"p,#bar{p}");
  leg->SetFillStyle(0);
  leg->SetFillColor(0);
  leg->SetBorderSize(0);
  leg->SetTextSize(0.06);
 leg->Draw();

  TLine *line = new TLine(0.150,0.0,0.150,1.0);
  if(eta)line->Draw();
  line->SetLineWidth(3.0);
  //line->SetLineColor(TColor::kYellow);
  line->SetLineStyle(2);
  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)");
  tex3->SetTextSize(0.0537634);
  tex3->Draw();
  TLatex *tex4 = new TLatex(1.16186,0.213221,"Open symbols |#eta|<0.70 (EMCal)");
  tex4->SetTextSize(0.0537634);
  tex4->Draw();
  TLatex *tex2 = new TLatex(0.164016,0.860826,"TPC cut-off 150 MeV/c");
  tex2->SetTextSize(0.0537634);
  if(eta) tex2->Draw();


  TLine *line2 = new TLine(0.10,0.0,0.10,1.0);
  line2->SetLineWidth(3.0);
  TLatex *tex5 = new TLatex(0.10817,0.924976,"ITS cut-off 100 MeV/c");
  tex5->SetTextSize(0.0537634);
  line2->SetLineStyle(2);
  tex5->SetTextColor(4);
  line2->SetLineColor(4);
  if(!TPC && eta){
    line2->Draw();
    tex5->Draw();
  }
  if(!TPC){
    c->SaveAs(Form("pics/%s/CorrEfficiency.eps",shortprodname));
    c->SaveAs(Form("pics/%s/CorrEfficiency.png",shortprodname));
  }
  else{
    c->SaveAs(Form("pics/%s/CorrEfficiencyTPCITS.eps",shortprodname));
    c->SaveAs(Form("pics/%s/CorrEfficiencyTPCITS.png",shortprodname));
  }

  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 = 2;//h=0,pi=1,p=3,k=2
    int maxid = 3;
    if(!TPC) maxid=0;
    for(int pid=0;pid<=maxid;pid++){
      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,filename);
      TH1D *cb4 = GetHisto(phoscut,"cb5",pid,eta,4,20,TPC,ITS,PbPb,5,9,filename);
      //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,filename);
      cb0->GetXaxis()->SetRange(cb0->GetXaxis()->FindBin(0.05),cb0->GetXaxis()->FindBin(5.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();
      TString particle;
      TString unidentified = "h";
      TString proton = "p";
      TString pion = "#pi";
      TString kaon = "K";
      switch(pid){
      case 0:
	particle = unidentified;
	break;
      case 1:
	particle = pion;
	break;
      case 2:
	particle = kaon;
	break;
      case 3:
	particle = proton;
	break;
      }
      TLatex *texpid = new TLatex(0.25237,0.589541,particle.Data());
      texpid->SetTextSize(0.0806452);
      texpid->Draw();
      switch(pid){
      case 0:
	if(!TPC){c2->SaveAs(Form("pics/%s/CorrEfficiencyITSUnidentified.eps",shortprodname,pid));}
	else{c2->SaveAs(Form("pics/%s/CorrEfficiencyTPCITSUnidentified.eps",shortprodname,pid));}
	break;
      case 1:
	if(!TPC){c2->SaveAs(Form("pics/%s/CorrEfficiencyITSPion.eps",shortprodname,pid));}
	else{c2->SaveAs(Form("pics/%s/CorrEfficiencyTPCITSPion.eps",shortprodname,pid));}
	break;
      case 3:
	if(!TPC){c2->SaveAs(Form("pics/%s/CorrEfficiencyITSProton.eps",shortprodname,pid));}
	else{c2->SaveAs(Form("pics/%s/CorrEfficiencyTPCITSProton.eps",shortprodname,pid));}
	break;
      case 2:
	if(!TPC){c2->SaveAs(Form("pics/%s/CorrEfficiencyITSKaon.eps",shortprodname,pid));}
	else{c2->SaveAs(Form("pics/%s/CorrEfficiencyTPCITSKaon.eps",shortprodname,pid));}
	break;
      }
    }
  }
}
 CorrEfficiency.C:1
 CorrEfficiency.C:2
 CorrEfficiency.C:3
 CorrEfficiency.C:4
 CorrEfficiency.C:5
 CorrEfficiency.C:6
 CorrEfficiency.C:7
 CorrEfficiency.C:8
 CorrEfficiency.C:9
 CorrEfficiency.C:10
 CorrEfficiency.C:11
 CorrEfficiency.C:12
 CorrEfficiency.C:13
 CorrEfficiency.C:14
 CorrEfficiency.C:15
 CorrEfficiency.C:16
 CorrEfficiency.C:17
 CorrEfficiency.C:18
 CorrEfficiency.C:19
 CorrEfficiency.C:20
 CorrEfficiency.C:21
 CorrEfficiency.C:22
 CorrEfficiency.C:23
 CorrEfficiency.C:24
 CorrEfficiency.C:25
 CorrEfficiency.C:26
 CorrEfficiency.C:27
 CorrEfficiency.C:28
 CorrEfficiency.C:29
 CorrEfficiency.C:30
 CorrEfficiency.C:31
 CorrEfficiency.C:32
 CorrEfficiency.C:33
 CorrEfficiency.C:34
 CorrEfficiency.C:35
 CorrEfficiency.C:36
 CorrEfficiency.C:37
 CorrEfficiency.C:38
 CorrEfficiency.C:39
 CorrEfficiency.C:40
 CorrEfficiency.C:41
 CorrEfficiency.C:42
 CorrEfficiency.C:43
 CorrEfficiency.C:44
 CorrEfficiency.C:45
 CorrEfficiency.C:46
 CorrEfficiency.C:47
 CorrEfficiency.C:48
 CorrEfficiency.C:49
 CorrEfficiency.C:50
 CorrEfficiency.C:51
 CorrEfficiency.C:52
 CorrEfficiency.C:53
 CorrEfficiency.C:54
 CorrEfficiency.C:55
 CorrEfficiency.C:56
 CorrEfficiency.C:57
 CorrEfficiency.C:58
 CorrEfficiency.C:59
 CorrEfficiency.C:60
 CorrEfficiency.C:61
 CorrEfficiency.C:62
 CorrEfficiency.C:63
 CorrEfficiency.C:64
 CorrEfficiency.C:65
 CorrEfficiency.C:66
 CorrEfficiency.C:67
 CorrEfficiency.C:68
 CorrEfficiency.C:69
 CorrEfficiency.C:70
 CorrEfficiency.C:71
 CorrEfficiency.C:72
 CorrEfficiency.C:73
 CorrEfficiency.C:74
 CorrEfficiency.C:75
 CorrEfficiency.C:76
 CorrEfficiency.C:77
 CorrEfficiency.C:78
 CorrEfficiency.C:79
 CorrEfficiency.C:80
 CorrEfficiency.C:81
 CorrEfficiency.C:82
 CorrEfficiency.C:83
 CorrEfficiency.C:84
 CorrEfficiency.C:85
 CorrEfficiency.C:86
 CorrEfficiency.C:87
 CorrEfficiency.C:88
 CorrEfficiency.C:89
 CorrEfficiency.C:90
 CorrEfficiency.C:91
 CorrEfficiency.C:92
 CorrEfficiency.C:93
 CorrEfficiency.C:94
 CorrEfficiency.C:95
 CorrEfficiency.C:96
 CorrEfficiency.C:97
 CorrEfficiency.C:98
 CorrEfficiency.C:99
 CorrEfficiency.C:100
 CorrEfficiency.C:101
 CorrEfficiency.C:102
 CorrEfficiency.C:103
 CorrEfficiency.C:104
 CorrEfficiency.C:105
 CorrEfficiency.C:106
 CorrEfficiency.C:107
 CorrEfficiency.C:108
 CorrEfficiency.C:109
 CorrEfficiency.C:110
 CorrEfficiency.C:111
 CorrEfficiency.C:112
 CorrEfficiency.C:113
 CorrEfficiency.C:114
 CorrEfficiency.C:115
 CorrEfficiency.C:116
 CorrEfficiency.C:117
 CorrEfficiency.C:118
 CorrEfficiency.C:119
 CorrEfficiency.C:120
 CorrEfficiency.C:121
 CorrEfficiency.C:122
 CorrEfficiency.C:123
 CorrEfficiency.C:124
 CorrEfficiency.C:125
 CorrEfficiency.C:126
 CorrEfficiency.C:127
 CorrEfficiency.C:128
 CorrEfficiency.C:129
 CorrEfficiency.C:130
 CorrEfficiency.C:131
 CorrEfficiency.C:132
 CorrEfficiency.C:133
 CorrEfficiency.C:134
 CorrEfficiency.C:135
 CorrEfficiency.C:136
 CorrEfficiency.C:137
 CorrEfficiency.C:138
 CorrEfficiency.C:139
 CorrEfficiency.C:140
 CorrEfficiency.C:141
 CorrEfficiency.C:142
 CorrEfficiency.C:143
 CorrEfficiency.C:144
 CorrEfficiency.C:145
 CorrEfficiency.C:146
 CorrEfficiency.C:147
 CorrEfficiency.C:148
 CorrEfficiency.C:149
 CorrEfficiency.C:150
 CorrEfficiency.C:151
 CorrEfficiency.C:152
 CorrEfficiency.C:153
 CorrEfficiency.C:154
 CorrEfficiency.C:155
 CorrEfficiency.C:156
 CorrEfficiency.C:157
 CorrEfficiency.C:158
 CorrEfficiency.C:159
 CorrEfficiency.C:160
 CorrEfficiency.C:161
 CorrEfficiency.C:162
 CorrEfficiency.C:163
 CorrEfficiency.C:164
 CorrEfficiency.C:165
 CorrEfficiency.C:166
 CorrEfficiency.C:167
 CorrEfficiency.C:168
 CorrEfficiency.C:169
 CorrEfficiency.C:170
 CorrEfficiency.C:171
 CorrEfficiency.C:172
 CorrEfficiency.C:173
 CorrEfficiency.C:174
 CorrEfficiency.C:175
 CorrEfficiency.C:176
 CorrEfficiency.C:177
 CorrEfficiency.C:178
 CorrEfficiency.C:179
 CorrEfficiency.C:180
 CorrEfficiency.C:181
 CorrEfficiency.C:182
 CorrEfficiency.C:183
 CorrEfficiency.C:184
 CorrEfficiency.C:185
 CorrEfficiency.C:186
 CorrEfficiency.C:187
 CorrEfficiency.C:188
 CorrEfficiency.C:189
 CorrEfficiency.C:190
 CorrEfficiency.C:191
 CorrEfficiency.C:192
 CorrEfficiency.C:193
 CorrEfficiency.C:194
 CorrEfficiency.C:195
 CorrEfficiency.C:196
 CorrEfficiency.C:197
 CorrEfficiency.C:198
 CorrEfficiency.C:199
 CorrEfficiency.C:200
 CorrEfficiency.C:201
 CorrEfficiency.C:202
 CorrEfficiency.C:203
 CorrEfficiency.C:204
 CorrEfficiency.C:205
 CorrEfficiency.C:206
 CorrEfficiency.C:207
 CorrEfficiency.C:208
 CorrEfficiency.C:209
 CorrEfficiency.C:210
 CorrEfficiency.C:211
 CorrEfficiency.C:212
 CorrEfficiency.C:213
 CorrEfficiency.C:214
 CorrEfficiency.C:215
 CorrEfficiency.C:216
 CorrEfficiency.C:217
 CorrEfficiency.C:218
 CorrEfficiency.C:219
 CorrEfficiency.C:220
 CorrEfficiency.C:221
 CorrEfficiency.C:222
 CorrEfficiency.C:223
 CorrEfficiency.C:224
 CorrEfficiency.C:225
 CorrEfficiency.C:226
 CorrEfficiency.C:227
 CorrEfficiency.C:228
 CorrEfficiency.C:229
 CorrEfficiency.C:230
 CorrEfficiency.C:231
 CorrEfficiency.C:232
 CorrEfficiency.C:233
 CorrEfficiency.C:234
 CorrEfficiency.C:235
 CorrEfficiency.C:236
 CorrEfficiency.C:237
 CorrEfficiency.C:238
 CorrEfficiency.C:239
 CorrEfficiency.C:240
 CorrEfficiency.C:241
 CorrEfficiency.C:242
 CorrEfficiency.C:243
 CorrEfficiency.C:244
 CorrEfficiency.C:245
 CorrEfficiency.C:246
 CorrEfficiency.C:247
 CorrEfficiency.C:248
 CorrEfficiency.C:249
 CorrEfficiency.C:250
 CorrEfficiency.C:251
 CorrEfficiency.C:252
 CorrEfficiency.C:253
 CorrEfficiency.C:254
 CorrEfficiency.C:255
 CorrEfficiency.C:256
 CorrEfficiency.C:257
 CorrEfficiency.C:258
 CorrEfficiency.C:259
 CorrEfficiency.C:260
 CorrEfficiency.C:261
 CorrEfficiency.C:262
 CorrEfficiency.C:263
 CorrEfficiency.C:264
 CorrEfficiency.C:265
 CorrEfficiency.C:266
 CorrEfficiency.C:267
 CorrEfficiency.C:268
 CorrEfficiency.C:269
 CorrEfficiency.C:270
 CorrEfficiency.C:271
 CorrEfficiency.C:272
 CorrEfficiency.C:273
 CorrEfficiency.C:274
 CorrEfficiency.C:275
 CorrEfficiency.C:276
 CorrEfficiency.C:277
 CorrEfficiency.C:278
 CorrEfficiency.C:279
 CorrEfficiency.C:280
 CorrEfficiency.C:281
 CorrEfficiency.C:282
 CorrEfficiency.C:283
 CorrEfficiency.C:284
 CorrEfficiency.C:285
 CorrEfficiency.C:286
 CorrEfficiency.C:287
 CorrEfficiency.C:288
 CorrEfficiency.C:289
 CorrEfficiency.C:290
 CorrEfficiency.C:291
 CorrEfficiency.C:292
 CorrEfficiency.C:293
 CorrEfficiency.C:294
 CorrEfficiency.C:295
 CorrEfficiency.C:296
 CorrEfficiency.C:297
 CorrEfficiency.C:298
 CorrEfficiency.C:299
 CorrEfficiency.C:300
 CorrEfficiency.C:301
 CorrEfficiency.C:302
 CorrEfficiency.C:303
 CorrEfficiency.C:304
 CorrEfficiency.C:305
 CorrEfficiency.C:306
 CorrEfficiency.C:307
 CorrEfficiency.C:308
 CorrEfficiency.C:309
 CorrEfficiency.C:310
 CorrEfficiency.C:311
 CorrEfficiency.C:312
 CorrEfficiency.C:313
 CorrEfficiency.C:314
 CorrEfficiency.C:315
 CorrEfficiency.C:316
 CorrEfficiency.C:317
 CorrEfficiency.C:318
 CorrEfficiency.C:319
 CorrEfficiency.C:320
 CorrEfficiency.C:321
 CorrEfficiency.C:322
 CorrEfficiency.C:323
 CorrEfficiency.C:324
 CorrEfficiency.C:325
 CorrEfficiency.C:326
 CorrEfficiency.C:327
 CorrEfficiency.C:328
 CorrEfficiency.C:329
 CorrEfficiency.C:330
 CorrEfficiency.C:331
 CorrEfficiency.C:332
 CorrEfficiency.C:333
 CorrEfficiency.C:334
 CorrEfficiency.C:335
 CorrEfficiency.C:336
 CorrEfficiency.C:337
 CorrEfficiency.C:338
 CorrEfficiency.C:339
 CorrEfficiency.C:340
 CorrEfficiency.C:341
 CorrEfficiency.C:342
 CorrEfficiency.C:343
 CorrEfficiency.C:344
 CorrEfficiency.C:345
 CorrEfficiency.C:346
 CorrEfficiency.C:347
 CorrEfficiency.C:348
 CorrEfficiency.C:349
 CorrEfficiency.C:350
 CorrEfficiency.C:351
 CorrEfficiency.C:352
 CorrEfficiency.C:353
 CorrEfficiency.C:354
 CorrEfficiency.C:355
 CorrEfficiency.C:356
 CorrEfficiency.C:357
 CorrEfficiency.C:358
 CorrEfficiency.C:359
 CorrEfficiency.C:360
 CorrEfficiency.C:361
 CorrEfficiency.C:362
 CorrEfficiency.C:363
 CorrEfficiency.C:364
 CorrEfficiency.C:365
 CorrEfficiency.C:366
 CorrEfficiency.C:367
 CorrEfficiency.C:368
 CorrEfficiency.C:369
 CorrEfficiency.C:370
 CorrEfficiency.C:371
 CorrEfficiency.C:372
 CorrEfficiency.C:373
 CorrEfficiency.C:374
 CorrEfficiency.C:375
 CorrEfficiency.C:376
 CorrEfficiency.C:377
 CorrEfficiency.C:378
 CorrEfficiency.C:379
 CorrEfficiency.C:380
 CorrEfficiency.C:381
 CorrEfficiency.C:382
 CorrEfficiency.C:383
 CorrEfficiency.C:384
 CorrEfficiency.C:385
 CorrEfficiency.C:386
 CorrEfficiency.C:387
 CorrEfficiency.C:388
 CorrEfficiency.C:389
 CorrEfficiency.C:390
 CorrEfficiency.C:391
 CorrEfficiency.C:392
 CorrEfficiency.C:393
 CorrEfficiency.C:394
 CorrEfficiency.C:395
 CorrEfficiency.C:396
 CorrEfficiency.C:397
 CorrEfficiency.C:398
 CorrEfficiency.C:399
 CorrEfficiency.C:400
 CorrEfficiency.C:401
 CorrEfficiency.C:402
 CorrEfficiency.C:403
 CorrEfficiency.C:404
 CorrEfficiency.C:405
 CorrEfficiency.C:406
 CorrEfficiency.C:407
 CorrEfficiency.C:408
 CorrEfficiency.C:409
 CorrEfficiency.C:410
 CorrEfficiency.C:411
 CorrEfficiency.C:412
 CorrEfficiency.C:413
 CorrEfficiency.C:414
 CorrEfficiency.C:415
 CorrEfficiency.C:416
 CorrEfficiency.C:417
 CorrEfficiency.C:418
 CorrEfficiency.C:419
 CorrEfficiency.C:420
 CorrEfficiency.C:421
 CorrEfficiency.C:422
 CorrEfficiency.C:423
 CorrEfficiency.C:424
 CorrEfficiency.C:425
 CorrEfficiency.C:426
 CorrEfficiency.C:427
 CorrEfficiency.C:428
 CorrEfficiency.C:429
 CorrEfficiency.C:430
 CorrEfficiency.C:431
 CorrEfficiency.C:432
 CorrEfficiency.C:433
 CorrEfficiency.C:434
 CorrEfficiency.C:435
 CorrEfficiency.C:436
 CorrEfficiency.C:437
 CorrEfficiency.C:438
 CorrEfficiency.C:439
 CorrEfficiency.C:440
 CorrEfficiency.C:441
 CorrEfficiency.C:442
 CorrEfficiency.C:443
 CorrEfficiency.C:444
 CorrEfficiency.C:445
 CorrEfficiency.C:446
 CorrEfficiency.C:447
 CorrEfficiency.C:448
 CorrEfficiency.C:449
 CorrEfficiency.C:450
 CorrEfficiency.C:451
 CorrEfficiency.C:452
 CorrEfficiency.C:453
 CorrEfficiency.C:454
 CorrEfficiency.C:455
 CorrEfficiency.C:456
 CorrEfficiency.C:457
 CorrEfficiency.C:458
 CorrEfficiency.C:459
 CorrEfficiency.C:460
 CorrEfficiency.C:461
 CorrEfficiency.C:462
 CorrEfficiency.C:463
 CorrEfficiency.C:464
 CorrEfficiency.C:465
 CorrEfficiency.C:466
 CorrEfficiency.C:467
 CorrEfficiency.C:468
 CorrEfficiency.C:469
 CorrEfficiency.C:470
 CorrEfficiency.C:471
 CorrEfficiency.C:472
 CorrEfficiency.C:473
 CorrEfficiency.C:474
 CorrEfficiency.C:475
 CorrEfficiency.C:476
 CorrEfficiency.C:477
 CorrEfficiency.C:478
 CorrEfficiency.C:479
 CorrEfficiency.C:480
 CorrEfficiency.C:481
 CorrEfficiency.C:482
 CorrEfficiency.C:483
 CorrEfficiency.C:484
 CorrEfficiency.C:485
 CorrEfficiency.C:486
 CorrEfficiency.C:487
 CorrEfficiency.C:488
 CorrEfficiency.C:489
 CorrEfficiency.C:490