1 //Created by Christine Nattrass, Rebecca Scott, Irakli Martashvili
2 //University of Tennessee at Knoxville
3 // This is a container class for the correction factors for the hadronic
4 // component of transverse energy
5 // It is filled by the output of AliAnalysisTaskHadEt from spinning over Monte
6 // Carlo data (using AliAnalysisHadEtMonteCarlo)
7 //It is used by AliAnalysisTaskHadEt while spinning over reconstructed data
8 // (using AliAnalysisHadEtReconstructed)
9 //Please see https://twiki.cern.ch/twiki/bin/view/ALICE/ETCaloAnalysis
10 #include "AliAnalysisHadEtCorrections.h"
18 ClassImp(AliAnalysisHadEtCorrections);
21 AliAnalysisHadEtCorrections::AliAnalysisHadEtCorrections() : TNamed(),
23 ,fAcceptanceCorrectionFull(0)
24 ,fAcceptanceCorrectionEMCAL(0)
25 ,fAcceptanceCorrectionPHOS(0)
26 ,fNeutralCorrection(0)
27 ,fNotHadronicCorrection(0)
28 ,fpTcutCorrectionTPC(0)
29 ,fpTcutCorrectionITS(0)
32 ,fNotIDConstTPCNoID(0)
33 ,fNotIDConstITSNoID(0)
34 ,fNeutralCorrectionLow(0)
35 ,fNotHadronicCorrectionLow(0)
36 ,ffpTcutCorrectionTPCLow(0)
37 ,ffpTcutCorrectionITSLow(0)
38 ,fNeutralCorrectionHigh(0)
39 ,fNotHadronicCorrectionHigh(0)
40 ,ffpTcutCorrectionTPCHigh(0)
41 ,ffpTcutCorrectionITSHigh(0)
44 ,fNotIDConstTPCNoIDLow(0)
45 ,fNotIDConstITSNoIDLow(0)
46 ,fNotIDConstTPCHigh(0)
47 ,fNotIDConstITSHigh(0)
48 ,fNotIDConstTPCNoIDHigh(0)
49 ,fNotIDConstITSNoIDHigh(0)
53 ,fEfficiencyPionTPC(0)
54 ,fEfficiencyKaonTPC(0)
55 ,fEfficiencyProtonTPC(0)
56 ,fEfficiencyHadronTPC(0)
57 ,fEfficiencyPionITS(0)
58 ,fEfficiencyKaonITS(0)
59 ,fEfficiencyProtonITS(0)
60 ,fEfficiencyHadronITS(0)
63 {//default constructor
64 //This seems to solve a compiler error
65 cout<<"Creating new AliAnalysisHadEtCorrections"<<endl;
68 AliAnalysisHadEtCorrections::~AliAnalysisHadEtCorrections()
74 fEfficiencyPionTPC->Clear();
75 fEfficiencyKaonTPC->Clear();
76 fEfficiencyProtonTPC->Clear();
77 fEfficiencyHadronTPC->Clear();
78 fEfficiencyPionITS->Clear();
79 fEfficiencyKaonITS->Clear();
80 fEfficiencyProtonITS->Clear();
81 fEfficiencyHadronITS->Clear();
82 fBackgroundTPC->Clear();
83 fBackgroundITS->Clear();
87 delete fEfficiencyPionTPC;
88 delete fEfficiencyKaonTPC;
89 delete fEfficiencyProtonTPC;
90 delete fEfficiencyHadronTPC;
91 delete fEfficiencyPionITS;
92 delete fEfficiencyKaonITS;
93 delete fEfficiencyProtonITS;
94 delete fEfficiencyHadronITS;
95 delete fBackgroundTPC;
96 delete fBackgroundITS;
98 AliAnalysisHadEtCorrections::AliAnalysisHadEtCorrections(const AliAnalysisHadEtCorrections *g): TNamed(),
100 ,fAcceptanceCorrectionFull(g->fAcceptanceCorrectionFull)
101 ,fAcceptanceCorrectionEMCAL(g->fAcceptanceCorrectionEMCAL)
102 ,fAcceptanceCorrectionPHOS(g->fAcceptanceCorrectionPHOS)
103 ,fNeutralCorrection(g->fNeutralCorrection)
104 ,fNotHadronicCorrection(g->fNotHadronicCorrection)
105 ,fpTcutCorrectionTPC(g->fpTcutCorrectionTPC)
106 ,fpTcutCorrectionITS(g->fpTcutCorrectionITS)
107 ,fNotIDConstTPC(g->fNotIDConstTPC)
108 ,fNotIDConstITS(g->fNotIDConstITS)
109 ,fNotIDConstTPCNoID(g->fNotIDConstTPCNoID)
110 ,fNotIDConstITSNoID(g->fNotIDConstITSNoID)
111 ,fNeutralCorrectionLow(g->fNeutralCorrectionLow)
112 ,fNotHadronicCorrectionLow(g->fNotHadronicCorrectionLow)
113 ,ffpTcutCorrectionTPCLow(g->ffpTcutCorrectionTPCLow)
114 ,ffpTcutCorrectionITSLow(g->ffpTcutCorrectionITSLow)
115 ,fNeutralCorrectionHigh(g->fNeutralCorrectionHigh)
116 ,fNotHadronicCorrectionHigh(g->fNotHadronicCorrectionHigh)
117 ,ffpTcutCorrectionTPCHigh(g->ffpTcutCorrectionTPCHigh)
118 ,ffpTcutCorrectionITSHigh(g->ffpTcutCorrectionITSHigh)
119 ,fNotIDConstTPCLow(g->fNotIDConstTPCLow)
120 ,fNotIDConstITSLow(g->fNotIDConstITSLow)
121 ,fNotIDConstTPCNoIDLow(g->fNotIDConstTPCNoIDLow)
122 ,fNotIDConstITSNoIDLow(g->fNotIDConstITSNoIDLow)
123 ,fNotIDConstTPCHigh(g->fNotIDConstTPCHigh)
124 ,fNotIDConstITSHigh(g->fNotIDConstITSHigh)
125 ,fNotIDConstTPCNoIDHigh(g->fNotIDConstTPCNoIDHigh)
126 ,fNotIDConstITSNoIDHigh(g->fNotIDConstITSNoIDHigh)
130 ,fEfficiencyPionTPC(0)
131 ,fEfficiencyKaonTPC(0)
132 ,fEfficiencyProtonTPC(0)
133 ,fEfficiencyHadronTPC(0)
134 ,fEfficiencyPionITS(0)
135 ,fEfficiencyKaonITS(0)
136 ,fEfficiencyProtonITS(0)
137 ,fEfficiencyHadronITS(0)
141 //SetName(g->GetName());
142 fnotIDTPC = new TH1D(*(g->fnotIDTPC));
143 fnotIDITS = new TH1D(*(g->fnotIDITS));
144 fnotIDNoID = new TH1D(*(g->fnotIDNoID));
145 fEfficiencyPionTPC = new TH1D(*(g->fEfficiencyPionTPC));
146 fEfficiencyKaonTPC = new TH1D(*(g->fEfficiencyKaonTPC));
147 fEfficiencyProtonTPC = new TH1D(*(g->fEfficiencyProtonTPC));
148 fEfficiencyHadronTPC = new TH1D(*(g->fEfficiencyHadronTPC));
149 fEfficiencyPionITS = new TH1D(*(g->fEfficiencyPionITS));
150 fEfficiencyKaonITS = new TH1D(*(g->fEfficiencyKaonITS));
151 fEfficiencyProtonITS = new TH1D(*(g->fEfficiencyProtonITS));
152 fEfficiencyHadronITS = new TH1D(*(g->fEfficiencyHadronITS));
153 fBackgroundTPC = new TH1D(*(g->fBackgroundTPC));
154 fBackgroundITS = new TH1D(*(g->fBackgroundITS));
158 Float_t AliAnalysisHadEtCorrections::GetConstantCorrections(Bool_t totEt, Float_t ptcut, TString type) const {//Get the correction values that are not pt dependent
159 Float_t acceptance = 0.0;
160 Float_t neutral = 0.0;
161 Float_t ptcorr = 0.0;
162 float correction = 0.0;
164 //TString *type = new TString(mytype);
166 if(type.Contains("Full")) acceptance = fAcceptanceCorrectionFull;
167 if(type.Contains("EMCAL")) acceptance = fAcceptanceCorrectionEMCAL;
168 if(type.Contains("PHOS")) acceptance = fAcceptanceCorrectionPHOS;
170 if(type.Contains("High")){//high bound
171 if(totEt) neutral = fNotHadronicCorrectionHigh;
172 else{neutral = fNeutralCorrectionHigh;}
173 if(ptcut>0.12){ptcorr = ffpTcutCorrectionTPCHigh;}
174 else{ptcorr = ffpTcutCorrectionITSHigh;}
175 cout<<"Setting correction factor to "<<correction<<endl;
178 if(type.Contains("Low")){//high bound
179 if(totEt) neutral = fNotHadronicCorrectionLow;
180 else{neutral = fNeutralCorrectionLow;}
181 if(ptcut>0.12){ptcorr = ffpTcutCorrectionTPCLow;}
182 else{ptcorr = ffpTcutCorrectionITSLow;}
183 cout<<"Setting correction factor to "<<correction<<endl;
187 if(totEt) neutral = fNotHadronicCorrection;
188 else{neutral = fNeutralCorrection;}
189 if(ptcut>0.12){ptcorr = fpTcutCorrectionTPC;}
190 else{ptcorr = fpTcutCorrectionITS;}
192 correction = acceptance*neutral*ptcorr;
193 cout<<"Setting correction factor for ";
194 if(totEt) cout<<"total et";
195 else{cout<<"hadronic et";}
196 cout<<" with the pt cut off "<<ptcut<<" for "<<type<<" acceptance to "<<correction<<endl;
197 //cout<<"Acceptance "<<acceptance<<" neutral "<<neutral<<" ptcorr "<<ptcorr<<endl;
201 // AliAnalysisHadEtCorrections & operator = (const AliAnalysisHadEtCorrections & g) {
203 // fEtaCut=g->fEtaCut;
204 // fAcceptanceCorrectionFull=g->fAcceptanceCorrectionFull;
205 // fAcceptanceCorrectionEMCAL=g->fAcceptanceCorrectionEMCAL;
206 // fAcceptanceCorrectionPHOS=g->fAcceptanceCorrectionPHOS;
207 // fNeutralCorrection=g->fNeutralCorrection;
208 // fNotHadronicCorrection=g->fNotHadronicCorrection;
209 // fpTcutCorrectionTPC=g->fpTcutCorrectionTPC;
210 // fpTcutCorrectionITS=g->fpTcutCorrectionITS;
211 // fNeutralCorrectionLow=g->fNeutralCorrectionLow;
212 // fNotHadronicCorrectionLow=g->fNotHadronicCorrectionLow;
213 // ffpTcutCorrectionTPCLow=g->ffpTcutCorrectionTPCLow;
214 // ffpTcutCorrectionITSLow=g->ffpTcutCorrectionITSLow;
215 // fNeutralCorrectionHigh=g->fNeutralCorrectionHigh;
216 // fNotHadronicCorrectionHigh=g->fNotHadronicCorrectionHigh;
217 // ffpTcutCorrectionTPCHigh=g->ffpTcutCorrectionTPCHigh;
218 // ffpTcutCorrectionITSHigh=g->ffpTcutCorrectionITSHigh;
220 // fnotIDTPC = g->fnotIDTPC;
221 // fnotIDITS = g->fnotIDITS;
222 // fnotIDNoID = g->fnotIDNoID;
223 // fEfficiencyPionTPC = g->fEfficiencyPionTPC;
224 // fEfficiencyKaonTPC = g->fEfficiencyKaonTPC;
225 // fEfficiencyProtonTPC = g->fEfficiencyProtonTPC;
226 // fEfficiencyHadronTPC = g->fEfficiencyHadronTPC;
227 // fEfficiencyPionITS = g->fEfficiencyPionITS;
228 // fEfficiencyKaonITS = g->fEfficiencyKaonITS;
229 // fEfficiencyProtonITS = g->fEfficiencyProtonITS;
230 // fEfficiencyHadronITS = g->fEfficiencyHadronITS;
231 // fBackgroundTPC = g->fBackgroundTPC;
232 // fBackgroundITS = g->fBackgroundITS;
234 Float_t AliAnalysisHadEtCorrections::GetTPCEfficiencyCorrectionPion(const float pT){//Get the efficiency for reconstructing a pion in the TPC
235 if(!fEfficiencyPionTPC){cerr<<"No histogram fEfficiencyPionTPC!"<<endl; return -1.0;}
236 float eff = fEfficiencyPionTPC->GetBinContent(fEfficiencyPionTPC->FindBin(pT));
237 if(eff<=0.0){cerr<<"Efficiency is zero!"<<endl; return 0.0;}
240 Float_t AliAnalysisHadEtCorrections::GetTPCEfficiencyCorrectionKaon(const float pT){//Get the efficiency for reconstructing a kaon in the TPC
241 if(!fEfficiencyKaonTPC){cerr<<"No histogram fEfficiencyKaonTPC!"<<endl; return -1.0;}
242 float eff = fEfficiencyKaonTPC->GetBinContent(fEfficiencyKaonTPC->FindBin(pT));
243 if(eff<=0.0){cerr<<"Efficiency is zero!"<<endl; return 0.0;}
246 Float_t AliAnalysisHadEtCorrections::GetTPCEfficiencyCorrectionProton(const float pT){//Get the efficiency for reconstructing a proton in the TPC
247 if(!fEfficiencyProtonTPC){cerr<<"No histogram fEfficiencyProtonTPC!"<<endl; return -1.0;}
248 float eff = fEfficiencyProtonTPC->GetBinContent(fEfficiencyProtonTPC->FindBin(pT));
249 if(eff<=0.0){cerr<<"Efficiency is zero!"<<endl; return 0.0;}
252 Float_t AliAnalysisHadEtCorrections::GetTPCEfficiencyCorrectionHadron(const float pT){//Get the efficiency for reconstructing a hadron in the TPC
253 if(!fEfficiencyHadronTPC){cerr<<"No histogram fEfficiencyHadronTPC!"<<endl; return -1.0;}
254 float eff = fEfficiencyHadronTPC->GetBinContent(fEfficiencyHadronTPC->FindBin(pT));
255 if(eff<=0.0){cerr<<"Efficiency is zero!"<<endl; return 0.0;}
258 Float_t AliAnalysisHadEtCorrections::GetITSEfficiencyCorrectionPion(const float pT){//Get the efficiency for reconstructing a pion in the ITS
259 if(!fEfficiencyPionITS){cerr<<"No histogram fEfficiencyPionITS!"<<endl; return -1.0;}
260 float eff = fEfficiencyPionITS->GetBinContent(fEfficiencyPionITS->FindBin(pT));
261 if(eff<=0.0){cerr<<"Efficiency is zero!"<<endl; return 0.0;}
264 Float_t AliAnalysisHadEtCorrections::GetITSEfficiencyCorrectionKaon(const float pT){//Get the efficiency for reconstructing a kaon in the ITS
265 if(!fEfficiencyKaonITS){cerr<<"No histogram fEfficiencyKaonITS!"<<endl; return -1.0;}
266 float eff = fEfficiencyKaonITS->GetBinContent(fEfficiencyKaonITS->FindBin(pT));
267 if(eff<=0.0){cerr<<"Efficiency is zero!"<<endl; return 0.0;}
270 Float_t AliAnalysisHadEtCorrections::GetITSEfficiencyCorrectionProton(const float pT){//Get the efficiency for reconstructing a proton in the ITS
271 if(!fEfficiencyProtonITS){cerr<<"No histogram fEfficiencyProtonITS!"<<endl; return -1.0;}
272 float eff = fEfficiencyProtonITS->GetBinContent(fEfficiencyProtonITS->FindBin(pT));
273 if(eff<=0.0){cerr<<"Efficiency is zero!"<<endl; return 0.0;}
276 Float_t AliAnalysisHadEtCorrections::GetITSEfficiencyCorrectionHadron(const float pT){//Get the efficiency for reconstructing a hadron in the ITS
277 if(!fEfficiencyHadronITS){cerr<<"No histogram fEfficiencyHadronITS!"<<endl; return -1.0;}
278 float eff = fEfficiencyHadronITS->GetBinContent(fEfficiencyHadronITS->FindBin(pT));
279 if(eff<=0.0){cerr<<"Efficiency is zero!"<<endl; return 0.0;}
282 Float_t AliAnalysisHadEtCorrections::GetNotIDCorrectionTPC(const float pT){//get correction for unidentified particles in the TPC
283 Float_t val = fnotIDTPC->GetBinContent(fnotIDTPC->FindBin(pT));
284 if(val>0.0) return 1.0/(val);
287 Float_t AliAnalysisHadEtCorrections::GetNotIDCorrectionITS(const float pT){//Get correction for unidentified particles in the ITS
288 Float_t val = fnotIDITS->GetBinContent(fnotIDITS->FindBin(pT));
289 if(val>0.0) return 1.0/(val);
292 Float_t AliAnalysisHadEtCorrections::GetNotIDCorrectionNoPID(const float pT){//Get correction for particles in the case that there is no particle identification
293 Float_t val = fnotIDNoID->GetBinContent(fnotIDNoID->FindBin(pT));
294 if(val>0.0) return 1.0/(val);