]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/totEt/AliAnalysisHadEtReconstructed.cxx
fix warnings
[u/mrichter/AliRoot.git] / PWG4 / totEt / AliAnalysisHadEtReconstructed.cxx
1 //_________________________________________________________________________
2 //  Utility Class for transverse energy studies, charged hadrons
3 //  Base class for ESD analysis
4 //  - reconstruction output
5 // implementation file
6 //
7 //Created by Christine Nattrass, Rebecca Scott, Irakli Martashvili
8 //University of Tennessee at Knoxville
9 //_________________________________________________________________________
10
11 #include <TROOT.h>
12 #include <TSystem.h>
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"
23 #include <iostream>
24 #include "AliAnalysisHadEtCorrections.h"
25 #include "TFile.h"
26 #include "TString.h"
27 #include "AliAnalysisEtCommon.h"
28 #include "AliAnalysisHadEt.h"
29 #include "AliCentrality.h"
30 #include "AliLog.h"
31 #include "AliPWG0Helper.h"
32
33 using namespace std;
34
35 ClassImp(AliAnalysisHadEtReconstructed);
36
37
38 AliAnalysisHadEtReconstructed::AliAnalysisHadEtReconstructed() :
39   AliAnalysisHadEt()
40   ,fCorrections(0)
41   ,fConfigFile("ConfigHadEtAnalysis.C")
42   ,fCorrTotEtFullAcceptanceTPC(0)
43   ,fCorrTotEtFullAcceptanceITS(0)
44   ,fCorrHadEtFullAcceptanceTPC(0)
45   ,fCorrHadEtFullAcceptanceITS(0)
46   ,fCorrTotEtEMCALAcceptanceTPC(0)
47   ,fCorrTotEtEMCALAcceptanceITS(0)
48   ,fCorrHadEtEMCALAcceptanceTPC(0)
49   ,fCorrHadEtEMCALAcceptanceITS(0)
50   ,fCorrTotEtPHOSAcceptanceTPC(0)
51   ,fCorrTotEtPHOSAcceptanceITS(0)
52   ,fCorrHadEtPHOSAcceptanceTPC(0)
53   ,fCorrHadEtPHOSAcceptanceITS(0)
54   ,fCorrectedHadEtFullAcceptanceTPCNoPID(0)
55   ,fCorrectedHadEtFullAcceptanceITSNoPID(0)
56   ,fCorrectedHadEtEMCALAcceptanceTPCNoPID(0)
57   ,fCorrectedHadEtEMCALAcceptanceITSNoPID(0)
58   ,fCorrectedHadEtPHOSAcceptanceTPCNoPID(0)
59   ,fCorrectedHadEtPHOSAcceptanceITSNoPID(0)
60   ,fCorrectedHadEtFullAcceptanceTPC(0)
61   ,fCorrectedHadEtFullAcceptanceITS(0)
62   ,fCorrectedHadEtFullAcceptanceTPCAssumingPion(0)
63   ,fCorrectedHadEtFullAcceptanceITSAssumingPion(0)
64   ,fCorrectedHadEtFullAcceptanceTPCAssumingProton(0)
65   ,fCorrectedHadEtFullAcceptanceITSAssumingProton(0)
66   ,fCorrectedHadEtFullAcceptanceTPCAssumingKaon(0)
67   ,fCorrectedHadEtFullAcceptanceITSAssumingKaon(0)
68   ,fCorrectedHadEtEMCALAcceptanceTPC(0)
69   ,fCorrectedHadEtEMCALAcceptanceITS(0)
70   ,fCorrectedHadEtPHOSAcceptanceTPC(0)
71   ,fCorrectedHadEtPHOSAcceptanceITS(0)
72   ,fRawEtFullAcceptanceTPC(0)
73   ,fRawEtFullAcceptanceITS(0)
74   ,fRawEtEMCALAcceptanceTPC(0)
75   ,fRawEtEMCALAcceptanceITS(0)
76   ,fRawEtPHOSAcceptanceTPC(0)
77   ,fRawEtPHOSAcceptanceITS(0)
78   ,fRawEtFullAcceptanceTPCNoPID(0)
79   ,fRawEtFullAcceptanceITSNoPID(0)
80   ,fRawEtEMCALAcceptanceTPCNoPID(0)
81   ,fRawEtEMCALAcceptanceITSNoPID(0)
82   ,fRawEtPHOSAcceptanceTPCNoPID(0)
83   ,fRawEtPHOSAcceptanceITSNoPID(0)
84 {
85 }
86
87 AliAnalysisHadEtReconstructed::~AliAnalysisHadEtReconstructed() 
88 {
89   delete fCorrections;
90 }
91
92 Int_t AliAnalysisHadEtReconstructed::AnalyseEvent(AliVEvent* ev, Int_t eventtype)
93 { // analyse ESD event
94   ResetEventValues();
95   if(!ev){
96     AliFatal("ERROR: Event does not exist");   
97     return 0;
98   }
99
100   AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev);
101   if(!realEvent){  
102     AliFatal("ERROR: ESD Event does not exist");
103     return 0;
104   }
105   fCentBin= -1;
106   fGoodEvent = kTRUE;//for p+p collisions if we made it this far we have a good event
107   if(fDataSet==20100){//If this is Pb+Pb
108     AliCentrality *centrality = realEvent->GetCentrality();
109     if(fNCentBins<21) fCentBin= centrality->GetCentralityClass10(fCentralityMethod);
110     else{ fCentBin= centrality->GetCentralityClass5(fCentralityMethod);}
111     if(fCentBin ==-1) fGoodEvent = kFALSE;//but for Pb+Pb events we don't want to count events where we did not find a centrality
112   }
113   //for PID
114   AliESDpid *pID = new AliESDpid();
115   pID->MakePID(realEvent);
116   TString *strTPC = new TString("TPC");
117   TString *strITS = new TString("ITS");
118   TString *strTPCITS = new TString("TPCITS");
119   for(Int_t cutset=0;cutset<2;cutset++){
120     bool isTPC = false;
121     TString *cutName = NULL;
122     TObjArray* list = NULL;
123     switch(cutset){
124     case 0:
125       cutName = strTPCITS;
126       list = fEsdtrackCutsITSTPC->GetAcceptedTracks(realEvent);
127       isTPC = true;
128       break;
129     case 1:
130       cutName = strITS;
131       list = fEsdtrackCutsITS->GetAcceptedTracks(realEvent);
132       break;
133     case 2:
134       cutName = strTPC;
135       list = fEsdtrackCutsTPC->GetAcceptedTracks(realEvent);
136       break;
137     default:
138       cerr<<"Error:  cannot fill histograms!"<<endl;
139       return -1;
140     }
141     Int_t nGoodTracks = list->GetEntries();
142     for (Int_t iTrack = 0; iTrack < nGoodTracks; iTrack++)
143       {
144
145
146         AliESDtrack *track = dynamic_cast<AliESDtrack*> (list->At(iTrack));
147         if (!track)
148           {
149             Printf("ERROR: Could not get track %d", iTrack);
150             continue;
151           }
152         else{
153           if(TMath::Abs(track->Eta())>fCorrections->GetEtaCut()) continue;
154           Float_t nSigmaPion,nSigmaProton,nSigmaKaon,nSigmaElectron;
155           pID->MakeTPCPID(track);
156           pID->MakeITSPID(track);
157           if(cutset!=1){
158             nSigmaPion = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kPion));
159             nSigmaProton = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kProton));
160             nSigmaKaon = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kKaon));
161             nSigmaElectron = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kElectron));
162           }
163           else{
164             nSigmaPion = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kPion));
165             nSigmaProton = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kProton));
166             nSigmaKaon = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kKaon));
167             nSigmaElectron = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kElectron));
168           }
169           //        bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
170           //        bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
171           //        bool isKaon = (nSigmaPion>3.0 && nSigmaProton>2.0 && nSigmaKaon<2.0);
172           //        bool isProton = (nSigmaPion>3.0 && nSigmaProton<2.0 && nSigmaKaon>2.0);
173           bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
174           bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
175           bool isKaon = (nSigmaPion>3.0 && nSigmaProton>3.0 && nSigmaKaon<3.0 && track->Pt()<0.45);
176           bool isProton = (nSigmaPion>3.0 && nSigmaProton<3.0 && nSigmaKaon>3.0 && track->Pt()<0.9);
177
178           bool unidentified = (!isProton && !isKaon && !isElectron && !isPion);
179           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
180             unidentified = true;
181             isPion=false;
182             isElectron=false;
183             isKaon=false;
184             isProton=false;
185           }
186           Float_t dEdx = track->GetTPCsignal();
187           if(cutset==1) dEdx = track->GetITSsignal();
188           FillHisto2D(Form("dEdxDataAll%s",cutName->Data()),track->P(),dEdx,1.0);
189
190           bool inPHOS = IsInPHOS(track);
191           bool inEMCAL = IsInEMCAL(track);
192
193           Float_t corrBkgd=0.0;
194           Float_t corrNotID=0.0;
195           Float_t corrNoID = fCorrections->GetNotIDCorrectionNoPID(track->Pt());
196           Float_t corrEff = 0.0;
197           Float_t corrEffNoID = 0.0;
198           if(cutset!=1){//TPC
199             corrBkgd = fCorrections->GetBackgroundCorrectionTPC(track->Pt());
200             corrEffNoID = fCorrections->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
201             corrNotID = fCorrections->GetNotIDConstCorrectionTPC();
202             corrNoID = fCorrections->GetNotIDConstCorrectionTPCNoID();
203           }
204           if(cutset==1){//ITS
205             corrBkgd = fCorrections->GetBackgroundCorrectionITS(track->Pt());
206             corrEffNoID = fCorrections->GetITSEfficiencyCorrectionHadron(track->Pt(),fCentBin);
207             corrNotID = fCorrections->GetNotIDConstCorrectionITS();
208             corrNoID = fCorrections->GetNotIDConstCorrectionITSNoID();
209           }
210           if(fDataSet==20100){
211             FillHisto2D("fbkgdVsCentralityBin",fCentBin,corrBkgd,1.0);
212             FillHisto2D("fnotIDVsCentralityBin",fCentBin,corrNotID,1.0);
213             FillHisto2D("fpTcutVsCentralityBin",fCentBin,fCorrections->GetpTCutCorrectionTPC(),1.0);
214             if(fCorrHadEtFullAcceptanceTPC>0.0) FillHisto2D("fneutralVsCentralityBin",fCentBin,1.0/fCorrHadEtFullAcceptanceTPC,1.0);
215             if(fCorrections->GetNeutralCorrection()>0.0) FillHisto2D("ConstantCorrectionsVsCentralityBin",fCentBin,1.0/fCorrections->GetNeutralCorrection(),1.0);
216           }
217           Float_t et = 0.0;
218           Float_t etNoID = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
219           Float_t etpartialcorrected = 0.0;
220           Float_t etpartialcorrectedPion = 0.0;
221           Float_t etpartialcorrectedKaon = 0.0;
222           Float_t etpartialcorrectedProton = 0.0;
223           Float_t etpartialcorrectedNoID = corrNoID*corrBkgd*corrEffNoID*etNoID;
224           FillHisto2D(Form("EtDataRaw%sNoID",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrectedNoID);
225
226           if(isPion){
227             FillHisto2D(Form("dEdxDataPion%s",cutName->Data()),track->P(),dEdx,1.0);
228             et = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
229             if(cutset==0){corrEff = fCorrections->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin);}
230             etpartialcorrected = et*corrBkgd*corrEff*corrNotID;
231             if(corrEff>0.0&&fDataSet==20100)FillHisto2D("feffPionVsCentralityBin",fCentBin,1.0/corrEff,1.0);
232             if(track->Charge()>0.0){
233               FillHisto2D(Form("EtDataRaw%sPiPlus",cutName->Data()),track->Pt(),track->Eta(),et);
234               FillHisto2D(Form("EtDataCorrected%sPiPlus",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
235             }
236             else{
237               FillHisto2D(Form("EtDataRaw%sPiMinus",cutName->Data()),track->Pt(),track->Eta(),et);
238               FillHisto2D(Form("EtDataCorrected%sPiMinus",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
239             }
240           }
241           if(isKaon){
242             FillHisto2D(Form("dEdxDataKaon%s",cutName->Data()),track->P(),dEdx,1.0);
243             et = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
244             if(cutset==0){corrEff = fCorrections->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin);}
245             etpartialcorrected = et*corrBkgd*corrEff*corrNotID;
246             if(corrEff>0.0&&fDataSet==20100)FillHisto2D("feffKaonVsCentralityBin",fCentBin,1.0/corrEff,1.0);
247               
248             if(track->Charge()>0.0){
249               FillHisto2D(Form("EtDataRaw%sKPlus",cutName->Data()),track->Pt(),track->Eta(),et);
250               FillHisto2D(Form("EtDataCorrected%sKPlus",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
251             }
252             else{
253               FillHisto2D(Form("EtDataRaw%sKMinus",cutName->Data()),track->Pt(),track->Eta(),et);
254               FillHisto2D(Form("EtDataCorrected%sKMinus",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
255             }
256           }
257           if(isProton){
258             FillHisto2D(Form("dEdxDataProton%s",cutName->Data()),track->P(),dEdx,1.0);
259             et = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
260             if(cutset==0){corrEff = fCorrections->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin);}
261             etpartialcorrected = et*corrBkgd*corrEff*corrNotID;
262             if(corrEff>0.0&&fDataSet==20100)FillHisto2D("feffProtonVsCentralityBin",fCentBin,1.0/corrEff,1.0);
263               
264             if(track->Charge()>0.0){
265               FillHisto2D(Form("EtDataRaw%sProton",cutName->Data()),track->Pt(),track->Eta(),et);
266               FillHisto2D(Form("EtDataCorrected%sProton",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
267             }
268             else{
269               FillHisto2D(Form("EtDataRaw%sAntiProton",cutName->Data()),track->Pt(),track->Eta(),et);
270               FillHisto2D(Form("EtDataCorrected%sAntiProton",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
271             }
272           }
273           if(isElectron){
274             FillHisto2D(Form("dEdxDataElectron%s",cutName->Data()),track->P(),dEdx,1.0);
275           }
276           if(unidentified){
277             if(isPion) cerr<<"I should not be here!!  AliAnalysisHadEtReconstructed 273"<<endl; 
278             FillHisto2D(Form("dEdxDataUnidentified%s",cutName->Data()),track->P(),dEdx,1.0);
279             et = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
280             Float_t etProton = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
281             Float_t etKaon = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
282             if(corrEff>0.0&&fDataSet==20100)FillHisto2D("feffHadronVsCentralityBin",fCentBin,1.0/corrEff,1.0);
283             etpartialcorrected = et*corrBkgd*corrEffNoID*corrNotID;
284             etpartialcorrectedPion = et*corrBkgd*corrEffNoID;
285             etpartialcorrectedProton = etProton*corrBkgd*corrEffNoID;
286             etpartialcorrectedKaon = etKaon*corrBkgd*corrEffNoID;
287             FillHisto2D(Form("EtDataCorrected%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),etpartialcorrected);
288           }
289           else{
290             etpartialcorrectedPion = etpartialcorrected;
291             etpartialcorrectedKaon = etpartialcorrected;
292             etpartialcorrectedProton = etpartialcorrected;
293           }
294           if(!isTPC){
295             etpartialcorrected = etpartialcorrectedNoID;//Not using PID for ITS
296           }
297           AddEt(et,etNoID,etpartialcorrected,etpartialcorrectedPion,etpartialcorrectedProton,etpartialcorrectedKaon,etpartialcorrectedNoID,track->Pt(),isTPC,inPHOS,inEMCAL);
298         }
299       }
300     delete list;
301   }
302   Int_t nondiff = (Int_t) AliPWG0Helper::kND;
303   Int_t doublediff = (Int_t) AliPWG0Helper::kDD;
304   Int_t singlediff = (Int_t) AliPWG0Helper::kSD;
305   if(eventtype == nondiff && fGoodEvent){
306     FillHisto1D("RecoHadEtFullAcceptanceTPCND",GetCorrectedHadEtFullAcceptanceTPC(),1.0);
307     FillHisto1D("RecoTotEtFullAcceptanceTPCND",GetCorrectedTotEtFullAcceptanceTPC(),1.0);
308     FillHisto1D("RecoHadEtFullAcceptanceITSND",GetCorrectedHadEtFullAcceptanceITS(),1.0);
309     FillHisto1D("RecoTotEtFullAcceptanceITSND",GetCorrectedTotEtFullAcceptanceITS(),1.0);
310     FillHisto1D("RecoHadEtFullAcceptanceTPCNoPIDND",GetCorrectedHadEtFullAcceptanceTPCNoPID(),1.0);
311     FillHisto1D("RecoTotEtFullAcceptanceTPCNoPIDND",GetCorrectedTotEtFullAcceptanceTPCNoPID(),1.0);
312     FillHisto1D("RecoHadEtFullAcceptanceITSNoPIDND",GetCorrectedHadEtFullAcceptanceITSNoPID(),1.0);
313     FillHisto1D("RecoTotEtFullAcceptanceITSNoPIDND",GetCorrectedTotEtFullAcceptanceITSNoPID(),1.0);
314   }
315   if(eventtype == doublediff){
316     FillHisto1D("RecoHadEtFullAcceptanceTPCDD",GetCorrectedHadEtFullAcceptanceTPC(),1.0);
317     FillHisto1D("RecoTotEtFullAcceptanceTPCDD",GetCorrectedTotEtFullAcceptanceTPC(),1.0);
318     FillHisto1D("RecoHadEtFullAcceptanceITSDD",GetCorrectedHadEtFullAcceptanceITS(),1.0);
319     FillHisto1D("RecoTotEtFullAcceptanceITSDD",GetCorrectedTotEtFullAcceptanceITS(),1.0);
320     FillHisto1D("RecoHadEtFullAcceptanceTPCNoPIDDD",GetCorrectedHadEtFullAcceptanceTPCNoPID(),1.0);
321     FillHisto1D("RecoTotEtFullAcceptanceTPCNoPIDDD",GetCorrectedTotEtFullAcceptanceTPCNoPID(),1.0);
322     FillHisto1D("RecoHadEtFullAcceptanceITSNoPIDDD",GetCorrectedHadEtFullAcceptanceITSNoPID(),1.0);
323     FillHisto1D("RecoTotEtFullAcceptanceITSNoPIDDD",GetCorrectedTotEtFullAcceptanceITSNoPID(),1.0);
324   }
325   if(eventtype == singlediff){
326     FillHisto1D("RecoHadEtFullAcceptanceTPCSD",GetCorrectedHadEtFullAcceptanceTPC(),1.0);
327     FillHisto1D("RecoTotEtFullAcceptanceTPCSD",GetCorrectedTotEtFullAcceptanceTPC(),1.0);
328     FillHisto1D("RecoHadEtFullAcceptanceITSSD",GetCorrectedHadEtFullAcceptanceITS(),1.0);
329     FillHisto1D("RecoTotEtFullAcceptanceITSSD",GetCorrectedTotEtFullAcceptanceITS(),1.0);
330     FillHisto1D("RecoHadEtFullAcceptanceTPCNoPIDSD",GetCorrectedHadEtFullAcceptanceTPCNoPID(),1.0);
331     FillHisto1D("RecoTotEtFullAcceptanceTPCNoPIDSD",GetCorrectedTotEtFullAcceptanceTPCNoPID(),1.0);
332     FillHisto1D("RecoHadEtFullAcceptanceITSNoPIDSD",GetCorrectedHadEtFullAcceptanceITSNoPID(),1.0);
333     FillHisto1D("RecoTotEtFullAcceptanceITSNoPIDSD",GetCorrectedTotEtFullAcceptanceITSNoPID(),1.0);
334   }
335   if(GetCorrectedHadEtFullAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceTPC",GetCorrectedHadEtFullAcceptanceTPC(),1.0);
336   if(GetCorrectedTotEtFullAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtFullAcceptanceTPC",GetCorrectedTotEtFullAcceptanceTPC(),1.0);
337   if(GetCorrectedHadEtFullAcceptanceTPCAssumingPion()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceTPCAssumingPion",GetCorrectedHadEtFullAcceptanceTPCAssumingPion(),1.0);
338   if(GetCorrectedHadEtFullAcceptanceTPCAssumingProton()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceTPCAssumingProton",GetCorrectedHadEtFullAcceptanceTPCAssumingProton(),1.0);
339   if(GetCorrectedHadEtFullAcceptanceTPCAssumingKaon()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceTPCAssumingKaon",GetCorrectedHadEtFullAcceptanceTPCAssumingKaon(),1.0);
340   if(GetCorrectedHadEtEMCALAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtEMCALAcceptanceTPC",GetCorrectedHadEtEMCALAcceptanceTPC(),1.0);
341   if(GetCorrectedTotEtEMCALAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtEMCALAcceptanceTPC",GetCorrectedTotEtEMCALAcceptanceTPC(),1.0);
342   if(GetCorrectedHadEtPHOSAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtPHOSAcceptanceTPC",GetCorrectedHadEtPHOSAcceptanceTPC(),1.0);
343   if(GetCorrectedTotEtPHOSAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtPHOSAcceptanceTPC",GetCorrectedTotEtPHOSAcceptanceTPC(),1.0);
344   if(GetCorrectedHadEtFullAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceTPCNoPID",GetCorrectedHadEtFullAcceptanceTPCNoPID(),1.0);
345   if(GetCorrectedTotEtFullAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtFullAcceptanceTPCNoPID",GetCorrectedTotEtFullAcceptanceTPCNoPID(),1.0);
346   if(GetCorrectedHadEtEMCALAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtEMCALAcceptanceTPCNoPID",GetCorrectedHadEtEMCALAcceptanceTPCNoPID(),1.0);
347   if(GetCorrectedTotEtEMCALAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtEMCALAcceptanceTPCNoPID",GetCorrectedTotEtEMCALAcceptanceTPCNoPID(),1.0);
348   if(GetCorrectedHadEtPHOSAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtPHOSAcceptanceTPCNoPID",GetCorrectedHadEtPHOSAcceptanceTPCNoPID(),1.0);
349   if(GetCorrectedTotEtPHOSAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtPHOSAcceptanceTPCNoPID",GetCorrectedTotEtPHOSAcceptanceTPCNoPID(),1.0);
350   if(GetCorrectedHadEtFullAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceITS",GetCorrectedHadEtFullAcceptanceITS(),1.0);
351   if(GetCorrectedHadEtFullAcceptanceITSAssumingPion()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceITSAssumingPion",GetCorrectedHadEtFullAcceptanceITSAssumingPion(),1.0);
352   if(GetCorrectedHadEtFullAcceptanceITSAssumingProton()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceITSAssumingProton",GetCorrectedHadEtFullAcceptanceITSAssumingProton(),1.0);
353   if(GetCorrectedHadEtFullAcceptanceITSAssumingKaon()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceITSAssumingKaon",GetCorrectedHadEtFullAcceptanceITSAssumingKaon(),1.0);
354   if(GetCorrectedTotEtFullAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtFullAcceptanceITS",GetCorrectedTotEtFullAcceptanceITS(),1.0);
355   if(GetCorrectedHadEtEMCALAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtEMCALAcceptanceITS",GetCorrectedHadEtEMCALAcceptanceITS(),1.0);
356   if(GetCorrectedTotEtEMCALAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtEMCALAcceptanceITS",GetCorrectedTotEtEMCALAcceptanceITS(),1.0);
357   if(GetCorrectedHadEtPHOSAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtPHOSAcceptanceITS",GetCorrectedHadEtPHOSAcceptanceITS(),1.0);
358   if(GetCorrectedTotEtPHOSAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtPHOSAcceptanceITS",GetCorrectedTotEtPHOSAcceptanceITS(),1.0);
359   if(GetCorrectedHadEtFullAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtFullAcceptanceITSNoPID",GetCorrectedHadEtFullAcceptanceITSNoPID(),1.0);
360   if(GetCorrectedTotEtFullAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtFullAcceptanceITSNoPID",GetCorrectedTotEtFullAcceptanceITSNoPID(),1.0);
361   if(GetCorrectedHadEtEMCALAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtEMCALAcceptanceITSNoPID",GetCorrectedHadEtEMCALAcceptanceITSNoPID(),1.0);
362   if(GetCorrectedTotEtEMCALAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtEMCALAcceptanceITSNoPID",GetCorrectedTotEtEMCALAcceptanceITSNoPID(),1.0);
363   if(GetCorrectedHadEtPHOSAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoHadEtPHOSAcceptanceITSNoPID",GetCorrectedHadEtPHOSAcceptanceITSNoPID(),1.0);
364   if(GetCorrectedTotEtPHOSAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoTotEtPHOSAcceptanceITSNoPID",GetCorrectedTotEtPHOSAcceptanceITSNoPID(),1.0);
365
366   if(GetRawEtFullAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtFullAcceptanceTPC",GetRawEtFullAcceptanceTPC(),1.0);
367   if(GetRawEtEMCALAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtEMCALAcceptanceTPC",GetRawEtEMCALAcceptanceTPC(),1.0);
368   if(GetRawEtPHOSAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtPHOSAcceptanceTPC",GetRawEtPHOSAcceptanceTPC(),1.0);
369   if(GetRawEtFullAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtFullAcceptanceTPCNoPID",GetRawEtFullAcceptanceTPCNoPID(),1.0);
370   if(GetRawEtEMCALAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtEMCALAcceptanceTPCNoPID",GetRawEtEMCALAcceptanceTPCNoPID(),1.0);
371   if(GetRawEtPHOSAcceptanceTPCNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtPHOSAcceptanceTPCNoPID",GetRawEtPHOSAcceptanceTPCNoPID(),1.0);
372   if(GetRawEtFullAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtFullAcceptanceITS",GetRawEtFullAcceptanceITS(),1.0);
373   if(GetRawEtEMCALAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtEMCALAcceptanceITS",GetRawEtEMCALAcceptanceITS(),1.0);
374   if(GetRawEtPHOSAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtPHOSAcceptanceITS",GetRawEtPHOSAcceptanceITS(),1.0);
375   if(GetRawEtFullAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtFullAcceptanceITSNoPID",GetRawEtFullAcceptanceITSNoPID(),1.0);
376   if(GetRawEtEMCALAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtEMCALAcceptanceITSNoPID",GetRawEtEMCALAcceptanceITSNoPID(),1.0);
377   if(GetRawEtPHOSAcceptanceITSNoPID()>0.0 && fGoodEvent)FillHisto1D("RecoRawEtPHOSAcceptanceITSNoPID",GetRawEtPHOSAcceptanceITSNoPID(),1.0);
378   if(fCentBin>-1){//if we have Pb+Pb and found a centrality bin
379     if(GetCorrectedHadEtFullAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D(Form("RecoHadEtFullAcceptanceTPCCB%i",fCentBin),GetCorrectedHadEtFullAcceptanceTPC(),1.0);
380     if(GetCorrectedTotEtFullAcceptanceTPC()>0.0 && fGoodEvent)FillHisto1D(Form("RecoTotEtFullAcceptanceTPCCB%i",fCentBin),GetCorrectedTotEtFullAcceptanceTPC(),1.0);
381     if(GetCorrectedHadEtFullAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D(Form("RecoHadEtFullAcceptanceITSCB%i",fCentBin),GetCorrectedHadEtFullAcceptanceITS(),1.0);
382     if(GetCorrectedTotEtFullAcceptanceITS()>0.0 && fGoodEvent)FillHisto1D(Form("RecoTotEtFullAcceptanceITSCB%i",fCentBin),GetCorrectedTotEtFullAcceptanceITS(),1.0);
383     if(GetRawEtFullAcceptanceTPC()>0.0 && fGoodEvent)         FillHisto1D(Form("RecoRawEtFullAcceptanceTPCCB%i",fCentBin),GetRawEtFullAcceptanceTPC(),1.0);
384     if(GetRawEtFullAcceptanceITS()>0.0 && fGoodEvent)         FillHisto1D(Form("RecoRawEtFullAcceptanceITSCB%i",fCentBin),GetRawEtFullAcceptanceITS(),1.0);
385   }
386   delete pID;
387   delete strTPC;
388   delete strITS;
389   delete strTPCITS;
390   // cout<<"Reconstructed pi/k/p et "<<GetCorrectedPiKPEtFullAcceptanceTPC()<<endl;
391   return 1;
392 }
393 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
394   if(pt>=AliAnalysisHadEt::fgPtTPCCutOff && IsTPC){//TPC tracks
395     //adding to the raw Et
396     fRawEtFullAcceptanceTPC += rawEt;
397     if(InPHOS)fRawEtPHOSAcceptanceTPC += rawEt;
398     if(InEMCAL)fRawEtEMCALAcceptanceTPC += rawEt;
399     fRawEtFullAcceptanceTPCNoPID += rawEtNoPID;
400     if(InPHOS)fRawEtPHOSAcceptanceTPCNoPID += rawEtNoPID;
401     if(InEMCAL)fRawEtEMCALAcceptanceTPCNoPID += rawEtNoPID;
402     //adding to the corrected Et
403     fCorrectedHadEtFullAcceptanceTPC += corrEt;//the pi/k/p et
404     fCorrectedHadEtFullAcceptanceTPCAssumingPion += corrEtPion;
405     fCorrectedHadEtFullAcceptanceTPCAssumingProton += corrEtProton;
406     fCorrectedHadEtFullAcceptanceTPCAssumingKaon += corrEtKaon;
407     if(InPHOS)fCorrectedHadEtPHOSAcceptanceTPC += corrEt;
408     if(InEMCAL)fCorrectedHadEtEMCALAcceptanceTPC += corrEt;
409     fCorrectedHadEtFullAcceptanceTPCNoPID += corrEtNoPID;
410     if(InPHOS)fCorrectedHadEtPHOSAcceptanceTPCNoPID += corrEtNoPID;
411     if(InEMCAL)fCorrectedHadEtEMCALAcceptanceTPCNoPID += corrEtNoPID;
412   }
413   if(pt<AliAnalysisHadEt::fgPtTPCCutOff &&pt>=AliAnalysisHadEt::fgPtITSCutOff && !IsTPC){//ITS tracks
414     //adding to the raw Et
415     fRawEtFullAcceptanceITS += rawEt;
416     if(InPHOS)fRawEtPHOSAcceptanceITS += rawEt;
417     if(InEMCAL)fRawEtEMCALAcceptanceITS += rawEt;
418     fRawEtFullAcceptanceITSNoPID += rawEtNoPID;
419     if(InPHOS)fRawEtPHOSAcceptanceITSNoPID += rawEtNoPID;
420     if(InEMCAL)fRawEtEMCALAcceptanceITSNoPID += rawEtNoPID;
421     //adding to the corrected Et
422     fCorrectedHadEtFullAcceptanceITS += corrEt;
423     fCorrectedHadEtFullAcceptanceITSAssumingPion += corrEtPion;
424     fCorrectedHadEtFullAcceptanceITSAssumingProton += corrEtProton;
425     fCorrectedHadEtFullAcceptanceITSAssumingKaon += corrEtKaon;
426     if(InPHOS)fCorrectedHadEtPHOSAcceptanceITS += corrEt;
427     if(InEMCAL)fCorrectedHadEtEMCALAcceptanceITS += corrEt;
428     fCorrectedHadEtFullAcceptanceITSNoPID += corrEtNoPID;
429     if(InPHOS)fCorrectedHadEtPHOSAcceptanceITSNoPID += corrEtNoPID;
430     if(InEMCAL)fCorrectedHadEtEMCALAcceptanceITSNoPID += corrEtNoPID;
431   }
432 }
433
434 Bool_t AliAnalysisHadEtReconstructed::IsInPHOS(AliESDtrack *track){//This function will need to be elaborated on later to include PHOS dead channels
435   if(!track){
436     cout<<"Error: Track does not exist!!"<<endl;
437     return kFALSE;
438   }
439   return   TMath::Abs(track->Eta()) < fCuts->GetGeometryPhosEtaAccCut()//in eta acceptance
440     && track->Phi()*180.0/TMath::Pi() > fCuts->GetGeometryPhosPhiAccMinCut()//greater than the minimum phi
441     && track->Phi()*180.0/TMath::Pi() < fCuts->GetGeometryPhosPhiAccMaxCut();//less than the maximum phi
442 }
443 Bool_t AliAnalysisHadEtReconstructed::IsInEMCAL(AliESDtrack *track){//This function will need to be elaborated on later to include EMCAL dead channels
444   if(!track){
445     cout<<"Error: Track does not exist!!"<<endl;
446     return kFALSE;
447   }
448   return   TMath::Abs(track->Eta()) < fCuts->GetGeometryEmcalEtaAccCut()//in eta acceptance
449     && track->Phi()*180.0/TMath::Pi() > fCuts->GetGeometryEmcalPhiAccMinCut()//greater than the minimum phi
450     && track->Phi()*180.0/TMath::Pi() < fCuts->GetGeometryEmcalPhiAccMaxCut();//less than the maximum phi
451 }
452 Bool_t AliAnalysisHadEtReconstructed::CheckGoodVertex(AliVParticle* track)
453 { // check vertex
454
455   Float_t bxy = 999.;
456   Float_t bz = 999.;
457   if(!track){
458     AliError("ERROR: no track");
459     return kFALSE;
460   }
461   AliESDtrack *esdTrack = dynamic_cast<AliESDtrack*>(track);
462   if(!esdTrack){
463     AliError("ERROR: no track");
464     return kFALSE;
465   }
466   esdTrack->GetImpactParametersTPC(bxy,bz);
467
468   bool status = (TMath::Abs(track->Xv()) < fCuts->GetReconstructedVertexXCut()) && 
469     (TMath::Abs(track->Yv()) < fCuts->GetReconstructedVertexYCut()) && 
470     (TMath::Abs(track->Zv()) < fCuts->GetReconstructedVertexZCut()) && 
471     (TMath::Abs(bxy) < fCuts->GetReconstructedIPxyCut()) && 
472     (TMath::Abs(bz) < fCuts->GetReconstructedIPzCut()); 
473
474   return status;
475 }
476
477 void AliAnalysisHadEtReconstructed::Init()
478 { // Init
479   AliAnalysisHadEt::Init();
480   if(fCorrections){
481     fCorrTotEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"Full");
482     fCorrTotEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"Full");
483     fCorrHadEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"Full");
484     fCorrHadEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"Full");
485     fCorrTotEtEMCALAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"EMCAL");
486     fCorrTotEtEMCALAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"EMCAL");
487     fCorrHadEtEMCALAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"EMCAL");
488     fCorrHadEtEMCALAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"EMCAL");
489     fCorrTotEtPHOSAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"PHOS");
490     fCorrTotEtPHOSAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"PHOS");
491     fCorrHadEtPHOSAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"PHOS");
492     fCorrHadEtPHOSAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"PHOS");
493   }
494   else{
495     cout<<"Warning!  You have not set corrections.  Your code will crash.  You have to set the corrections."<<endl;
496   }
497 }
498
499 void AliAnalysisHadEtReconstructed::ResetEventValues(){//resetting event by event et's
500   AliAnalysisHadEt::ResetEventValues();
501   fCorrectedHadEtFullAcceptanceTPCNoPID=0.0;
502   fCorrectedHadEtFullAcceptanceITSNoPID=0.0;
503   fCorrectedHadEtEMCALAcceptanceTPCNoPID=0.0;
504   fCorrectedHadEtEMCALAcceptanceITSNoPID=0.0;
505   fCorrectedHadEtPHOSAcceptanceTPCNoPID=0.0;
506   fCorrectedHadEtPHOSAcceptanceITSNoPID=0.0;
507   fCorrectedHadEtFullAcceptanceTPC=0.0;
508   fCorrectedHadEtFullAcceptanceITS=0.0;
509   fCorrectedHadEtFullAcceptanceTPCAssumingPion=0.0;
510   fCorrectedHadEtFullAcceptanceITSAssumingPion=0.0;
511   fCorrectedHadEtFullAcceptanceTPCAssumingProton=0.0;
512   fCorrectedHadEtFullAcceptanceITSAssumingProton=0.0;
513   fCorrectedHadEtFullAcceptanceTPCAssumingKaon=0.0;
514   fCorrectedHadEtFullAcceptanceITSAssumingKaon=0.0;
515   fCorrectedHadEtEMCALAcceptanceTPC=0.0;
516   fCorrectedHadEtEMCALAcceptanceITS=0.0;
517   fCorrectedHadEtPHOSAcceptanceTPC=0.0;
518   fCorrectedHadEtPHOSAcceptanceITS=0.0;
519   fRawEtFullAcceptanceTPC=0.0;
520   fRawEtFullAcceptanceITS=0.0;
521   fRawEtEMCALAcceptanceTPC=0.0;
522   fRawEtEMCALAcceptanceITS=0.0;
523   fRawEtPHOSAcceptanceTPC=0.0;
524   fRawEtPHOSAcceptanceITS=0.0;
525   fRawEtFullAcceptanceTPCNoPID=0.0;
526   fRawEtFullAcceptanceITSNoPID=0.0;
527   fRawEtEMCALAcceptanceTPCNoPID=0.0;
528   fRawEtEMCALAcceptanceITSNoPID=0.0;
529   fRawEtPHOSAcceptanceTPCNoPID=0.0;
530   fRawEtPHOSAcceptanceITSNoPID=0.0;
531
532   if(TMath::Abs(fCorrTotEtFullAcceptanceTPC)<1e-3){
533     if (fConfigFile.Length()) {
534       cout<<"Warning: Rereading fCorrections file..."<<endl;
535       gROOT->LoadMacro(fConfigFile);
536       fCorrections = (AliAnalysisHadEtCorrections *) gInterpreter->ProcessLine("ConfigHadEtAnalysis()");
537       fCorrTotEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"Full");
538       fCorrTotEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"Full");
539       fCorrHadEtFullAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"Full");
540       fCorrHadEtFullAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"Full");
541       fCorrTotEtEMCALAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"EMCAL");
542       fCorrTotEtEMCALAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"EMCAL");
543       fCorrHadEtEMCALAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"EMCAL");
544       fCorrHadEtEMCALAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"EMCAL");
545       fCorrTotEtPHOSAcceptanceTPC = fCorrections->GetConstantCorrections(kTRUE,fgPtTPCCutOff,"PHOS");
546       fCorrTotEtPHOSAcceptanceITS = fCorrections->GetConstantCorrections(kTRUE,fgPtITSCutOff,"PHOS");
547       fCorrHadEtPHOSAcceptanceTPC = fCorrections->GetConstantCorrections(kFALSE,fgPtTPCCutOff,"PHOS");
548       fCorrHadEtPHOSAcceptanceITS = fCorrections->GetConstantCorrections(kFALSE,fgPtITSCutOff,"PHOS");
549     }
550     else{cerr<<"Uh-oh!  Unable to open configuration file!"<<endl;}
551   }
552 }
553 void AliAnalysisHadEtReconstructed::CreateHistograms(){//Creating histograms and adding them to the output TList
554
555   //TString *strTPC = new TString("TPC");
556   TString *strITS = new TString("ITS");
557   TString *strTPCITS = new TString("TPCITS");
558   for(Int_t i=0;i<2;i++){
559     TString *cutName = NULL;
560     Float_t maxPtdEdx = 10;
561     Float_t mindEdx = 35;
562     Float_t maxdEdx = 150.0;
563     switch(i){
564     case 0:
565       cutName = strTPCITS;
566       break;
567     case 1:
568       cutName = strITS;
569       maxPtdEdx = 5;
570       maxdEdx = 500.0;
571       break;
572       //not deleting this completely since we might want to add it back in later
573       //     case 2:
574       //       cutName = strTPC;
575       //       maxPtdEdx = 5;
576       //       maxdEdx = 500.0;
577       //       break;
578     default:
579       cerr<<"Error:  cannot make histograms!"<<endl;
580       return;
581     }
582
583     CreateEtaPtHisto2D(Form("EtDataRaw%sPiPlus",cutName->Data()),"Raw reconstructed E_{T} from identified #pi^{+}");
584     CreateEtaPtHisto2D(Form("EtDataRaw%sPiMinus",cutName->Data()),"Raw reconstructed E_{T} from identified #pi^{-}");
585     CreateEtaPtHisto2D(Form("EtDataRaw%sKPlus",cutName->Data()),"Raw reconstructed E_{T} from identified K^{+}");
586     //     CreateEtaPtHisto2D(Form("EtDataRaw%sEMinus",cutName->Data()),"Raw reconstructed E_{T} from identified e^{-}");
587     //     CreateEtaPtHisto2D(Form("EtDataRaw%sEPlus",cutName->Data()),"Raw reconstructed E_{T} from identified e^{+}");
588     CreateEtaPtHisto2D(Form("EtDataRaw%sKMinus",cutName->Data()),"Raw reconstructed E_{T} from identified K^{-}");
589     CreateEtaPtHisto2D(Form("EtDataRaw%sProton",cutName->Data()),"Raw reconstructed E_{T} from identified p");
590     CreateEtaPtHisto2D(Form("EtDataRaw%sAntiProton",cutName->Data()),"Raw reconstructed E_{T} from identified #bar{p}");
591     CreateEtaPtHisto2D(Form("EtDataRaw%sUnidentified",cutName->Data()),"Raw reconstructed E_{T} from unidentified particles using real mass");
592     CreateEtaPtHisto2D(Form("EtDataRaw%sNoID",cutName->Data()),"Raw reconstructed E_{T} from unidentified particles using real mass");
593
594     CreateEtaPtHisto2D(Form("EtDataCorrected%sPiPlus",cutName->Data()),"Corrected reconstructed E_{T} from identified #pi^{+}");
595     CreateEtaPtHisto2D(Form("EtDataCorrected%sPiMinus",cutName->Data()),"Corrected reconstructed E_{T} from identified #pi^{-}");
596     CreateEtaPtHisto2D(Form("EtDataCorrected%sKPlus",cutName->Data()),"Corrected reconstructed E_{T} from identified K^{+}");
597     //     CreateEtaPtHisto2D(Form("EtDataCorrected%sEMinus",cutName->Data()),"Corrected reconstructed E_{T} from identified e^{-}");
598     //     CreateEtaPtHisto2D(Form("EtDataCorrected%sEPlus",cutName->Data()),"Corrected reconstructed E_{T} from identified e^{+}");
599     CreateEtaPtHisto2D(Form("EtDataCorrected%sKMinus",cutName->Data()),"Corrected reconstructed E_{T} from identified K^{-}");
600     CreateEtaPtHisto2D(Form("EtDataCorrected%sProton",cutName->Data()),"Corrected reconstructed E_{T} from identified p");
601     CreateEtaPtHisto2D(Form("EtDataCorrected%sAntiProton",cutName->Data()),"Corrected reconstructed E_{T} from identified #bar{p}");
602     CreateEtaPtHisto2D(Form("EtDataCorrected%sUnidentified",cutName->Data()),"Corrected reconstructed E_{T} from unidentified particles using real mass");
603     CreateEtaPtHisto2D(Form("EtDataCorrected%sNoID",cutName->Data()),"Corrected reconstructed E_{T} from unidentified particles using real mass");
604
605
606     CreateEtaPtHisto2D(Form("EtNData%sPiPlus",cutName->Data()),"Number of reconstructed #pi^{+}");
607     CreateEtaPtHisto2D(Form("EtNData%sPiMinus",cutName->Data()),"Number of reconstructed #pi^{-}");
608     CreateEtaPtHisto2D(Form("EtNData%sKPlus",cutName->Data()),"Number of reconstructed K^{+}");
609     CreateEtaPtHisto2D(Form("EtNData%sKMinus",cutName->Data()),"Number of reconstructed K^{-}");
610     CreateEtaPtHisto2D(Form("EtNData%sProton",cutName->Data()),"Number of reconstructed p");
611     CreateEtaPtHisto2D(Form("EtNData%sAntiProton",cutName->Data()),"Number of reconstructed #bar{p}");
612     CreateEtaPtHisto2D(Form("EtNData%sUnidentified",cutName->Data()),"Number of Reconstructed unidentified particles");
613
614     CreateHisto2D(Form("dEdxDataAll%s",cutName->Data()),"dE/dx for all particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
615     CreateHisto2D(Form("dEdxDataPion%s",cutName->Data()),"dE/dx for #pi^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
616     CreateHisto2D(Form("dEdxDataKaon%s",cutName->Data()),"dE/dx for K^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
617     CreateHisto2D(Form("dEdxDataProton%s",cutName->Data()),"dE/dx for p(#bar{p})","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
618     CreateHisto2D(Form("dEdxDataElectron%s",cutName->Data()),"dE/dx for e^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
619     CreateHisto2D(Form("dEdxDataUnidentified%s",cutName->Data()),"dE/dx for unidentified particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
620   }
621
622   Float_t minEt = 0.0;
623   Float_t maxEt = 100.0;
624   if(fDataSet==20100) maxEt=4000.0;
625   Int_t nbinsEt = 200;
626   char histoname[200];
627   char histotitle[200];
628   char xtitle[50];
629   TString *ytitle = new TString("Number of events");
630   TString *sTPC = new TString("TPC");
631   TString *sITS = new TString("ITS");
632   TString *sTPCpt = new TString("0.15");
633   TString *sITSpt = new TString("0.10");
634   TString *sPID = new TString("");
635   TString *sNoPID = new TString("NoPID");
636   TString *sNoPIDString = new TString(", No PID");
637   TString *sHadEt = new TString("HadEt");
638   TString *sRawEt = new TString("RawEt");
639   TString *sTotEt = new TString("TotEt");
640   TString *sTotEtString = new TString("total E_{T}");
641   TString *sHadEtString = new TString("hadronic E_{T}");
642   TString *sRawEtString = new TString("raw E_{T}");
643   TString *sFull = new TString("Full");
644   TString *sEMCAL = new TString("EMCAL");
645   TString *sPHOS = new TString("PHOS");
646   
647   for(int tpc = 0;tpc<2;tpc++){
648     for(int hadet = 0;hadet<3;hadet++){
649       for(int type = 0;type<3;type++){
650         for(int pid = 0;pid<2;pid++){
651           TString *detector = NULL;
652           TString *partid = NULL;
653           TString *et = sHadEt;
654           TString *acceptance = NULL;
655           TString *ptstring = NULL;
656           TString *partidstring = NULL;
657           TString *etstring = sHadEtString;
658           if(tpc==1) {detector = sTPC; ptstring = sTPCpt;}
659           else{detector = sITS; ptstring = sITSpt;}
660           if(pid==1){partid = sPID; partidstring = sPID;}
661           else{partid = sNoPID; partidstring = sNoPIDString;}
662           if(hadet==1) {et = sHadEt; etstring = sHadEtString;}
663           if(hadet==0){et = sTotEt; etstring = sTotEtString;}
664           if(hadet==2){et = sRawEt; etstring = sRawEtString;}
665           switch(type){
666           case 0:
667             acceptance = sFull;
668             break;
669           case 1:
670             acceptance = sEMCAL;
671             break;
672           case 2:
673             acceptance = sPHOS;
674             break;
675           default:
676             acceptance = sFull;
677           }
678           snprintf(histoname,200,"Reco%s%sAcceptance%s%s",et->Data(),acceptance->Data(),detector->Data(),partid->Data());
679           snprintf(histotitle,200,"Reconstructed %s with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
680           snprintf(xtitle,50,"Reconstructed %s",etstring->Data());
681           CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
682           if(type==0){//full acceptance only
683             snprintf(xtitle,50,"Reconstructed %s",etstring->Data());
684
685             snprintf(histoname,200,"Reco%s%sAcceptance%s%sND",et->Data(),acceptance->Data(),detector->Data(),partid->Data());
686             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());
687             CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
688             snprintf(histoname,200,"Reco%s%sAcceptance%s%sDD",et->Data(),acceptance->Data(),detector->Data(),partid->Data());
689             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());
690             CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
691             snprintf(histoname,200,"Reco%s%sAcceptance%s%sSD",et->Data(),acceptance->Data(),detector->Data(),partid->Data());
692             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());
693             CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
694           }
695           if(fDataSet==20100 && type ==0 &&pid==1){//If this is Pb+Pb and full acceptance with pid
696             Int_t width = 5;
697             if(fNCentBins<21) width = 10;
698             for(Int_t i=0;i<fNCentBins;i++){
699               snprintf(histoname,200,"Reco%s%sAcceptance%s%sCB%i",et->Data(),acceptance->Data(),detector->Data(),partid->Data(),i);
700               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);
701               snprintf(xtitle,50,"Reconstructed %s",etstring->Data());
702               CreateHisto1D(histoname,histotitle,xtitle,ytitle->Data(),nbinsEt*2,minEt,maxEt);
703             }
704           }
705         }
706       }
707     }
708   }
709   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);
710   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);
711   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);
712   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);
713   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);
714   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);
715
716   //Cross checks that corrections are applied correctly
717   if(fDataSet==20100){
718     CreateHisto2D("fbkgdVsCentralityBin","f_{bkgd} vs centrality bin","centrality bin","f_{bkgd}",21,-1.5,19.5,200,0.7,1.05);//
719     CreateHisto2D("feffPionVsCentralityBin","Pion efficiency vs centrality bin","centrality bin","pion efficiency",21,-1.5,19.5,200,0,1.2);//
720     CreateHisto2D("feffHadronVsCentralityBin","Hadron efficiency vs centrality bin","centrality bin","hadron efficiency",21,-1.5,19.5,200,0,1.2);//
721     CreateHisto2D("feffKaonVsCentralityBin","Kaon efficiency vs centrality bin","centrality bin","kaon efficiency",21,-1.5,19.5,200,0,1.2);//
722     CreateHisto2D("feffProtonVsCentralityBin","Proton efficiency vs centrality bin","centrality bin","proton efficiency",21,-1.5,19.5,200,0,1.2);//
723     CreateHisto2D("fnotIDVsCentralityBin","f_{notID} vs centrality bin","centrality bin","f_{notID}",21,-1.5,19.5,50,0.95,1.05);//
724     CreateHisto2D("fpTcutVsCentralityBin","f_{pTcut} vs centrality bin","centrality bin","f_{pTcut}",21,-1.5,19.5,50,0.95,1.05);
725     CreateHisto2D("fneutralVsCentralityBin","f_{neutral} vs centrality bin","centrality bin","f_{neutral}",21,-1.5,19.5,50,0.5,1.00);
726     CreateHisto2D("ConstantCorrectionsVsCentralityBin","constant corrections vs centrality bin","centrality bin","constant corrections",21,-1.5,19.5,50,0.5,1.00);
727   }
728
729   delete sTPC;
730   delete sITS;
731   delete sTPCpt;
732   delete sITSpt;
733   delete sPID;
734   delete sNoPID;
735   delete sNoPIDString;
736   delete sHadEt;
737   delete sTotEt;
738   delete sTotEtString;
739   delete sHadEtString;
740   delete sFull;
741   delete sEMCAL;
742   delete sPHOS;
743
744 }