ROOT logo
void SetStyles(TH1 *histo,int marker, int color,char *xtitle = "p", char *ytitle = "E");
TFile *junkfile = NULL;

TFile *fNominal = NULL;
TFile *fLow = NULL;
TFile *fHigh = NULL;


TH1F* bayneseffdiv(TH1F* numerator, TH1F* denominator,Char_t* name);
TH1F *GetHisto(Bool_t isPHOS,int var){
//   TString myfilename = filename;
//   if(var==1){myfilename = filenameLow;}
//   if(var==2){myfilename = filenameHigh;}
  TString listname = "";
  TString histoName = "";
  TFile *f = NULL;
  switch(var){
  case 1:
    histoName = "Efficiency1";
    listname = "List1";
    f = fLow;
    break;
  case 2:
    histoName = "Efficiency2";
    listname = "List2";
    f = fHigh;
    break;
  default:
    histoName = "Efficiency0";
    listname = "List0";
    f = fNominal;
  }
  //cout<<"My file name "<<f->GetName()<<endl;
  //TFile *f = new TFile(filename.Data());  
  f->cd();
  //TList *l = (TList*)f->Get("out1");
  f->ls();
  //l->SetName(listname.Data());
  //cout<<"List name "<<l->GetName()<<endl;
  //TH1F  *fHistGammasGenerated = l->FindObject("fHistGammasGenerated")->Clone("GeneratedLHC11b1a");
  //TH1F  *fHistGammasFound = l->FindObject("fHistGammasFound")->Clone("FoundLHC11b1a");
  TH1F  *fHistGammasGeneratedLHC11b1a = (TH1F*)f->Get("fHistGammasGenerated");
  TH1F  *fHistGammasFoundLHC11b1a = (TH1F*)f->Get("fHistGammasFound");
  junkfile->cd();
  TH1F *hEfficiency = bayneseffdiv(fHistGammasFoundLHC11b1a,fHistGammasGeneratedLHC11b1a,histoName.Data());
//   delete fHistGammasGenerated;
//   delete fHistGammasFound;
//   delete l;
  hEfficiency->Rebin(2);
  hEfficiency->Scale(0.5);
  hEfficiency->SetName(histoName.Data());
  //cout<<"Histo name "<<hEfficiency->GetName()<<" entries "<<hEfficiency->GetEntries()<<" "<<fHistGammasGenerated->GetEntries()<<endl;
  hEfficiency->GetXaxis()->SetRange(1,hEfficiency->FindBin(3));
  //f->Close();
  //delete f;
  return hEfficiency;
}
void PlotGammaEfficiencyErrors(Bool_t isPHOS = kFALSE){

  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(0);


TString det = "EMCal";
if(isPHOS) det = "PHOS";
//  TString run = "";
//  switch(runnum){
//  case 1:
//    run = "118506";//bad file
//    break;
//  case 2:
//    run = "121040";
//    break;
//  case 3:
//    run = "118518";//low stats
//    break;
//  case 4:
//    run = "121039";//really low stats
//    break;
//  case 5:
//    run = "118558";//bad file
//    break;
//  }
// TString run = "118558";//bad file - adding files didn't work.
//TString run = "121040";
//TString run = "121039";
 TString outfilename = "junk.root";
 junkfile = new TFile(outfilename.Data(),"RECREATE");
 TString filename = "rootFiles/LHC11b1a/Efficiency."+det+".LHC11b1a.Combined.root";
 TString filenameHigh = "rootFiles/LHC11b1b/Efficiency."+det+".LHC11b1b.Combined.root";
 TString filenameLow = "rootFiles/LHC11b1c/Efficiency."+det+".LHC11b1c.Combined.root";
// TString filenameHigh = "rootFiles/LHC11b1b/Et.ESD.sim."+det+".LHC11b1b.Run"+run+".root";
// TString filename = "rootFiles/LHC11b1a/Et.ESD.sim."+det+".LHC11b1a.Run"+run+".root";
// TString filenameLow = "rootFiles/LHC11b1c/Et.ESD.sim."+det+".LHC11b1c.Run"+run+".root";

fNominal = new TFile(filename.Data());  
fLow = new TFile(filenameLow.Data());  
fHigh = new TFile(filenameHigh.Data());  


  hEfficiency = GetHisto(isPHOS,0);
  SetStyles(hEfficiency,20,1,"Energy","efficiency");
  hEfficiencyLow = GetHisto(isPHOS,1);
  SetStyles(hEfficiencyLow,23,2,"Energy","efficiency");
  hEfficiencyHigh = GetHisto(isPHOS,2);
  SetStyles(hEfficiencyHigh,22,4,"Energy","efficiency");

  junkfile->Write();
  //junkfile->Close();
  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);

  hEfficiency->Draw();
  hEfficiencyLow->Draw("same");
  hEfficiencyHigh->Draw("same");
  TString pic1name = "/tmp/GammaEfficiency"+det+".eps";
  c->SaveAs(pic1name.Data());

  TH1F *hRatioLow = (TH1F*) hEfficiencyLow->Clone("hEfficiencyLowRatio");
  TH1F *hRatioHigh = (TH1F*) hEfficiencyHigh->Clone("hEfficiencyHighRatio");
  hRatioHigh->Divide(hEfficiency);
  hRatioLow->Divide(hEfficiency);

  TCanvas *c1 = new TCanvas("c1","c1",600,400);
  c1->SetTopMargin(0.02);
  c1->SetRightMargin(0.02);
  c1->SetBorderSize(0);
  c1->SetFillColor(0);
  c1->SetFillColor(0);
  c1->SetBorderMode(0);
  c1->SetFrameFillColor(0);
  c1->SetFrameBorderMode(0);
  hRatioLow->SetMaximum(1.2);
  hRatioLow->SetMinimum(0.8);
  hRatioLow->GetYaxis()->SetTitle("efficiency/nominal efficiency");
  TF1 *funcHigh = new TF1("funcHigh","[0]",0,3);
  TF1 *funcLow = new TF1("funcLow","[0]",0,3);
  funcHigh->SetLineColor(hRatioHigh->GetMarkerColor());
  funcLow->SetLineColor(hRatioLow->GetMarkerColor());
  TLegend *leg = new TLegend(0.144295,0.163978,0.234899,0.346774);
  leg->SetFillStyle(0);
  leg->SetFillColor(0);
  leg->SetBorderSize(0);
  leg->SetTextSize(0.03);
  leg->AddEntry(hRatioLow,"Low material budget");
  leg->AddEntry(hRatioHigh,"High material budget");
  leg->SetTextSize(0.0537634);
  hRatioLow->Fit(funcLow);
  hRatioHigh->Fit(funcHigh);
  hRatioLow->Draw();
  hRatioHigh->Draw("same");
  leg->Draw();
  pic1name = "/tmp/GammaEfficiencyError"+det+".eps";
  c1->SaveAs(pic1name.Data());

}


TH1F* bayneseffdiv(TH1F* numerator, TH1F* 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)));
      result->SetBinContent(ibin,quotient);
      result->SetBinError(ibin,quotientErr);
      //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;
    }
    //result->SetName(name);
    return result;
}

void SetStyles(TH1 *histo,int marker, int color,char *xtitle, char *ytitle){
  histo->SetMarkerStyle(marker);
  histo->SetMarkerColor(color);
  histo->SetLineColor(color);
  histo->GetXaxis()->SetTitle(xtitle);
  histo->GetYaxis()->SetTitle(ytitle);
  histo->Sumw2();
}
 PlotGammaEfficiencyErrors.C:1
 PlotGammaEfficiencyErrors.C:2
 PlotGammaEfficiencyErrors.C:3
 PlotGammaEfficiencyErrors.C:4
 PlotGammaEfficiencyErrors.C:5
 PlotGammaEfficiencyErrors.C:6
 PlotGammaEfficiencyErrors.C:7
 PlotGammaEfficiencyErrors.C:8
 PlotGammaEfficiencyErrors.C:9
 PlotGammaEfficiencyErrors.C:10
 PlotGammaEfficiencyErrors.C:11
 PlotGammaEfficiencyErrors.C:12
 PlotGammaEfficiencyErrors.C:13
 PlotGammaEfficiencyErrors.C:14
 PlotGammaEfficiencyErrors.C:15
 PlotGammaEfficiencyErrors.C:16
 PlotGammaEfficiencyErrors.C:17
 PlotGammaEfficiencyErrors.C:18
 PlotGammaEfficiencyErrors.C:19
 PlotGammaEfficiencyErrors.C:20
 PlotGammaEfficiencyErrors.C:21
 PlotGammaEfficiencyErrors.C:22
 PlotGammaEfficiencyErrors.C:23
 PlotGammaEfficiencyErrors.C:24
 PlotGammaEfficiencyErrors.C:25
 PlotGammaEfficiencyErrors.C:26
 PlotGammaEfficiencyErrors.C:27
 PlotGammaEfficiencyErrors.C:28
 PlotGammaEfficiencyErrors.C:29
 PlotGammaEfficiencyErrors.C:30
 PlotGammaEfficiencyErrors.C:31
 PlotGammaEfficiencyErrors.C:32
 PlotGammaEfficiencyErrors.C:33
 PlotGammaEfficiencyErrors.C:34
 PlotGammaEfficiencyErrors.C:35
 PlotGammaEfficiencyErrors.C:36
 PlotGammaEfficiencyErrors.C:37
 PlotGammaEfficiencyErrors.C:38
 PlotGammaEfficiencyErrors.C:39
 PlotGammaEfficiencyErrors.C:40
 PlotGammaEfficiencyErrors.C:41
 PlotGammaEfficiencyErrors.C:42
 PlotGammaEfficiencyErrors.C:43
 PlotGammaEfficiencyErrors.C:44
 PlotGammaEfficiencyErrors.C:45
 PlotGammaEfficiencyErrors.C:46
 PlotGammaEfficiencyErrors.C:47
 PlotGammaEfficiencyErrors.C:48
 PlotGammaEfficiencyErrors.C:49
 PlotGammaEfficiencyErrors.C:50
 PlotGammaEfficiencyErrors.C:51
 PlotGammaEfficiencyErrors.C:52
 PlotGammaEfficiencyErrors.C:53
 PlotGammaEfficiencyErrors.C:54
 PlotGammaEfficiencyErrors.C:55
 PlotGammaEfficiencyErrors.C:56
 PlotGammaEfficiencyErrors.C:57
 PlotGammaEfficiencyErrors.C:58
 PlotGammaEfficiencyErrors.C:59
 PlotGammaEfficiencyErrors.C:60
 PlotGammaEfficiencyErrors.C:61
 PlotGammaEfficiencyErrors.C:62
 PlotGammaEfficiencyErrors.C:63
 PlotGammaEfficiencyErrors.C:64
 PlotGammaEfficiencyErrors.C:65
 PlotGammaEfficiencyErrors.C:66
 PlotGammaEfficiencyErrors.C:67
 PlotGammaEfficiencyErrors.C:68
 PlotGammaEfficiencyErrors.C:69
 PlotGammaEfficiencyErrors.C:70
 PlotGammaEfficiencyErrors.C:71
 PlotGammaEfficiencyErrors.C:72
 PlotGammaEfficiencyErrors.C:73
 PlotGammaEfficiencyErrors.C:74
 PlotGammaEfficiencyErrors.C:75
 PlotGammaEfficiencyErrors.C:76
 PlotGammaEfficiencyErrors.C:77
 PlotGammaEfficiencyErrors.C:78
 PlotGammaEfficiencyErrors.C:79
 PlotGammaEfficiencyErrors.C:80
 PlotGammaEfficiencyErrors.C:81
 PlotGammaEfficiencyErrors.C:82
 PlotGammaEfficiencyErrors.C:83
 PlotGammaEfficiencyErrors.C:84
 PlotGammaEfficiencyErrors.C:85
 PlotGammaEfficiencyErrors.C:86
 PlotGammaEfficiencyErrors.C:87
 PlotGammaEfficiencyErrors.C:88
 PlotGammaEfficiencyErrors.C:89
 PlotGammaEfficiencyErrors.C:90
 PlotGammaEfficiencyErrors.C:91
 PlotGammaEfficiencyErrors.C:92
 PlotGammaEfficiencyErrors.C:93
 PlotGammaEfficiencyErrors.C:94
 PlotGammaEfficiencyErrors.C:95
 PlotGammaEfficiencyErrors.C:96
 PlotGammaEfficiencyErrors.C:97
 PlotGammaEfficiencyErrors.C:98
 PlotGammaEfficiencyErrors.C:99
 PlotGammaEfficiencyErrors.C:100
 PlotGammaEfficiencyErrors.C:101
 PlotGammaEfficiencyErrors.C:102
 PlotGammaEfficiencyErrors.C:103
 PlotGammaEfficiencyErrors.C:104
 PlotGammaEfficiencyErrors.C:105
 PlotGammaEfficiencyErrors.C:106
 PlotGammaEfficiencyErrors.C:107
 PlotGammaEfficiencyErrors.C:108
 PlotGammaEfficiencyErrors.C:109
 PlotGammaEfficiencyErrors.C:110
 PlotGammaEfficiencyErrors.C:111
 PlotGammaEfficiencyErrors.C:112
 PlotGammaEfficiencyErrors.C:113
 PlotGammaEfficiencyErrors.C:114
 PlotGammaEfficiencyErrors.C:115
 PlotGammaEfficiencyErrors.C:116
 PlotGammaEfficiencyErrors.C:117
 PlotGammaEfficiencyErrors.C:118
 PlotGammaEfficiencyErrors.C:119
 PlotGammaEfficiencyErrors.C:120
 PlotGammaEfficiencyErrors.C:121
 PlotGammaEfficiencyErrors.C:122
 PlotGammaEfficiencyErrors.C:123
 PlotGammaEfficiencyErrors.C:124
 PlotGammaEfficiencyErrors.C:125
 PlotGammaEfficiencyErrors.C:126
 PlotGammaEfficiencyErrors.C:127
 PlotGammaEfficiencyErrors.C:128
 PlotGammaEfficiencyErrors.C:129
 PlotGammaEfficiencyErrors.C:130
 PlotGammaEfficiencyErrors.C:131
 PlotGammaEfficiencyErrors.C:132
 PlotGammaEfficiencyErrors.C:133
 PlotGammaEfficiencyErrors.C:134
 PlotGammaEfficiencyErrors.C:135
 PlotGammaEfficiencyErrors.C:136
 PlotGammaEfficiencyErrors.C:137
 PlotGammaEfficiencyErrors.C:138
 PlotGammaEfficiencyErrors.C:139
 PlotGammaEfficiencyErrors.C:140
 PlotGammaEfficiencyErrors.C:141
 PlotGammaEfficiencyErrors.C:142
 PlotGammaEfficiencyErrors.C:143
 PlotGammaEfficiencyErrors.C:144
 PlotGammaEfficiencyErrors.C:145
 PlotGammaEfficiencyErrors.C:146
 PlotGammaEfficiencyErrors.C:147
 PlotGammaEfficiencyErrors.C:148
 PlotGammaEfficiencyErrors.C:149
 PlotGammaEfficiencyErrors.C:150
 PlotGammaEfficiencyErrors.C:151
 PlotGammaEfficiencyErrors.C:152
 PlotGammaEfficiencyErrors.C:153
 PlotGammaEfficiencyErrors.C:154
 PlotGammaEfficiencyErrors.C:155
 PlotGammaEfficiencyErrors.C:156
 PlotGammaEfficiencyErrors.C:157
 PlotGammaEfficiencyErrors.C:158
 PlotGammaEfficiencyErrors.C:159
 PlotGammaEfficiencyErrors.C:160
 PlotGammaEfficiencyErrors.C:161
 PlotGammaEfficiencyErrors.C:162
 PlotGammaEfficiencyErrors.C:163
 PlotGammaEfficiencyErrors.C:164
 PlotGammaEfficiencyErrors.C:165
 PlotGammaEfficiencyErrors.C:166
 PlotGammaEfficiencyErrors.C:167
 PlotGammaEfficiencyErrors.C:168
 PlotGammaEfficiencyErrors.C:169
 PlotGammaEfficiencyErrors.C:170
 PlotGammaEfficiencyErrors.C:171
 PlotGammaEfficiencyErrors.C:172
 PlotGammaEfficiencyErrors.C:173
 PlotGammaEfficiencyErrors.C:174
 PlotGammaEfficiencyErrors.C:175
 PlotGammaEfficiencyErrors.C:176
 PlotGammaEfficiencyErrors.C:177
 PlotGammaEfficiencyErrors.C:178
 PlotGammaEfficiencyErrors.C:179
 PlotGammaEfficiencyErrors.C:180
 PlotGammaEfficiencyErrors.C:181
 PlotGammaEfficiencyErrors.C:182
 PlotGammaEfficiencyErrors.C:183
 PlotGammaEfficiencyErrors.C:184
 PlotGammaEfficiencyErrors.C:185
 PlotGammaEfficiencyErrors.C:186
 PlotGammaEfficiencyErrors.C:187
 PlotGammaEfficiencyErrors.C:188
 PlotGammaEfficiencyErrors.C:189
 PlotGammaEfficiencyErrors.C:190
 PlotGammaEfficiencyErrors.C:191
 PlotGammaEfficiencyErrors.C:192
 PlotGammaEfficiencyErrors.C:193
 PlotGammaEfficiencyErrors.C:194
 PlotGammaEfficiencyErrors.C:195
 PlotGammaEfficiencyErrors.C:196
 PlotGammaEfficiencyErrors.C:197
 PlotGammaEfficiencyErrors.C:198
 PlotGammaEfficiencyErrors.C:199
 PlotGammaEfficiencyErrors.C:200
 PlotGammaEfficiencyErrors.C:201
 PlotGammaEfficiencyErrors.C:202
 PlotGammaEfficiencyErrors.C:203
 PlotGammaEfficiencyErrors.C:204
 PlotGammaEfficiencyErrors.C:205
 PlotGammaEfficiencyErrors.C:206
 PlotGammaEfficiencyErrors.C:207
 PlotGammaEfficiencyErrors.C:208
 PlotGammaEfficiencyErrors.C:209
 PlotGammaEfficiencyErrors.C:210
 PlotGammaEfficiencyErrors.C:211
 PlotGammaEfficiencyErrors.C:212
 PlotGammaEfficiencyErrors.C:213
 PlotGammaEfficiencyErrors.C:214
 PlotGammaEfficiencyErrors.C:215
 PlotGammaEfficiencyErrors.C:216
 PlotGammaEfficiencyErrors.C:217