1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies, charged hadrons
3 // Base class for ESD analysis
4 // - reconstruction output
7 //Created by Christine Nattrass, Rebecca Scott, Irakli Martashvili
8 //University of Tennessee at Knoxville
9 //_________________________________________________________________________
13 #include <TInterpreter.h>
14 #include "AliAnalysisHadEtReconstructed.h"
15 #include "AliAnalysisEtCuts.h"
16 #include "AliESDtrack.h"
17 #include "AliESDCaloCluster.h"
18 #include "AliVEvent.h"
19 #include "AliESDEvent.h"
20 #include "AliESDtrackCuts.h"
21 #include "AliESDpid.h"
22 #include "AliVParticle.h"
24 #include "AliAnalysisHadEtCorrections.h"
27 #include "AliAnalysisEtCommon.h"
28 #include "AliAnalysisHadEt.h"
29 #include "AliCentrality.h"
31 #include "AliPIDResponse.h"
32 #include "AliTPCPIDResponse.h"
33 #include "AliInputEventHandler.h"
34 #include "AliAnalysisManager.h"
35 #include "AliPWG0Helper.h"
39 ClassImp(AliAnalysisHadEtReconstructed);
42 AliAnalysisHadEtReconstructed::AliAnalysisHadEtReconstructed() :
45 ,fConfigFile("ConfigHadEtAnalysis.C")
46 ,fCorrTotEtFullAcceptanceTPC(0)
47 ,fCorrTotEtFullAcceptanceITS(0)
48 ,fCorrHadEtFullAcceptanceTPC(0)
49 ,fCorrHadEtFullAcceptanceITS(0)
50 ,fCorrPiKPEtFullAcceptanceTPC(0)
51 ,fCorrPiKPEtFullAcceptanceITS(0)
52 ,fCorrTotEtEMCALAcceptanceTPC(0)
53 ,fCorrTotEtEMCALAcceptanceITS(0)
54 ,fCorrHadEtEMCALAcceptanceTPC(0)
55 ,fCorrHadEtEMCALAcceptanceITS(0)
56 ,fCorrTotEtPHOSAcceptanceTPC(0)
57 ,fCorrTotEtPHOSAcceptanceITS(0)
58 ,fCorrHadEtPHOSAcceptanceTPC(0)
59 ,fCorrHadEtPHOSAcceptanceITS(0)
60 ,fCorrectedHadEtFullAcceptanceTPCNoPID(0)
61 ,fCorrectedHadEtFullAcceptanceITSNoPID(0)
62 ,fCorrectedHadEtEMCALAcceptanceTPCNoPID(0)
63 ,fCorrectedHadEtEMCALAcceptanceITSNoPID(0)
64 ,fCorrectedHadEtPHOSAcceptanceTPCNoPID(0)
65 ,fCorrectedHadEtPHOSAcceptanceITSNoPID(0)
66 ,fCorrectedHadEtFullAcceptanceTPC(0)
67 ,fCorrectedHadEtFullAcceptanceITS(0)
68 ,fCorrectedHadEtFullAcceptanceTPCAssumingPion(0)
69 ,fCorrectedHadEtFullAcceptanceITSAssumingPion(0)
70 ,fCorrectedHadEtFullAcceptanceTPCAssumingProton(0)
71 ,fCorrectedHadEtFullAcceptanceITSAssumingProton(0)
72 ,fCorrectedHadEtFullAcceptanceTPCAssumingKaon(0)
73 ,fCorrectedHadEtFullAcceptanceITSAssumingKaon(0)
74 ,fCorrectedHadEtEMCALAcceptanceTPC(0)
75 ,fCorrectedHadEtEMCALAcceptanceITS(0)
76 ,fCorrectedHadEtPHOSAcceptanceTPC(0)
77 ,fCorrectedHadEtPHOSAcceptanceITS(0)
78 ,fRawEtFullAcceptanceTPC(0)
79 ,fRawEtFullAcceptanceITS(0)
80 ,fRawEtEMCALAcceptanceTPC(0)
81 ,fRawEtEMCALAcceptanceITS(0)
82 ,fRawEtPHOSAcceptanceTPC(0)
83 ,fRawEtPHOSAcceptanceITS(0)
84 ,fRawEtFullAcceptanceTPCNoPID(0)
85 ,fRawEtFullAcceptanceITSNoPID(0)
86 ,fRawEtEMCALAcceptanceTPCNoPID(0)
87 ,fRawEtEMCALAcceptanceITSNoPID(0)
88 ,fRawEtPHOSAcceptanceTPCNoPID(0)
89 ,fRawEtPHOSAcceptanceITSNoPID(0)
92 ,kDoTriggerChecksOnly(0)
96 AliAnalysisHadEtReconstructed::~AliAnalysisHadEtReconstructed()
101 Int_t AliAnalysisHadEtReconstructed::AnalyseEvent(AliVEvent* ev, Int_t eventtype)
102 { // analyse ESD event
103 if(kDoTriggerChecksOnly){return 1;}//In this case we are just after trigger efficiencies and don't care about the ET reconstructed.
104 if(kDoTriggerChecks && !kIsOfflineV0AND){return 1;}//In this case we are just after trigger efficiencies and don't care about the ET reconstructed.
107 AliFatal("ERROR: Event does not exist");
111 AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev);
113 AliFatal("ERROR: ESD Event does not exist");
117 fGoodEvent = kTRUE;//for p+p collisions if we made it this far we have a good event
118 if(fDataSet==20100||fDataSet==2011){//If this is Pb+Pb or pPb
119 // AliCentrality *centrality = realEvent->GetCentrality();
120 // if(fNCentBins<21) fCentBin= centrality->GetCentralityClass10(fCentralityMethod);
121 // else{ fCentBin= centrality->GetCentralityClass5(fCentralityMethod);}
122 AliCentrality *centrality = realEvent->GetCentrality();
123 fCentBin = GetCentralityBin(fNCentBins, centrality);
126 fCentBin = 19;//For pPb we don't want to throw these events out but there is no CB 19
129 fGoodEvent = kFALSE;//but for Pb+Pb events we don't want to count events where we did not find a centrality
134 // AliESDpid *pID = new AliESDpid();
135 // pID->MakePID(realEvent);
136 TString *strTPC = new TString("TPC");
137 TString *strITS = new TString("ITS");
138 TString *strTPCITS = new TString("TPCITS");
139 for(Int_t cutset=0;cutset<2;cutset++){
141 TString *cutName = NULL;
142 TObjArray* list = NULL;
146 list = fEsdtrackCutsITSTPC->GetAcceptedTracks(realEvent);
151 list = fEsdtrackCutsITS->GetAcceptedTracks(realEvent);
155 list = fEsdtrackCutsTPC->GetAcceptedTracks(realEvent);
158 cerr<<"Error: cannot fill histograms!"<<endl;
161 Int_t nGoodTracks = list->GetEntries();
162 for (Int_t iTrack = 0; iTrack < nGoodTracks; iTrack++)
166 AliESDtrack *track = dynamic_cast<AliESDtrack*> (list->At(iTrack));
169 Printf("ERROR: Could not get track %d", iTrack);
173 if(TMath::Abs(track->Eta())>fCorrections->GetEtaCut()) continue;
174 Float_t nSigmaPion,nSigmaProton,nSigmaKaon,nSigmaElectron;
175 Float_t nSigmaPionUnsigned,nSigmaProtonUnsigned,nSigmaKaonUnsigned,nSigmaElectronUnsigned;
176 // pID->MakeTPCPID(track);
177 // pID->MakeITSPID(track);
178 //if(!fPIDResponse) cout<<"Uh-oh! No PID Response!"<<endl;
180 nSigmaPion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kPion));
181 nSigmaProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kProton));
182 nSigmaKaon =TMath::Abs( fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon));
183 nSigmaElectron =TMath::Abs( fPIDResponse->NumberOfSigmasTPC(track, AliPID::kElectron));
185 nSigmaPionUnsigned = fPIDResponse->NumberOfSigmasTPC(track, AliPID::kPion);
186 nSigmaProtonUnsigned = fPIDResponse->NumberOfSigmasTPC(track, AliPID::kProton);
187 nSigmaKaonUnsigned = fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
188 nSigmaElectronUnsigned = fPIDResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
190 // nSigmaPion = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kPion));
191 // nSigmaProton = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kProton));
192 // nSigmaKaon = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kKaon));
193 // nSigmaElectron = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kElectron));
196 nSigmaPion = TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kPion));
197 nSigmaProton = TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kProton));
198 nSigmaKaon = TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kKaon));
199 nSigmaElectron = TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kElectron));
201 nSigmaPionUnsigned = fPIDResponse->NumberOfSigmasITS(track, AliPID::kPion);
202 nSigmaProtonUnsigned = fPIDResponse->NumberOfSigmasITS(track, AliPID::kProton);
203 nSigmaKaonUnsigned = fPIDResponse->NumberOfSigmasITS(track, AliPID::kKaon);
204 nSigmaElectronUnsigned = fPIDResponse->NumberOfSigmasITS(track, AliPID::kElectron);
205 // nSigmaPion = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kPion));
206 // nSigmaProton = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kProton));
207 // nSigmaKaon = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kKaon));
208 // nSigmaElectron = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kElectron));
210 //cout<<"Nsigma pion "<<nSigmaPion<<" proton "<<nSigmaProton<<" kaon "<<nSigmaKaon<<" electron "<<nSigmaElectron<<endl;
211 // bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
212 // bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
213 // bool isKaon = (nSigmaPion>3.0 && nSigmaProton>2.0 && nSigmaKaon<2.0);
214 // bool isProton = (nSigmaPion>3.0 && nSigmaProton<2.0 && nSigmaKaon>2.0);
215 bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
216 bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
217 bool isKaon = (nSigmaPion>3.0 && nSigmaProton>3.0 && nSigmaKaon<3.0 && track->Pt()<0.45);
218 bool isProton = (nSigmaPion>3.0 && nSigmaProton<3.0 && nSigmaKaon>3.0 && track->Pt()<0.9);
220 FillHisto2D(Form("dEdxDataNSigmaPionAll%s",cutName->Data()),track->P(),nSigmaPionUnsigned,1.0);
221 FillHisto2D(Form("dEdxDataNSigmaKaonAll%s",cutName->Data()),track->P(),nSigmaKaonUnsigned,1.0);
222 FillHisto2D(Form("dEdxDataNSigmaProtonAll%s",cutName->Data()),track->P(),nSigmaProtonUnsigned,1.0);
223 FillHisto2D(Form("dEdxDataNSigmaElectronAll%s",cutName->Data()),track->P(),nSigmaElectronUnsigned,1.0);
225 bool unidentified = (!isProton && !isKaon && !isElectron && !isPion);
226 if(cutset==1){//ITS dE/dx identification requires tighter cuts on the tracks and we don't gain much from that so we won't do it
233 Float_t dEdx = track->GetTPCsignal();
234 if(cutset==1) dEdx = track->GetITSsignal();
235 FillHisto2D(Form("dEdxDataAll%s",cutName->Data()),track->P(),dEdx,1.0);
237 bool inPHOS = IsInPHOS(track);
238 bool inEMCAL = IsInEMCAL(track);
240 Float_t corrBkgd=0.0;
241 Float_t corrNotID=0.0;
242 Float_t corrNoID = fCorrections->GetNotIDCorrectionNoPID(track->Pt());
243 Float_t corrEff = 0.0;
244 Float_t corrEffNoID = 0.0;
246 corrBkgd = fCorrections->GetBackgroundCorrectionTPC(track->Pt());
247 corrEffNoID = fCorrections->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
248 corrNotID = fCorrections->GetNotIDConstCorrectionTPC();
249 corrNoID = fCorrections->GetNotIDConstCorrectionTPCNoID();
252 corrBkgd = fCorrections->GetBackgroundCorrectionITS(track->Pt());
253 corrEffNoID = fCorrections->GetITSEfficiencyCorrectionHadron(track->Pt(),fCentBin);
254 corrNotID = fCorrections->GetNotIDConstCorrectionITS();
255 corrNoID = fCorrections->GetNotIDConstCorrectionITSNoID();
257 if(fDataSet==20100||fDataSet==2011){
258 FillHisto2D("fbkgdVsCentralityBin",fCentBin,corrBkgd,1.0);
259 FillHisto2D("fnotIDVsCentralityBin",fCentBin,corrNotID,1.0);
260 FillHisto2D("fpTcutVsCentralityBin",fCentBin,fCorrections->GetpTCutCorrectionTPC(),1.0);
261 if(fCorrHadEtFullAcceptanceTPC>0.0) FillHisto2D("fneutralVsCentralityBin",fCentBin,1.0/fCorrHadEtFullAcceptanceTPC,1.0);
262 if(fCorrections->GetNeutralCorrection()>0.0) FillHisto2D("ConstantCorrectionsVsCentralityBin",fCentBin,1.0/fCorrections->GetNeutralCorrection(),1.0);
265 Float_t etNoID = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
266 Float_t etpartialcorrected = 0.0;
267 Float_t etpartialcorrectedPion = 0.0;
268 Float_t etpartialcorrectedKaon = 0.0;
269 Float_t etpartialcorrectedProton = 0.0;
270 Float_t etpartialcorrectedNoID = corrNoID*corrBkgd*corrEffNoID*etNoID;
271 FillHisto2D(Form("EtDataRaw%sNoID",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrectedNoID);
274 FillHisto2D(Form("dEdxDataPion%s",cutName->Data()),track->P(),dEdx,1.0);
275 FillHisto2D(Form("dEdxDataNSigmaPion%s",cutName->Data()),track->P(),nSigmaPionUnsigned,1.0);
276 et = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
277 if(cutset==0){corrEff = fCorrections->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin);}
278 etpartialcorrected = et*corrBkgd*corrEff*corrNotID;
279 if(corrEff>0.0&&(fDataSet==20100||fDataSet==2011))FillHisto2D("feffPionVsCentralityBin",fCentBin,1.0/corrEff,1.0);
280 if(track->Charge()>0.0){
281 FillHisto2D(Form("EtDataRaw%sPiPlus",cutName->Data()),track->Pt(),track->Eta(),et);
282 FillHisto2D(Form("EtDataCorrected%sPiPlus",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
285 FillHisto2D(Form("EtDataRaw%sPiMinus",cutName->Data()),track->Pt(),track->Eta(),et);
286 FillHisto2D(Form("EtDataCorrected%sPiMinus",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
290 FillHisto2D(Form("dEdxDataKaon%s",cutName->Data()),track->P(),dEdx,1.0);
291 FillHisto2D(Form("dEdxDataNSigmaKaon%s",cutName->Data()),track->P(),nSigmaKaonUnsigned,1.0);
292 et = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
293 if(cutset==0){corrEff = fCorrections->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin);}
294 etpartialcorrected = et*corrBkgd*corrEff*corrNotID;
295 if(corrEff>0.0&&(fDataSet==20100||fDataSet==2011))FillHisto2D("feffKaonVsCentralityBin",fCentBin,1.0/corrEff,1.0);
297 if(track->Charge()>0.0){
298 FillHisto2D(Form("EtDataRaw%sKPlus",cutName->Data()),track->Pt(),track->Eta(),et);
299 FillHisto2D(Form("EtDataCorrected%sKPlus",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
302 FillHisto2D(Form("EtDataRaw%sKMinus",cutName->Data()),track->Pt(),track->Eta(),et);
303 FillHisto2D(Form("EtDataCorrected%sKMinus",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
307 FillHisto2D(Form("dEdxDataProton%s",cutName->Data()),track->P(),dEdx,1.0);
308 FillHisto2D(Form("dEdxDataNSigmaProton%s",cutName->Data()),track->P(),nSigmaProtonUnsigned,1.0);
309 et = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
310 if(cutset==0){corrEff = fCorrections->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin);}
311 etpartialcorrected = et*corrBkgd*corrEff*corrNotID;
312 if(corrEff>0.0&&(fDataSet==20100||fDataSet==2011))FillHisto2D("feffProtonVsCentralityBin",fCentBin,1.0/corrEff,1.0);
314 if(track->Charge()>0.0){
315 FillHisto2D(Form("EtDataRaw%sProton",cutName->Data()),track->Pt(),track->Eta(),et);
316 FillHisto2D(Form("EtDataCorrected%sProton",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
319 FillHisto2D(Form("EtDataRaw%sAntiProton",cutName->Data()),track->Pt(),track->Eta(),et);
320 FillHisto2D(Form("EtDataCorrected%sAntiProton",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
324 FillHisto2D(Form("dEdxDataElectron%s",cutName->Data()),track->P(),dEdx,1.0);
325 FillHisto2D(Form("dEdxDataNSigmaElectron%s",cutName->Data()),track->P(),nSigmaElectronUnsigned,1.0);
328 if(isPion) cerr<<"I should not be here!! AliAnalysisHadEtReconstructed 273"<<endl;
329 FillHisto2D(Form("dEdxDataUnidentified%s",cutName->Data()),track->P(),dEdx,1.0);
330 et = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
331 Float_t etProton = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
332 Float_t etKaon = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
333 if(corrEff>0.0&&(fDataSet==20100||fDataSet==2011))FillHisto2D("feffHadronVsCentralityBin",fCentBin,1.0/corrEff,1.0);
334 etpartialcorrected = et*corrBkgd*corrEffNoID*corrNotID;
335 etpartialcorrectedPion = et*corrBkgd*corrEffNoID;
336 etpartialcorrectedProton = etProton*corrBkgd*corrEffNoID;
337 etpartialcorrectedKaon = etKaon*corrBkgd*corrEffNoID;
338 FillHisto2D(Form("EtDataCorrected%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
341 etpartialcorrectedPion = etpartialcorrected;
342 etpartialcorrectedKaon = etpartialcorrected;
343 etpartialcorrectedProton = etpartialcorrected;
346 etpartialcorrected = etpartialcorrectedNoID;//Not using PID for ITS
348 AddEt(et,etNoID,etpartialcorrected,etpartialcorrectedPion,etpartialcorrectedProton,etpartialcorrectedKaon,etpartialcorrectedNoID,track->Pt(),isTPC,inPHOS,inEMCAL);
354 Int_t nondiff = 0;//(Int_t) AliPWG0Helper::kND;
355 Int_t doublediff = 0;//(Int_t) AliPWG0Helper::kDD;
356 Int_t singlediff = 0;//(Int_t) AliPWG0Helper::kSD;
357 if(fDataSet!=20100 && fDataSet!=2011){
358 nondiff = (Int_t) AliPWG0Helper::kND;
359 doublediff = (Int_t) AliPWG0Helper::kDD;
360 singlediff = (Int_t) AliPWG0Helper::kSD;
362 // cout<<"event type "<<eventtype<<" nondiff event type "<<nondiff<<" data set "<<fDataSet<<" good event "<<fGoodEvent<<endl;
363 if((eventtype == nondiff|| fDataSet==20100 || fDataSet==2011) && fGoodEvent){
364 //cout<<"Filling "<<endl;
365 FillHisto1D("RecoHadEtFullAcceptanceTPCND",GetCorrectedHadEtFullAcceptanceTPC(),1.0);
366 FillHisto1D("RecoPiKPEtFullAcceptanceTPCND",GetCorrectedPiKPEtFullAcceptanceTPC(),1.0);
367 FillHisto1D("RecoTotEtFullAcceptanceTPCND",GetCorrectedTotEtFullAcceptanceTPC(),1.0);
368 FillHisto1D("RecoHadEtFullAcceptanceITSND",GetCorrectedHadEtFullAcceptanceITS(),1.0);
369 FillHisto1D("RecoPiKPEtFullAcceptanceITSND",GetCorrectedPiKPEtFullAcceptanceITS(),1.0);
370 FillHisto1D("RecoTotEtFullAcceptanceITSND",GetCorrectedTotEtFullAcceptanceITS(),1.0);
371 FillHisto1D("RecoHadEtFullAcceptanceTPCNoPIDND",GetCorrectedHadEtFullAcceptanceTPCNoPID(),1.0);
372 FillHisto1D("RecoPiKPEtFullAcceptanceTPCNoPIDND",GetCorrectedPiKPEtFullAcceptanceTPCNoPID(),1.0);
373 FillHisto1D("RecoTotEtFullAcceptanceTPCNoPIDND",GetCorrectedTotEtFullAcceptanceTPCNoPID(),1.0);
374 FillHisto1D("RecoHadEtFullAcceptanceITSNoPIDND",GetCorrectedHadEtFullAcceptanceITSNoPID(),1.0);
375 FillHisto1D("RecoPiKPEtFullAcceptanceITSNoPIDND",GetCorrectedPiKPEtFullAcceptanceITSNoPID(),1.0);
376 FillHisto1D("RecoTotEtFullAcceptanceITSNoPIDND",GetCorrectedTotEtFullAcceptanceITSNoPID(),1.0);
378 FillHisto1D("RecoRawEtFullAcceptanceTPCND",GetRawEtFullAcceptanceTPC(),1.0);
379 FillHisto1D("RecoRawEtFullAcceptanceTPCNoPIDND",GetRawEtFullAcceptanceTPCNoPID(),1.0);
380 FillHisto1D("RecoRawEtFullAcceptanceITSND",GetRawEtFullAcceptanceITS(),1.0);
381 FillHisto1D("RecoRawEtFullAcceptanceITSNoPIDND",GetRawEtFullAcceptanceITSNoPID(),1.0);
384 if(eventtype == doublediff){
385 FillHisto1D("RecoHadEtFullAcceptanceTPCDD",GetCorrectedHadEtFullAcceptanceTPC(),1.0);
386 FillHisto1D("RecoPiKPEtFullAcceptanceTPCDD",GetCorrectedPiKPEtFullAcceptanceTPC(),1.0);
387 FillHisto1D("RecoTotEtFullAcceptanceTPCDD",GetCorrectedTotEtFullAcceptanceTPC(),1.0);
388 FillHisto1D("RecoPiKPEtFullAcceptanceITSDD",GetCorrectedPiKPEtFullAcceptanceITS(),1.0);
389 FillHisto1D("RecoHadEtFullAcceptanceITSDD",GetCorrectedHadEtFullAcceptanceITS(),1.0);
390 FillHisto1D("RecoTotEtFullAcceptanceITSDD",GetCorrectedTotEtFullAcceptanceITS(),1.0);
391 FillHisto1D("RecoHadEtFullAcceptanceTPCNoPIDDD",GetCorrectedHadEtFullAcceptanceTPCNoPID(),1.0);
392 FillHisto1D("RecoPiKPEtFullAcceptanceTPCNoPIDDD",GetCorrectedPiKPEtFullAcceptanceTPCNoPID(),1.0);
393 FillHisto1D("RecoTotEtFullAcceptanceTPCNoPIDDD",GetCorrectedTotEtFullAcceptanceTPCNoPID(),1.0);
394 FillHisto1D("RecoHadEtFullAcceptanceITSNoPIDDD",GetCorrectedHadEtFullAcceptanceITSNoPID(),1.0);
395 FillHisto1D("RecoPiKPEtFullAcceptanceITSNoPIDDD",GetCorrectedPiKPEtFullAcceptanceITSNoPID(),1.0);
396 FillHisto1D("RecoTotEtFullAcceptanceITSNoPIDDD",GetCorrectedTotEtFullAcceptanceITSNoPID(),1.0);
397 FillHisto1D("RecoRawEtFullAcceptanceTPCDD",GetRawEtFullAcceptanceTPC(),1.0);
398 FillHisto1D("RecoRawEtFullAcceptanceTPCNoPIDDD",GetRawEtFullAcceptanceTPCNoPID(),1.0);
399 FillHisto1D("RecoRawEtFullAcceptanceITSDD",GetRawEtFullAcceptanceITS(),1.0);
400 FillHisto1D("RecoRawEtFullAcceptanceITSNoPIDDD",GetRawEtFullAcceptanceITSNoPID(),1.0);//ND
402 if(eventtype == singlediff){
403 FillHisto1D("RecoPiKPEtFullAcceptanceTPCSD",GetCorrectedPiKPEtFullAcceptanceTPC(),1.0);
404 FillHisto1D("RecoHadEtFullAcceptanceTPCSD",GetCorrectedHadEtFullAcceptanceTPC(),1.0);
405 FillHisto1D("RecoTotEtFullAcceptanceTPCSD",GetCorrectedTotEtFullAcceptanceTPC(),1.0);
406 FillHisto1D("RecoHadEtFullAcceptanceITSSD",GetCorrectedHadEtFullAcceptanceITS(),1.0);
407 FillHisto1D("RecoPiKPEtFullAcceptanceITSSD",GetCorrectedPiKPEtFullAcceptanceITS(),1.0);
408 FillHisto1D("RecoTotEtFullAcceptanceITSSD",GetCorrectedTotEtFullAcceptanceITS(),1.0);
409 FillHisto1D("RecoHadEtFullAcceptanceTPCNoPIDSD",GetCorrectedHadEtFullAcceptanceTPCNoPID(),1.0);
410 FillHisto1D("RecoPiKPEtFullAcceptanceTPCNoPIDSD",GetCorrectedPiKPEtFullAcceptanceTPCNoPID(),1.0);
411 FillHisto1D("RecoTotEtFullAcceptanceTPCNoPIDSD",GetCorrectedTotEtFullAcceptanceTPCNoPID(),1.0);
412 FillHisto1D("RecoHadEtFullAcceptanceITSNoPIDSD",GetCorrectedHadEtFullAcceptanceITSNoPID(),1.0);
413 FillHisto1D("RecoPiKPEtFullAcceptanceITSNoPIDSD",GetCorrectedPiKPEtFullAcceptanceITSNoPID(),1.0);
414 FillHisto1D("RecoTotEtFullAcceptanceITSNoPIDSD",GetCorrectedTotEtFullAcceptanceITSNoPID(),1.0);
415 FillHisto1D("RecoRawEtFullAcceptanceTPCSD",GetRawEtFullAcceptanceTPC(),1.0);
416 FillHisto1D("RecoRawEtFullAcceptanceTPCNoPIDSD",GetRawEtFullAcceptanceTPCNoPID(),1.0);
417 FillHisto1D("RecoRawEtFullAcceptanceITSSD",GetRawEtFullAcceptanceITS(),1.0);
418 FillHisto1D("RecoRawEtFullAcceptanceITSNoPIDSD",GetRawEtFullAcceptanceITSNoPID(),1.0);
421 FillHisto1D("RecoPiKPEtFullAcceptanceTPC",GetCorrectedPiKPEtFullAcceptanceTPC(),1.0);
422 FillHisto1D("RecoPiKPEtFullAcceptanceITS",GetCorrectedPiKPEtFullAcceptanceITS(),1.0);
423 FillHisto1D("RecoPiKPEtFullAcceptanceTPCNoPID",GetCorrectedPiKPEtFullAcceptanceTPCNoPID(),1.0);
424 FillHisto1D("RecoPiKPEtFullAcceptanceITSNoPID",GetCorrectedPiKPEtFullAcceptanceITSNoPID(),1.0);
425 FillHisto1D("RecoHadEtFullAcceptanceTPC",GetCorrectedHadEtFullAcceptanceTPC(),1.0);
426 FillHisto1D("RecoTotEtFullAcceptanceTPC",GetCorrectedTotEtFullAcceptanceTPC(),1.0);
427 FillHisto1D("RecoHadEtFullAcceptanceTPCAssumingPion",GetCorrectedHadEtFullAcceptanceTPCAssumingPion(),1.0);
428 FillHisto1D("RecoHadEtFullAcceptanceTPCAssumingProton",GetCorrectedHadEtFullAcceptanceTPCAssumingProton(),1.0);
429 FillHisto1D("RecoHadEtFullAcceptanceTPCAssumingKaon",GetCorrectedHadEtFullAcceptanceTPCAssumingKaon(),1.0);
430 FillHisto1D("RecoHadEtEMCALAcceptanceTPC",GetCorrectedHadEtEMCALAcceptanceTPC(),1.0);
431 FillHisto1D("RecoTotEtEMCALAcceptanceTPC",GetCorrectedTotEtEMCALAcceptanceTPC(),1.0);
432 FillHisto1D("RecoHadEtPHOSAcceptanceTPC",GetCorrectedHadEtPHOSAcceptanceTPC(),1.0);
433 FillHisto1D("RecoTotEtPHOSAcceptanceTPC",GetCorrectedTotEtPHOSAcceptanceTPC(),1.0);
434 FillHisto1D("RecoHadEtFullAcceptanceTPCNoPID",GetCorrectedHadEtFullAcceptanceTPCNoPID(),1.0);
435 FillHisto1D("RecoTotEtFullAcceptanceTPCNoPID",GetCorrectedTotEtFullAcceptanceTPCNoPID(),1.0);
436 FillHisto1D("RecoHadEtEMCALAcceptanceTPCNoPID",GetCorrectedHadEtEMCALAcceptanceTPCNoPID(),1.0);
437 FillHisto1D("RecoTotEtEMCALAcceptanceTPCNoPID",GetCorrectedTotEtEMCALAcceptanceTPCNoPID(),1.0);
438 FillHisto1D("RecoHadEtPHOSAcceptanceTPCNoPID",GetCorrectedHadEtPHOSAcceptanceTPCNoPID(),1.0);
439 FillHisto1D("RecoTotEtPHOSAcceptanceTPCNoPID",GetCorrectedTotEtPHOSAcceptanceTPCNoPID(),1.0);
440 FillHisto1D("RecoHadEtFullAcceptanceITS",GetCorrectedHadEtFullAcceptanceITS(),1.0);
441 FillHisto1D("RecoHadEtFullAcceptanceITSAssumingPion",GetCorrectedHadEtFullAcceptanceITSAssumingPion(),1.0);
442 FillHisto1D("RecoHadEtFullAcceptanceITSAssumingProton",GetCorrectedHadEtFullAcceptanceITSAssumingProton(),1.0);
443 FillHisto1D("RecoHadEtFullAcceptanceITSAssumingKaon",GetCorrectedHadEtFullAcceptanceITSAssumingKaon(),1.0);
444 FillHisto1D("RecoTotEtFullAcceptanceITS",GetCorrectedTotEtFullAcceptanceITS(),1.0);
445 FillHisto1D("RecoHadEtEMCALAcceptanceITS",GetCorrectedHadEtEMCALAcceptanceITS(),1.0);
446 FillHisto1D("RecoTotEtEMCALAcceptanceITS",GetCorrectedTotEtEMCALAcceptanceITS(),1.0);
447 FillHisto1D("RecoHadEtPHOSAcceptanceITS",GetCorrectedHadEtPHOSAcceptanceITS(),1.0);
448 FillHisto1D("RecoTotEtPHOSAcceptanceITS",GetCorrectedTotEtPHOSAcceptanceITS(),1.0);
449 FillHisto1D("RecoHadEtFullAcceptanceITSNoPID",GetCorrectedHadEtFullAcceptanceITSNoPID(),1.0);
450 FillHisto1D("RecoTotEtFullAcceptanceITSNoPID",GetCorrectedTotEtFullAcceptanceITSNoPID(),1.0);
451 FillHisto1D("RecoHadEtEMCALAcceptanceITSNoPID",GetCorrectedHadEtEMCALAcceptanceITSNoPID(),1.0);
452 FillHisto1D("RecoTotEtEMCALAcceptanceITSNoPID",GetCorrectedTotEtEMCALAcceptanceITSNoPID(),1.0);
453 FillHisto1D("RecoHadEtPHOSAcceptanceITSNoPID",GetCorrectedHadEtPHOSAcceptanceITSNoPID(),1.0);
454 FillHisto1D("RecoTotEtPHOSAcceptanceITSNoPID",GetCorrectedTotEtPHOSAcceptanceITSNoPID(),1.0);
456 FillHisto1D("RecoRawEtFullAcceptanceTPC",GetRawEtFullAcceptanceTPC(),1.0);
457 FillHisto1D("RecoRawEtEMCALAcceptanceTPC",GetRawEtEMCALAcceptanceTPC(),1.0);
458 FillHisto1D("RecoRawEtPHOSAcceptanceTPC",GetRawEtPHOSAcceptanceTPC(),1.0);
459 FillHisto1D("RecoRawEtFullAcceptanceTPCNoPID",GetRawEtFullAcceptanceTPCNoPID(),1.0);
460 FillHisto1D("RecoRawEtEMCALAcceptanceTPCNoPID",GetRawEtEMCALAcceptanceTPCNoPID(),1.0);
461 FillHisto1D("RecoRawEtPHOSAcceptanceTPCNoPID",GetRawEtPHOSAcceptanceTPCNoPID(),1.0);
462 FillHisto1D("RecoRawEtFullAcceptanceITS",GetRawEtFullAcceptanceITS(),1.0);
463 FillHisto1D("RecoRawEtEMCALAcceptanceITS",GetRawEtEMCALAcceptanceITS(),1.0);
464 FillHisto1D("RecoRawEtPHOSAcceptanceITS",GetRawEtPHOSAcceptanceITS(),1.0);
465 FillHisto1D("RecoRawEtFullAcceptanceITSNoPID",GetRawEtFullAcceptanceITSNoPID(),1.0);
466 FillHisto1D("RecoRawEtEMCALAcceptanceITSNoPID",GetRawEtEMCALAcceptanceITSNoPID(),1.0);
467 FillHisto1D("RecoRawEtPHOSAcceptanceITSNoPID",GetRawEtPHOSAcceptanceITSNoPID(),1.0);
468 if(fCentBin>-1){//if we have Pb+Pb and found a centrality bin
469 FillHisto1D(Form("RecoHadEtFullAcceptanceTPCCB%i",fCentBin),GetCorrectedHadEtFullAcceptanceTPC(),1.0);
470 FillHisto1D(Form("RecoTotEtFullAcceptanceTPCCB%i",fCentBin),GetCorrectedTotEtFullAcceptanceTPC(),1.0);
471 FillHisto1D(Form("RecoHadEtFullAcceptanceITSCB%i",fCentBin),GetCorrectedHadEtFullAcceptanceITS(),1.0);
472 FillHisto1D(Form("RecoTotEtFullAcceptanceITSCB%i",fCentBin),GetCorrectedTotEtFullAcceptanceITS(),1.0);
473 FillHisto1D(Form("RecoRawEtFullAcceptanceTPCCB%i",fCentBin),GetRawEtFullAcceptanceTPC(),1.0);
474 FillHisto1D(Form("RecoRawEtFullAcceptanceITSCB%i",fCentBin),GetRawEtFullAcceptanceITS(),1.0);
481 // cout<<"Reconstructed pi/k/p et "<<GetCorrectedPiKPEtFullAcceptanceTPC()<<endl;
484 void AliAnalysisHadEtReconstructed::AddEt(Float_t rawEt, Float_t rawEtNoPID, Float_t corrEt, Float_t corrEtPion, Float_t corrEtProton, Float_t corrEtKaon, Float_t corrEtNoPID, Float_t pt, Bool_t IsTPC, Bool_t InPHOS, Bool_t InEMCAL) {//Adding Et to each of the variables that tracks et event by event
485 if(pt>=AliAnalysisHadEt::fgPtTPCCutOff && IsTPC){//TPC tracks
486 //adding to the raw Et
487 fRawEtFullAcceptanceTPC += rawEt;
488 if(InPHOS)fRawEtPHOSAcceptanceTPC += rawEt;
489 if(InEMCAL)fRawEtEMCALAcceptanceTPC += rawEt;
490 fRawEtFullAcceptanceTPCNoPID += rawEtNoPID;
491 if(InPHOS)fRawEtPHOSAcceptanceTPCNoPID += rawEtNoPID;
492 if(InEMCAL)fRawEtEMCALAcceptanceTPCNoPID += rawEtNoPID;
493 //adding to the corrected Et
494 fCorrectedHadEtFullAcceptanceTPC += corrEt;//the pi/k/p et
495 fCorrectedHadEtFullAcceptanceTPCAssumingPion += corrEtPion;
496 fCorrectedHadEtFullAcceptanceTPCAssumingProton += corrEtProton;
497 fCorrectedHadEtFullAcceptanceTPCAssumingKaon += corrEtKaon;
498 if(InPHOS)fCorrectedHadEtPHOSAcceptanceTPC += corrEt;
499 if(InEMCAL)fCorrectedHadEtEMCALAcceptanceTPC += corrEt;
500 fCorrectedHadEtFullAcceptanceTPCNoPID += corrEtNoPID;
501 if(InPHOS)fCorrectedHadEtPHOSAcceptanceTPCNoPID += corrEtNoPID;
502 if(InEMCAL)fCorrectedHadEtEMCALAcceptanceTPCNoPID += corrEtNoPID;
504 //if(pt<AliAnalysisHadEt::fgPtTPCCutOff &&pt>=AliAnalysisHadEt::fgPtITSCutOff && !IsTPC){//ITS tracks
505 //If we use standalone tracks - not pure standalone tracks - the only tracks we get are ones that were missed by the TPC+ITS tracking. Therefore we don't need to add a momentum cut-off
506 if(pt<AliAnalysisHadEt::fgPtTPCCutOff && !IsTPC){//ITS tracks
507 //adding to the raw Et
508 fRawEtFullAcceptanceITS += rawEt;
509 if(InPHOS)fRawEtPHOSAcceptanceITS += rawEt;
510 if(InEMCAL)fRawEtEMCALAcceptanceITS += rawEt;
511 fRawEtFullAcceptanceITSNoPID += rawEtNoPID;
512 if(InPHOS)fRawEtPHOSAcceptanceITSNoPID += rawEtNoPID;
513 if(InEMCAL)fRawEtEMCALAcceptanceITSNoPID += rawEtNoPID;
514 //adding to the corrected Et
515 fCorrectedHadEtFullAcceptanceITS += corrEt;
516 fCorrectedHadEtFullAcceptanceITSAssumingPion += corrEtPion;
517 fCorrectedHadEtFullAcceptanceITSAssumingProton += corrEtProton;
518 fCorrectedHadEtFullAcceptanceITSAssumingKaon += corrEtKaon;
519 if(InPHOS)fCorrectedHadEtPHOSAcceptanceITS += corrEt;
520 if(InEMCAL)fCorrectedHadEtEMCALAcceptanceITS += corrEt;
521 fCorrectedHadEtFullAcceptanceITSNoPID += corrEtNoPID;
522 if(InPHOS)fCorrectedHadEtPHOSAcceptanceITSNoPID += corrEtNoPID;
523 if(InEMCAL)fCorrectedHadEtEMCALAcceptanceITSNoPID += corrEtNoPID;
527 Bool_t AliAnalysisHadEtReconstructed::IsInPHOS(AliESDtrack *track){//This function will need to be elaborated on later to include PHOS dead channels
529 cout<<"Error: Track does not exist!!"<<endl;
532 return TMath::Abs(track->Eta()) < fCuts->GetGeometryPhosEtaAccCut()//in eta acceptance
533 && track->Phi()*180.0/TMath::Pi() > fCuts->GetGeometryPhosPhiAccMinCut()//greater than the minimum phi
534 && track->Phi()*180.0/TMath::Pi() < fCuts->GetGeometryPhosPhiAccMaxCut();//less than the maximum phi
536 Bool_t AliAnalysisHadEtReconstructed::IsInEMCAL(AliESDtrack *track){//This function will need to be elaborated on later to include EMCAL dead channels
538 cout<<"Error: Track does not exist!!"<<endl;
541 return TMath::Abs(track->Eta()) < fCuts->GetGeometryEmcalEtaAccCut()//in eta acceptance
542 && track->Phi()*180.0/TMath::Pi() > fCuts->GetGeometryEmcalPhiAccMinCut()//greater than the minimum phi
543 && track->Phi()*180.0/TMath::Pi() < fCuts->GetGeometryEmcalPhiAccMaxCut();//less than the maximum phi
545 Bool_t AliAnalysisHadEtReconstructed::CheckGoodVertex(AliVParticle* track)
551 AliError("ERROR: no track");
554 AliESDtrack *esdTrack = dynamic_cast<AliESDtrack*>(track);
556 AliError("ERROR: no track");
559 esdTrack->GetImpactParametersTPC(bxy,bz);
561 bool status = (TMath::Abs(track->Xv()) < fCuts->GetReconstructedVertexXCut()) &&
562 (TMath::Abs(track->Yv()) < fCuts->GetReconstructedVertexYCut()) &&
563 (TMath::Abs(track->Zv()) < fCuts->GetReconstructedVertexZCut()) &&
564 (TMath::Abs(bxy) < fCuts->GetReconstructedIPxyCut()) &&
565 (TMath::Abs(bz) < fCuts->GetReconstructedIPzCut());
570 void AliAnalysisHadEtReconstructed::Init()
572 AliAnalysisHadEt::Init();
574 fCorrTotEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"Full");
575 fCorrTotEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"Full");
576 fCorrHadEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"Full");
577 fCorrHadEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"Full");
578 fCorrPiKPEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"PiKP");
579 fCorrPiKPEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"PiKP");
580 fCorrTotEtEMCALAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"EMCAL");
581 fCorrTotEtEMCALAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"EMCAL");
582 fCorrHadEtEMCALAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"EMCAL");
583 fCorrHadEtEMCALAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"EMCAL");
584 fCorrTotEtPHOSAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"PHOS");
585 fCorrTotEtPHOSAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"PHOS");
586 fCorrHadEtPHOSAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"PHOS");
587 fCorrHadEtPHOSAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"PHOS");
590 cout<<"Warning! You have not set corrections. Your code will crash. You have to set the corrections."<<endl;
594 void AliAnalysisHadEtReconstructed::ResetEventValues(){//resetting event by event et's
595 AliAnalysisHadEt::ResetEventValues();
596 fCorrectedHadEtFullAcceptanceTPCNoPID=0.0;
597 fCorrectedHadEtFullAcceptanceITSNoPID=0.0;
598 fCorrectedHadEtEMCALAcceptanceTPCNoPID=0.0;
599 fCorrectedHadEtEMCALAcceptanceITSNoPID=0.0;
600 fCorrectedHadEtPHOSAcceptanceTPCNoPID=0.0;
601 fCorrectedHadEtPHOSAcceptanceITSNoPID=0.0;
602 fCorrectedHadEtFullAcceptanceTPC=0.0;
603 fCorrectedHadEtFullAcceptanceITS=0.0;
604 fCorrectedHadEtFullAcceptanceTPCAssumingPion=0.0;
605 fCorrectedHadEtFullAcceptanceITSAssumingPion=0.0;
606 fCorrectedHadEtFullAcceptanceTPCAssumingProton=0.0;
607 fCorrectedHadEtFullAcceptanceITSAssumingProton=0.0;
608 fCorrectedHadEtFullAcceptanceTPCAssumingKaon=0.0;
609 fCorrectedHadEtFullAcceptanceITSAssumingKaon=0.0;
610 fCorrectedHadEtEMCALAcceptanceTPC=0.0;
611 fCorrectedHadEtEMCALAcceptanceITS=0.0;
612 fCorrectedHadEtPHOSAcceptanceTPC=0.0;
613 fCorrectedHadEtPHOSAcceptanceITS=0.0;
614 fRawEtFullAcceptanceTPC=0.0;
615 fRawEtFullAcceptanceITS=0.0;
616 fRawEtEMCALAcceptanceTPC=0.0;
617 fRawEtEMCALAcceptanceITS=0.0;
618 fRawEtPHOSAcceptanceTPC=0.0;
619 fRawEtPHOSAcceptanceITS=0.0;
620 fRawEtFullAcceptanceTPCNoPID=0.0;
621 fRawEtFullAcceptanceITSNoPID=0.0;
622 fRawEtEMCALAcceptanceTPCNoPID=0.0;
623 fRawEtEMCALAcceptanceITSNoPID=0.0;
624 fRawEtPHOSAcceptanceTPCNoPID=0.0;
625 fRawEtPHOSAcceptanceITSNoPID=0.0;
627 if(TMath::Abs(fCorrTotEtFullAcceptanceTPC)<1e-3){
628 if (fConfigFile.Length()) {
629 cout<<"Warning: Rereading fCorrections file..."<<endl;
630 gROOT->LoadMacro(fConfigFile);
631 fCorrections = (AliAnalysisHadEtCorrections *) gInterpreter->ProcessLine("ConfigHadEtAnalysis()");
632 fCorrTotEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"Full");
633 fCorrTotEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"Full");
634 fCorrHadEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"Full");
635 fCorrHadEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"Full");
636 fCorrPiKPEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"PiKP");
637 fCorrPiKPEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"PiKP");
638 fCorrTotEtEMCALAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"EMCAL");
639 fCorrTotEtEMCALAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"EMCAL");
640 fCorrHadEtEMCALAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"EMCAL");
641 fCorrHadEtEMCALAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"EMCAL");
642 fCorrTotEtPHOSAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"PHOS");
643 fCorrTotEtPHOSAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"PHOS");
644 fCorrHadEtPHOSAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"PHOS");
645 fCorrHadEtPHOSAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"PHOS");
647 else{cerr<<"Uh-oh! Unable to open configuration file!"<<endl;}
650 void AliAnalysisHadEtReconstructed::CreateHistograms(){//Creating histograms and adding them to the output TList
651 Float_t maxCentbinRange = fNCentBins+0.5;
653 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
655 AliFatal("Analysis manager needed");
658 AliInputEventHandler *inputHandler=dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
660 AliFatal("Input handler needed");
664 //pid response object
665 fPIDResponse=inputHandler->GetPIDResponse();
666 if (!fPIDResponse) AliError("PIDResponse object was not created");
669 if(kDoTriggerChecksOnly){return;}//In this case we are just after trigger efficiencies and don't care about the ET reconstructed.
670 //TString *strTPC = new TString("TPC");
671 TString *strITS = new TString("ITS");
672 TString *strTPCITS = new TString("TPCITS");
673 Float_t minNSigma = -4;
674 Float_t maxNSigma = 4;
675 Float_t maxPtdEdxNSigma = 1.0;
677 for(Int_t i=0;i<2;i++){
678 TString *cutName = NULL;
679 Float_t maxPtdEdx = 10;
680 Float_t mindEdx = 35;
681 Float_t maxdEdx = 150.0;
691 //not deleting this completely since we might want to add it back in later
698 cerr<<"Error: cannot make histograms!"<<endl;
702 CreateEtaPtHisto2D(Form("EtDataRaw%sPiPlus",cutName->Data()),"Raw reconstructed E_{T} from identified #pi^{+}");
703 CreateEtaPtHisto2D(Form("EtDataRaw%sPiMinus",cutName->Data()),"Raw reconstructed E_{T} from identified #pi^{-}");
704 CreateEtaPtHisto2D(Form("EtDataRaw%sKPlus",cutName->Data()),"Raw reconstructed E_{T} from identified K^{+}");
705 // CreateEtaPtHisto2D(Form("EtDataRaw%sEMinus",cutName->Data()),"Raw reconstructed E_{T} from identified e^{-}");
706 // CreateEtaPtHisto2D(Form("EtDataRaw%sEPlus",cutName->Data()),"Raw reconstructed E_{T} from identified e^{+}");
707 CreateEtaPtHisto2D(Form("EtDataRaw%sKMinus",cutName->Data()),"Raw reconstructed E_{T} from identified K^{-}");
708 CreateEtaPtHisto2D(Form("EtDataRaw%sProton",cutName->Data()),"Raw reconstructed E_{T} from identified p");
709 CreateEtaPtHisto2D(Form("EtDataRaw%sAntiProton",cutName->Data()),"Raw reconstructed E_{T} from identified #bar{p}");
710 CreateEtaPtHisto2D(Form("EtDataRaw%sUnidentified",cutName->Data()),"Raw reconstructed E_{T} from unidentified particles using real mass");
711 CreateEtaPtHisto2D(Form("EtDataRaw%sNoID",cutName->Data()),"Raw reconstructed E_{T} from unidentified particles using real mass");
713 CreateEtaPtHisto2D(Form("EtDataCorrected%sPiPlus",cutName->Data()),"Corrected reconstructed E_{T} from identified #pi^{+}");
714 CreateEtaPtHisto2D(Form("EtDataCorrected%sPiMinus",cutName->Data()),"Corrected reconstructed E_{T} from identified #pi^{-}");
715 CreateEtaPtHisto2D(Form("EtDataCorrected%sKPlus",cutName->Data()),"Corrected reconstructed E_{T} from identified K^{+}");
716 // CreateEtaPtHisto2D(Form("EtDataCorrected%sEMinus",cutName->Data()),"Corrected reconstructed E_{T} from identified e^{-}");
717 // CreateEtaPtHisto2D(Form("EtDataCorrected%sEPlus",cutName->Data()),"Corrected reconstructed E_{T} from identified e^{+}");
718 CreateEtaPtHisto2D(Form("EtDataCorrected%sKMinus",cutName->Data()),"Corrected reconstructed E_{T} from identified K^{-}");
719 CreateEtaPtHisto2D(Form("EtDataCorrected%sProton",cutName->Data()),"Corrected reconstructed E_{T} from identified p");
720 CreateEtaPtHisto2D(Form("EtDataCorrected%sAntiProton",cutName->Data()),"Corrected reconstructed E_{T} from identified #bar{p}");
721 CreateEtaPtHisto2D(Form("EtDataCorrected%sUnidentified",cutName->Data()),"Corrected reconstructed E_{T} from unidentified particles using real mass");
722 CreateEtaPtHisto2D(Form("EtDataCorrected%sNoID",cutName->Data()),"Corrected reconstructed E_{T} from unidentified particles using real mass");
725 CreateEtaPtHisto2D(Form("EtNData%sPiPlus",cutName->Data()),"Number of reconstructed #pi^{+}");
726 CreateEtaPtHisto2D(Form("EtNData%sPiMinus",cutName->Data()),"Number of reconstructed #pi^{-}");
727 CreateEtaPtHisto2D(Form("EtNData%sKPlus",cutName->Data()),"Number of reconstructed K^{+}");
728 CreateEtaPtHisto2D(Form("EtNData%sKMinus",cutName->Data()),"Number of reconstructed K^{-}");
729 CreateEtaPtHisto2D(Form("EtNData%sProton",cutName->Data()),"Number of reconstructed p");
730 CreateEtaPtHisto2D(Form("EtNData%sAntiProton",cutName->Data()),"Number of reconstructed #bar{p}");
731 CreateEtaPtHisto2D(Form("EtNData%sUnidentified",cutName->Data()),"Number of Reconstructed unidentified particles");
733 CreateHisto2D(Form("dEdxDataAll%s",cutName->Data()),"dE/dx for all particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
734 CreateHisto2D(Form("dEdxDataPion%s",cutName->Data()),"dE/dx for #pi^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
735 CreateHisto2D(Form("dEdxDataKaon%s",cutName->Data()),"dE/dx for K^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
736 CreateHisto2D(Form("dEdxDataProton%s",cutName->Data()),"dE/dx for p(#bar{p})","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
737 CreateHisto2D(Form("dEdxDataElectron%s",cutName->Data()),"dE/dx for e^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
738 CreateHisto2D(Form("dEdxDataUnidentified%s",cutName->Data()),"dE/dx for unidentified particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
741 CreateHisto2D(Form("dEdxDataNSigmaPion%s",cutName->Data()),"N_{#sigma} dE/dx for PID'd #pi^{#pm}","momentum (GeV/c)","N_{#sigma} dE/dx",50,0.0,maxPtdEdxNSigma,100,minNSigma,maxNSigma);
742 CreateHisto2D(Form("dEdxDataNSigmaKaon%s",cutName->Data()),"N_{#sigma} dE/dx for PID'd K^{#pm}","momentum (GeV/c)","N_{#sigma} dE/dx",50,0.0,maxPtdEdxNSigma,100,minNSigma,maxNSigma);
743 CreateHisto2D(Form("dEdxDataNSigmaProton%s",cutName->Data()),"N_{#sigma} dE/dx for PID'd p(#bar{p})","momentum (GeV/c)","N_{#sigma} dE/dx",50,0.0,maxPtdEdxNSigma,100,minNSigma,maxNSigma);
744 CreateHisto2D(Form("dEdxDataNSigmaElectron%s",cutName->Data()),"N_{#sigma} dE/dx for e^{#pm}","momentum (GeV/c)","N_{#sigma} dE/dx",50,0.0,maxPtdEdxNSigma,100,minNSigma,maxNSigma);
746 CreateHisto2D(Form("dEdxDataNSigmaPionAll%s",cutName->Data()),"N_{#sigma} dE/dx for #pi^{#pm} for all","momentum (GeV/c)","N_{#sigma} dE/dx",50,0.0,maxPtdEdxNSigma,100,minNSigma,maxNSigma);
747 CreateHisto2D(Form("dEdxDataNSigmaKaonAll%s",cutName->Data()),"N_{#sigma} dE/dx for K^{#pm} for all","momentum (GeV/c)","N_{#sigma} dE/dx",50,0.0,maxPtdEdxNSigma,100,minNSigma,maxNSigma);
748 CreateHisto2D(Form("dEdxDataNSigmaProtonAll%s",cutName->Data()),"N_{#sigma} dE/dx for p(#bar{p}) for all","momentum (GeV/c)","N_{#sigma} dE/dx",50,0.0,maxPtdEdxNSigma,100,minNSigma,maxNSigma);
749 CreateHisto2D(Form("dEdxDataNSigmaElectronAll%s",cutName->Data()),"N_{#sigma} dE/dx for e^{#pm} for all","momentum (GeV/c)","N_{#sigma} dE/dx",50,0.0,maxPtdEdxNSigma,100,minNSigma,maxNSigma);
755 Float_t maxEt = 100.0;
756 Float_t minEtPiKP = 0.0;
757 Float_t maxEtPiKP = 100.0;
758 if(fDataSet==20100||fDataSet==2011){
768 char histotitle[200];
770 TString *ytitle = new TString("Number of events");
771 TString *sTPC = new TString("TPC");
772 TString *sITS = new TString("ITS");
773 TString *sTPCpt = new TString("0.15");
774 TString *sITSpt = new TString("0.10");
775 TString *sPID = new TString("");
776 TString *sNoPID = new TString("NoPID");
777 TString *sNoPIDString = new TString(", No PID");
778 TString *sHadEt = new TString("HadEt");
779 TString *sPiKPEt = new TString("PiKPEt");
780 TString *sRawEt = new TString("RawEt");
781 TString *sTotEt = new TString("TotEt");
782 TString *sTotEtString = new TString("total E_{T}");
783 TString *sHadEtString = new TString("hadronic E_{T}");
784 TString *sPiKPEtString = new TString("E_{T}^{#pi,K,p}");
785 TString *sRawEtString = new TString("raw E_{T}");
786 TString *sFull = new TString("Full");
787 TString *sEMCAL = new TString("EMCAL");
788 TString *sPHOS = new TString("PHOS");
790 for(int tpc = 0;tpc<2;tpc++){
791 for(int hadet = 0;hadet<3;hadet++){
792 for(int type = 0;type<3;type++){
793 for(int pid = 0;pid<2;pid++){
794 TString *detector = NULL;
795 TString *partid = NULL;
796 TString *et = sHadEt;
797 TString *acceptance = NULL;
798 TString *ptstring = NULL;
799 TString *partidstring = NULL;
800 TString *etstring = sHadEtString;
801 if(tpc==1) {detector = sTPC; ptstring = sTPCpt;}
802 else{detector = sITS; ptstring = sITSpt;}
803 if(pid==1){partid = sPID; partidstring = sPID;}
804 else{partid = sNoPID; partidstring = sNoPIDString;}
805 if(hadet==1) {et = sHadEt; etstring = sHadEtString;}
806 if(hadet==0){et = sTotEt; etstring = sTotEtString;}
807 if(hadet==2){et = sRawEt; etstring = sRawEtString;}
821 snprintf(histoname,200,"Reco%s%sAcceptance%s%s",et->Data(),acceptance->Data(),detector->Data(),partid->Data());
822 snprintf(histotitle,200,"Reconstructed %s with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
823 snprintf(xtitle,50,"Reconstructed %s",etstring->Data());
824 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
825 if(type==0){//full acceptance only
826 snprintf(xtitle,50,"Reconstructed %s",etstring->Data());
828 snprintf(histoname,200,"Reco%s%sAcceptance%s%sND",et->Data(),acceptance->Data(),detector->Data(),partid->Data());
829 snprintf(histotitle,200,"Reconstructed non-diffractive events %s with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
830 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
831 snprintf(histoname,200,"Reco%s%sAcceptance%s%sDD",et->Data(),acceptance->Data(),detector->Data(),partid->Data());
832 snprintf(histotitle,200,"Reconstructed doubly-diffractive events %s with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
833 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
834 snprintf(histoname,200,"Reco%s%sAcceptance%s%sSD",et->Data(),acceptance->Data(),detector->Data(),partid->Data());
835 snprintf(histotitle,200,"Reconstructed singly-diffractive events %s with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
836 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
840 snprintf(histoname,200,"Reco%s%sAcceptance%s%s",sPiKPEt->Data(),acceptance->Data(),detector->Data(),partid->Data());
841 snprintf(histotitle,200,"Reconstructed %s with %s acceptance for p_{T}>%s GeV/c%s",sPiKPEtString->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
842 snprintf(xtitle,50,"Reconstructed %s",sPiKPEtString->Data());
843 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEtPiKP,maxEtPiKP);
845 snprintf(xtitle,50,"Reconstructed %s",sPiKPEt->Data());
846 snprintf(histoname,200,"Reco%s%sAcceptance%s%sND",sPiKPEt->Data(),acceptance->Data(),detector->Data(),partid->Data());
847 snprintf(histotitle,200,"Reconstructed non-diffractive events %s with %s acceptance for p_{T}>%s GeV/c%s",sPiKPEtString->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
848 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEtPiKP,maxEtPiKP);
849 snprintf(histoname,200,"Reco%s%sAcceptance%s%sDD",sPiKPEt->Data(),acceptance->Data(),detector->Data(),partid->Data());
850 snprintf(histotitle,200,"Reconstructed doubly-diffractive events %s with %s acceptance for p_{T}>%s GeV/c%s",sPiKPEtString->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
851 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEtPiKP,maxEtPiKP);
852 snprintf(histoname,200,"Reco%s%sAcceptance%s%sSD",sPiKPEt->Data(),acceptance->Data(),detector->Data(),partid->Data());
853 snprintf(histotitle,200,"Reconstructed singly-diffractive events %s with %s acceptance for p_{T}>%s GeV/c%s",sPiKPEtString->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
854 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEtPiKP,maxEtPiKP);//et
857 if((fDataSet==20100||fDataSet==2011) && type ==0 &&pid==1){//If this is Pb+Pb and full acceptance with pid
859 if(fNCentBins<21) width = 10;
860 for(Int_t i=0;i<fNCentBins;i++){
861 snprintf(histoname,200,"Reco%s%sAcceptance%s%sCB%i",et->Data(),acceptance->Data(),detector->Data(),partid->Data(),i);
862 snprintf(histotitle,200,"Reconstructed %s with %s acceptance for p_{T}>%s GeV/c%s for centrality %i-%i",etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data(),i*width,(i+1)*width);
863 snprintf(xtitle,50,"Reconstructed %s",etstring->Data());
864 CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
871 CreateHisto1D("RecoHadEtFullAcceptanceTPCAssumingPion","Reconstructing E_{T}^{had} with full acceptance for p_{T}>0.15 GeV/c assuming pions","Reconstructed E_{T}^{had}","dN_{eve}/dE_{T}^{had}",nbinsEt*2,minEt,maxEt);
872 CreateHisto1D("RecoHadEtFullAcceptanceTPCAssumingProton","Reconstructing E_{T}^{had} with full acceptance for p_{T}>0.15 GeV/c assuming protons","Reconstructed E_{T}^{had}","dN_{eve}/dE_{T}^{had}",nbinsEt*2,minEt,maxEt);
873 CreateHisto1D("RecoHadEtFullAcceptanceTPCAssumingKaon","Reconstructing E_{T}^{had} with full acceptance for p_{T}>0.15 GeV/c assuming kaons","Reconstructed E_{T}^{had}","dN_{eve}/dE_{T}^{had}",nbinsEt*2,minEt,maxEt);
874 CreateHisto1D("RecoHadEtFullAcceptanceITSAssumingPion","Reconstructing E_{T}^{had} with full acceptance for p_{T}>0.10 GeV/c assuming pions","Reconstructed E_{T}^{had}","dN_{eve}/dE_{T}^{had}",nbinsEt*2,minEt,maxEt);
875 CreateHisto1D("RecoHadEtFullAcceptanceITSAssumingProton","Reconstructing E_{T}^{had} with full acceptance for p_{T}>0.10 GeV/c assuming protons","Reconstructed E_{T}^{had}","dN_{eve}/dE_{T}^{had}",nbinsEt*2,minEt,maxEt);
876 CreateHisto1D("RecoHadEtFullAcceptanceITSAssumingKaon","Reconstructing E_{T}^{had} with full acceptance for p_{T}>0.10 GeV/c assuming kaons","Reconstructed E_{T}^{had}","dN_{eve}/dE_{T}^{had}",nbinsEt*2,minEt,maxEt);
878 //Cross checks that corrections are applied correctly
879 if(fDataSet==20100 || fDataSet==2011){
880 CreateHisto2D("fbkgdVsCentralityBin","f_{bkgd} vs centrality bin","centrality bin","f_{bkgd}",fNCentBins,-1.5,maxCentbinRange,200,0.7,1.05);//
881 CreateHisto2D("feffPionVsCentralityBin","Pion efficiency vs centrality bin","centrality bin","pion efficiency",fNCentBins,-1.5,maxCentbinRange,200,0,1.2);//
882 CreateHisto2D("feffHadronVsCentralityBin","Hadron efficiency vs centrality bin","centrality bin","hadron efficiency",fNCentBins,-1.5,maxCentbinRange,200,0,1.2);//
883 CreateHisto2D("feffKaonVsCentralityBin","Kaon efficiency vs centrality bin","centrality bin","kaon efficiency",fNCentBins,-1.5,maxCentbinRange,200,0,1.2);//
884 CreateHisto2D("feffProtonVsCentralityBin","Proton efficiency vs centrality bin","centrality bin","proton efficiency",fNCentBins,-1.5,maxCentbinRange,200,0,1.2);//
885 CreateHisto2D("fnotIDVsCentralityBin","f_{notID} vs centrality bin","centrality bin","f_{notID}",fNCentBins,-1.5,maxCentbinRange,50,0.95,1.05);//
886 CreateHisto2D("fpTcutVsCentralityBin","f_{pTcut} vs centrality bin","centrality bin","f_{pTcut}",fNCentBins,-1.5,maxCentbinRange,50,0.95,1.05);
887 CreateHisto2D("fneutralVsCentralityBin","f_{neutral} vs centrality bin","centrality bin","f_{neutral}",fNCentBins,-1.5,maxCentbinRange,50,0.5,1.00);
888 CreateHisto2D("ConstantCorrectionsVsCentralityBin","constant corrections vs centrality bin","centrality bin","constant corrections",fNCentBins,-1.5,maxCentbinRange,50,0.5,1.00);
903 delete sPiKPEtString;