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