1 void SetStyles(TH1 *histo,int marker, int color,char *xtitle, char *ytitle, Bool_t scale = kFALSE);
3 void PlotGammaEfficiency(Bool_t isPhos = kFALSE){
5 gStyle->SetOptTitle(0);
11 filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.PHOS.LHC11a10a_bis.Run139465.root";
15 filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.EMCal.LHC11a10a_bis.Run139465.root";
20 TFile *f = TFile::Open(filename, "READ");
22 TList *l = (TList*)f->Get("out1");
23 TH1F *fHistGammasGenerated = l->FindObject("fHistGammasGenerated");
24 TH1F *fHistGammasFound = l->FindObject("fHistGammasFound");
25 TH1F *hEfficiency = bayneseffdiv(fHistGammasFound,fHistGammasGenerated,"Efficiency");
26 TH2F *fHistGammasGeneratedMult = l->FindObject("fHistGammasGeneratedCent");
27 //TH2F *fHistGammasFoundMult = l->FindObject("fHistGammasFoundCent");
28 //TH2F *fHistGammasFoundOutOfAccMult = l->FindObject("fHistGammasFoundOutOfAccCent");
29 // TH2F *fHistGammasFoundRecoEnergyCent;
30 // TH2F *fHistGammasFoundOutOfAccRecoEnergyCent;
31 TH2F *fHistGammasFoundMult = l->FindObject("fHistGammasFoundRecoEnergyCent");
32 TH2F *fHistGammasFoundOutOfAccMult = l->FindObject("fHistGammasFoundOutOfAccRecoEnergyCent");
33 fHistGammasFoundMult->Add(fHistGammasFoundOutOfAccMult);
34 hEfficiency->GetXaxis()->SetTitle("Energy");
35 hEfficiency->GetYaxis()->SetTitle("efficiency");
36 hEfficiency->GetXaxis()->SetRange(1,hEfficiency->FindBin(3));
38 TCanvas *c = new TCanvas("c","c",600,400);
39 c->SetTopMargin(0.0187166);
40 c->SetRightMargin(0.0201342);
41 c->SetLeftMargin(0.112416);
42 c->SetBottomMargin(0.15508);
47 c->SetFrameFillColor(0);
48 c->SetFrameBorderMode(0);
51 c->SaveAs("/tmp/GammaEfficiency.png");
53 TCanvas *c1 = new TCanvas("c1","c1",600,400);
54 c1->SetTopMargin(0.0187166);
55 c1->SetRightMargin(0.0201342);
56 c1->SetLeftMargin(0.112416);
57 c1->SetBottomMargin(0.15508);
62 c1->SetFrameFillColor(0);
63 c1->SetFrameBorderMode(0);
64 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};
65 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};
66 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};
67 int colors[] = {TColor::kRed,TColor::kRed, TColor::kOrange-3, TColor::kOrange-3, TColor::kGreen+3,
68 TColor::kGreen+3, TColor::kBlue, TColor::kBlue, TColor::kViolet, TColor::kViolet,
69 TColor::kMagenta+3,TColor::kRed,TColor::kRed, TColor::kOrange-3, TColor::kOrange-3, TColor::kGreen+3,
70 TColor::kGreen+3, TColor::kBlue, TColor::kBlue, TColor::kViolet, TColor::kViolet,
72 int markers[] = {20,24,21,25,22, 26,23,32,33,27, 29,20,24,21,25,22, 26,23,32,33,27, 29};
73 TLegend *leg1 = new TLegend(0.129195,0.692513,0.29698,0.970588);
74 leg1->SetFillStyle(0);
75 leg1->SetFillColor(0);
76 leg1->SetBorderSize(0);
77 leg1->SetTextSize(0.03);
78 leg1->SetTextSize(0.0534759);
80 for(int i=0;i<20;i+=binwidth){
81 Int_t maxbin = i+1+binwidth;
82 fHistGammasGeneratedCent[i] = fHistGammasGeneratedMult->ProjectionX(Form("All%i",i),i+1,maxbin);
83 fHistGammasFoundCent[i] = fHistGammasFoundMult->ProjectionX(Form("Reco%i",i),i+1,maxbin);
84 fEff[i] = (TH1D*) bayneseffdiv(fHistGammasFoundCent[i],fHistGammasGeneratedCent[i],Form("eff%i",i));
85 SetStyles(fEff[i],markers[i],colors[i],"energy","efficiency",1.0);
86 TString legentry = Form("%i-%i",i*5,(maxbin-1)*5);
88 leg1->AddEntry(fEff[i],legentry.Data());
90 fEff[i]->SetMaximum(1.5);
91 fEff[i]->SetMinimum(0.0);
92 fEff[i]->GetXaxis()->SetRange(1,fEff[i]->FindBin(3.0));
93 fEff[i]->GetXaxis()->SetTitleSize(0.07);
94 fEff[i]->GetYaxis()->SetTitleSize(0.07);
95 fEff[i]->GetYaxis()->SetTitleOffset(0.7);
96 fEff[i]->GetXaxis()->SetLabelSize(0.07);
97 fEff[i]->GetYaxis()->SetLabelSize(0.07);
100 else{ fEff[i]->Draw("same");}
104 TString outname = "/tmp/"+det+"GammaEfficiencyCent.eps";
105 c1->SaveAs(outname.Data());
106 // fHistGammasFound->Draw();
111 TH1* bayneseffdiv(TH1* numerator, TH1* denominator,Char_t* name)
114 cerr<<"Error: numerator does not exist!"<<endl;
118 cerr<<"Error: denominator does not exist!"<<endl;
121 TH1F* result = (TH1F*)numerator->Clone(name);
122 Int_t nbins = numerator->GetNbinsX();
123 for (Int_t ibin=0; ibin<= nbins+1; ++ibin) {
124 Double_t numeratorVal = numerator->GetBinContent(ibin);
125 Double_t denominatorVal = denominator->GetBinContent(ibin);
126 // Check if the errors are right or the thing is scaled
127 Double_t numeratorValErr = numerator->GetBinError(ibin);
128 if (!(numeratorValErr==0. || numeratorVal ==0.) ) {
129 Double_t rescale = numeratorValErr*numeratorValErr/numeratorVal;
130 numeratorVal /= rescale;
132 Double_t denominatorValErr = denominator->GetBinError(ibin);
133 if (!(denominatorValErr==0. || denominatorVal==0. )) {
134 Double_t rescale = denominatorValErr*denominatorValErr/denominatorVal;
135 denominatorVal /= rescale;
137 Double_t quotient = 0.;
138 if (denominatorVal!=0.) {
139 quotient = numeratorVal/denominatorVal;
141 Double_t quotientErr=0;
142 quotientErr = TMath::Sqrt(
143 (numeratorVal+1.0)/(denominatorVal+2.0)*
144 ((numeratorVal+2.0)/(denominatorVal+3.0)-(numeratorVal+1.0)/(denominatorVal+2.0)));
145 if(quotient>1) quotientErr = 0;
146 result->SetBinContent(ibin,quotient);
147 result->SetBinError(ibin,quotientErr);
148 //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;
152 void SetStyles(TH1 *histo,int marker, int color,char *xtitle, char *ytitle, Bool_t scale){
154 histo->SetMarkerStyle(marker);
155 histo->SetMarkerColor(color);
156 histo->SetLineColor(color);
157 histo->GetXaxis()->SetTitle(xtitle);
158 histo->GetYaxis()->SetTitle(ytitle);