ROOT logo
void SetStyles(TH1 *histo,int marker, int color,char *xtitle, char *ytitle, Bool_t scale = kFALSE);

void PlotGammaEfficiency(Bool_t isPhos = kFALSE, Int_t cutset = 0){

  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(0);
  TString det = "";
    if(isPhos){
      det = "PHOS";
    }
    else{
      det = "EMCal";
    }
    if(cutset==0){
      if(isPhos){
	filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.PHOS.LHC11a10a_bis.Run139465.root";
      }
      else{
	filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.EMCal.LHC11a10a_bis.Run139465.root";
      }
    }
    if(cutset==1){
      if(isPhos){
	filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.PHOSOldHadMethod.LHC11a10a_bis.root";
      }
      else{
	filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.EMCalOldHadMethod.LHC11a10a_bis.root";
      }
    }
    if(cutset==2){
      if(isPhos){
	filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.PHOS.LHC11a10a_bis.root";
      }
      else{
	filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.EMCal.LHC11a10a_bis.root";
      }
    }



  TFile *f = TFile::Open(filename, "READ");
  
  TList *l = (TList*)f->Get("out1");
  TH1F  *fHistGammasGenerated = l->FindObject("fHistGammasGenerated");
  TH1F  *fHistGammasFound = l->FindObject("fHistGammasFound");
  TH1F *hEfficiency = bayneseffdiv(fHistGammasFound,fHistGammasGenerated,"Efficiency");
  TH2F  *fHistGammasGeneratedMult = l->FindObject("fHistGammasGeneratedCent");
  //TH2F  *fHistGammasFoundMult = l->FindObject("fHistGammasFoundCent");
  //TH2F  *fHistGammasFoundOutOfAccMult = l->FindObject("fHistGammasFoundOutOfAccCent");
  //    TH2F *fHistGammasFoundRecoEnergyCent;
  //  TH2F *fHistGammasFoundOutOfAccRecoEnergyCent;
  TH2F  *fHistGammasFoundMult = l->FindObject("fHistGammasFoundRecoEnergyCent");
  TH2F  *fHistGammasFoundOutOfAccMult = l->FindObject("fHistGammasFoundOutOfAccRecoEnergyCent");
   fHistGammasFoundMult->Add(fHistGammasFoundOutOfAccMult);
  hEfficiency->GetXaxis()->SetTitle("Energy");
  hEfficiency->GetYaxis()->SetTitle("efficiency");
  hEfficiency->GetXaxis()->SetRange(1,hEfficiency->FindBin(3));

  TCanvas *c = new TCanvas("c","c",600,400);
  c->SetTopMargin(0.0187166);
  c->SetRightMargin(0.0201342);
  c->SetLeftMargin(0.112416);
  c->SetBottomMargin(0.15508);
  c->SetBorderSize(0);
  c->SetFillColor(0);
  c->SetFillColor(0);
  c->SetBorderMode(0);
  c->SetFrameFillColor(0);
  c->SetFrameBorderMode(0);

  hEfficiency->Draw();
  c->SaveAs("/tmp/GammaEfficiency.png");

  TCanvas *c1 = new TCanvas("c1","c1",600,400);
  c1->SetTopMargin(0.0187166);
  c1->SetRightMargin(0.0201342);
  c1->SetLeftMargin(0.112416);
  c1->SetBottomMargin(0.15508);
  c1->SetBorderSize(0);
  c1->SetFillColor(0);
  c1->SetFillColor(0);
  c1->SetBorderMode(0);
  c1->SetFrameFillColor(0);
  c1->SetFrameBorderMode(0);
  TH1D *fHistGammasGeneratedCent[22] = {NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL, NULL};
  TH1D *fHistGammasFoundCent[22] = {NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL, NULL};
  TH1D *fEff[22] = {NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL, NULL};
  int colors[] = {TColor::kRed,TColor::kRed, TColor::kOrange-3, TColor::kOrange-3, TColor::kGreen+3,
                  TColor::kGreen+3, TColor::kBlue, TColor::kBlue, TColor::kViolet, TColor::kViolet,
                  TColor::kMagenta+3,TColor::kRed,TColor::kRed, TColor::kOrange-3, TColor::kOrange-3, TColor::kGreen+3,
                  TColor::kGreen+3, TColor::kBlue, TColor::kBlue, TColor::kViolet, TColor::kViolet,
                  TColor::kMagenta+3};
  int markers[] = {20,24,21,25,22, 26,23,32,33,27, 29,20,24,21,25,22, 26,23,32,33,27, 29};
  TLegend *leg1 = new TLegend(0.129195,0.692513,0.29698,0.970588);
  leg1->SetFillStyle(0);
  leg1->SetFillColor(0);
  leg1->SetBorderSize(0);
  leg1->SetTextSize(0.03);
  leg1->SetTextSize(0.0534759);
  Int_t binwidth = 4;
  for(int i=0;i<20;i+=binwidth){
    Int_t maxbin = i+1+binwidth;
    fHistGammasGeneratedCent[i] = fHistGammasGeneratedMult->ProjectionX(Form("All%i",i),i+1,maxbin);
    fHistGammasFoundCent[i] = fHistGammasFoundMult->ProjectionX(Form("Reco%i",i),i+1,maxbin);
    fEff[i] = (TH1D*) bayneseffdiv(fHistGammasFoundCent[i],fHistGammasGeneratedCent[i],Form("eff%i",i));
    SetStyles(fEff[i],markers[i],colors[i],"energy","efficiency",1.0);
    TString legentry = Form("%i-%i",i*5,(maxbin-1)*5);
    legentry +="%";
    leg1->AddEntry(fEff[i],legentry.Data());
    if(i==0){ 
      fEff[i]->SetMaximum(1.5);
      fEff[i]->SetMinimum(0.0);
      fEff[i]->GetXaxis()->SetRange(1,fEff[i]->FindBin(3.0));
      fEff[i]->GetXaxis()->SetTitleSize(0.07);
      fEff[i]->GetYaxis()->SetTitleSize(0.07);
      fEff[i]->GetYaxis()->SetTitleOffset(0.7);
      fEff[i]->GetXaxis()->SetLabelSize(0.07);
      fEff[i]->GetYaxis()->SetLabelSize(0.07);
      fEff[i]->Draw();
    }
    else{ fEff[i]->Draw("same");}

  }
  leg1->Draw();
  TString outname = "/tmp/"+det+"GammaEfficiencyCent.eps";
    c1->SaveAs(outname.Data());
//   fHistGammasFound->Draw();

}


TH1* bayneseffdiv(TH1* numerator, TH1* 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;
    }
    TH1F* result = (TH1F*)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)));
      if(quotient>1) quotientErr = 0;
      result->SetBinContent(ibin,quotient);
      result->SetBinError(ibin,quotientErr);
      //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;
    }
    return result;
}
void SetStyles(TH1 *histo,int marker, int color,char *xtitle, char *ytitle, Bool_t scale){
  histo->Sumw2();
  histo->SetMarkerStyle(marker);
  histo->SetMarkerColor(color);
  histo->SetLineColor(color);
  histo->GetXaxis()->SetTitle(xtitle);
  histo->GetYaxis()->SetTitle(ytitle);
}
 PlotGammaEfficiency.C:1
 PlotGammaEfficiency.C:2
 PlotGammaEfficiency.C:3
 PlotGammaEfficiency.C:4
 PlotGammaEfficiency.C:5
 PlotGammaEfficiency.C:6
 PlotGammaEfficiency.C:7
 PlotGammaEfficiency.C:8
 PlotGammaEfficiency.C:9
 PlotGammaEfficiency.C:10
 PlotGammaEfficiency.C:11
 PlotGammaEfficiency.C:12
 PlotGammaEfficiency.C:13
 PlotGammaEfficiency.C:14
 PlotGammaEfficiency.C:15
 PlotGammaEfficiency.C:16
 PlotGammaEfficiency.C:17
 PlotGammaEfficiency.C:18
 PlotGammaEfficiency.C:19
 PlotGammaEfficiency.C:20
 PlotGammaEfficiency.C:21
 PlotGammaEfficiency.C:22
 PlotGammaEfficiency.C:23
 PlotGammaEfficiency.C:24
 PlotGammaEfficiency.C:25
 PlotGammaEfficiency.C:26
 PlotGammaEfficiency.C:27
 PlotGammaEfficiency.C:28
 PlotGammaEfficiency.C:29
 PlotGammaEfficiency.C:30
 PlotGammaEfficiency.C:31
 PlotGammaEfficiency.C:32
 PlotGammaEfficiency.C:33
 PlotGammaEfficiency.C:34
 PlotGammaEfficiency.C:35
 PlotGammaEfficiency.C:36
 PlotGammaEfficiency.C:37
 PlotGammaEfficiency.C:38
 PlotGammaEfficiency.C:39
 PlotGammaEfficiency.C:40
 PlotGammaEfficiency.C:41
 PlotGammaEfficiency.C:42
 PlotGammaEfficiency.C:43
 PlotGammaEfficiency.C:44
 PlotGammaEfficiency.C:45
 PlotGammaEfficiency.C:46
 PlotGammaEfficiency.C:47
 PlotGammaEfficiency.C:48
 PlotGammaEfficiency.C:49
 PlotGammaEfficiency.C:50
 PlotGammaEfficiency.C:51
 PlotGammaEfficiency.C:52
 PlotGammaEfficiency.C:53
 PlotGammaEfficiency.C:54
 PlotGammaEfficiency.C:55
 PlotGammaEfficiency.C:56
 PlotGammaEfficiency.C:57
 PlotGammaEfficiency.C:58
 PlotGammaEfficiency.C:59
 PlotGammaEfficiency.C:60
 PlotGammaEfficiency.C:61
 PlotGammaEfficiency.C:62
 PlotGammaEfficiency.C:63
 PlotGammaEfficiency.C:64
 PlotGammaEfficiency.C:65
 PlotGammaEfficiency.C:66
 PlotGammaEfficiency.C:67
 PlotGammaEfficiency.C:68
 PlotGammaEfficiency.C:69
 PlotGammaEfficiency.C:70
 PlotGammaEfficiency.C:71
 PlotGammaEfficiency.C:72
 PlotGammaEfficiency.C:73
 PlotGammaEfficiency.C:74
 PlotGammaEfficiency.C:75
 PlotGammaEfficiency.C:76
 PlotGammaEfficiency.C:77
 PlotGammaEfficiency.C:78
 PlotGammaEfficiency.C:79
 PlotGammaEfficiency.C:80
 PlotGammaEfficiency.C:81
 PlotGammaEfficiency.C:82
 PlotGammaEfficiency.C:83
 PlotGammaEfficiency.C:84
 PlotGammaEfficiency.C:85
 PlotGammaEfficiency.C:86
 PlotGammaEfficiency.C:87
 PlotGammaEfficiency.C:88
 PlotGammaEfficiency.C:89
 PlotGammaEfficiency.C:90
 PlotGammaEfficiency.C:91
 PlotGammaEfficiency.C:92
 PlotGammaEfficiency.C:93
 PlotGammaEfficiency.C:94
 PlotGammaEfficiency.C:95
 PlotGammaEfficiency.C:96
 PlotGammaEfficiency.C:97
 PlotGammaEfficiency.C:98
 PlotGammaEfficiency.C:99
 PlotGammaEfficiency.C:100
 PlotGammaEfficiency.C:101
 PlotGammaEfficiency.C:102
 PlotGammaEfficiency.C:103
 PlotGammaEfficiency.C:104
 PlotGammaEfficiency.C:105
 PlotGammaEfficiency.C:106
 PlotGammaEfficiency.C:107
 PlotGammaEfficiency.C:108
 PlotGammaEfficiency.C:109
 PlotGammaEfficiency.C:110
 PlotGammaEfficiency.C:111
 PlotGammaEfficiency.C:112
 PlotGammaEfficiency.C:113
 PlotGammaEfficiency.C:114
 PlotGammaEfficiency.C:115
 PlotGammaEfficiency.C:116
 PlotGammaEfficiency.C:117
 PlotGammaEfficiency.C:118
 PlotGammaEfficiency.C:119
 PlotGammaEfficiency.C:120
 PlotGammaEfficiency.C:121
 PlotGammaEfficiency.C:122
 PlotGammaEfficiency.C:123
 PlotGammaEfficiency.C:124
 PlotGammaEfficiency.C:125
 PlotGammaEfficiency.C:126
 PlotGammaEfficiency.C:127
 PlotGammaEfficiency.C:128
 PlotGammaEfficiency.C:129
 PlotGammaEfficiency.C:130
 PlotGammaEfficiency.C:131
 PlotGammaEfficiency.C:132
 PlotGammaEfficiency.C:133
 PlotGammaEfficiency.C:134
 PlotGammaEfficiency.C:135
 PlotGammaEfficiency.C:136
 PlotGammaEfficiency.C:137
 PlotGammaEfficiency.C:138
 PlotGammaEfficiency.C:139
 PlotGammaEfficiency.C:140
 PlotGammaEfficiency.C:141
 PlotGammaEfficiency.C:142
 PlotGammaEfficiency.C:143
 PlotGammaEfficiency.C:144
 PlotGammaEfficiency.C:145
 PlotGammaEfficiency.C:146
 PlotGammaEfficiency.C:147
 PlotGammaEfficiency.C:148
 PlotGammaEfficiency.C:149
 PlotGammaEfficiency.C:150
 PlotGammaEfficiency.C:151
 PlotGammaEfficiency.C:152
 PlotGammaEfficiency.C:153
 PlotGammaEfficiency.C:154
 PlotGammaEfficiency.C:155
 PlotGammaEfficiency.C:156
 PlotGammaEfficiency.C:157
 PlotGammaEfficiency.C:158
 PlotGammaEfficiency.C:159
 PlotGammaEfficiency.C:160
 PlotGammaEfficiency.C:161
 PlotGammaEfficiency.C:162
 PlotGammaEfficiency.C:163
 PlotGammaEfficiency.C:164
 PlotGammaEfficiency.C:165
 PlotGammaEfficiency.C:166
 PlotGammaEfficiency.C:167
 PlotGammaEfficiency.C:168
 PlotGammaEfficiency.C:169
 PlotGammaEfficiency.C:170
 PlotGammaEfficiency.C:171
 PlotGammaEfficiency.C:172
 PlotGammaEfficiency.C:173
 PlotGammaEfficiency.C:174
 PlotGammaEfficiency.C:175
 PlotGammaEfficiency.C:176
 PlotGammaEfficiency.C:177
 PlotGammaEfficiency.C:178
 PlotGammaEfficiency.C:179
 PlotGammaEfficiency.C:180
 PlotGammaEfficiency.C:181
 PlotGammaEfficiency.C:182