1 //Create by Christine Nattrass, Rebecca Scott, Irakli Martashvili
2 //University of Tennessee at Knoxville
3 //This macro takes an input file created by AliAnalysisHadEtMonteCarlo and creates an AliAnalysisHadEtCorrections for the determination of the corrected Et
6 // #include "AliAnalysisHadEtCorrections.h"
10 // #include <TSystem.h>
11 // #include "TStopwatch.h"
13 Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp = true, bool forSim = true, bool TPC, bool hadronic = false, float etacut = 0.7);
14 TH1D *GetHistoCorrNeutral(float cut, char *name, bool ispp, bool forSim, int mycase, bool eta, int color, int marker, bool hadronic = false);
16 Float_t CorrPtCut(float ptcut, char *prodname = "Enter Production Name", char *shortprodname = "EnterProductionName", bool ispp = true, bool forSim = true, int mycase = 0);
17 TH1D *GetHistoCorrPtCut(float ptcut = 0.15, char *name, bool ispp = true, bool forSim = true, int mycase);
19 TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, bool eta, bool ispp = true, bool forSim = true);
20 TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bool TPC, bool ispp = true, bool forSim = true);
21 Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, char *shortprodname, bool TPC, bool ispp, bool forSim);
23 TH1D *GetHistoNoID(float etacut, char *name, bool eta, bool TPC, bool ispp, bool forSim);
24 TH1D *CorrNoID(float etacut,char *name, char *prodname, char *shortprodname, bool ispp, bool forSim);
25 Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char *shortprodname, bool ispp, bool forSim);
27 TH1D* bayneseffdiv(TH1D* numerator, TH1D* denominator,Char_t* name);
28 TH1D *GetHistoEfficiency(float cut, char *name, int mycase, int color, int marker,bool TPC, bool ITS, int cb = -1, int cblast = -1);
29 void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname);
31 TH1D *GetHistoCorrBkgd(float etacut,char *name, bool TPC,bool ispp,bool forSim);
32 void CorrBkgdPlots(char *prodname, char *shortprodname, bool TPC,bool ispp,bool forSim);
34 //Some variables that we'll use multiple times. We'll declare them here since they don't seem to delete right in the functions
39 TFile *file = NULL;//initiated in main function
40 const char *mynameTPC = "TPC";
41 const char *mynameITS = "ITS";
42 const char *mynameTPCITS = "TPCITS";
43 const char *detectorEMCAL = "EMCAL";
44 const char *detectorPHOS = "PHOS";
45 const char *reweightedNo = "";
46 const char *reweightedYes = "Reweighted";
48 //===========================================================================================
50 void GetCorrections(char *prodname = "Enter Production Name", char *shortprodname = "EnterProductionName", bool ispp = true, bool forSim = true, bool TPC = true, char *infilename="Et.ESD.new.sim.merged.root", int dataset = 2009){
53 gSystem->Load("libTree.so");
54 gSystem->Load("libGeom.so");
55 gSystem->Load("libVMC.so");
56 gSystem->Load("libXMLIO.so");
58 gSystem->Load("libSTEERBase.so");
59 gSystem->Load("libESD.so");
60 gSystem->Load("libAOD.so");
62 gSystem->Load("libANALYSIS");
63 gSystem->Load("libANALYSISalice");
65 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
66 gROOT->ProcessLine(".L AliAnalysisEtCuts.cxx+g");
67 gROOT->ProcessLine(".L AliAnalysisHadEtCorrections.cxx+g");
68 file = new TFile(infilename);
70 char outfilename[200];
71 char *sim = "ForData";
72 if(forSim) sim = "ForSimulations";
73 char *system = "PbPb";
74 if(ispp) system = "pp";
75 sprintf(outfilename,"rootFiles/corrections/corrections.%s.%s.%s.root",shortprodname,system,sim);
76 TFile *outfile = new TFile(outfilename,"RECREATE");
77 AliAnalysisHadEtCorrections *hadCorrectionEMCAL = new AliAnalysisHadEtCorrections();
78 hadCorrectionEMCAL->SetName("hadCorrectionEMCAL");
80 hadCorrectionEMCAL->SetEtaCut(etacut);
81 hadCorrectionEMCAL->IsData(!forSim);
82 hadCorrectionEMCAL->IsEMCal(kTRUE);
83 hadCorrectionEMCAL->SetProduction(shortprodname);
84 hadCorrectionEMCAL->SetProductionDescription(prodname);
85 hadCorrectionEMCAL->SetDataSet(dataset);
86 //float etacut = hadCorrectionEMCAL->GetEtaCut();
87 //cout<<"eta cut is "<<etacut<<endl;
88 hadCorrectionEMCAL->SetAcceptanceCorrectionFull(1.0);
89 cout<<"Warning: Acceptance corrections will have to be updated to include real acceptance maps of the EMCAL"<<endl;
90 hadCorrectionEMCAL->SetAcceptanceCorrectionPHOS(360.0/60.0);
91 hadCorrectionEMCAL->SetAcceptanceCorrectionEMCAL(360.0/60.0);
94 float neutralCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,false,etacut);
95 hadCorrectionEMCAL->SetNeutralCorrection(neutralCorr);
96 //Using error from data, see analysis note for details
98 hadCorrectionEMCAL->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.013));
99 hadCorrectionEMCAL->SetNeutralCorrectionHighBound(neutralCorr*(1.0+0.013));
102 hadCorrectionEMCAL->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.049));
103 hadCorrectionEMCAL->SetNeutralCorrectionHighBound(neutralCorr*(1.0+0.049));
106 float hadronicCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,true,etacut);
107 hadCorrectionEMCAL->SetNotHadronicCorrection(hadronicCorr);
109 hadCorrectionEMCAL->SetNotHadronicCorrectionLowBound(hadronicCorr*(1.0-0.008));
110 hadCorrectionEMCAL->SetNotHadronicCorrectionHighBound(hadronicCorr*(1.0+0.008));
113 hadCorrectionEMCAL->SetNotHadronicCorrectionLowBound(hadronicCorr*(1.0-0.023));
114 hadCorrectionEMCAL->SetNotHadronicCorrectionHighBound(hadronicCorr*(1.0+0.023));
117 float ptcutITS = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim);
118 hadCorrectionEMCAL->SetpTCutCorrectionITS(ptcutITS);
119 float ptcutTPC = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim);
120 hadCorrectionEMCAL->SetpTCutCorrectionTPC(ptcutTPC);
121 float ptcutITSLow = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim,-1);
122 float ptcutTPCLow = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim,-1);
123 hadCorrectionEMCAL->SetpTCutCorrectionITSLowBound(ptcutITSLow);
124 hadCorrectionEMCAL->SetpTCutCorrectionTPCLowBound(ptcutTPCLow);
125 float ptcutITSHigh = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim,1);
126 float ptcutTPCHigh = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim,1);
127 hadCorrectionEMCAL->SetpTCutCorrectionITSHighBound(ptcutITSHigh);
128 hadCorrectionEMCAL->SetpTCutCorrectionTPCHighBound(ptcutTPCHigh);
130 TH1D *NotIDTPC = CorrNotID(etacut,"CorrNotIDEMCALTPC",prodname,shortprodname,true,ispp,forSim);
131 TH1D *NotIDITS = CorrNotID(etacut,"CorrNotIDEMCALITS",prodname,shortprodname,false,ispp,forSim);
132 hadCorrectionEMCAL->SetNotIDCorrectionTPC(NotIDTPC);
133 hadCorrectionEMCAL->SetNotIDCorrectionITS(NotIDITS);
135 Float_t NotIDConstTPC = CorrNotIDConst(0.15,etacut,"CorrNotIDEMCALTPC2",prodname,shortprodname,true,ispp,forSim);
136 Float_t NotIDConstITS = CorrNotIDConst(0.10,etacut,"CorrNotIDEMCALTPC2",prodname,shortprodname,true,ispp,forSim);
137 hadCorrectionEMCAL->SetNotIDConstCorrectionTPC(1.0/NotIDConstTPC);
138 hadCorrectionEMCAL->SetNotIDConstCorrectionITS(1.0/NotIDConstITS);
140 hadCorrectionEMCAL->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*(1.0-0.010));
141 hadCorrectionEMCAL->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*(1.0-0.010));
142 hadCorrectionEMCAL->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*(1.0+0.010));
143 hadCorrectionEMCAL->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*(1.0+0.010));
146 hadCorrectionEMCAL->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*(1.0-0.022));
147 hadCorrectionEMCAL->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*(1.0-0.022));
148 hadCorrectionEMCAL->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*(1.0+0.022));
149 hadCorrectionEMCAL->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*(1.0+0.022));
152 TH1D *NoID = CorrNoID(etacut,"CorrNoIDEMCAL",prodname,shortprodname,ispp,forSim);
153 hadCorrectionEMCAL->SetNotIDCorrectionNoPID(NoID);
155 Float_t NoIDTPC = CorrNoIDConst(etacut,0.15,"CorrNoIDEMCAL2",prodname,shortprodname,ispp,forSim);
156 Float_t NoIDITS = CorrNoIDConst(etacut,0.1,"CorrNoIDEMCAL2",prodname,shortprodname,ispp,forSim);
157 hadCorrectionEMCAL->SetNotIDConstCorrectionTPCNoID(1./NoIDTPC);
158 hadCorrectionEMCAL->SetNotIDConstCorrectionITSNoID(1./NoIDITS);
159 hadCorrectionEMCAL->SetNotIDConstCorrectionTPCNoIDLowBound(1./NoIDTPC*.98);
160 hadCorrectionEMCAL->SetNotIDConstCorrectionITSNoIDLowBound(1./NoIDITS*.98);
161 hadCorrectionEMCAL->SetNotIDConstCorrectionTPCNoIDHighBound(1./NoIDTPC*1.02);
162 hadCorrectionEMCAL->SetNotIDConstCorrectionITSNoIDHighBound(1./NoIDITS*1.02);
164 TH1D *efficiencyPionTPC = GetHistoEfficiency(etacut,"hEfficiencyPionTPC",1,1,20,true,true);
165 hadCorrectionEMCAL->SetEfficiencyPionTPC(efficiencyPionTPC);
166 TH1D *efficiencyKaonTPC = GetHistoEfficiency(etacut,"hEfficiencyKaonTPC",2,1,20,true,true);
167 hadCorrectionEMCAL->SetEfficiencyKaonTPC(efficiencyKaonTPC);
168 TH1D *efficiencyProtonTPC = GetHistoEfficiency(etacut,"hEfficiencyProtonTPC",3,1,20,true,true);
169 hadCorrectionEMCAL->SetEfficiencyProtonTPC(efficiencyProtonTPC);
170 TH1D *efficiencyHadronTPC = GetHistoEfficiency(etacut,"hEfficiencyHadronTPC",0,1,20,true,true);
171 hadCorrectionEMCAL->SetEfficiencyHadronTPC(efficiencyHadronTPC);
172 TH1D *efficiencyPionITS = GetHistoEfficiency(etacut,"hEfficiencyPionITS",1,1,20,false,true);
173 hadCorrectionEMCAL->SetEfficiencyPionITS(efficiencyPionITS);
174 TH1D *efficiencyKaonITS = GetHistoEfficiency(etacut,"hEfficiencyKaonITS",2,1,20,false,true);
175 hadCorrectionEMCAL->SetEfficiencyKaonITS(efficiencyKaonITS);
176 TH1D *efficiencyProtonITS = GetHistoEfficiency(etacut,"hEfficiencyProtonITS",3,1,20,false,true);
177 hadCorrectionEMCAL->SetEfficiencyProtonITS(efficiencyProtonITS);
178 TH1D *efficiencyHadronITS = GetHistoEfficiency(etacut,"hEfficiencyHadronITS",0,1,20,false,true);
179 hadCorrectionEMCAL->SetEfficiencyHadronITS(efficiencyHadronITS);
182 TH1D *efficiencyPionTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB0",1,1,20,true,true,0,4);
183 for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB0->Clone(Form("Test%i",i)),i);
184 TH1D *efficiencyPionTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB5",1,1,20,true,true,5,9);
185 for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB5->Clone(Form("Test%i",i)),i);
186 TH1D *efficiencyPionTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB10",1,1,20,true,true,10,15);
187 for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB10->Clone(Form("Test%i",i)),i);
189 TH1D *efficiencyKaonTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB0",2,1,20,true,true,0,4);
190 for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB0->Clone(Form("Test%i",i)),i);
191 TH1D *efficiencyKaonTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB5",2,1,20,true,true,5,9);
192 for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB5->Clone(Form("Test%i",i)),i);
193 TH1D *efficiencyKaonTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB10",2,1,20,true,true,10,15);
194 for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB10->Clone(Form("Test%i",i)),i);//Kaon
196 TH1D *efficiencyProtonTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB0",3,1,20,true,true,0,4);
197 for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB0->Clone(Form("Test%i",i)),i);
198 TH1D *efficiencyProtonTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB5",3,1,20,true,true,5,9);
199 for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB5->Clone(Form("Test%i",i)),i);
200 TH1D *efficiencyProtonTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB10",3,1,20,true,true,10,15);
201 for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB10->Clone(Form("Test%i",i)),i);//Proton
203 TH1D *efficiencyHadronTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB0",0,1,20,true,true,0,4);
204 for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB0->Clone(Form("Test%i",i)),i);
205 TH1D *efficiencyHadronTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB5",0,1,20,true,true,5,9);
206 for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB5->Clone(Form("Test%i",i)),i);
207 TH1D *efficiencyHadronTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB10",0,1,20,true,true,10,15);
208 for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB10->Clone(Form("Test%i",i)),i);//Hadron
211 TH1D *efficiencyPionITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB0",1,1,20,false,true,0,4);
212 for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB0->Clone(Form("Test%i",i)),i);
213 TH1D *efficiencyPionITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB5",1,1,20,false,true,5,9);
214 for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB5->Clone(Form("Test%i",i)),i);
215 TH1D *efficiencyPionITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB10",1,1,20,false,true,10,15);
216 for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB10->Clone(Form("Test%i",i)),i);//Pion
218 TH1D *efficiencyKaonITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB0",2,1,20,false,true,0,4);
219 for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB0->Clone(Form("Test%i",i)),i);
220 TH1D *efficiencyKaonITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB5",2,1,20,false,true,5,9);
221 for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB5->Clone(Form("Test%i",i)),i);
222 TH1D *efficiencyKaonITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB10",2,1,20,false,true,10,15);
223 for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB10->Clone(Form("Test%i",i)),i);//Kaon
225 TH1D *efficiencyProtonITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB0",3,1,20,false,true,0,4);
226 for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB0->Clone(Form("Test%i",i)),i);
227 TH1D *efficiencyProtonITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB5",3,1,20,false,true,5,9);
228 for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB5->Clone(Form("Test%i",i)),i);
229 TH1D *efficiencyProtonITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB10",3,1,20,false,true,10,15);
230 for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB10->Clone(Form("Test%i",i)),i);//Proton
232 TH1D *efficiencyHadronITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB0",0,1,20,false,true,0,4);
233 for(int i=0;i<=4;i++) hadCorrectionEMCAL->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB0->Clone(Form("Test%i",i)),i);
234 TH1D *efficiencyHadronITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB5",0,1,20,false,true,5,9);
235 for(int i=5;i<=9;i++) hadCorrectionEMCAL->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB5->Clone(Form("Test%i",i)),i);
236 TH1D *efficiencyHadronITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB10",0,1,20,false,true,10,15);
237 for(int i=10;i<=19;i++) hadCorrectionEMCAL->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB10->Clone(Form("Test%i",i)),i);//Hadron
240 //CorrEfficiencyPlots(true,prodname,shortprodname);
241 //CorrEfficiencyPlots(false,prodname,shortprodname,infilename);
244 //hadCorrectionEMCAL->GetEfficiencyHadronTPC()->Draw();
245 TH1D *backgroundTPC = GetHistoCorrBkgd(etacut,"hBackgroundTPC",true,ispp,forSim);
246 TH1D *backgroundITS = GetHistoCorrBkgd(etacut,"hBackgroundITS",false,ispp,forSim);
247 hadCorrectionEMCAL->SetBackgroundCorrectionTPC(backgroundTPC);
248 hadCorrectionEMCAL->SetBackgroundCorrectionITS(backgroundITS);
249 //CorrBkgdPlots(prodname,shortprodname,true,ispp,forSim);
250 //CorrBkgdPlots(prodname,shortprodname,false,ispp,forSim);
252 hadCorrectionEMCAL->Report();
255 hadCorrectionEMCAL->Write();
257 delete hadCorrectionEMCAL;
259 AliAnalysisHadEtCorrections *hadCorrectionPHOS = new AliAnalysisHadEtCorrections();
260 hadCorrectionPHOS->SetName("hadCorrectionPHOS");
262 hadCorrectionPHOS->SetEtaCut(etacut);
263 hadCorrectionPHOS->IsData(!forSim);
264 hadCorrectionPHOS->IsEMCal(kTRUE);
265 hadCorrectionPHOS->SetProduction(shortprodname);
266 hadCorrectionPHOS->SetProductionDescription(prodname);
267 hadCorrectionPHOS->SetDataSet(dataset);
268 //float etacut = hadCorrectionPHOS->GetEtaCut();
269 //cout<<"eta cut is "<<etacut<<endl;
270 hadCorrectionPHOS->SetAcceptanceCorrectionFull(1.0);
271 cout<<"Warning: Acceptance corrections will have to be updated to include real acceptance maps of the PHOS"<<endl;
272 hadCorrectionPHOS->SetAcceptanceCorrectionPHOS(360.0/60.0);
273 hadCorrectionPHOS->SetAcceptanceCorrectionEMCAL(360.0/60.0);
276 float neutralCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,false,etacut);
277 hadCorrectionPHOS->SetNeutralCorrection(neutralCorr);
278 //Using error from data, see analysis note for details
280 hadCorrectionPHOS->SetNeutralCorrectionLowBound(neutralCorr*(1.0-.013));
281 hadCorrectionPHOS->SetNeutralCorrectionHighBound(neutralCorr*(1.0+.013));
284 hadCorrectionPHOS->SetNeutralCorrectionLowBound(neutralCorr*(1.0-0.049));
285 hadCorrectionPHOS->SetNeutralCorrectionHighBound(neutralCorr*(1.0+0.049));
288 float hadronicCorr = CorrNeutral(ptcut,prodname,shortprodname,ispp,forSim,TPC,true,etacut);
289 hadCorrectionPHOS->SetNotHadronicCorrection(hadronicCorr);
291 hadCorrectionPHOS->SetNotHadronicCorrectionLowBound(neutralCorr*(1.0-0.008));
292 hadCorrectionPHOS->SetNotHadronicCorrectionHighBound(neutralCorr*(1.0+0.008));
295 hadCorrectionPHOS->SetNotHadronicCorrectionLowBound(neutralCorr*(1.0-0.023));
296 hadCorrectionPHOS->SetNotHadronicCorrectionHighBound(neutralCorr*(1.0+0.023));
299 float ptcutITS = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim);
300 hadCorrectionPHOS->SetpTCutCorrectionITS(ptcutITS);
301 float ptcutTPC = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim);
302 hadCorrectionPHOS->SetpTCutCorrectionTPC(ptcutTPC);
304 float ptcutITSLow = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim,-1);
305 float ptcutTPCLow = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim,-1);
306 hadCorrectionPHOS->SetpTCutCorrectionITSLowBound(ptcutITSLow);
307 hadCorrectionPHOS->SetpTCutCorrectionTPCLowBound(ptcutTPCLow);
308 float ptcutITSHigh = CorrPtCut(0.1,prodname,shortprodname,ispp,forSim,1);
309 float ptcutTPCHigh = CorrPtCut(0.15,prodname,shortprodname,ispp,forSim,1);
310 hadCorrectionPHOS->SetpTCutCorrectionITSHighBound(ptcutITSHigh);
311 hadCorrectionPHOS->SetpTCutCorrectionTPCHighBound(ptcutTPCHigh);
313 TH1D *NotIDTPC = CorrNotID(etacut,"CorrNotIDPHOSTPC",prodname,shortprodname,true,ispp,forSim);
314 TH1D *NotIDITS = CorrNotID(etacut,"CorrNotIDPHOSITS",prodname,shortprodname,false,ispp,forSim);
315 hadCorrectionPHOS->SetNotIDCorrectionTPC(NotIDTPC);
316 hadCorrectionPHOS->SetNotIDCorrectionITS(NotIDITS);
318 Float_t NotIDConstTPC = CorrNotIDConst(0.15,etacut,"CorrNotIDPHOSTPC2",prodname,shortprodname,true,ispp,forSim);
319 Float_t NotIDConstITS = CorrNotIDConst(0.10,etacut,"CorrNotIDPHOSTPC2",prodname,shortprodname,true,ispp,forSim);
320 hadCorrectionPHOS->SetNotIDConstCorrectionTPC(1./NotIDConstTPC);
321 hadCorrectionPHOS->SetNotIDConstCorrectionITS(1./NotIDConstITS);
323 hadCorrectionPHOS->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*(1.0-0.010));
324 hadCorrectionPHOS->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*(1.0-0.010));
325 hadCorrectionPHOS->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*(1.0+0.010));
326 hadCorrectionPHOS->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*(1.0+0.010));
329 hadCorrectionPHOS->SetNotIDConstCorrectionTPCLowBound(1./NotIDConstTPC*(1.0-0.022));
330 hadCorrectionPHOS->SetNotIDConstCorrectionITSLowBound(1./NotIDConstITS*(1.0-0.022));
331 hadCorrectionPHOS->SetNotIDConstCorrectionTPCHighBound(1./NotIDConstTPC*(1.0+0.022));
332 hadCorrectionPHOS->SetNotIDConstCorrectionITSHighBound(1./NotIDConstITS*(1.0+0.022));
336 TH1D *NoID = CorrNoID(etacut,"CorrNoIDPHOS",prodname,shortprodname,ispp,forSim);
337 hadCorrectionPHOS->SetNotIDCorrectionNoPID(NoID);
340 Float_t NoIDTPC = CorrNoIDConst(etacut,0.15,"CorrNoIDPHOS2",prodname,shortprodname,ispp,forSim);
341 Float_t NoIDITS = CorrNoIDConst(etacut,0.1,"CorrNoIDPHOS2",prodname,shortprodname,ispp,forSim);
342 hadCorrectionPHOS->SetNotIDConstCorrectionTPCNoID(1./NoIDTPC);
343 hadCorrectionPHOS->SetNotIDConstCorrectionITSNoID(1./NoIDITS);
344 hadCorrectionPHOS->SetNotIDConstCorrectionTPCNoIDLowBound(1./NoIDTPC*.98);
345 hadCorrectionPHOS->SetNotIDConstCorrectionITSNoIDLowBound(1./NoIDITS*.98);
346 hadCorrectionPHOS->SetNotIDConstCorrectionTPCNoIDHighBound(1./NoIDTPC*1.02);
347 hadCorrectionPHOS->SetNotIDConstCorrectionITSNoIDHighBound(1./NoIDITS*1.02);
349 TH1D *efficiencyPionTPC = GetHistoEfficiency(etacut,"hEfficiencyPionTPC",1,1,20,true,true);
350 TH1D *efficiencyKaonTPC = GetHistoEfficiency(etacut,"hEfficiencyKaonTPC",2,1,20,true,true);
351 TH1D *efficiencyProtonTPC = GetHistoEfficiency(etacut,"hEfficiencyProtonTPC",3,1,20,true,true);
352 TH1D *efficiencyHadronTPC = GetHistoEfficiency(etacut,"hEfficiencyHadronTPC",0,1,20,true,true);
353 TH1D *efficiencyPionITS = GetHistoEfficiency(etacut,"hEfficiencyPionITS",1,1,20,false,true);
354 TH1D *efficiencyKaonITS = GetHistoEfficiency(etacut,"hEfficiencyKaonITS",2,1,20,false,true);
355 TH1D *efficiencyProtonITS = GetHistoEfficiency(etacut,"hEfficiencyProtonITS",3,1,20,false,true);
356 TH1D *efficiencyHadronITS = GetHistoEfficiency(etacut,"hEfficiencyHadronITS",0,1,20,false,true);
357 //CorrEfficiencyPlots(true,prodname,shortprodname);
358 //CorrEfficiencyPlots(false,prodname,shortprodname);
359 hadCorrectionPHOS->SetEfficiencyPionTPC(efficiencyPionTPC);
360 hadCorrectionPHOS->SetEfficiencyKaonTPC(efficiencyKaonTPC);
361 hadCorrectionPHOS->SetEfficiencyProtonTPC(efficiencyProtonTPC);
362 hadCorrectionPHOS->SetEfficiencyHadronTPC(efficiencyHadronTPC);
363 hadCorrectionPHOS->SetEfficiencyPionITS(efficiencyPionITS);
364 hadCorrectionPHOS->SetEfficiencyKaonITS(efficiencyKaonITS);
365 hadCorrectionPHOS->SetEfficiencyProtonITS(efficiencyProtonITS);
366 hadCorrectionPHOS->SetEfficiencyHadronITS(efficiencyHadronITS);
370 TH1D *efficiencyPionTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB0",1,1,20,true,true,0,4);
371 for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB0->Clone(Form("Test%i",i)),i);
372 TH1D *efficiencyPionTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB5",1,1,20,true,true,5,9);
373 for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB5->Clone(Form("Test%i",i)),i);
374 TH1D *efficiencyPionTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyPionTPCCB10",1,1,20,true,true,10,15);
375 for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyPionTPC((TH1D*)efficiencyPionTPCCB10->Clone(Form("Test%i",i)),i);
377 TH1D *efficiencyKaonTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB0",2,1,20,true,true,0,4);
378 for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB0->Clone(Form("Test%i",i)),i);
379 TH1D *efficiencyKaonTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB5",2,1,20,true,true,5,9);
380 for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB5->Clone(Form("Test%i",i)),i);
381 TH1D *efficiencyKaonTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyKaonTPCCB10",2,1,20,true,true,10,15);
382 for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyKaonTPC((TH1D*)efficiencyKaonTPCCB10->Clone(Form("Test%i",i)),i);//Kaon
384 TH1D *efficiencyProtonTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB0",3,1,20,true,true,0,4);
385 for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB0->Clone(Form("Test%i",i)),i);
386 TH1D *efficiencyProtonTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB5",3,1,20,true,true,5,9);
387 for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB5->Clone(Form("Test%i",i)),i);
388 TH1D *efficiencyProtonTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyProtonTPCCB10",3,1,20,true,true,10,15);
389 for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyProtonTPC((TH1D*)efficiencyProtonTPCCB10->Clone(Form("Test%i",i)),i);//Proton
391 TH1D *efficiencyHadronTPCCB0 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB0",0,1,20,true,true,0,4);
392 for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB0->Clone(Form("Test%i",i)),i);
393 TH1D *efficiencyHadronTPCCB5 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB5",0,1,20,true,true,5,9);
394 for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB5->Clone(Form("Test%i",i)),i);
395 TH1D *efficiencyHadronTPCCB10 = GetHistoEfficiency(etacut,"hEfficiencyHadronTPCCB10",0,1,20,true,true,10,15);
396 for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyHadronTPC((TH1D*)efficiencyHadronTPCCB10->Clone(Form("Test%i",i)),i);//Hadron
399 TH1D *efficiencyPionITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB0",1,1,20,false,true,0,4);
400 for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB0->Clone(Form("Test%i",i)),i);
401 TH1D *efficiencyPionITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB5",1,1,20,false,true,5,9);
402 for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB5->Clone(Form("Test%i",i)),i);
403 TH1D *efficiencyPionITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyPionITSCB10",1,1,20,false,true,10,15);
404 for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyPionITS((TH1D*)efficiencyPionITSCB10->Clone(Form("Test%i",i)),i);//Pion
406 TH1D *efficiencyKaonITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB0",2,1,20,false,true,0,4);
407 for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB0->Clone(Form("Test%i",i)),i);
408 TH1D *efficiencyKaonITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB5",2,1,20,false,true,5,9);
409 for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB5->Clone(Form("Test%i",i)),i);
410 TH1D *efficiencyKaonITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyKaonITSCB10",2,1,20,false,true,10,15);
411 for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyKaonITS((TH1D*)efficiencyKaonITSCB10->Clone(Form("Test%i",i)),i);//Kaon
413 TH1D *efficiencyProtonITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB0",3,1,20,false,true,0,4);
414 for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB0->Clone(Form("Test%i",i)),i);
415 TH1D *efficiencyProtonITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB5",3,1,20,false,true,5,9);
416 for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB5->Clone(Form("Test%i",i)),i);
417 TH1D *efficiencyProtonITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyProtonITSCB10",3,1,20,false,true,10,15);
418 for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyProtonITS((TH1D*)efficiencyProtonITSCB10->Clone(Form("Test%i",i)),i);//Proton
420 TH1D *efficiencyHadronITSCB0 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB0",0,1,20,false,true,0,4);
421 for(int i=0;i<=4;i++) hadCorrectionPHOS->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB0->Clone(Form("Test%i",i)),i);
422 TH1D *efficiencyHadronITSCB5 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB5",0,1,20,false,true,5,9);
423 for(int i=5;i<=9;i++) hadCorrectionPHOS->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB5->Clone(Form("Test%i",i)),i);
424 TH1D *efficiencyHadronITSCB10 = GetHistoEfficiency(etacut,"hEfficiencyHadronITSCB10",0,1,20,false,true,10,15);
425 for(int i=10;i<=19;i++) hadCorrectionPHOS->SetEfficiencyHadronITS((TH1D*)efficiencyHadronITSCB10->Clone(Form("Test%i",i)),i);//Hadron
428 TH1D *backgroundTPC = GetHistoCorrBkgd(etacut,"hBackgroundTPC",true,ispp,forSim);
429 TH1D *backgroundITS = GetHistoCorrBkgd(etacut,"hBackgroundITS",false,ispp,forSim);
430 hadCorrectionPHOS->SetBackgroundCorrectionTPC(backgroundTPC);
431 hadCorrectionPHOS->SetBackgroundCorrectionITS(backgroundITS);
432 CorrBkgdPlots(prodname,shortprodname,true,ispp,forSim);
433 CorrBkgdPlots(prodname,shortprodname,false,ispp,forSim);
435 hadCorrectionPHOS->Report();
438 hadCorrectionPHOS->Write();
447 //==================================CorrNeutral==============================================
448 Float_t CorrNeutral(float ptcut, char *prodname, char *shortprodname, bool ispp, bool forSim, bool TPC, bool hadronic, float etacut){
449 if(!forSim){//for data we have evaluated the neutral correction from ALICE data
450 if(hadronic){//for tot et from had et
458 else{//for had et only
467 gStyle->SetOptTitle(0);
468 gStyle->SetOptStat(0);
469 gStyle->SetOptFit(0);
470 TCanvas *c = new TCanvas("c","c",400,400);
471 c->SetTopMargin(0.0);
472 c->SetRightMargin(0.0);
477 c->SetFrameFillColor(0);
478 c->SetFrameBorderMode(0);
480 TPad *ptpad = c->cd(1);
481 ptpad->SetTopMargin(0.04);
482 ptpad->SetRightMargin(0.04);
483 ptpad->SetLeftMargin(0.149288);
484 ptpad->SetBorderSize(0);
485 ptpad->SetFillColor(0);
486 ptpad->SetFillColor(0);
487 ptpad->SetBorderMode(0);
488 ptpad->SetFrameFillColor(0);
489 ptpad->SetFrameBorderMode(0);
493 sprintf(prefix,"%s%2.1f",shortprodname,ptcut);
495 sprintf(histoname,"%stotal",histoname);
498 if(hadronic) casetotal = 8;
499 TH1D *total = GetHistoCorrNeutral(ptcut,histoname,ispp,forSim,casetotal,false,colortotal,phosmarker,hadronic);
501 int colorallneutral = 2;
502 TH1D *allneutral = GetHistoCorrNeutral(ptcut,"allneutral",ispp,forSim,3,false,colorallneutral,phosmarker,hadronic);
504 int colorchargedsecondary = TColor::kViolet-3;
505 TH1D *chargedsecondary = GetHistoCorrNeutral(ptcut,"chargedsecondary",ispp,forSim,2,false,colorchargedsecondary,phosmarker,hadronic);
507 int colorneutralUndet = 4;
508 TH1D *neutralUndet = GetHistoCorrNeutral(ptcut,"neutralUndet",ispp,forSim,1,false,colorneutralUndet,phosmarker,hadronic);
510 int colorv0 = TColor::kGreen+2;
511 TH1D *v0 = GetHistoCorrNeutral(ptcut,"v0",ispp,forSim,0,false,colorv0,phosmarker,hadronic);
513 int colorem = TColor::kCyan;
514 TH1D *em = GetHistoCorrNeutral(ptcut,"em",ispp,forSim,9,false,colorem,phosmarker,hadronic);
516 TF1 *func = new TF1("func","[0]",-.7,.7);
517 func->SetParameter(0,0.2);
518 total->Fit(func,"","",-etacut,etacut);
520 //total->SetAxisRange(0.0,4);
521 total->GetXaxis()->SetLabelSize(0.05);
522 total->GetYaxis()->SetLabelSize(0.045);
523 total->GetXaxis()->SetTitleSize(0.05);
524 total->GetYaxis()->SetTitleSize(0.06);
526 total->SetMaximum(0.6);
527 total->SetMinimum(0.0);
530 total->SetMaximum(0.3);
531 total->SetMinimum(0.0);
534 allneutral->Draw("same");
535 chargedsecondary->Draw("same");
536 neutralUndet->Draw("same");
538 if(hadronic) em->Draw("same");
540 TLatex *tex = new TLatex(0.161478,1.0835,prodname);
541 tex->SetTextSize(0.0537634);
543 TLegend *leg2 = new TLegend(0.518321,0.746873,0.774812,0.955343);
544 leg2->AddEntry(total,"Total");
545 leg2->AddEntry(allneutral,"#Lambda,#bar{#Lambda},K^{0}_{S},K^{0}_{L},n,#bar{n}");
546 leg2->AddEntry(neutralUndet,"K^{0}_{L},n,#bar{n}");
547 if(hadronic) leg2->AddEntry(em,"e^{#pm},#gamma,#eta,#pi^{0},#omega");
548 leg2->SetFillStyle(0);
549 leg2->SetFillColor(0);
550 leg2->SetBorderSize(0);
551 leg2->SetTextSize(0.0548607);
554 sprintf(epsname,"pics/%s/fhadronic.eps",shortprodname);
555 sprintf(pngname,"pics/%s/fhadronic.png",shortprodname);
558 sprintf(epsname,"pics/%s/fneutral.eps",shortprodname);
559 sprintf(pngname,"pics/%s/fneutral.png",shortprodname);
566 delete chargedsecondary;
571 float corr = func->GetParameter(0);
575 return 1.0/(1.0-corr);
578 TH1D *GetHistoCorrNeutral(float cut, char *name, bool ispp, bool forSim, int mycase, bool eta, int color, int marker, bool hadronic){
580 char *reweightname = "";
581 if(!forSim) reweightname = "Reweighted";
582 TH2F *numeratorParent;
585 numeratorParent= (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)))->Clone("v0");
586 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)));
587 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)));
590 numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)))->Clone("Knnbar");
591 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"));
592 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"));
595 numeratorParent = (TH2F*)((TH2F*) out2->FindObject("EtSimulatedOmega"))->Clone("ch2ndary");
596 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"));
597 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi"));
598 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"));
599 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi0"));
600 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"));
603 numeratorParent= (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)))->Clone("allneutral");
604 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)));
605 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)));
606 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)));
607 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"));
608 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"));
611 numeratorParent= (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)))->Clone("allneutral");
612 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)));
613 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)));
614 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)));
615 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"));
616 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"));
617 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedOmega"));
618 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"));
619 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi"));
620 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"));
621 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi0"));
622 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"));
625 numeratorParent= (TH2F*)((TH2F*) out2->FindObject("EtSimulatedXi"))->Clone("allxi");
626 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"));
627 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi0"));
628 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"));
631 numeratorParent = (TH2F*)((TH2F*) out2->FindObject("EtSimulatedOmega"))->Clone("allomega");
632 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"));
635 numeratorParent = (TH2F*)((TH2F*) out2->FindObject("EtSimulatedSigma"))->Clone("allsigma");
636 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiSigma"));
639 numeratorParent= (TH2F*)((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)))->Clone("allneutral");
640 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)));
641 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)));
642 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)));
643 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"));
644 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"));
645 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedOmega"));
646 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"));
647 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi"));
648 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"));
649 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedXi0"));
650 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"));
651 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedGamma"));
652 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEta"));
653 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedPi0"));
654 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedOmega0"));
655 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEPlus"));
656 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEMinus"));
659 numeratorParent= (TH2F*)((TH2F*) out2->FindObject("EtSimulatedGamma"))->Clone("allem");
660 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEta"));
661 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedPi0"));
662 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedOmega0"));
663 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEPlus"));
664 numeratorParent->Add((TH2F*) out2->FindObject("EtSimulatedEMinus"));
669 //allhad=(TH2F*) ((TH2F*) out2->FindObject("EtSimulatedAllHadron"))->Clone("id");
670 allhad=(TH2F*) ((TH2F*) out2->FindObject("EtSimulatedPiPlus"))->Clone("id");
671 allhad->Add((TH2F*) out2->FindObject("EtSimulatedPiMinus"));
672 allhad->Add((TH2F*) out2->FindObject("EtSimulatedKMinus"));
673 allhad->Add((TH2F*) out2->FindObject("EtSimulatedKPlus"));
674 allhad->Add((TH2F*) out2->FindObject("EtSimulatedProton"));
675 allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiProton"));
676 allhad->Add((TH2F*) out2->FindObject(Form("EtSimulatedLambda%s",reweightname)));
677 allhad->Add((TH2F*) out2->FindObject(Form("EtSimulatedAntiLambda%s",reweightname)));
678 allhad->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0S%s",reweightname)));
679 allhad->Add((TH2F*) out2->FindObject(Form("EtSimulatedK0L%s",reweightname)));
680 allhad->Add((TH2F*) out2->FindObject("EtSimulatedNeutron"));
681 allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiNeutron"));
682 allhad->Add((TH2F*) out2->FindObject("EtSimulatedEPlus"));
683 allhad->Add((TH2F*) out2->FindObject("EtSimulatedEMinus"));
684 allhad->Add((TH2F*) out2->FindObject("EtSimulatedOmega"));
685 allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiOmega"));
686 allhad->Add((TH2F*) out2->FindObject("EtSimulatedXi"));
687 allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi"));
688 allhad->Add((TH2F*) out2->FindObject("EtSimulatedSigma"));
689 allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiSigma"));
690 allhad->Add((TH2F*) out2->FindObject("EtSimulatedXi0"));
691 allhad->Add((TH2F*) out2->FindObject("EtSimulatedAntiXi0"));
693 if(hadronic){//if we are getting the correction for the hadronic only case...
694 allhad->Add((TH2F*) out2->FindObject("EtSimulatedGamma"));
695 allhad->Add((TH2F*) out2->FindObject("EtSimulatedEta"));
696 allhad->Add((TH2F*) out2->FindObject("EtSimulatedPi0"));
697 allhad->Add((TH2F*) out2->FindObject("EtSimulatedOmega0"));
698 allhad->Add((TH2F*) out2->FindObject("EtSimulatedEPlus"));
699 allhad->Add((TH2F*) out2->FindObject("EtSimulatedEMinus"));
705 int lowbin = numeratorParent->GetYaxis()->FindBin(-cut+.001);//make sure we don't accv0entally get the wrong bin
706 int highbin = numeratorParent->GetYaxis()->FindBin(cut-.001);
707 //cout<<"Projecting from "<<numeratorParent->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<numeratorParent->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
708 denominator = allhad->ProjectionX("name",lowbin,highbin);
709 numerator = numeratorParent->ProjectionX("numerator",lowbin,highbin);
712 int lowbin = allhad->GetXaxis()->FindBin(cut);//make sure we don't accidentally get the wrong bin
713 int highbin = allhad->GetXaxis()->GetNbins();
714 //cout<<"Projecting from "<<allhad->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<allhad->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
715 numerator = numeratorParent->ProjectionY("name",lowbin,highbin);
716 denominator = allhad->ProjectionY("denominator",lowbin,highbin);
718 numerator->Divide(denominator);
719 //numerator->Rebin(2);
720 //numerator->Scale(0.5);
721 numerator->SetYTitle("E_{T}^{had,sample}/E_{T}^{had,total}");
722 numerator->GetYaxis()->SetTitleOffset(1.2);
723 numerator->SetMarkerColor(color);
724 numerator->SetLineColor(color);
725 numerator->SetMarkerStyle(marker);
727 delete numeratorParent;
730 numerator->SetName(name);
735 //===============================CorrPtCut=========================================
736 TH1D *GetHistoCorrPtCut(float ptcut, char *name, bool ispp, bool forSim, int mycase){
738 TH2F *allhad = ((TH2F*) out2->FindObject("EtSimulatedAllHadron"))->Clone("allhad");
739 TH2F *ptlow = ((TH2F*) out2->FindObject("EtSimulatedChargedHadronAssumingNoPt"))->Clone("ptlow");
741 if(ptcut>0.14){//TPC cut off
742 (TH2F*)pthigh =(TH2F*) ((TH2F*) out2->FindObject("EtSimulatedChargedHadronAssumingPtTPCCut"))->Clone("pthigh");
745 (TH2F*)pthigh =(TH2F*) ((TH2F*) out2->FindObject("EtSimulatedChargedHadronAssumingPtITSCut"))->Clone("pthigh");
748 int lowbin = allhad->GetXaxis()->FindBin(0.0);//make sure we don't accidentally get the wrong bin
749 int highbin = allhad->GetXaxis()->FindBin(ptcut);
750 int nbins = allhad->GetXaxis()->GetNbins();
751 //cout<<"Projecting from "<<allhad->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<allhad->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
752 //cout<<"Projecting from "<<allhad->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<allhad->GetXaxis()->GetBinLowEdge(nbins)<<endl;
759 numerator = ptlow->ProjectionY("nameLow",lowbin,highbin);
760 denominator = allhad->ProjectionY("denominatorLow",highbin,nbins);
761 denominator->Add(ptlow);
764 numerator = pthigh->ProjectionY("nameHigh",lowbin,highbin);
765 denominator = allhad->ProjectionY("denominatorHigh",highbin,nbins);
766 denominator->Add(pthigh);
769 numerator = allhad->ProjectionY("name",lowbin,highbin);
770 denominator = allhad->ProjectionY("denominator",lowbin,nbins);
772 numerator->Divide(denominator);
773 numerator->SetYTitle("E_{T}^{had, p_{T}<cut-off}/E_{T}^{had, all p_{T}}");
774 numerator->GetYaxis()->SetTitleOffset(1.);
775 numerator->GetYaxis()->SetTitleSize(0.08);
776 numerator->GetYaxis()->SetLabelSize(0.05);
777 numerator->GetXaxis()->SetTitleSize(0.08);
778 numerator->GetXaxis()->SetLabelSize(0.05);
779 numerator->GetXaxis()->SetTitleOffset(.6);
780 //numerator->Rebin(2);
781 //numerator->Scale(0.5);
782 //numerator->Draw("e");
787 numerator->SetName(name);
792 Float_t CorrPtCut(float ptcut, char *prodname, char *shortprodname, bool ispp, bool forSim, int mycase){
794 gStyle->SetOptTitle(0);
795 gStyle->SetOptStat(0);
796 gStyle->SetOptFit(0);
797 TCanvas *c = new TCanvas("c","c",500,400);
798 c->SetTopMargin(0.04);
799 c->SetRightMargin(0.04);
800 c->SetLeftMargin(0.181452);
801 c->SetBottomMargin(0.134409);
806 c->SetFrameFillColor(0);
807 c->SetFrameBorderMode(0);
811 TH1D *High = GetHistoCorrPtCut(0.15-.001,"High",ispp,forSim,mycase);
812 TH1D *Low = GetHistoCorrPtCut(0.1-.001,"Low",ispp,forSim,mycase);
813 TH1D *Lowest = GetHistoCorrPtCut(0.05-.001,"Lowest",ispp,forSim,mycase);
815 TF1 *func = new TF1("func","[0]",-.7,.7);
816 func->SetParameter(0,0.2);
817 if(ptcut<.125){//its cuts
824 High->SetMaximum(0.04);
825 High->SetMinimum(0.0);
826 High->SetMarkerColor(2);
827 Low->SetMarkerColor(4);
828 High->SetLineColor(2);
829 Low->SetLineColor(4);
830 High->SetMinimum(0.0);
831 High->SetMarkerStyle(20);
832 Low->SetMarkerStyle(21);
833 Lowest->SetMarkerStyle(22);
836 Lowest->Draw("same");
840 TLatex *tex = new TLatex(-0.723444,0.0373593,prodname);
841 tex->SetTextSize(0.0537634);
843 TLegend *leg = new TLegend(0.217742,0.66129,0.477823,0.873656);
844 leg->AddEntry(High,"p_{T} cut-off = 0.15 GeV/c");
845 leg->AddEntry(Low,"p_{T} cut-off = 0.1 GeV/c");
846 leg->AddEntry(Lowest,"p_{T} cut-off = 0.05 GeV/c");
847 leg->SetFillStyle(0);
848 leg->SetFillColor(0);
849 leg->SetBorderSize(0);
850 leg->SetTextSize(0.0537634);
853 if(ptcut<.125){//its cuts
854 c->SaveAs(Form("pics/%s/fptcutITS.eps",shortprodname));
855 c->SaveAs(Form("pics/%s/fptcutITS.png",shortprodname));
858 c->SaveAs(Form("pics/%s/fptcutTPC.eps",shortprodname));
859 c->SaveAs(Form("pics/%s/fptcutTPC.png",shortprodname));
862 float corr = func->GetParameter(0);
863 //cout<<"Pt cut correction: "<<1.0/(1.0-corr)<<endl;
871 return 1.0/(1.0-corr);
876 //==================================CorrNotID=================================================
877 TH1D *GetHistoCorrNotID(float etacut,char *name, bool TPC, bool eta, bool ispp, bool forSim){
879 char *myname = mynameITS;
880 if(TPC) myname = mynameTPC;
881 TH2F *notid = ((TH2F*) out2->FindObject(Form("EtReconstructed%sUnidentifiedAssumingPion",myname)))->Clone("notid");
882 TH2F *nNotid = ((TH2F*) out2->FindObject(Form("EtNReconstructed%sUnidentified",myname)))->Clone("nNotid");
884 //cout<<"Correction determined for all charged hadrons"<<endl;
885 notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiPlus",myname)));
886 notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiMinus",myname)));
887 notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedKPlus",myname)));
888 notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedKMinus",myname)));
889 notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedProton",myname)));
890 notid->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedAntiProton",myname)));
891 nNotid->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%sPiPlus",myname)));
892 nNotid->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%sPiMinus",myname)));
893 nNotid->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%sKPlus",myname)));
894 nNotid->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%sKMinus",myname)));
895 nNotid->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%sProton",myname)));
896 nNotid->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%sAntiProton",myname)));
899 TH2F *id = ((TH2F*) out2->FindObject(Form("EtReconstructed%sUnidentified",myname)))->Clone("id");
901 id->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiPlus",myname)));
902 id->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiMinus",myname)));
903 id->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedKPlus",myname)));
904 id->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedKMinus",myname)));
905 id->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedProton",myname)));
906 id->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedAntiProton",myname)));
913 int lowbin = notid->GetYaxis()->FindBin(-etacut+.001);//make sure we don't accv0entally get the wrong bin
914 int highbin = notid->GetYaxis()->FindBin(etacut-.001);
915 //cout<<"Projecting from "<<notid->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<notid->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
916 denominator = id->ProjectionX("name",lowbin,highbin);
917 numerator = notid->ProjectionX("numerator",lowbin,highbin);
918 nNotidProj = nNotid->ProjectionX("nNotidProj",lowbin,highbin);
921 //cout<<"Getting eta dependence"<<endl;
922 int lowbin = id->GetXaxis()->FindBin(etacut);//make sure we don't accidentally get the wrong bin
924 if(etacut<0.15){//then we actually have ITS standalone tracks and we only want this to run from 0.1 to 0.15 because this will be used only for ITS standalone tracks
925 highbin = id->GetXaxis()->FindBin(0.15);
928 highbin = id->GetXaxis()->GetNbins();
930 //cout<<"Projecting from "<<id->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<id->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
931 numerator = notid->ProjectionY("name",lowbin,highbin);
932 denominator = id->ProjectionY("denominator",lowbin,highbin);
933 nNotidProj = nNotid->ProjectionY("nNotidProj",lowbin,highbin);
935 TH1D *result = numerator;
937 cerr<<"Uh-oh! Can't find denominator!!";
940 else{result->Divide(denominator);}
941 if(result->GetNbinsX() != nNotidProj->GetNbinsX()){
942 cerr<<"Uh-oh! Can't rescale errors! "<<result->GetNbinsX()<<"!="<<nNotidProj->GetNbinsX()<<endl;
946 cerr<<"Uh-oh! Can't find histogram!!";
950 for(int i=1;i<=result->GetNbinsX();i++){
951 Float_t value = result->GetBinContent(i);
952 Float_t valueerr = result->GetBinError(i);
953 Float_t n = nNotidProj->GetBinContent(i);
956 else{err= value/TMath::Power(n,0.5);}
957 result->SetBinError(i,err);
958 //cout<<"Was "<<valueerr<<", setting to "<<err<<endl;
960 result->SetYTitle("Ratio of E_{T}^{assuming pion}/E_{T}^{real}");
961 result->GetYaxis()->SetTitleOffset(1.2);
967 result->SetName(name);
972 TH1D *CorrNotID(float etacut,char *name, char *prodname, char *shortprodname, bool TPC, bool ispp, bool forSim){
973 gStyle->SetOptTitle(0);
974 gStyle->SetOptStat(0);
975 gStyle->SetOptFit(0);
976 TCanvas *c = new TCanvas("c","c",500,400);
977 c->SetTopMargin(0.04);
978 c->SetRightMargin(0.04);
983 c->SetFrameFillColor(0);
984 c->SetFrameBorderMode(0);
986 TH1D *PHOS = GetHistoCorrNotID(etacut,name,TPC,true,ispp,forSim);
987 PHOS->SetMarkerColor(2);
988 PHOS->SetLineColor(2);
989 PHOS->SetAxisRange(0.0,4);
991 PHOS->SetMaximum(1.1);
992 PHOS->SetMinimum(0.85);
995 PHOS->SetAxisRange(0.0,0.5);
997 PHOS->SetMarkerStyle(20);
999 TLatex *tex = new TLatex(0.161478,1.0835,prodname);
1000 tex->SetTextSize(0.0537634);
1002 char *detector = detectorEMCAL;
1003 if(etacut<0.2) detector = detectorPHOS;
1005 sprintf(epsname,"pics/%s/fnotidTPC%s.eps",shortprodname,detector);
1006 sprintf(pngname,"pics/%s/fnotidTPC%s.png",shortprodname,detector);
1009 sprintf(epsname,"pics/%s/fnotidITS%s.eps",shortprodname,detector);
1010 sprintf(pngname,"pics/%s/fnotidITS%s.png",shortprodname,detector);
1017 PHOS->SetName(name);
1021 Float_t CorrNotIDConst(float ptcut, float etacut,char *name, char *prodname, char *shortprodname, bool TPC, bool ispp, bool forSim){
1030 gStyle->SetOptTitle(0);
1031 gStyle->SetOptStat(0);
1032 gStyle->SetOptFit(0);
1033 TCanvas *c = new TCanvas("c","c",500,400);
1034 c->SetTopMargin(0.04);
1035 c->SetRightMargin(0.04);
1036 c->SetBorderSize(0);
1039 c->SetBorderMode(0);
1040 c->SetFrameFillColor(0);
1041 c->SetFrameBorderMode(0);
1043 TH1D *PHOS = GetHistoCorrNotID(ptcut,name,TPC,false,ispp,forSim);
1044 PHOS->SetMarkerColor(2);
1045 PHOS->SetLineColor(2);
1046 PHOS->SetMaximum(1.01);
1047 PHOS->SetMinimum(0.98);
1048 TF1 *func = new TF1("func","[0]",-etacut,etacut);
1049 PHOS->Fit(func,"","",-etacut,etacut);
1050 PHOS->SetMarkerStyle(20);
1052 TLatex *tex = new TLatex(0.161478,1.0835,prodname);
1053 tex->SetTextSize(0.0537634);
1055 char *detector = detectorEMCAL;
1056 if(etacut<0.2) detector = detectorPHOS;
1058 sprintf(epsname,"pics/%s/fnotidConstTPC%s.eps",shortprodname,detector);
1059 sprintf(pngname,"pics/%s/fnotidConstTPC%s.png",shortprodname,detector);
1062 sprintf(epsname,"pics/%s/fnotidConstITS%s.eps",shortprodname,detector);
1063 sprintf(pngname,"pics/%s/fnotidConstITS%s.png",shortprodname,detector);
1070 float value = func->GetParameter(0);
1076 //==================================CorrNoID=================================================
1077 TH1D *GetHistoNoID(float etacut, char *name, bool eta, bool TPC, bool ispp, bool forSim){
1079 char *myname = mynameITS;
1080 if(TPC) myname = mynameTPC;
1081 TH2F *notid = ((TH2F*) out2->FindObject(Form("EtReconstructed%sChargedHadronAssumingPion",myname)))->Clone("notid");
1082 TH2F *nNotid = ((TH2F*) out2->FindObject(Form("EtNReconstructed%sChargedHadron",myname)))->Clone("nNotid");
1084 TH2F *id = ((TH2F*) out2->FindObject(Form("EtReconstructed%sChargedHadron",myname)))->Clone("id");
1085 int lowbin = id->GetYaxis()->FindBin(-etacut+.001);//make sure we don't accidentally get the wrong bin
1086 int highbin = id->GetYaxis()->FindBin(etacut-.001);
1092 int lowbin = notid->GetYaxis()->FindBin(-etacut+.001);//make sure we don't accv0entally get the wrong bin
1093 int highbin = notid->GetYaxis()->FindBin(etacut-.001);
1094 //cout<<"Projecting from "<<notid->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<notid->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
1095 denominator = id->ProjectionX("name",lowbin,highbin);
1096 numerator = notid->ProjectionX("numerator",lowbin,highbin);
1097 nNotidProj = nNotid->ProjectionX("nNotidProj",lowbin,highbin);
1100 //cout<<"Getting eta dependence"<<endl;
1101 int lowbin = id->GetXaxis()->FindBin(etacut);//make sure we don't accidentally get the wrong bin
1103 if(etacut<0.15){//then we actually have ITS standalone tracks and we only want this to run from 0.1 to 0.15 because this will be used only for ITS standalone tracks
1104 highbin = id->GetXaxis()->FindBin(0.15);
1107 highbin = id->GetXaxis()->GetNbins();
1109 //cout<<"Projecting from "<<id->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<id->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
1110 numerator = notid->ProjectionY("name",lowbin,highbin);
1111 denominator = id->ProjectionY("denominator",lowbin,highbin);
1112 nNotidProj = nNotid->ProjectionY("nNotidProj",lowbin,highbin);
1114 if(denominator) numerator->Divide(denominator);
1116 if(numerator->GetNbinsX() != nNotidProj->GetNbinsX()){
1117 cerr<<"Uh-oh! Can't rescale errors! "<<numerator->GetNbinsX()<<"!="<<nNotidProj->GetNbinsX()<<endl;
1121 for(int i=1;i<=numerator->GetNbinsX();i++){
1122 Float_t value = numerator->GetBinContent(i);
1123 Float_t valueerr = numerator->GetBinError(i);
1124 Float_t n = nNotidProj->GetBinContent(i);
1127 err = value/TMath::Power(n,0.5);
1129 numerator->SetBinError(i,err);;
1131 numerator->SetYTitle("Ratio of E_{T}^{assuming pion}/E_{T}^{real}");
1132 numerator->GetYaxis()->SetTitleOffset(1.2);
1138 numerator->SetName(name);
1143 TH1D *CorrNoID(float etacut,char *name, char *prodname, char *shortprodname, bool ispp, bool forSim){
1144 gStyle->SetOptTitle(0);
1145 gStyle->SetOptStat(0);
1146 gStyle->SetOptFit(0);
1147 TCanvas *c = new TCanvas("c","c",500,400);
1148 c->SetTopMargin(0.04);
1149 c->SetRightMargin(0.04);
1150 c->SetBorderSize(0);
1153 c->SetBorderMode(0);
1154 c->SetFrameFillColor(0);
1155 c->SetFrameBorderMode(0);
1157 TH1D *PHOS = GetHistoNoID(etacut,name,true,true,ispp,forSim);
1158 PHOS->SetMarkerColor(2);
1159 PHOS->SetLineColor(2);
1160 PHOS->SetAxisRange(0.0,4);
1161 PHOS->SetMaximum(1.1);
1162 PHOS->SetMinimum(0.85);
1163 PHOS->SetMarkerStyle(20);;
1165 TLatex *tex = new TLatex(0.161478,1.0835,prodname);
1166 tex->SetTextSize(0.0537634);
1170 char *detector = detectorEMCAL;
1171 if(etacut<0.2) detector = detectorPHOS;
1172 sprintf(epsname,"pics/%s/fnoid%s.eps",shortprodname,detector);
1173 sprintf(pngname,"pics/%s/fnoid%s.png",shortprodname,detector);
1179 PHOS->SetName(name);
1184 Float_t CorrNoIDConst(float etacut, float ptcut,char *name, char *prodname, char *shortprodname, bool ispp, bool forSim){
1185 gStyle->SetOptTitle(0);
1186 gStyle->SetOptStat(0);
1187 gStyle->SetOptFit(0);
1188 TCanvas *c = new TCanvas("c","c",500,400);
1189 c->SetTopMargin(0.04);
1190 c->SetRightMargin(0.04);
1191 c->SetBorderSize(0);
1194 c->SetBorderMode(0);
1195 c->SetFrameFillColor(0);
1196 c->SetFrameBorderMode(0);
1199 if(ptcut<.15) TPC = false;
1200 TH1D *PHOS = GetHistoNoID(ptcut,name,false,TPC,ispp,forSim);
1201 TF1 *func = new TF1("func","[0]",-etacut,etacut);
1202 PHOS->Fit(func,"","",-etacut,etacut);
1203 PHOS->SetMarkerColor(2);
1204 PHOS->SetLineColor(2);
1205 PHOS->SetMaximum(1.1);
1206 PHOS->SetMinimum(0.85);
1207 PHOS->SetMarkerStyle(20);;
1209 TLatex *tex = new TLatex(0.161478,1.0835,prodname);
1210 tex->SetTextSize(0.0537634);
1214 char *detector = detectorEMCAL;
1215 if(etacut<0.2) detector = detectorPHOS;
1217 sprintf(epsname,"pics/%s/fnoid%sTPC.eps",shortprodname,detector);
1218 sprintf(pngname,"pics/%s/fnoid%sTPC.png",shortprodname,detector);
1221 sprintf(epsname,"pics/%s/fnoid%sITS.eps",shortprodname,detector);
1222 sprintf(pngname,"pics/%s/fnoid%sITS.png",shortprodname,detector);
1229 float value = func->GetParameter(0);
1235 //==================================Efficiency=================================================
1236 TH1D* bayneseffdiv(TH1D* numerator, TH1D* denominator,Char_t* name)
1239 cerr<<"Error: numerator does not exist!"<<endl;
1243 cerr<<"Error: denominator does not exist!"<<endl;
1246 TH1D* result = (TH1D*)numerator->Clone(name);
1247 Int_t nbins = numerator->GetNbinsX();
1248 for (Int_t ibin=0; ibin<= nbins+1; ++ibin) {
1249 Double_t numeratorVal = numerator->GetBinContent(ibin);
1250 Double_t denominatorVal = denominator->GetBinContent(ibin);
1251 // Check if the errors are right or the thing is scaled
1252 Double_t numeratorValErr = numerator->GetBinError(ibin);
1253 if (!(numeratorValErr==0. || numeratorVal ==0.) ) {
1254 Double_t rescale = numeratorValErr*numeratorValErr/numeratorVal;
1255 numeratorVal /= rescale;
1257 Double_t denominatorValErr = denominator->GetBinError(ibin);
1258 if (!(denominatorValErr==0. || denominatorVal==0. )) {
1259 Double_t rescale = denominatorValErr*denominatorValErr/denominatorVal;
1260 denominatorVal /= rescale;
1262 Double_t quotient = 0.;
1263 if (denominatorVal!=0.) {
1264 quotient = numeratorVal/denominatorVal;
1266 Double_t quotientErr=0;
1267 if(numeratorVal>0.0 && denominatorVal>0.0 && (denominatorVal+2.0)>0.0 && (denominatorVal+3.0) >0.0){
1268 double argument = (numeratorVal+1.0)/(denominatorVal+2.0)*
1269 ((numeratorVal+2.0)/(denominatorVal+3.0)-(numeratorVal+1.0)/(denominatorVal+2.0));
1270 double test = TMath::Power(TMath::Abs(argument),0.5);
1271 quotientErr = TMath::Sqrt( TMath::Abs(
1272 (numeratorVal+1.0)/(denominatorVal+2.0)*
1273 ((numeratorVal+2.0)/(denominatorVal+3.0)-(numeratorVal+1.0)/(denominatorVal+2.0))));
1275 result->SetBinContent(ibin,quotient);
1276 result->SetBinError(ibin,quotientErr);
1277 //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;
1284 TH1D *GetHistoEfficiency(float cut, char *name, int mycase, int color, int marker,bool TPC,bool ITS, int cb, int cblast){
1287 char *myname = mynameITS;
1288 if(TPC&&!ITS) myname = mynameTPC;
1289 if(TPC&&ITS) myname = mynameTPCITS;
1290 TH2F *numeratorParent;
1293 if(cblast != -1){//add more centrality bins
1294 for(int i=cb;i<=cblast;i++){
1295 if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)))->Clone("RecoHadron");
1296 else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)));}
1297 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiMinus",i)));
1298 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KMinus",i)));
1299 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)));
1300 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)));
1301 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"AntiProton",i)));
1305 numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoHadron");
1306 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
1307 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
1308 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")));
1309 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")));
1310 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
1314 if(cblast != -1){//add more centrality bins
1315 for(int i=cb;i<=cblast;i++){
1316 if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)))->Clone("RecoPion");
1317 else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiPlus",i)));}
1318 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"PiMinus",i)));
1322 numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiPlus")))->Clone("RecoPion");
1323 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"PiMinus")));
1327 if(cblast != -1){//add more centrality bins
1328 for(int i=cb;i<=cblast;i++){
1329 if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)))->Clone("RecoKaon");
1330 else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KPlus",i)));}
1331 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"KMinus",i)));
1335 numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KPlus")))->Clone("RecoKaon");
1336 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"KMinus")));
1340 if(cblast != -1){//add more centrality bins
1341 for(int i=cb;i<=cblast;i++){
1342 if(i==cb) numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)))->Clone("RecoProton");
1343 else{numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"Proton",i)));}
1344 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%sCB%i",myname,"AntiProton",i)));
1348 numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"Proton")))->Clone("RecoProton");
1349 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s",myname,"AntiProton")));
1353 numeratorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s%s",myname,"EPlus",cbname)))->Clone("RecoElectron");
1354 numeratorParent->Add((TH2F*) out2->FindObject(Form("EtNReconstructed%s%s%s",myname,"EMinus",cbname)));
1357 TH2F *denominatorParent;
1360 if(cblast != -1){//add more centrality bins
1361 denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedChargedHadronCB%i",cb)))->Clone("RecoHadron");
1362 for(int i=cb+1;i<=cblast;i++){
1363 denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedChargedHadronCB%i",i)));
1367 denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedChargedHadron"))->Clone("RecoHadron");
1371 if(cblast != -1){//add more centrality bins
1372 denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedPiPlusCB%i",cb)))->Clone("RecoPion");
1373 denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiMinusCB%i",cb)));
1374 for(int i=cb+1;i<=cblast;i++){
1375 denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiPlusCB%i",i)));
1376 denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedPiMinusCB%i",i)));
1380 denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedPiPlus"))->Clone("RecoPion");
1381 denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedPiMinus"));
1385 if(cblast != -1){//add more centrality bins
1386 denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedKPlusCB%i",cb)))->Clone("RecoKaon");
1387 denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKMinusCB%i",cb)));
1388 for(int i=cb+1;i<=cblast;i++){
1389 denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKPlusCB%i",i)));
1390 denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedKMinusCB%i",i)));
1394 denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedKPlus"))->Clone("RecoKaon");
1395 denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedKMinus"));
1399 if(cblast != -1){//add more centrality bins
1400 for(int i=cb;i<=cblast;i++){
1401 if(cb==i)denominatorParent = (TH2F*)((TH2F*) out2->FindObject(Form("EtNSimulatedProtonCB%i",i)))->Clone("RecoProton");
1402 else{denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedProtonCB%i",i)));}
1403 denominatorParent->Add((TH2F*) out2->FindObject(Form("EtNSimulatedAntiProtonCB%i",i)));
1407 denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedProton"))->Clone("RecoProton");
1408 denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedAntiProton"));
1412 denominatorParent = (TH2F*)((TH2F*) out2->FindObject("EtNSimulatedEPlus"))->Clone("RecoElectron");
1413 denominatorParent->Add((TH2F*) out2->FindObject("EtNSimulatedEMinus"));
1419 int lowbin = numeratorParent->GetYaxis()->FindBin(-cut+.001);//make sure we don't accv0entally get the wrong bin
1420 int highbin = numeratorParent->GetYaxis()->FindBin(cut-.001);
1421 //cout<<"Projecting from "<<numeratorParent->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<numeratorParent->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
1422 denominator = denominatorParent->ProjectionX(Form("garbage%s",name),lowbin,highbin);
1423 numerator = numeratorParent->ProjectionX(name,lowbin,highbin);
1426 int lowbin = denominatorParent->GetXaxis()->FindBin(cut);//make sure we don't accidentally get the wrong bin
1427 int highbin = denominatorParent->GetXaxis()->GetNbins();
1428 //cout<<"Projecting from "<<denominatorParent->GetXaxis()->GetBinLowEdge(lowbin)<<" to "<<denominatorParent->GetXaxis()->GetBinLowEdge(highbin+1)<<endl;
1429 numerator = numeratorParent->ProjectionY(name,lowbin,highbin);
1430 denominator = denominatorParent->ProjectionY(Form("denominator%s",name),lowbin,highbin);
1432 delete numeratorParent;
1433 delete denominatorParent;
1434 //numerator->Divide(denominator);
1435 TH1D *result = bayneseffdiv((TH1D*) numerator,(TH1D*)denominator,name);
1437 //result->Scale(0.5);
1438 result->SetYTitle("Efficiency");
1439 result->GetYaxis()->SetTitleOffset(0.8);
1440 result->GetXaxis()->SetTitleOffset(0.8);
1441 result->GetYaxis()->SetLabelSize(0.05);
1442 result->GetXaxis()->SetLabelSize(0.05);
1443 result->GetYaxis()->SetTitleSize(0.05);
1444 result->GetXaxis()->SetTitleSize(0.05);
1445 result->SetMarkerColor(color);
1446 result->SetLineColor(color);
1447 result->SetMarkerStyle(marker);
1448 //result->SetName(name);
1449 //result->Draw("e");
1452 delete numeratorParent;
1453 delete denominatorParent;
1454 result->SetName(name);
1459 void CorrEfficiencyPlots(bool TPC, char *prodname, char *shortprodname){
1461 gStyle->SetOptTitle(0);
1462 gStyle->SetOptStat(0);
1463 gStyle->SetOptFit(0);
1464 TCanvas *c = new TCanvas("c","c",600,400);
1465 c->SetTopMargin(0.02);
1466 c->SetRightMargin(0.02);
1467 c->SetBorderSize(0);
1470 c->SetBorderMode(0);
1471 c->SetFrameFillColor(0);
1472 c->SetFrameBorderMode(0);
1479 int phosmarker = 20;
1480 int emcalmarker = 24;
1481 float ptcut1 = 0.05;
1483 TH1D *PHOStotal = GetHistoEfficiency(0.12,"PHOStotal",0,colortotal,phosmarker,TPC,ITS);
1484 TH1D *PHOSpi = GetHistoEfficiency(0.12,"PHOSpi",1,colorpi,phosmarker,TPC,ITS);
1485 TH1D *PHOSp = GetHistoEfficiency(0.12,"PHOSp",2,colork,phosmarker,TPC,ITS);
1486 TH1D *PHOSk = GetHistoEfficiency(0.12,"PHOSk",3,colorp,phosmarker,TPC,ITS);
1487 if(!TPC){PHOStotal->GetXaxis()->SetRange(PHOStotal->GetXaxis()->FindBin(0.05),PHOStotal->GetXaxis()->FindBin(1.0));}
1488 else{PHOStotal->GetXaxis()->SetRange(PHOStotal->GetXaxis()->FindBin(0.15),PHOStotal->GetXaxis()->FindBin(3.0));}
1489 PHOStotal->SetMinimum(0.0);
1490 PHOStotal->SetMaximum(1.0);
1492 PHOSpi->Draw("same");
1493 PHOSp->Draw("same");
1494 PHOSk->Draw("same");
1495 TH1D *EMCALtotal = GetHistoEfficiency(0.7,"EMCALtotal",0,colortotal,emcalmarker,TPC,ITS);
1496 TH1D *EMCALpi = GetHistoEfficiency(0.7,"EMCALpi",1,colorpi,emcalmarker,TPC,ITS);
1497 TH1D *EMCALp = GetHistoEfficiency(0.7,"EMCALp",2,colork,emcalmarker,TPC,ITS);
1498 TH1D *EMCALk = GetHistoEfficiency(0.7,"EMCALk",3,colorp,emcalmarker,TPC,ITS);
1499 EMCALtotal->Draw("same");
1500 EMCALpi->Draw("same");
1501 EMCALp->Draw("same");
1502 EMCALk->Draw("same");
1505 TLegend *leg = new TLegend(0.22651,0.247312,0.370805,0.438172);
1506 leg->AddEntry(PHOStotal,"#pi,K,p");
1507 leg->AddEntry(PHOSpi,"#pi^{#pm}");
1508 leg->AddEntry(PHOSk,"K^{#pm}");
1509 leg->AddEntry(PHOSp,"p,#bar{p}");
1510 leg->SetFillStyle(0);
1511 leg->SetFillColor(0);
1512 leg->SetBorderSize(0);
1513 leg->SetTextSize(0.06);
1516 TLine *line = new TLine(0.2,0.0,0.2,1.0);
1518 line->SetLineWidth(3.0);
1519 //line->SetLineColor(TColor::kYellow);
1520 line->SetLineStyle(2);
1521 TLatex *tex = new TLatex(0.497269,0.0513196,prodname);
1522 tex->SetTextSize(0.0537634);
1524 TLatex *tex3 = new TLatex(1.16186,0.28348,"Closed symbols |#eta|<0.12 (PHOS)");
1525 tex3->SetTextSize(0.0537634);
1527 TLatex *tex4 = new TLatex(1.16186,0.213221,"Open symbols |#eta|<0.70 (EMCal)");
1528 tex4->SetTextSize(0.0537634);
1530 TLatex *tex2 = new TLatex(0.241937,0.448436,"Likely TPC cut-off 200 MeV/c");
1531 tex2->SetTextSize(0.0537634);
1535 sprintf(epsname,"pics/%s/CorrEfficiencyITSTPC.eps",shortprodname);
1536 sprintf(pngname,"pics/%s/CorrEfficiencyITSTPC.png",shortprodname);
1539 sprintf(epsname,"pics/%s/CorrEfficiencyTPC.eps",shortprodname);
1540 sprintf(pngname,"pics/%s/CorrEfficiencyTPC.png",shortprodname);
1544 sprintf(epsname,"pics/%s/CorrEfficiencyITS.eps",shortprodname);
1545 sprintf(pngname,"pics/%s/CorrEfficiencyITS.png",shortprodname);
1564 //==================================CorrBkgd=================================================
1565 TH1D *GetHistoCorrBkgd(float etacut,char *name, bool TPC,bool ispp,bool forSim){
1567 char *reweightname = reweightedNo;
1568 if(!forSim) reweightname = reweightedYes;
1569 char *myname = mynameITS;
1570 if(TPC) myname = mynameTPC;
1571 TH2F *signal = ((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiPlus",myname)))->Clone("signal");
1572 signal->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedPiMinus",myname)));
1573 signal->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedKMinus",myname)));
1574 signal->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedKPlus",myname)));
1575 signal->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedProton",myname)));
1576 signal->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sIdentifiedAntiProton",myname)));
1577 signal->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sUnidentifiedAssumingPion",myname)));
1579 //Et of all unidentified hadrons (plus hadrons identified as pions) calculated assuming their true mass
1580 TH2F *bkgd = ((TH2F*) out2->FindObject(Form("EtReconstructed%sMisidentifiedElectrons",myname)))->Clone("bkgd");
1581 bkgd->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sLambdaDaughters%s",myname,reweightname)));
1582 bkgd->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sAntiLambdaDaughters%s",myname,reweightname)));
1583 bkgd->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sK0SDaughters%s",myname,reweightname)));
1584 bkgd->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sXiDaughters",myname)));
1585 bkgd->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sAntiXiDaughters",myname)));
1586 bkgd->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sOmegaDaughters",myname)));
1587 bkgd->Add((TH2F*) out2->FindObject(Form("EtReconstructed%sAntiOmegaDaughters",myname)));
1588 int lowbin = bkgd->GetYaxis()->FindBin(-etacut+.001);//make sure we don't accidentally get the wrong bin
1589 int highbin = bkgd->GetYaxis()->FindBin(etacut-.001);
1590 //cout<<"Projecting from "<<bkgd->GetYaxis()->GetBinLowEdge(lowbin)<<" to "<<bkgd->GetYaxis()->GetBinLowEdge(highbin+1)<<endl;
1593 TH1D *denominator = signal->ProjectionX(name,lowbin,highbin);
1594 TH1D *numerator = bkgd->ProjectionX("numerator",lowbin,highbin);
1595 numerator->Divide(denominator);
1596 numerator->SetYTitle("Ratio of E_{T}^{background}/E_{T}^{real}");
1597 numerator->GetYaxis()->SetTitleOffset(1.2);
1601 numerator->SetName(name);
1606 void CorrBkgdPlots(char *prodname, char *shortprodname, bool TPC,bool ispp,bool forSim){
1607 gStyle->SetOptTitle(0);
1608 gStyle->SetOptStat(0);
1609 gStyle->SetOptFit(0);
1610 TCanvas *c = new TCanvas("c","c",500,400);
1611 c->SetTopMargin(0.04);
1612 c->SetRightMargin(0.04);
1613 c->SetBorderSize(0);
1616 c->SetBorderMode(0);
1617 c->SetFrameFillColor(0);
1618 c->SetFrameBorderMode(0);
1620 TH1D *PHOS = GetHistoCorrBkgd(0.12,"PHOS2",TPC,ispp,forSim);
1621 TH1D *EMCAL = GetHistoCorrBkgd(0.7,"EMCAL2",TPC,ispp,forSim);
1622 PHOS->SetMarkerColor(2);
1623 EMCAL->SetMarkerColor(4);
1624 PHOS->SetLineColor(2);
1625 EMCAL->SetLineColor(4);
1626 //EMCAL->SetLineWidth(2);
1627 //PHOS->SetAxisRange(0.0,4);
1628 PHOS->SetMaximum(0.2);
1629 PHOS->SetMinimum(0.0);
1630 PHOS->SetMarkerStyle(20);;
1631 EMCAL->SetMarkerStyle(21);
1632 // TF1 *funcEMCAL = new TF1("funcEMCAL","[0]+0.0*x",0.05,4);
1633 // funcEMCAL->SetParameter(0,0.95);
1634 // funcEMCAL->SetParLimits(0,0.9,1.1);
1635 //EMCAL->Fit(funcEMCAL);//,"","",0.05,3.0);
1636 // TF1 *funcPHOS = new TF1("funcPHOS","[0]+0.0*x",0.05,4);
1637 // funcPHOS->SetParameter(0,1.0);
1638 //PHOS->Fit(funcPHOS);
1639 if(TPC) PHOS->GetXaxis()->SetRange(PHOS->GetXaxis()->FindBin(0.0),PHOS->GetXaxis()->FindBin(4.));
1640 else{ PHOS->GetXaxis()->SetRange(PHOS->GetXaxis()->FindBin(0.0),PHOS->GetXaxis()->FindBin(1.));}
1642 EMCAL->Draw("same");
1643 TLatex *tex = new TLatex(0.161478,1.0835,prodname);
1644 tex->SetTextSize(0.0537634);
1646 TLegend *leg = new TLegend(0.145161,0.604839,0.40121,0.860215);
1647 leg->AddEntry(PHOS,"|#eta|<0.12");
1648 leg->AddEntry(EMCAL,"|#eta|<0.70");
1649 leg->SetFillStyle(0);
1650 leg->SetFillColor(0);
1651 leg->SetBorderSize(0);
1654 c->SaveAs(Form("pics/%s/bkgdTPC.eps",shortprodname));
1655 c->SaveAs(Form("pics/%s/bkgdTPC.png",shortprodname));
1658 c->SaveAs(Form("pics/%s/bkgdITS.eps",shortprodname));
1659 c->SaveAs(Form("pics/%s/bkgdITS.png",shortprodname));