]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/totEt/AliAnalysisHadEtCorrections.cxx
changed pid correction to a constant, added protection for division over zero to...
[u/mrichter/AliRoot.git] / PWG4 / totEt / AliAnalysisHadEtCorrections.cxx
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"
11 #include "TMath.h"
12 #include <iostream>
13 #include "Rtypes.h"
14 #include "TNamed.h"
15
16 using namespace std;
17
18 ClassImp(AliAnalysisHadEtCorrections);
19
20
21 AliAnalysisHadEtCorrections::AliAnalysisHadEtCorrections() : TNamed(),
22                                                              fEtaCut(0)
23                                                            ,fAcceptanceCorrectionFull(0)
24                                                            ,fAcceptanceCorrectionEMCAL(0)
25                                                            ,fAcceptanceCorrectionPHOS(0)
26                                                            ,fNeutralCorrection(0)
27                                                            ,fNotHadronicCorrection(0)
28                                                            ,fpTcutCorrectionTPC(0)
29                                                            ,fpTcutCorrectionITS(0)
30                                                            ,fNotIDConstTPC(0)
31                                                            ,fNotIDConstITS(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)
42                                                            ,fNotIDConstTPCLow(0)
43                                                            ,fNotIDConstITSLow(0)
44                                                            ,fNotIDConstTPCNoIDLow(0)
45                                                            ,fNotIDConstITSNoIDLow(0)
46                                                            ,fNotIDConstTPCHigh(0)
47                                                            ,fNotIDConstITSHigh(0)
48                                                            ,fNotIDConstTPCNoIDHigh(0)
49                                                            ,fNotIDConstITSNoIDHigh(0)
50                                                            ,fnotIDTPC(0)
51                                                            ,fnotIDITS(0)
52                                                            ,fnotIDNoID(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)
61                                                            ,fBackgroundTPC(0)
62                                                            ,fBackgroundITS(0)
63 {//default constructor
64   //This seems to solve a compiler error
65   cout<<"Creating new AliAnalysisHadEtCorrections"<<endl;
66
67 }
68 AliAnalysisHadEtCorrections::~AliAnalysisHadEtCorrections()
69 {//destructor
70   //Clear();
71     fnotIDTPC->Clear();
72     fnotIDITS->Clear();
73     fnotIDNoID->Clear();
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();
84     delete fnotIDTPC;
85     delete fnotIDITS;
86     delete fnotIDNoID;
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;
97 }
98 AliAnalysisHadEtCorrections::AliAnalysisHadEtCorrections(const AliAnalysisHadEtCorrections *g): TNamed(),
99                                                                                                 fEtaCut(g->fEtaCut)
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)
127                                                                                               ,fnotIDTPC(0)
128                                                                                               ,fnotIDITS(0)
129                                                                                               ,fnotIDNoID(0)
130                                                                                               ,fEfficiencyPionTPC(0)
131                                                                                               ,fEfficiencyKaonTPC(0)
132                                                                                               ,fEfficiencyProtonTPC(0)
133                                                                                               ,fEfficiencyHadronTPC(0)
134                                                                                               ,fEfficiencyPionITS(0)
135                                                                                               ,fEfficiencyKaonITS(0)
136                                                                                               ,fEfficiencyProtonITS(0)
137                                                                                               ,fEfficiencyHadronITS(0)
138                                                                                               ,fBackgroundTPC(0)
139                                                                                               ,fBackgroundITS(0)
140 {//copy constructor
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));
155 }
156
157
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;
163
164   //TString *type = new TString(mytype);
165
166   if(type.Contains("Full")) acceptance = fAcceptanceCorrectionFull;
167   if(type.Contains("EMCAL")) acceptance = fAcceptanceCorrectionEMCAL;
168   if(type.Contains("PHOS")) acceptance = fAcceptanceCorrectionPHOS;
169
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;
176     return correction;
177   }
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;
184     return correction;
185   }
186
187   if(totEt) neutral = fNotHadronicCorrection;
188   else{neutral = fNeutralCorrection;}
189   if(ptcut>0.12){ptcorr = fpTcutCorrectionTPC;}
190   else{ptcorr = fpTcutCorrectionITS;}
191
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;
198   return correction;
199
200 }
201 // AliAnalysisHadEtCorrections & operator = (const AliAnalysisHadEtCorrections & g) {
202
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;
219
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;
233 // }
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;}
238   return 1.0/eff;
239 }
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;}
244   return 1.0/eff;
245 }
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;}
250   return 1.0/eff;
251 }
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;}
256   return 1.0/eff;
257 }
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;}
262   return 1.0/eff;
263 }
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;}
268   return 1.0/eff;
269 }
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;}
274   return 1.0/eff;
275 }
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;}
280   return 1.0/eff;
281 }
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);
285   else{return 0.0;}
286 }
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);
290   else{return 0.0;}
291 }
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);
295   else{return 0.0;}
296 }