1 TH1* bayneseffdiv(TH1* numerator, TH1* denominator,Char_t* name);
2 TH2* bayneseffdiv2D(TH2* numerator, TH2* denominator,Char_t* name) ;
3 TH2F* flip(TH2F* orig,Char_t* name){
4 float nbinx = orig->GetXaxis()->GetNbins();
5 float xlow = orig->GetXaxis()->GetBinLowEdge(1);
6 float xhigh = orig->GetXaxis()->GetBinLowEdge(nbinx+1);
7 float nbiny = orig->GetYaxis()->GetNbins();
8 float ylow= orig->GetYaxis()->GetBinLowEdge(1);
9 float yhigh = orig->GetYaxis()->GetBinLowEdge(nbiny+1);
10 TH2F *output = new TH2F(name,orig->GetTitle(),nbiny,ylow,yhigh,nbinx,xlow,xhigh);
11 for(int i = 1;i<=nbinx;i++){
12 for(int j = 1;j<=nbiny;j++){
13 output->SetBinContent(j,i,orig->GetBinContent(i,j));
18 void SetStyles(TH1 *histo,int marker, int color){
20 histo->SetMarkerStyle(marker);
21 histo->SetMarkerColor(color);
22 histo->SetLineColor(color);
23 //histo->GetXaxis()->SetTitle(xtitle);
24 //histo->GetYaxis()->SetTitle(ytitle);
26 Int_t colors[] = {0,TColor::kRed, TColor::kOrange, TColor::kGreen+3, TColor::kBlue, TColor::kBlack,
27 TColor::kRed, TColor::kOrange, TColor::kGreen+3, TColor::kBlue, TColor::kBlack,
28 TColor::kRed, TColor::kOrange, TColor::kGreen+3, TColor::kBlue, TColor::kBlack,
29 TColor::kRed, TColor::kOrange, TColor::kGreen+3, TColor::kBlue, TColor::kBlack};
30 Int_t markers[] = {20,21,22,23,33, 24,25,26,32,27, 20,21,22,23,33, 24,25,26,32,27};
32 void PlotNeutronDeposits(TString filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.EMCal.LHC11a10a_bis.Run139465.root"){
33 gROOT->LoadMacro("macros/loadLibraries.C");
35 TFile *f = TFile::Open(filename, "READ");
36 TList *l = dynamic_cast<TList*>(f->Get("out1"));
37 TString histoname = "fHistNeutronsEtVsCent";
38 TH2F *histo = l->FindObject(histoname.Data());
39 histoname = "fHistNeutronsNumVsCent";
40 TH2F *histoNum = l->FindObject(histoname.Data());
41 TString outfilename = "/tmp/";
42 TString calocorrfilename = "calocorrections.";
44 if(filename.Contains("EMC")){
45 outfilename +="EMCAL";
46 calocorrfilename +="EMCAL";
51 calocorrfilename +="PHOS";
54 calocorrfilename +=".root";
55 TString textfilename = "Neutrons"+det+".dat";
56 TH2F *fHistGammasGeneratedMult = l->FindObject("fHistGammasGeneratedCent");
57 TH2F *fHistGammasFoundMult = l->FindObject("fHistGammasFoundCent");
58 TH2F *fHistGammasFoundOutOfAccCent = l->FindObject("fHistGammasFoundOutOfAccCent");
59 fHistGammasFoundMult->Add(fHistGammasFoundOutOfAccCent);
60 // TH2F *gammaEff2D = (TH2F*) bayneseffdiv2D(fHistGammasFoundMult,fHistGammasGeneratedMult,"gammaEff2D");
62 TCanvas *c1 = new TCanvas("c1","<E_{T}>",600,400);
63 c1->SetTopMargin(0.02);
64 c1->SetRightMargin(0.02);
69 c1->SetFrameFillColor(0);
70 c1->SetFrameBorderMode(0);
71 TH1D *prof = histo->ProfileY();
75 TCanvas *c3 = new TCanvas("c3","<E_{T}>",600,400);
76 c3->SetTopMargin(0.02);
77 c3->SetRightMargin(0.02);
82 c3->SetFrameFillColor(0);
83 c3->SetFrameBorderMode(0);
84 //for(int i=1;i<=18;i++){
88 prof->GetYaxis()->SetTitle("<E_{T}>");
89 prof->GetXaxis()->SetTitle("centrality bin");
90 TString outfilename1 = outfilename+"Et.png";
91 c3->SaveAs(outfilename1.Data());
93 TCanvas *c2 = new TCanvas("c2","<Num>",600,400);
94 c2->SetTopMargin(0.02);
95 c2->SetRightMargin(0.02);
100 c2->SetFrameFillColor(0);
101 c2->SetFrameBorderMode(0);
102 TH1D *profNum = histoNum->ProfileY();
103 histoNum->Draw("colz");
104 //profNum->Draw("same");
106 TCanvas *c4 = new TCanvas("c4","<Num>",600,400);
107 c4->SetTopMargin(0.02);
108 c4->SetRightMargin(0.02);
109 c4->SetBorderSize(0);
112 c4->SetBorderMode(0);
113 c4->SetFrameFillColor(0);
114 c4->SetFrameBorderMode(0);
115 profNum->Draw("same");
116 profNum->GetYaxis()->SetTitle("<N_{neutrons}>");
117 profNum->GetXaxis()->SetTitle("centrality bin");
118 TString outfilename2 = outfilename+"Num.png";
119 c4->SaveAs(outfilename2.Data());
121 TFile *calocorrfile = TFile::Open(calocorrfilename, "READ");
122 TString recoEffName = "ReCorrections";
125 AliAnalysisEtRecEffCorrection *recoEff = (AliAnalysisEtRecEffCorrection *) calocorrfile->Get(recoEffName.Data());
127 cout<<"I am here"<<endl;
129 myfile.open (textfilename.Data());
130 for(int i=0;i<20;i++){
131 Float_t et = prof->GetBinContent(i+1);
132 Float_t num = profNum->GetBinContent(i+1);
133 Float_t eff = recoEff->ReconstructionEfficiency(et,i);
134 float neutroncorr = 0;
135 if(eff>0) neutroncorr = et*num/eff;
137 cout<<"et*num/eff = "<<et<<"*"<<num<<"/"<<eff<<" "<< neutroncorr<<endl;
138 myfile<<neutroncorr<<" "<<error<<endl;
142 // TCanvas *c5 = new TCanvas("c5","<Num>",600,400);
143 // c5->SetTopMargin(0.02);
144 // c5->SetRightMargin(0.02);
145 // c5->SetBorderSize(0);
146 // c5->SetFillColor(0);
147 // c5->SetFillColor(0);
148 // c5->SetBorderMode(0);
149 // c5->SetFrameFillColor(0);
150 // c5->SetFrameBorderMode(0);
153 TCanvas *c6 = new TCanvas("c6","<Num>",600,400);
154 c6->SetTopMargin(0.02);
155 c6->SetRightMargin(0.02);
156 c6->SetBorderSize(0);
159 c6->SetBorderMode(0);
160 c6->SetFrameFillColor(0);
161 c6->SetFrameBorderMode(0);
163 TH2F *histoNumAlt = flip(histoNum,"histoNumAlt");
164 TH1D *profNumAlt = histoNum->ProfileY();
165 histoNumAlt->Draw("colz");
166 profNum->Draw("same");
170 TH1* bayneseffdiv(TH1* numerator, TH1* denominator,Char_t* name)
173 cerr<<"Error: numerator does not exist!"<<endl;
177 cerr<<"Error: denominator does not exist!"<<endl;
180 TH1* result = (TH1*)numerator->Clone(name);
181 Int_t nbins = numerator->GetNbinsX();
182 for (Int_t ibin=0; ibin<= nbins+1; ++ibin) {
183 Double_t numeratorVal = numerator->GetBinContent(ibin);
184 Double_t denominatorVal = denominator->GetBinContent(ibin);
185 // Check if the errors are right or the thing is scaled
186 Double_t numeratorValErr = numerator->GetBinError(ibin);
187 if (!(numeratorValErr==0. || numeratorVal ==0.) ) {
188 Double_t rescale = numeratorValErr*numeratorValErr/numeratorVal;
189 numeratorVal /= rescale;
191 Double_t denominatorValErr = denominator->GetBinError(ibin);
192 if (!(denominatorValErr==0. || denominatorVal==0. )) {
193 Double_t rescale = denominatorValErr*denominatorValErr/denominatorVal;
194 denominatorVal /= rescale;
196 Double_t quotient = 0.;
197 if (denominatorVal!=0.) {
198 quotient = numeratorVal/denominatorVal;
200 Double_t quotientErr=0;
201 quotientErr = TMath::Sqrt(
202 (numeratorVal+1.0)/(denominatorVal+2.0)*
203 ((numeratorVal+2.0)/(denominatorVal+3.0)-(numeratorVal+1.0)/(denominatorVal+2.0)));
204 result->SetBinContent(ibin,quotient);
205 result->SetBinError(ibin,quotientErr);
206 //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;
212 TH2* bayneseffdiv2D(TH2* numerator, TH2* denominator,Char_t* name)
215 cerr<<"Error: numerator does not exist!"<<endl;
219 cerr<<"Error: denominator does not exist!"<<endl;
222 TH2* result = (TH2*)numerator->Clone(name);
223 Int_t nbinsX = numerator->GetNbinsX();
224 Int_t nbinsY = numerator->GetNbinsY();
225 for (Int_t ibin=0; ibin<= nbinsX+1; ++ibin) {
226 for (Int_t jbin=0; jbin<= nbinsY+1; ++jbin) {
227 Double_t numeratorVal = numerator->GetBinContent(ibin,jbin);
228 Double_t denominatorVal = denominator->GetBinContent(ibin,jbin);
229 // Check if the errors are right or the thing is scaled
230 Double_t numeratorValErr = numerator->GetBinError(ibin,jbin);
231 if (!(numeratorValErr==0. || numeratorVal ==0.) ) {
232 Double_t rescale = numeratorValErr*numeratorValErr/numeratorVal;
233 numeratorVal /= rescale;
235 Double_t denominatorValErr = denominator->GetBinError(ibin,jbin);
236 if (!(denominatorValErr==0. || denominatorVal==0. )) {
237 Double_t rescale = denominatorValErr*denominatorValErr/denominatorVal;
238 denominatorVal /= rescale;
240 Double_t quotient = 0.;
241 if (denominatorVal!=0.) {
242 quotient = numeratorVal/denominatorVal;
244 Double_t quotientErr=0;
245 quotientErr = TMath::Sqrt(
246 (numeratorVal+1.0)/(denominatorVal+2.0)*
247 ((numeratorVal+2.0)/(denominatorVal+3.0)-(numeratorVal+1.0)/(denominatorVal+2.0)));
248 result->SetBinContent(ibin,jbin,quotient);
249 result->SetBinError(ibin,jbin,quotientErr);
250 //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;