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