]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/totEt/AliAnalysisHadEtMonteCarlo.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / totEt / AliAnalysisHadEtMonteCarlo.cxx
1 //_________________________________________________________________________
2 //  Utility Class for transverse energy studies, charged hadrons
3 //  Base class for MC analysis
4 //  - MC output
5 // implementation file
6 //
7 //Created by Christine Nattrass, Rebecca Scott, Irakli Martashvili
8 //University of Tennessee at Knoxville
9 //_________________________________________________________________________
10 #include "AliAnalysisHadEtMonteCarlo.h"
11 #include "AliAnalysisEtCuts.h"
12
13 #include "AliStack.h"
14 #include "AliMCEvent.h"
15 #include "AliESDEvent.h"
16 #include "AliESDtrackCuts.h"
17 #include "AliESDpid.h"
18 #include "AliPID.h"
19 #include "AliESDtrack.h"
20 #include "AliVParticle.h"
21 #include "AliAnalysisTask.h"
22 #include "AliAnalysisManager.h"
23 #include "AliAnalysisHadEtReconstructed.h"
24 #include "AliAnalysisHadEtCorrections.h"
25 #include "AliAnalysisEtCuts.h"
26 #include <iostream>
27 #include "TRandom.h"
28 #include "AliAnalysisEtCommon.h"
29 #include "AliCentrality.h"
30 #include "AliLog.h"
31 #include "AliPWG0Helper.h"
32 #include "AliPIDResponse.h"
33 #include "AliTPCPIDResponse.h" 
34 #include "AliInputEventHandler.h"
35 #include "AliAnalysisManager.h"
36 #include "AliGenEventHeader.h"
37 #include "AliGenCocktailEventHeader.h"
38 #include "AliGenHijingEventHeader.h"
39 //class AliPWG0Helper;
40 //#include "$ALICE_ROOT/PWG0/AliPWG0Helper.h"
41
42 using namespace std;
43
44 ClassImp(AliAnalysisHadEtMonteCarlo);
45
46
47 Int_t AliAnalysisHadEtMonteCarlo::fgNumSmearWidths = 4;
48 Float_t AliAnalysisHadEtMonteCarlo::fgSmearWidths[4] = {0.005,0.006,0.007,0.008};
49
50 AliAnalysisHadEtMonteCarlo::AliAnalysisHadEtMonteCarlo():AliAnalysisHadEt()
51                                                         ,checkLabelForHIJING(kFALSE)
52                                                         ,fNMCProducedMin(0)
53                                                         ,fNMCProducedMax(0)
54                                                         ,fSimPiKPEt(0)
55                                                         ,fSimRawEtTPC(0)
56                                                         ,fSimRawEtITS(0)
57                                                         ,fSimHadEt(0)
58                                                         ,fSimTotEt(0) 
59                                                         ,fSimPiKPEtShouldBeReco(0)
60                                                         ,fSimPiKPEtShouldBeRecoPi(0)
61                                                         ,fSimPiKPEtShouldBeRecoK(0)
62                                                         ,fSimPiKPEtShouldBeRecoP(0)
63                                                         ,fRunLightweight(0)
64                                                         ,fInvestigateSmearing(0)
65                                                         ,fInvestigateFull(0)
66                                                         ,fInvestigateEMCal(0)
67                                                         ,fInvestigatePHOS(0)
68                                                         ,fInvestigatePiKP(0)
69                                                         ,fRequireITSHits(0)
70                                                         ,fBaryonEnhancement(0)
71                                                         ,fUseRecoPt(0)
72                                                         ,kIsOfflineV0AND(0)
73                                                         ,kIsOfflineMB(0)
74                                                         ,kDoTriggerChecks(0)
75                                                         ,kDoTriggerChecksOnly(0)
76                                                         ,fPtSmearer(0)
77                                                         ,fHadEtReco(0)
78 {
79 }
80 AliAnalysisHadEtMonteCarlo::~AliAnalysisHadEtMonteCarlo(){//destructor
81   if(fPtSmearer) delete fPtSmearer;
82 }
83
84 void AliAnalysisHadEtMonteCarlo::ResetEventValues(){//resetting event variables
85   AliAnalysisHadEt::ResetEventValues();
86     fSimHadEt=0.0;
87     fSimTotEt=0.0;
88     fSimPiKPEt=0.0;
89     fSimRawEtTPC=0.0;
90     fSimRawEtITS=0.0;
91 }
92 Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev,AliVEvent* ev2)
93 { // analyse MC and real event info
94   FillHisto1D("NEvents",0.5,1);
95   if(!ev || !ev2){
96     AliFatal("ERROR: Event does not exist");   
97     return 0;
98   }
99   AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
100   AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev2);
101   if(!mcEvent || !realEvent){  
102     AliFatal("ERROR: mcEvent or realEvent does not exist");
103     return 0;
104   }
105   AliStack *stack = mcEvent->Stack();
106
107   if(checkLabelForHIJING) SetGeneratorMinMaxParticles(mcEvent);
108   fCentBin= -1;
109   fGoodEvent = kTRUE;//for p+p collisions if we made it this far we have a good event
110   if(fDataSet==20100 ||fDataSet==2011 ){//If this is Pb+Pb
111 //     AliCentrality *centrality2 = realEvent->GetCentrality();
112 //     if(fNCentBins<21) fCentBin= centrality2->GetCentralityClass10(fCentralityMethod);
113 //     else{ fCentBin= centrality2->GetCentralityClass5(fCentralityMethod);}
114 //     cout<<"centrality "<<fCentBin<<endl;
115     AliCentrality *centrality =  realEvent->GetCentrality();
116     fCentBin = GetCentralityBin(fNCentBins, centrality);
117     if(fCentBin ==-1) fGoodEvent = kFALSE;//but for Pb+Pb events we don't want to count events where we did not find a centrality
118   }
119   AnalyseEvent(ev);
120   if(kDoTriggerChecksOnly) return 1;//If we are only doing trigger checks, don't bother with all of the reconstructed stuff
121   //for PID
122   if(kDoTriggerChecks && (!kIsOfflineV0AND ||!kIsOfflineMB ) ){return 1;}//In this case we are just after trigger efficiencies and don't care about the ET reconstructed.
123   //AliESDpid *pID = new AliESDpid();//This is identified as a memory leak in valgrind but I delete this object so I think it may be a problem with AliESDpid.
124
125   //=============================================
126
127   //Roughly following $ALICE_ROOT/PWG0/dNdEta/AlidNdEtaCorrectionTask
128
129   //=============================================TPC&&ITS=============================================
130   //for investigating momentum smearing 
131   Float_t pTtotalReco = 0.0;
132   Float_t pTtotalSim = 0.0;
133   Float_t eTtotalSimAll = 0.0;
134   Float_t eTtotalReco = 0.0;
135   Float_t eTtotalRecoEffCorr = 0.0;
136   Float_t eTtotalRecoEffBkgdCorr = 0.0;
137   Float_t eTtotalRecoBkgdCorr = 0.0;
138   Float_t eTtotalRecoUncorr = 0.0;
139   Float_t eTtotalRecoTotalUncorr = 0.0;
140   Float_t eTtotalRecoEffCorrPi = 0.0;
141   Float_t eTtotalRecoEffCorrK = 0.0;
142   Float_t eTtotalRecoEffCorrP = 0.0;
143   Float_t eTtotalRecoBkgd = 0.0;
144   Float_t eTtotalRecoPIDSmeared = 0.0;
145   Float_t eTtotalAsReconstructed = 0.0;
146   Float_t eTBkgdAsReconstructed = 0.0;
147   Float_t eTtotalAsReconstructedPi = 0.0;
148   Float_t eTtotalAsReconstructedP = 0.0;
149   Float_t eTtotalAsReconstructedK = 0.0;
150   Float_t eTtotalSim = 0.0;
151   Int_t nReco = 0;
152   TString *strTPC = new TString("TPC");
153   TString *strITS = new TString("ITS");
154   TString *strTPCITS = new TString("TPCITS");
155   Int_t lastcutset = 1;
156   if(fRequireITSHits) lastcutset = 2;
157   for(Int_t cutset=0;cutset<=lastcutset;cutset++){
158     TString *cutName = NULL;
159     TObjArray* list = NULL;
160     switch(cutset){
161     case 0:
162       cutName = strTPC;
163       list = fEsdtrackCutsTPC->GetAcceptedTracks(realEvent);
164       break;
165     case 1:
166       cutName = strITS;
167       list = fEsdtrackCutsITS->GetAcceptedTracks(realEvent);
168       break;
169     case 2:
170       cutName = strTPCITS;
171       list = fEsdtrackCutsITSTPC->GetAcceptedTracks(realEvent);
172       break;
173     default:
174       cerr<<"Error:  cannot fill histograms!"<<endl;
175       return -1;
176     }
177     Int_t nGoodTracks = list->GetEntries();
178     for (Int_t iTrack = 0; iTrack < nGoodTracks; iTrack++)
179       {
180         AliESDtrack *track = dynamic_cast<AliESDtrack*> (list->At(iTrack));
181         UInt_t label = (UInt_t)TMath::Abs(track->GetLabel());
182         //if(checkLabelForHIJING && !IsHIJINGLabel(label,mcEvent,stack) ){cout<<"I am rejecting this particle because it is not HIJING"<<endl;}
183         if(checkLabelForHIJING && !IsHIJINGLabel(label,mcEvent,stack) ) continue;
184         if (!track)
185           {
186             Printf("ERROR: Could not get track %d", iTrack);
187             continue;
188           }
189         else{
190           Float_t nSigmaPion,nSigmaProton,nSigmaKaon,nSigmaElectron;
191 //        pID->MakeTPCPID(track);
192 //        pID->MakeITSPID(track);
193           if(cutset!=1){
194             nSigmaPion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kPion)); 
195             nSigmaProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kProton)); 
196             nSigmaKaon =TMath::Abs( fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon)); 
197             nSigmaElectron =TMath::Abs( fPIDResponse->NumberOfSigmasTPC(track, AliPID::kElectron)); 
198 //          nSigmaPion = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kPion));
199 //          nSigmaProton = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kProton));
200 //          nSigmaKaon = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kKaon));
201 //          nSigmaElectron = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kElectron));
202           }
203           else{
204             nSigmaPion = TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kPion)); 
205             nSigmaProton = TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kProton)); 
206             nSigmaKaon = TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kKaon)); 
207             nSigmaElectron = TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kElectron)); 
208 //          nSigmaPion = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kPion));
209 //          nSigmaProton = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kProton));
210 //          nSigmaKaon = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kKaon));
211 //          nSigmaElectron = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kElectron));
212           }
213 //        bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
214 //        bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
215 //        bool isKaon = (nSigmaPion>3.0 && nSigmaProton>2.0 && nSigmaKaon<2.0);
216 //        bool isProton = (nSigmaPion>3.0 && nSigmaProton<2.0 && nSigmaKaon>2.0);
217           bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
218           bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
219           bool isKaon = (nSigmaPion>3.0 && nSigmaProton>3.0 && nSigmaKaon<3.0 && track->Pt()<0.45);
220           bool isProton = (nSigmaPion>3.0 && nSigmaProton<3.0 && nSigmaKaon>3.0 && track->Pt()<0.9);
221
222           bool unidentified = (!isProton && !isKaon && !isElectron && !isPion);
223           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
224             unidentified = true;
225             isPion=false;
226             isElectron=false;
227             isKaon=false;
228             isProton=false;
229           }
230           Float_t dEdx = track->GetTPCsignal();
231           if(cutset==1) dEdx = track->GetITSsignal();
232
233           FillHisto2D(Form("dEdxAll%s",cutName->Data()),track->P(),dEdx,1.0);
234
235             TParticle  *simPart  = stack->Particle(label);
236           if(!simPart) {
237             Printf("no MC particle\n");                 
238             continue;           
239           }
240           else{//analysis
241             if(fInvestigateSmearing && cutset==2){
242               //calculates what we would measure for the pi/k/p et with background
243               eTtotalRecoTotalUncorr += Et(simPart);
244               if(isPion){
245                 eTtotalRecoEffBkgdCorr += Et(simPart) *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
246                 eTtotalRecoBkgdCorr += Et(simPart) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
247                 eTtotalRecoTotalUncorr += Et(simPart);
248               }
249               if(isProton){
250                 eTtotalRecoEffBkgdCorr += Et(simPart) *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
251                 eTtotalRecoBkgdCorr += Et(simPart) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
252               }
253               if(isKaon){
254                 eTtotalRecoEffBkgdCorr += Et(simPart) *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
255                 eTtotalRecoBkgdCorr += Et(simPart) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
256               }
257               if(unidentified){
258                 eTtotalRecoEffBkgdCorr += Et(simPart) *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
259                 eTtotalRecoBkgdCorr += Et(simPart) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
260               }
261               //for calculating et as it's done in the reconstructed data
262               Float_t corrBkgd=0.0;
263               Float_t corrNotID=0.0;
264               //Float_t corrNoID=0.0;// = fHadEtReco->GetCorrections()->GetNotIDCorrectionNoPID(track->Pt());
265               Float_t corrEff = 0.0;
266               //Float_t corrEffNoID = 0.0;
267               Float_t et = 0.0;
268               if(cutset==2){//TPC
269                 corrBkgd = fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
270                 //corrEffNoID = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
271                 corrNotID = fHadEtReco->GetCorrections()->GetNotIDConstCorrectionTPC();
272                 //corrNoID = fHadEtReco->GetCorrections()->GetNotIDConstCorrectionTPCNoID();
273               }
274               if(cutset==1){//ITS
275                 corrBkgd = fHadEtReco->GetCorrections()->GetBackgroundCorrectionITS(track->Pt());
276                 //corrEffNoID = fHadEtReco->GetCorrections()->GetITSEfficiencyCorrectionHadron(track->Pt(),fCentBin);
277                 corrNotID = fHadEtReco->GetCorrections()->GetNotIDConstCorrectionITS();
278                 //corrNoID = fHadEtReco->GetCorrections()->GetNotIDConstCorrectionITSNoID();
279               }
280               
281               
282               bool isprimary = stack->IsPhysicalPrimary(label);
283               if (TMath::Abs(track->Eta()) < fHadEtReco->GetCorrections()->GetEtaCut()){
284                   if(isPion){
285                     et = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
286                     corrEff = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin);
287                     if(isprimary){
288                       eTtotalAsReconstructed += et*corrBkgd*corrEff*corrNotID;
289                     }
290                     else{
291                       eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
292                     }
293                   }
294                   if(isKaon){
295                     et = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
296                     corrEff = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin);
297                     if(isprimary){
298                       eTtotalAsReconstructed += et*corrBkgd*corrEff*corrNotID;
299                     }
300                     else{
301                       eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
302                     }
303                   }
304                   if(isProton){
305                     et = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
306                     corrEff = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin);
307                     if(isprimary){
308                       eTtotalAsReconstructed += et*corrBkgd*corrEff*corrNotID;
309                     }
310                     else{
311                       eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
312                     }
313                   }
314                   if(unidentified){
315                     et = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
316                     corrEff = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
317                     if(isprimary){
318                       eTtotalAsReconstructed += et*corrBkgd*corrEff*corrNotID;
319                     }
320                     else{
321                       eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
322                     }
323                   }
324                   if(!isPion && !isProton && !isKaon && !unidentified){
325                       eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
326                   }
327                   TParticlePDG *pdg = simPart->GetPDG(0);
328                   if(pdg){
329                     Int_t pdgCode =  simPart->GetPDG(0)->PdgCode();
330                     if(pdgCode==fgPiPlusCode ||pdgCode==fgPiMinusCode){eTtotalAsReconstructedPi+=et*corrBkgd*corrEff*corrNotID;}
331                     if(pdgCode==fgKPlusCode ||pdgCode==fgKMinusCode){eTtotalAsReconstructedK+=et*corrBkgd*corrEff*corrNotID;}
332                     if(pdgCode==fgProtonCode ||pdgCode==fgAntiProtonCode){eTtotalAsReconstructedP+=et*corrBkgd*corrEff*corrNotID;}
333                   }
334                 }
335             }
336
337             if(cutset==2) eTtotalSimAll += Et(simPart);
338             if(stack->IsPhysicalPrimary(label)){
339               if (TMath::Abs(simPart->Eta()) < fHadEtReco->GetCorrections()->GetEtaCut()){
340                 TParticlePDG *pdg = simPart->GetPDG(0);
341                 if(!pdg) continue;
342                 Int_t pdgCode =  simPart->GetPDG(0)->PdgCode();
343                 Int_t mypid = 0;
344                 if(pdgCode==AliAnalysisHadEt::fgPiPlusCode) mypid = 1;
345                 if(pdgCode==fgProtonCode) mypid = 2;
346                 if(pdgCode==fgKPlusCode) mypid = 3;
347                 if(pdgCode==fgEPlusCode) mypid = 4;
348                 if(pdgCode==fgPiMinusCode) mypid = 1;
349                 if(pdgCode==fgAntiProtonCode) mypid = 2;
350                 if(pdgCode==fgKMinusCode) mypid = 3;
351                 if(pdgCode==fgEMinusCode) mypid = 4;
352                 //bool filled = false;      
353                 //for smearing investigations
354                 if(fInvestigateSmearing && cutset==2){
355                   pTtotalReco += simPart->Pt();
356                   pTtotalSim += track->Pt();
357                   eTtotalReco += Et(track->P(),track->Theta(),pdgCode,track->Charge());
358                   eTtotalSim += Et(simPart);
359                   nReco++;
360                 }
361                 //============Charged hadrons===================================
362                 float myefficiencyCorrEt = 0.0;
363                 //identified...
364                 if(isPion){
365                   if(pdgCode!=fgPiPlusCode && pdgCode!=fgPiMinusCode){
366                     FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),1,mypid,1);
367                   }
368                   float myEt = Et(simPart);
369                   if(fInvestigateSmearing && cutset==2){
370                     eTtotalRecoPIDSmeared +=myEt;
371                     eTtotalRecoEffCorr += myEt *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin);
372                     myefficiencyCorrEt = myEt * fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin) ;
373                   }
374                   if( !fRunLightweight){
375                     if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedPiPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
376                     else{ FillHisto2D(Form("EtReconstructed%sIdentifiedPiMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
377                   }
378                   FillHisto2D(Form("dEdxPion%s",cutName->Data()),track->P(),dEdx,1.0);
379                 }
380                 if(isProton){
381                   if(pdgCode!=fgProtonCode && pdgCode!=fgAntiProtonCode){
382                     FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),2,mypid,1);
383                   }
384                   float myEt = Et(simPart);
385                   if(fInvestigateSmearing && cutset==2){
386                     eTtotalRecoPIDSmeared +=myEt;
387                     eTtotalRecoEffCorr += myEt *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin);
388                     myefficiencyCorrEt = myEt * fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin);
389                   }
390                   if( !fRunLightweight){
391                     if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedProton",cutName->Data()),track->Pt(),track->Eta(),myEt);}
392                     else{ FillHisto2D(Form("EtReconstructed%sIdentifiedAntiProton",cutName->Data()),track->Pt(),track->Eta(),myEt);}
393                     if(fBaryonEnhancement){
394                       myEt = myEt*ProtonBaryonEnhancement(track->Pt());
395                       if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);}
396                       else{ FillHisto2D(Form("EtReconstructed%sIdentifiedAntiProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);}
397                     }
398                   }
399                   FillHisto2D(Form("dEdxProton%s",cutName->Data()),track->P(),dEdx,1.0);
400                 }
401                 if(isKaon){
402                   if(pdgCode!=fgKMinusCode && pdgCode!=fgKPlusCode){
403                     FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),3,mypid,1);
404                   }
405                   float myEt = Et(simPart);
406                   if(fInvestigateSmearing && cutset==2){
407                     eTtotalRecoPIDSmeared +=myEt;
408                     eTtotalRecoEffCorr += myEt *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin);
409                     myefficiencyCorrEt = myEt * fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin);
410                   }
411                   if( !fRunLightweight){
412                     if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedKPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
413                     else{ FillHisto2D(Form("EtReconstructed%sIdentifiedKMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
414                   }
415                   FillHisto2D(Form("dEdxKaon%s",cutName->Data()),track->P(),dEdx,1.0);
416                 }
417                 if(isElectron){
418                   if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
419                     FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),4,mypid,1);
420                   }
421                   if( !fRunLightweight){
422                     float myEt = Et(simPart);
423                     if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedEPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
424                     else{ FillHisto2D(Form("EtReconstructed%sIdentifiedEMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
425                   }
426                   FillHisto2D(Form("dEdxElectron%s",cutName->Data()),track->P(),dEdx,1.0);
427                 }
428                 if(unidentified){
429                   if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
430                     float myEtPi = Et(simPart,fgPionMass);
431                     float myEtP = Et(simPart,fgProtonMass);
432                     float myEtK = Et(simPart,fgKaonMass);
433                     float myEt = Et(simPart);
434                     if(fInvestigateSmearing && cutset==2){
435                       eTtotalRecoPIDSmeared +=myEtPi;
436                       eTtotalRecoEffCorr += myEt *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
437                       myefficiencyCorrEt = myEt * fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
438                     }
439                     if( !fRunLightweight){
440                       FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
441                       FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
442                       FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
443                       FillHisto2D(Form("EtReconstructed%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),myEt);
444                       FillHisto2D(Form("EtNReconstructed%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),1.0);
445                       if(pdgCode == fgPiPlusCode||pdgCode == fgPiMinusCode){
446                         FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
447                         FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
448                         FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
449                         FillHisto2D(Form("EtReconstructed%sUnidentifiedPion",cutName->Data()),track->Pt(),track->Eta(),myEt);
450                         FillHisto2D(Form("EtNReconstructed%sUnidentifiedPion",cutName->Data()),track->Pt(),track->Eta(),1.0);
451                       }
452                       if(pdgCode == fgKPlusCode||pdgCode == fgKMinusCode){
453                         FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
454                         FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
455                         FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
456                         FillHisto2D(Form("EtReconstructed%sUnidentifiedKaon",cutName->Data()),track->Pt(),track->Eta(),myEt);
457                         FillHisto2D(Form("EtNReconstructed%sUnidentifiedKaon",cutName->Data()),track->Pt(),track->Eta(),1.0);
458                       }
459                       if(pdgCode == fgProtonCode||pdgCode == fgAntiProtonCode){
460                         FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
461                         FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
462                         FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
463                         FillHisto2D(Form("EtReconstructed%sUnidentifiedProton",cutName->Data()),track->Pt(),track->Eta(),myEt);
464                         FillHisto2D(Form("EtNReconstructed%sUnidentifiedProton",cutName->Data()),track->Pt(),track->Eta(),1.0);
465                         if(fBaryonEnhancement){
466                           myEt = myEt*ProtonBaryonEnhancement(track->Pt());
467                           FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPionEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
468                           FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);
469                           FillHisto2D(Form("EtNReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),1.0);
470                         }
471                       }
472                     }
473                   }
474                   FillHisto2D(Form("dEdxUnidentified%s",cutName->Data()),track->P(),dEdx,1.0);
475                   FillHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),mypid,1);
476                 }
477                 //...simulated
478                 float myEtSim = Et(simPart);
479                 float myEtReco = 0.0;
480                 if(pdgCode == fgPiPlusCode){            
481                   float myEt = Et(simPart);
482                   float myEtP = Et(simPart,fgProtonMass);
483                   float myEtK = Et(simPart,fgKaonMass);
484                   myEtReco = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
485                   float pT = simPart->Pt();
486                   float eta = simPart->Eta();
487                   if(fInvestigateSmearing && cutset==2){
488                     eTtotalRecoEffCorrPi+=myefficiencyCorrEt;
489                     eTtotalRecoUncorr +=myEt;
490                   }
491                   if(fUseRecoPt){//Then we switch the pT and the Et
492                     myEt = myEtReco;
493                     pT = track->Pt();
494                     eta = track->Eta();
495                   }
496                   if( !fRunLightweight){
497                     FillHisto2D(Form("EtReconstructed%sPiPlus",cutName->Data()),pT,eta,myEt);
498                     FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
499                     FillHisto2D(Form("EtNReconstructed%sPiPlus",cutName->Data()),pT,eta,1.0);
500                     FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,1.0);
501                     if(fCentBin>=0){//if a centrality bin was defined
502                       FillHisto2D(Form("EtNReconstructed%sPiPlusCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
503                       FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
504                     }
505                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEt);
506                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEtP);
507                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEtK);
508                     FillHisto2D(Form("EtReconstructed%sPiPlusAssumingKaon",cutName->Data()),pT,eta,myEtK);
509                     FillHisto2D(Form("EtReconstructed%sPiPlusAssumingProton",cutName->Data()),pT,eta,myEtP);
510                   }
511                   //filled = true;
512                 }
513                 if(pdgCode == fgPiMinusCode){
514                   float myEt = Et(simPart);
515                   float myEtP = Et(simPart,fgProtonMass);
516                   float myEtK = Et(simPart,fgKaonMass);
517                   myEtReco = Et(track->P(),track->Theta(),fgPiMinusCode,track->Charge());
518                   float pT = simPart->Pt();
519                   float eta = simPart->Eta();
520                   if(fInvestigateSmearing && cutset==2){
521                     eTtotalRecoEffCorrPi+=myefficiencyCorrEt;
522                     eTtotalRecoUncorr +=myEt;
523                   }
524                   if(fUseRecoPt){//Then we switch the pT and the Et
525                     myEt = myEtReco;
526                     pT = track->Pt();
527                     eta = track->Eta();
528                   }
529                   if( !fRunLightweight){
530                     FillHisto2D(Form("EtReconstructed%sPiMinus",cutName->Data()),pT,eta,myEt);
531                     FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
532                     FillHisto2D(Form("EtNReconstructed%sPiMinus",cutName->Data()),pT,eta,1.0);
533                     FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,1.0);
534                     if(fCentBin>=0){//if a centrality bin was defined
535                       FillHisto2D(Form("EtNReconstructed%sPiMinusCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
536                       FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
537                     }
538                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEt);
539                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEtP);
540                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEtK);
541                     FillHisto2D(Form("EtReconstructed%sPiMinusAssumingKaon",cutName->Data()),pT,eta,myEtK);
542                     FillHisto2D(Form("EtReconstructed%sPiMinusAssumingProton",cutName->Data()),pT,eta,myEtP);
543                   }
544                   //filled = true;
545                 }
546                 if(pdgCode == fgKPlusCode){
547                   float myEt = Et(simPart);
548                   float myEtPi = Et(simPart,fgPionMass);
549                   float myEtP = Et(simPart,fgProtonMass);
550                   myEtReco = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
551                   float pT = simPart->Pt();
552                   float eta = simPart->Eta();
553                   if(fUseRecoPt){//Then we switch the pT and the Et
554                     myEt = myEtReco;
555                     pT = track->Pt();
556                     eta = track->Eta();
557                   }
558                   if(fInvestigateSmearing && cutset==2){
559                     eTtotalRecoEffCorrK+=myefficiencyCorrEt;
560                     eTtotalRecoUncorr +=myEt;
561                   }
562                   if( !fRunLightweight){
563                     FillHisto2D(Form("EtReconstructed%sKPlus",cutName->Data()),pT,eta,myEt);
564                     FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
565                     FillHisto2D(Form("EtNReconstructed%sKPlus",cutName->Data()),pT,eta,1.0);
566                     FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,1.0);
567                     if(fCentBin>=0){//if a centrality bin was defined
568                       FillHisto2D(Form("EtNReconstructed%sKPlusCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
569                       FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
570                     }
571                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEtPi);
572                     FillHisto2D(Form("EtReconstructed%sKPlusAssumingPion",cutName->Data()),pT,eta,myEtPi);
573                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEt);
574                     FillHisto2D(Form("EtReconstructed%sKPlusAssumingKaon",cutName->Data()),pT,eta,myEt);
575                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEtP);
576                     FillHisto2D(Form("EtReconstructed%sKPlusAssumingProton",cutName->Data()),pT,eta,myEtP);
577                   }
578                   //filled = true;
579                 }
580                 if(pdgCode == fgKMinusCode){
581                   float myEt = Et(simPart);
582                   float myEtPi = Et(simPart,fgPionMass);
583                   float myEtP = Et(simPart,fgProtonMass);
584                   myEtReco = Et(track->P(),track->Theta(),fgKMinusCode,track->Charge());
585                   float pT = simPart->Pt();
586                   float eta = simPart->Eta();
587                   if(fUseRecoPt){//Then we switch the pT and the Et
588                     myEt = myEtReco;
589                     pT = track->Pt();
590                     eta = track->Eta();
591                   }
592                   if(fInvestigateSmearing && cutset==2){
593                     eTtotalRecoEffCorrK+=myefficiencyCorrEt;
594                     eTtotalRecoUncorr +=myEt;
595                   }
596                   if( !fRunLightweight){
597                     FillHisto2D(Form("EtReconstructed%sKMinus",cutName->Data()),pT,eta,myEt);
598                     FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
599                     FillHisto2D(Form("EtNReconstructed%sKMinus",cutName->Data()),pT,eta,1.0);
600                     FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,1.0);
601                     if(fCentBin>=0){//if a centrality bin was defined
602                       FillHisto2D(Form("EtNReconstructed%sKMinusCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
603                       FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
604                     }
605                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEtPi);
606                     FillHisto2D(Form("EtReconstructed%sKMinusAssumingPion",cutName->Data()),pT,eta,myEtPi);
607                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEt);
608                     FillHisto2D(Form("EtReconstructed%sKMinusAssumingKaon",cutName->Data()),pT,eta,myEt);
609                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEtP);
610                     FillHisto2D(Form("EtReconstructed%sKMinusAssumingProton",cutName->Data()),pT,eta,myEtP);
611                   }
612                   //filled = true;
613                 }
614                 if(pdgCode == fgProtonCode){
615                   float myEt = Et(simPart);
616                   float myEtPi = Et(simPart,fgPionMass);
617                   float myEtK = Et(simPart,fgKaonMass);
618                   myEtReco = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
619                   float pT = simPart->Pt();
620                   float eta = simPart->Eta();
621                   if(fUseRecoPt){//Then we switch the pT and the Et
622                     myEt = myEtReco;
623                     pT = track->Pt();
624                     eta = track->Eta();
625                   }
626                   if(fInvestigateSmearing && cutset==2){
627                     eTtotalRecoEffCorrP+=myefficiencyCorrEt;
628                     eTtotalRecoUncorr +=myEt;
629                   }
630                   if( !fRunLightweight){
631                     FillHisto2D(Form("EtReconstructed%sProton",cutName->Data()),pT,eta,myEt);
632                     FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
633                     FillHisto2D(Form("EtNReconstructed%sProton",cutName->Data()),pT,eta,1.0);
634                     FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,1.0);
635                     if(fCentBin>=0){//if a centrality bin was defined
636                       FillHisto2D(Form("EtNReconstructed%sProtonCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
637                       FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
638                     }
639                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEtPi);
640                     FillHisto2D(Form("EtReconstructed%sProtonAssumingPion",cutName->Data()),pT,eta,myEtPi);
641                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEtK);
642                     FillHisto2D(Form("EtReconstructed%sProtonAssumingKaon",cutName->Data()),pT,eta,myEtK);
643                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEt);
644                     FillHisto2D(Form("EtReconstructed%sProtonAssumingProton",cutName->Data()),pT,eta,myEt);
645                   }
646                   //filled = true;
647
648                   if( !fRunLightweight){
649                     if(fBaryonEnhancement){
650                       float enhancement = ProtonBaryonEnhancement(track->Pt());
651                       FillHisto2D(Form("EtReconstructed%sProtonEnhanced",cutName->Data()),pT,eta,myEt*enhancement);
652                       FillHisto2D(Form("EtNReconstructed%sProtonEnhanced",cutName->Data()),pT,eta,myEt*enhancement);
653                       FillHisto2D(Form("EtReconstructed%sProtonAssumingPionEnhanced",cutName->Data()),pT,eta,myEtPi*enhancement);
654                     }
655                   }
656
657                 }
658                 if(pdgCode == fgAntiProtonCode){
659                   float myEt = Et(simPart);
660                   float myEtPi = Et(simPart,fgPionMass);
661                   float myEtK = Et(simPart,fgKaonMass);
662                   myEtReco = Et(track->P(),track->Theta(),fgAntiProtonCode,track->Charge());
663                   float pT = simPart->Pt();
664                   float eta = simPart->Eta();
665                   if(fUseRecoPt){//Then we switch the pT and the Et
666                     myEt = myEtReco;
667                     pT = track->Pt();
668                     eta = track->Eta();
669                   }
670                   if(fInvestigateSmearing && cutset==2){
671                     eTtotalRecoEffCorrP+=myefficiencyCorrEt;
672                     eTtotalRecoUncorr +=myEt;
673                   }
674                   if( !fRunLightweight){
675                     FillHisto2D(Form("EtReconstructed%sAntiProton",cutName->Data()),pT,eta,myEt);
676                     FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
677                     FillHisto2D(Form("EtNReconstructed%sAntiProton",cutName->Data()),pT,eta,1.0);
678                     FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,1.0);
679                     if(fCentBin>=0){//if a centrality bin was defined
680                       FillHisto2D(Form("EtNReconstructed%sAntiProtonCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
681                       FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,1.0);
682                     }
683                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEtPi);
684                     FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingPion",cutName->Data()),pT,eta,myEtPi);
685                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEtK);
686                     FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingKaon",cutName->Data()),pT,eta,myEtK);
687                     FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEt);
688                     FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingProton",cutName->Data()),pT,eta,myEt);
689                   }
690                   //filled = true;
691                   if( !fRunLightweight){
692                     if(fBaryonEnhancement){
693                       float enhancement = ProtonBaryonEnhancement(track->Pt());
694                       FillHisto2D(Form("EtReconstructed%sAntiProtonEnhanced",cutName->Data()),pT,eta,myEt*enhancement);
695                       FillHisto2D(Form("EtNReconstructed%sAntiProtonEnhanced",cutName->Data()),pT,eta,myEt*enhancement);
696                       FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingPionEnhanced",cutName->Data()),pT,eta,myEtPi*enhancement);
697                     }
698                   }
699                 }
700                 if(pdgCode == fgEPlusCode){
701                   if( !fRunLightweight){
702                     float myEt = Et(simPart);
703                     FillHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
704                     if(!isElectron || unidentified){
705                       float myEtPi = Et(simPart,fgPionMass);
706                       FillHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
707                     }
708                   }
709                   //filled = true;
710                 }
711                 if(pdgCode == fgEMinusCode){
712                   if( !fRunLightweight){
713                     if(!isElectron || unidentified){
714                       float myEtPi = Et(simPart,fgPionMass);
715                       FillHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
716                     }
717                     float myEt = Et(simPart);
718                     FillHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
719                   }
720                   //filled = true;
721                 }
722                 if( !fRunLightweight){
723                   if(myEtReco>0.0){FillHisto2D(Form("ETresolution%s",cutName->Data()),myEtReco,(myEtSim-myEtReco)/myEtReco,1.0);}
724                   if(track->Pt()>0.0){FillHisto2D(Form("pTresolution%s",cutName->Data()),track->Pt(),(simPart->Pt() - track->Pt())/track->Pt(),1.0);}
725                   if(track->P()>0.0){FillHisto2D(Form("presolution%s",cutName->Data()),track->P(),(simPart->P() - track->P())/track->P(),1.0);}
726                   FillHisto1D(Form("pTsim%s",cutName->Data()),simPart->Pt(),1.0);
727                   FillHisto1D(Form("pTrec%s",cutName->Data()),track->Pt(),1.0);
728                   if(fCentBin!=-1){
729                     FillHisto1D(Form("pTsim%sCB%i",cutName->Data(),fCentBin),simPart->Pt(),1.0);
730                     FillHisto1D(Form("pTrec%sCB%i",cutName->Data(),fCentBin),track->Pt(),1.0);
731                   }
732                 }
733               }
734             }
735             else{//not a primary - we're after V0 daughters!
736               bool written = false;
737               //now, what is the et we would measure for this?  Since this is the relevant et.
738               float myrecoEt = 0;
739               if(isPion || unidentified) myrecoEt = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
740               if(isProton) myrecoEt = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
741               if(isKaon) myrecoEt = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
742               if (TMath::Abs(simPart->Eta()) < fHadEtReco->GetCorrections()->GetEtaCut()){
743                 TParticle *mom = NULL;
744                 if(simPart->GetFirstMother()>=0) mom= stack->Particle(simPart->GetFirstMother());
745                 if(mom){
746                   TParticlePDG *pc = mom->GetPDG(0);
747                   if(pc){
748                     Int_t pdgCode =  mom->GetPDG(0)->PdgCode();
749                     if(pdgCode == fgLambdaCode){
750                       written = true;
751                       float myEt = Et(simPart);
752                       float pT = simPart->Pt();
753                       float eta = simPart->Eta();
754                       TParticlePDG *simpdg = simPart->GetPDG(0);
755                       if(!simpdg) continue;
756                       eTtotalRecoBkgd+=myEt;
757                       if(fUseRecoPt){//Then we switch the pT and the Et
758                         myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
759                         pT = track->Pt();
760                         eta = track->Eta();
761                       }
762                       if( !fRunLightweight){
763                         FillHisto2D(Form("EtReconstructed%sLambdaDaughters",cutName->Data()),pT,eta,myrecoEt);
764                         Float_t weight = LambdaWeight(mom->Pt());
765                         if(fBaryonEnhancement){
766                           float enhancement = ProtonBaryonEnhancement(track->Pt());
767                           weight = weight*enhancement;
768                         }
769                         FillHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),pT,eta,myrecoEt*weight);
770                       }
771                     }
772                     if(pdgCode == fgAntiLambdaCode){
773                       written = true;
774                       float myEt = Et(simPart);
775                       float pT = simPart->Pt();
776                       float eta = simPart->Eta();
777                       eTtotalRecoBkgd+=myEt;
778                       TParticlePDG *simpdg = simPart->GetPDG(0);
779                       if(!simpdg) continue;
780                       if(fUseRecoPt){//Then we switch the pT and the Et
781                         myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
782                         pT = track->Pt();
783                         eta = track->Eta();
784                       }
785                       if( !fRunLightweight){
786                         FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughters",cutName->Data()),pT,eta,myrecoEt);
787                         Float_t weight = AntiLambdaWeight(mom->Pt());
788                         if(fBaryonEnhancement){
789                           float enhancement = ProtonBaryonEnhancement(track->Pt());
790                           weight = weight*enhancement;
791                         }
792                         FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),pT,eta,myrecoEt*weight);
793                       }
794                     }
795                     if(pdgCode == fgK0SCode || pdgCode == fgK0LCode || pdgCode == fgKPlusCode || pdgCode == fgKMinusCode){//actually get all kaon daughters
796                       written = true;
797                       float myEt = Et(simPart);
798                       float pT = simPart->Pt();
799                       float eta = simPart->Eta();
800                       eTtotalRecoBkgd+=myEt;
801                       TParticlePDG *simpdg = simPart->GetPDG(0);
802                       if(!simpdg) continue;
803                       if(fUseRecoPt){//Then we switch the pT and the Et
804                         myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
805                         pT = track->Pt();
806                         eta = track->Eta();
807                       }
808                       if( !fRunLightweight){
809                         FillHisto2D(Form("EtReconstructed%sK0SDaughters",cutName->Data()),pT,eta,myEt);
810                         Float_t weight = K0Weight(mom->Pt());
811                         FillHisto2D(Form("EtReconstructed%sK0SDaughtersReweighted",cutName->Data()),pT,eta,myrecoEt*weight);
812                       }
813                     }
814                     if(pdgCode == fgXiCode){
815                       written = true;
816                       float myEt = Et(simPart);
817                       float pT = simPart->Pt();
818                       float eta = simPart->Eta();
819                       eTtotalRecoBkgd+=myEt;
820                       TParticlePDG *simpdg = simPart->GetPDG(0);
821                       if(!simpdg) continue;
822                       if(fUseRecoPt){//Then we switch the pT and the Et
823                         myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
824                         pT = track->Pt();
825                         eta = track->Eta();
826                       }
827                       if( !fRunLightweight){
828                         FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),pT,eta,myrecoEt);
829                       }
830                     }
831                     if(pdgCode == fgAntiXiCode){
832                       written = true;
833                       float myEt = Et(simPart);
834                       float pT = simPart->Pt();
835                       float eta = simPart->Eta();
836                       eTtotalRecoBkgd+=myEt;
837                       TParticlePDG *simpdg = simPart->GetPDG(0);
838                       if(!simpdg) continue;
839                       if(fUseRecoPt){//Then we switch the pT and the Et
840                         myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
841                         pT = track->Pt();
842                         eta = track->Eta();
843                       }
844                       if( !fRunLightweight){
845                         FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),pT,eta,myrecoEt);
846                       }
847                     }
848                     if(pdgCode == fgOmegaCode){
849                       written = true;
850                       float myEt = Et(simPart);
851                       float pT = simPart->Pt();
852                       float eta = simPart->Eta();
853                       eTtotalRecoBkgd+=myEt;
854                       TParticlePDG *simpdg = simPart->GetPDG(0);
855                       if(!simpdg) continue;
856                       if(fUseRecoPt){//Then we switch the pT and the Et
857                         myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
858                         pT = track->Pt();
859                         eta = track->Eta();
860                       }
861                       if( !fRunLightweight){
862                         FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),pT,eta,myrecoEt);
863                       }
864                     }
865                     if(pdgCode == fgXiCode){
866                       written = true;
867                       float myEt = Et(simPart);
868                       float pT = simPart->Pt();
869                       float eta = simPart->Eta();
870                       eTtotalRecoBkgd+=myEt;
871                       TParticlePDG *simpdg = simPart->GetPDG(0);
872                       if(!simpdg) continue;
873                       if(fUseRecoPt){//Then we switch the pT and the Et
874                         myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
875                         pT = track->Pt();
876                         eta = track->Eta();
877                       }
878                       if( !fRunLightweight){
879                         FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),pT,eta,myrecoEt);
880                       }
881                     }
882
883                     if(mom->GetFirstMother()>0){
884                       TParticle *grandma = NULL;
885                       if(mom->GetFirstMother()>=0) stack->Particle(mom->GetFirstMother());
886                       if(grandma){
887                         TParticlePDG *mompdg = mom->GetPDG(0);
888                         if(!mompdg) continue;
889                         Int_t pdgCodeMom =  mom->GetPDG(0)->PdgCode();
890                         if(pdgCodeMom==fgPiPlusCode || pdgCodeMom==fgPiMinusCode || pdgCodeMom==fgProtonCode ||pdgCodeMom==fgAntiProtonCode || pdgCodeMom==fgKPlusCode || pdgCode==fgKMinusCode){
891                           TParticlePDG *grandmapdg = grandma->GetPDG(0);
892                           if(!grandmapdg) continue;
893                           Int_t pdgCodeGrandma =  grandma->GetPDG(0)->PdgCode();
894                       
895                           if(pdgCodeGrandma == fgXiCode){
896                             written = true;
897                             float myEt = Et(simPart);
898                             float pT = simPart->Pt();
899                             float eta = simPart->Eta();
900                             eTtotalRecoBkgd+=myEt;
901                             if(fUseRecoPt){//Then we switch the pT and the Et
902                               myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
903                               pT = track->Pt();
904                               eta = track->Eta();
905                             }
906                             if( !fRunLightweight){
907                               FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),pT,eta,myrecoEt);
908                             }
909                           }
910                           if(pdgCodeGrandma == fgAntiXiCode){
911                             written = true;
912                             float myEt = Et(simPart);
913                             float pT = simPart->Pt();
914                             float eta = simPart->Eta();
915                             eTtotalRecoBkgd+=myEt;
916                             if(fUseRecoPt){//Then we switch the pT and the Et
917                               myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
918                               pT = track->Pt();
919                               eta = track->Eta();
920                             }
921                             if( !fRunLightweight){
922                               FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),pT,eta,myrecoEt);
923                             }
924                           }
925                           if(pdgCodeGrandma == fgOmegaCode){
926                             written = true;
927                             float myEt = Et(simPart);
928                             float pT = simPart->Pt();
929                             float eta = simPart->Eta();
930                             eTtotalRecoBkgd+=myEt;
931                             if(fUseRecoPt){//Then we switch the pT and the Et
932                               myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
933                               pT = track->Pt();
934                               eta = track->Eta();
935                             }
936                             if( !fRunLightweight){
937                               FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),pT,eta,myrecoEt);
938                             }
939                           }
940                           if(pdgCodeGrandma == fgXiCode){
941                             written = true;
942                             float myEt = Et(simPart);
943                             float pT = simPart->Pt();
944                             float eta = simPart->Eta();
945                             eTtotalRecoBkgd+=myEt;
946                             if(fUseRecoPt){//Then we switch the pT and the Et
947                               myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
948                               pT = track->Pt();
949                               eta = track->Eta();
950                             }
951                             if( !fRunLightweight){
952                               FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),pT,eta,myrecoEt);
953                             }
954                           }
955
956                         }
957                       }
958                     }
959                     if(!written){
960                       int mycode = simPart->GetPDG(0)->PdgCode();
961                       if(!mycode) continue;
962                       if( (pdgCode == fgGammaCode || pdgCode == fgPi0Code) && (mycode==fgEPlusCode||mycode==fgEMinusCode)){
963                         written = true;
964                         float myEt = Et(simPart);
965                         float pT = simPart->Pt();
966                         float eta = simPart->Eta();
967                         eTtotalRecoBkgd+=myEt;
968                         if(fUseRecoPt){//Then we switch the pT and the Et
969                           myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
970                           pT = track->Pt();
971                           eta = track->Eta();
972                         }
973                         if( !fRunLightweight){
974                           FillHisto2D(Form("EtReconstructed%sConversionElectrons",cutName->Data()),pT,eta,myrecoEt);
975                         }
976                       }
977                       if(mycode==fgMuPlusCode || mycode==fgMuMinusCode){
978                         written = true;
979                         float myEt = Et(simPart);
980                         float pT = simPart->Pt();
981                         float eta = simPart->Eta();
982                         eTtotalRecoBkgd+=myEt;
983                         if(fUseRecoPt){//Then we switch the pT and the Et
984                           myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
985                           pT = track->Pt();
986                           eta = track->Eta();
987                         }
988                         if( !fRunLightweight){
989                           FillHisto2D(Form("EtReconstructed%sSecondaryMuons",cutName->Data()),pT,eta,myrecoEt);
990                         }
991                       }
992                       if(mycode==fgPiPlusCode || mycode==fgPiMinusCode){
993                         written = true;
994                         float myEt = Et(simPart);
995                         float pT = simPart->Pt();
996                         float eta = simPart->Eta();
997                         eTtotalRecoBkgd+=myEt;
998                         if(fUseRecoPt){//Then we switch the pT and the Et
999                           myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
1000                           pT = track->Pt();
1001                           eta = track->Eta();
1002                         }
1003                         if( !fRunLightweight){
1004                           FillHisto2D(Form("EtReconstructed%sSecondaryPions",cutName->Data()),pT,eta,myrecoEt);
1005                         }
1006                       }
1007                       if(mycode==fgAntiProtonCode || mycode==fgProtonCode){
1008                         written = true;
1009                         float myEt = Et(simPart);
1010                         float pT = simPart->Pt();
1011                         float eta = simPart->Eta();
1012                         eTtotalRecoBkgd+=myEt;
1013                         if(fUseRecoPt){//Then we switch the pT and the Et
1014                           myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
1015                           pT = track->Pt();
1016                           eta = track->Eta();
1017                         }
1018                         if( !fRunLightweight){
1019                           FillHisto2D(Form("EtReconstructed%sSecondaryProtons",cutName->Data()),pT,eta,myrecoEt);
1020                         }
1021                       }
1022                       //if(!written) cout<<"I was not counted in the background and I am a "<<simPart->GetName()<<" and my mother is a "<<mom->GetName()<<endl;
1023                     }
1024                   }
1025                   else{cout<<"No particle code!! 657"<<endl;}
1026                 }
1027                 else{cout<<"No mother particle!! 658"<<endl;}
1028               }
1029             }
1030           }
1031
1032         }
1033       }
1034     delete list;
1035   }
1036   if(fInvestigateSmearing && !fRunLightweight){
1037     if(fSimPiKPEtShouldBeReco>0.0) FillHisto2D("SimPiKPEtMinusSimEffCorrRecoOnly",fSimPiKPEtShouldBeReco,(fSimPiKPEtShouldBeReco-eTtotalRecoEffCorr)/fSimPiKPEtShouldBeReco,1.0);
1038     if(fSimPiKPEtShouldBeReco>0.0) FillHisto2D("SimPiKPEtMinusSimEffBkgdCorrRecoOnly",fSimPiKPEtShouldBeReco,(fSimPiKPEtShouldBeReco-eTtotalRecoEffBkgdCorr)/fSimPiKPEtShouldBeReco,1.0);
1039     if(fSimPiKPEtShouldBeRecoPi>0.0) FillHisto2D("SimPiKPEtMinusSimEffCorrRecoPiOnly",fSimPiKPEtShouldBeRecoPi,(fSimPiKPEtShouldBeRecoPi-eTtotalRecoEffCorrPi)/fSimPiKPEtShouldBeRecoPi,1.0);
1040     if(fSimPiKPEtShouldBeRecoP>0.0) FillHisto2D("SimPiKPEtMinusSimEffCorrRecoPOnly",fSimPiKPEtShouldBeRecoP,(fSimPiKPEtShouldBeRecoP-eTtotalRecoEffCorrP)/fSimPiKPEtShouldBeRecoP,1.0);
1041     if(fSimPiKPEtShouldBeRecoK>0.0) FillHisto2D("SimPiKPEtMinusSimEffCorrRecoKOnly",fSimPiKPEtShouldBeRecoK,(fSimPiKPEtShouldBeRecoK-eTtotalRecoEffCorrK)/fSimPiKPEtShouldBeRecoK,1.0);
1042     if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimAllCorrSmearedRecoOnly",eTtotalSim,(eTtotalSim-eTtotalSimAll+eTtotalRecoBkgd)/eTtotalSim,1.0);
1043     if(eTtotalRecoTotalUncorr>0.0) FillHisto2D("SimPiKPEtMeasMinusEtRealPiKP",eTtotalRecoTotalUncorr,(eTtotalRecoTotalUncorr-eTtotalRecoUncorr)/eTtotalRecoTotalUncorr,1.0);
1044     if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimAllSmearedRecoOnly",eTtotalSim,(eTtotalSim-eTtotalSimAll)/eTtotalSim,1.0);
1045     if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmearedRecoOnly",eTtotalSim,(eTtotalSim-eTtotalRecoPIDSmeared*1.01)/eTtotalSim,1.0);
1046     if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimSmearedRecoOnly",eTtotalSim,(eTtotalSim-eTtotalReco)/eTtotalSim,1.0);
1047     if(pTtotalSim>0.0) FillHisto2D("SimPiKPPtMinusSimSmearedRecoOnly",pTtotalSim,(pTtotalSim-pTtotalReco)/pTtotalSim,1.0);
1048     if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimSmearedMultRecoOnly",nReco,(eTtotalSim-eTtotalReco)/eTtotalSim,1.0);
1049     if(pTtotalSim>0.0) FillHisto2D("SimPiKPPtMinusSimSmearedMultRecoOnly",nReco,(pTtotalSim-pTtotalReco)/pTtotalSim,1.0);
1050   }
1051   // delete pID;
1052   delete strTPC;
1053   delete strITS;
1054   delete strTPCITS;
1055   return 1;
1056 }
1057 Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev)
1058 { // analyse MC event
1059      ResetEventValues();
1060      if(!ev){
1061             AliFatal("ERROR: Event does not exist");   
1062             return 0;
1063      }
1064      
1065     // Get us an mc event
1066     AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
1067     if(!mcEvent){  
1068       AliFatal("ERROR: MC Event does not exist");
1069       return 0;
1070     }
1071
1072     // Let's play with the stack!
1073     AliStack *stack = mcEvent->Stack();
1074
1075
1076     Int_t nPrim = stack->GetNtrack();
1077
1078     Float_t fSimPiKPEtPtSmeared = 0;
1079     Float_t fSimPiKPEtEfficiencySmeared = 0;
1080     Float_t fSimPiKPEtPtCutSmearedTPC = 0;
1081     Float_t fSimPiKPEtPtCutSmearedITS = 0;
1082     Float_t fSimPiKPEtPIDSmeared = 0;
1083     Float_t fSimPiKPEtPIDSmearedNoID = 0;
1084     fSimPiKPEtShouldBeReco = 0;
1085     fSimPiKPEtShouldBeRecoPi = 0;
1086     fSimPiKPEtShouldBeRecoK = 0;
1087     fSimPiKPEtShouldBeRecoP = 0;
1088     //=================Tracks which may or may not have been reconstructed=================
1089
1090     for (Int_t iPart = 0; iPart < nPrim; iPart++)
1091     {
1092
1093       TParticle *part = stack->Particle(iPart);//This line is identified as a loss of memory by valgrind, however, the pointer still belongs to the stack, so it's the stack's problem
1094
1095         if(checkLabelForHIJING && !IsHIJINGLabel(iPart,mcEvent,stack) ) continue;
1096
1097         if (!part)
1098           {
1099             Printf("ERROR: Could not get particle %d", iPart);
1100             continue;
1101           }
1102         // Check if it is a primary particle
1103         if (stack->IsPhysicalPrimary(iPart)){//primaries
1104
1105           if (TMath::Abs(part->Eta()) < fHadEtReco->GetCorrections()->GetEtaCut())          {
1106             TParticlePDG *pdg = part->GetPDG(0);
1107             if(!pdg) continue;
1108             Int_t pdgCode =  part->GetPDG(0)->PdgCode();
1109             bool filled = false;
1110             //Investigating smearing...
1111             //Numbers are realistic correction factors from previous studies
1112             if(fInvestigateSmearing){
1113               if(pdgCode==fgPiPlusCode ||pdgCode==fgPiMinusCode ||pdgCode==fgKPlusCode ||pdgCode==fgKMinusCode ||pdgCode==fgProtonCode ||pdgCode==fgAntiProtonCode){
1114                 //To investigate Smearing...
1115                 Float_t myet = Et(part);
1116                 fSimPiKPEt += myet;
1117                 if(part->Pt()>0.150) fSimRawEtTPC += myet;
1118                 if(part->Pt()>0.100) fSimRawEtITS += myet;
1119                 Float_t theta = part->Theta();
1120                 Short_t charge = 1;
1121                 Float_t momentum = part->P();
1122                 //pt smearing
1123                 Float_t pSmeared = momentum *  fPtSmearer->Gaus(1,0.005);//Gaussian centered around 1
1124                 fSimPiKPEtPtSmeared += Et(pSmeared,theta,pdgCode,charge);
1125                 //Efficiency smearing
1126                 //to mock up the difference between TPC only tracks in p+p (~90% efficiency at high pT) and TPC+ITS tracks in Pb+Pb (about 70% efficiency at high pT) a factor of 7/9 was added in front
1127                 float efficiency = 7.0/9.0*2.26545*TMath::Exp(-TMath::Power(9.99977e-01/part->Pt(),7.85488e-02));//simple rough efficiency from fitting curve
1128                 if(fPtSmearer->Binomial(1,efficiency) ==1){
1129                   fSimPiKPEtEfficiencySmeared += (1.0/efficiency)*myet;
1130                 }
1131                 //pT cut smeared
1132                 if(part->Pt()>0.10){fSimPiKPEtPtCutSmearedITS +=1.00988*myet;}
1133                 if(part->Pt()>0.15){fSimPiKPEtPtCutSmearedTPC +=1.02994*myet;}
1134                 //PID smearing
1135                 fSimPiKPEtPIDSmearedNoID += 1.03018015790601458*Et(momentum,theta,fgPiPlusCode,charge);
1136                 if(part->P()<1.0){//then the particle would have been ID'd
1137                   fSimPiKPEtPIDSmeared += 1.00918051514628582*myet;
1138                 }
1139                 else{//Then it would have been assumed to be a pion
1140                   fSimPiKPEtPIDSmeared += 1.00918051514628582*Et(momentum,theta,fgPiPlusCode,charge);
1141                 }
1142               }
1143             }
1144
1145             //============Charged hadrons===================================
1146             if(pdgCode == fgPiPlusCode){
1147               float myEt = Et(part);
1148               float myEtP = Et(part,fgProtonMass);
1149               float myEtK = Et(part,fgKaonMass);
1150               if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1151               if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoPi += myEt;
1152
1153               fSimHadEt += myEt;
1154               fSimTotEt += myEt;
1155
1156
1157               if( !fRunLightweight){
1158                 FillHisto2D("EtSimulatedPiPlus",part->Pt(),part->Eta(),myEt);
1159                 FillHisto2D("EtNSimulatedPiPlus",part->Pt(),part->Eta(),1.0);
1160                 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1161                 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1162                 if(fCentBin>=0){//if a centrality bin was defined
1163                   FillHisto2D(Form("EtNSimulatedPiPlusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1164                   FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1165                 }
1166                 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEt);
1167                 FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
1168                 FillHisto2D("EtSimulatedPiPlusAssumingProton",part->Pt(),part->Eta(),myEtP);
1169                 FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
1170                 FillHisto2D("EtSimulatedPiPlusAssumingKaon",part->Pt(),part->Eta(),myEtK);
1171                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1172                 Short_t charge = 1;
1173                 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1174                 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1175                 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1176                 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1177                 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1178                 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1179               }
1180               filled = true;
1181             }
1182             if(pdgCode == fgPiMinusCode){
1183               float myEt = Et(part);
1184               float myEtP = Et(part,fgProtonMass);
1185               float myEtK = Et(part,fgKaonMass);
1186               if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1187               if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoPi += myEt;
1188               fSimHadEt += myEt;
1189               fSimTotEt += myEt;
1190               if( !fRunLightweight){
1191                 FillHisto2D("EtSimulatedPiMinus",part->Pt(),part->Eta(),myEt);
1192                 FillHisto2D("EtNSimulatedPiMinus",part->Pt(),part->Eta(),1.0);
1193                 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1194                 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1195                 if(fCentBin>=0){//if a centrality bin was defined
1196                   FillHisto2D(Form("EtNSimulatedPiMinusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1197                   FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1198                 }
1199                 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEt);
1200                 FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
1201                 FillHisto2D("EtSimulatedPiMinusAssumingProton",part->Pt(),part->Eta(),myEtP);
1202                 FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
1203                 FillHisto2D("EtSimulatedPiMinusAssumingKaon",part->Pt(),part->Eta(),myEtK);
1204                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1205                 Short_t charge = -1;
1206                 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1207                 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1208                 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1209                 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1210                 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1211                 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1212               }
1213               filled = true;
1214             }
1215             if(pdgCode == fgKPlusCode){
1216               float myEt = Et(part);
1217               float myEtPi = Et(part,fgPionMass);
1218               float myEtP = Et(part,fgProtonMass);
1219               if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1220               if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoK += myEt;
1221               fSimHadEt += myEt;
1222               fSimTotEt += myEt;
1223               if( !fRunLightweight){
1224                 FillHisto2D("EtSimulatedKPlus",part->Pt(),part->Eta(),myEt);
1225                 FillHisto2D("EtNSimulatedKPlus",part->Pt(),part->Eta(),1.0);
1226                 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1227                 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1228                 if(fCentBin>=0){//if a centrality bin was defined
1229                   FillHisto2D(Form("EtNSimulatedKPlusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1230                   FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1231                 }
1232                 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
1233                 FillHisto2D("EtSimulatedKPlusAssumingPion",part->Pt(),part->Eta(),myEtPi);
1234                 FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
1235                 FillHisto2D("EtSimulatedKPlusAssumingProton",part->Pt(),part->Eta(),myEtP);
1236                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1237                 Short_t charge = 1;
1238                 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1239                 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1240                 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1241                 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1242                 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1243                 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1244               }
1245               filled = true;
1246             }
1247             if(pdgCode == fgKMinusCode){
1248               float myEt = Et(part);
1249               float myEtPi = Et(part,fgPionMass);
1250               float myEtP = Et(part,fgProtonMass);
1251               if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1252               if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoK += myEt;
1253               fSimHadEt += myEt;
1254               fSimTotEt += myEt;
1255               if( !fRunLightweight){
1256                 FillHisto2D("EtSimulatedKMinus",part->Pt(),part->Eta(),myEt);
1257                 FillHisto2D("EtNSimulatedKMinus",part->Pt(),part->Eta(),1.0);
1258                 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1259                 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1260                 if(fCentBin>=0){//if a centrality bin was defined
1261                   FillHisto2D(Form("EtNSimulatedKMinusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1262                   FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1263                 }
1264                 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
1265                 FillHisto2D("EtSimulatedKMinusAssumingPion",part->Pt(),part->Eta(),myEtPi);
1266                 FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
1267                 FillHisto2D("EtSimulatedKMinusAssumingProton",part->Pt(),part->Eta(),myEtP);
1268                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1269                 Short_t charge = -1;
1270                 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1271                 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1272                 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1273                 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1274                 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1275                 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1276               }
1277               filled = true;
1278             }
1279             if(pdgCode == fgProtonCode){
1280               float myEt = Et(part);
1281               float myEtPi = Et(part,fgPionMass);
1282               float myEtK = Et(part,fgKaonMass);
1283               if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1284               if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoP += myEt;
1285               fSimHadEt += myEt;
1286               fSimTotEt += myEt;
1287               if( !fRunLightweight){
1288                 FillHisto2D("EtSimulatedProton",part->Pt(),part->Eta(),myEt);
1289                 FillHisto2D("EtNSimulatedProton",part->Pt(),part->Eta(),1.0);
1290                 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1291                 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1292                 if(fCentBin>=0){//if a centrality bin was defined
1293                   FillHisto2D(Form("EtNSimulatedProtonCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1294                   FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1295                 }
1296                 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
1297                 FillHisto2D("EtSimulatedProtonAssumingPion",part->Pt(),part->Eta(),myEtPi);
1298                 FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
1299                 FillHisto2D("EtSimulatedProtonAssumingKaon",part->Pt(),part->Eta(),myEtK);
1300                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1301                 Short_t charge = 1;
1302                 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1303                 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1304                 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1305                 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1306                 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1307                 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1308               }
1309               filled = true;
1310               if( !fRunLightweight){
1311                 if(fBaryonEnhancement){
1312                   float enhancement = ProtonBaryonEnhancement(part->Pt());
1313                   FillHisto2D("EtSimulatedProtonEnhanced",part->Pt(),part->Eta(),myEt*enhancement);
1314                   FillHisto2D("EtNSimulatedProtonEnhanced",part->Pt(),part->Eta(),1.0*enhancement);
1315                   FillHisto2D("EtSimulatedProtonAssumingPionEnhanced",part->Pt(),part->Eta(),myEtPi*enhancement);
1316                 }
1317               }
1318             }
1319             if(pdgCode == fgAntiProtonCode){
1320               float myEt = Et(part);
1321               float myEtPi = Et(part,fgPionMass);
1322               float myEtK = Et(part,fgKaonMass);
1323               if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1324               if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoP += myEt;
1325               fSimHadEt += myEt;
1326               fSimTotEt += myEt;
1327               if( !fRunLightweight){
1328                 FillHisto2D("EtSimulatedAntiProton",part->Pt(),part->Eta(),myEt);
1329                 FillHisto2D("EtNSimulatedAntiProton",part->Pt(),part->Eta(),1.0);
1330                 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1331                 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1332                 if(fCentBin>=0){//if a centrality bin was defined
1333                   FillHisto2D(Form("EtNSimulatedAntiProtonCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1334                   FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1335                 }
1336                 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
1337                 FillHisto2D("EtSimulatedAntiProtonAssumingPion",part->Pt(),part->Eta(),myEtPi);
1338                 FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
1339                 FillHisto2D("EtSimulatedAntiProtonAssumingKaon",part->Pt(),part->Eta(),myEtK);
1340                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1341                 Short_t charge = -1;
1342                 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1343                 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1344                 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1345                 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1346                 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1347                 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1348               }
1349               filled = true;
1350               if( !fRunLightweight){
1351                 if(fBaryonEnhancement){
1352                   float enhancement = ProtonBaryonEnhancement(part->Pt());
1353                   FillHisto2D("EtSimulatedAntiProtonEnhanced",part->Pt(),part->Eta(),myEt*enhancement);
1354                   FillHisto2D("EtNSimulatedAntiProtonEnhanced",part->Pt(),part->Eta(),1.0*enhancement);
1355                   FillHisto2D("EtSimulatedAntiProtonAssumingPionEnhanced",part->Pt(),part->Eta(),myEtPi*enhancement);
1356                 }
1357               }
1358             }
1359             //============Other hadrons===================================
1360
1361             if(pdgCode == fgNeutronCode){
1362               float myEt = Et(part);
1363               fSimHadEt += myEt;
1364               fSimTotEt += myEt;
1365               if( !fRunLightweight){
1366                 FillHisto2D("EtSimulatedNeutron",part->Pt(),part->Eta(),myEt);
1367                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1368               }
1369               filled = true;
1370             }
1371             if(pdgCode == fgAntiNeutronCode){
1372               float myEt = Et(part);
1373               fSimHadEt += myEt;
1374               fSimTotEt += myEt;
1375               if( !fRunLightweight){
1376                 FillHisto2D("EtSimulatedAntiNeutron",part->Pt(),part->Eta(),myEt);
1377                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1378               }
1379               filled = true;
1380             }
1381             if(pdgCode == fgLambdaCode){
1382               float myEt = Et(part);
1383               fSimHadEt += myEt;
1384               fSimTotEt += myEt;
1385               if( !fRunLightweight){
1386                 FillHisto2D("EtSimulatedLambda",part->Pt(),part->Eta(),myEt);
1387                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1388                 Float_t weight = LambdaWeight(part->Pt());
1389                 if(fBaryonEnhancement){
1390                   float enhancement = ProtonBaryonEnhancement(part->Pt());
1391                   weight = weight*enhancement;
1392                 }
1393                 FillHisto2D("EtSimulatedLambdaReweighted",part->Pt(),part->Eta(),myEt*weight);
1394                 Int_t ndaughters = part->GetNDaughters();
1395                 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1396                   Int_t daughterindex = part->GetDaughter(idaughter);
1397                   if(daughterindex<0 || daughterindex>1e5) continue;
1398                   TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1399                   if(daughter){
1400                     if(daughter->GetPDG(0)){
1401                       Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1402                       if(daughtercode==fgPiMinusCode || daughtercode==fgProtonCode){
1403                         myEt = Et(daughter);
1404                         FillHisto2D("EtSimulatedLambdaDaughters",daughter->Pt(),daughter->Eta(),myEt);
1405                         FillHisto2D("EtSimulatedLambdaDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
1406                       }
1407                     }
1408                     else{
1409                     }
1410                   }
1411                 }
1412               }
1413               filled = true;
1414             }
1415             if(pdgCode == fgAntiLambdaCode){
1416               float myEt = Et(part);
1417               fSimHadEt += myEt;
1418               fSimTotEt += myEt;
1419               if( !fRunLightweight){
1420                 FillHisto2D("EtSimulatedAntiLambda",part->Pt(),part->Eta(),myEt);
1421                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1422                 Float_t weight = AntiLambdaWeight(part->Pt());
1423                 if(fBaryonEnhancement){
1424                   float enhancement = ProtonBaryonEnhancement(part->Pt());
1425                   weight = weight*enhancement;
1426                 }
1427                 FillHisto2D("EtSimulatedAntiLambdaReweighted",part->Pt(),part->Eta(),myEt*weight);
1428                 Int_t ndaughters = part->GetNDaughters();
1429                 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1430                   Int_t daughterindex = part->GetDaughter(idaughter);
1431                   if(daughterindex<0 || daughterindex>1e5) continue;
1432                   TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1433                   if(daughter){
1434                     if(daughter->GetPDG(0)){
1435                       Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1436                       if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode){
1437                         myEt = Et(daughter);
1438                         FillHisto2D("EtSimulatedAntiLambdaDaughters",daughter->Pt(),daughter->Eta(),myEt);
1439                         FillHisto2D("EtSimulatedAntiLambdaDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
1440                       }
1441                     }
1442                   }
1443                 }
1444               }
1445               filled = true;
1446             }
1447             if(pdgCode == fgK0SCode){
1448               float myEt = Et(part);
1449               fSimHadEt += myEt;
1450               fSimTotEt += myEt;
1451               if( !fRunLightweight){
1452                 FillHisto2D("EtSimulatedK0S",part->Pt(),part->Eta(),myEt);
1453                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1454                 Float_t weight = K0Weight(part->Pt());
1455                 FillHisto2D("EtSimulatedK0SReweighted",part->Pt(),part->Eta(),myEt*weight);
1456                 Int_t ndaughters = part->GetNDaughters();
1457                 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1458                   Int_t daughterindex = part->GetDaughter(idaughter);
1459                   if(daughterindex<0 || daughterindex>1e5) continue;
1460                   TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1461                   if(daughter){
1462                     if(daughter->GetPDG(0)){
1463                       
1464                       Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1465                       if(daughtercode==fgPiMinusCode || daughtercode==fgPiPlusCode){
1466                         myEt = Et(daughter);
1467                         FillHisto2D("EtSimulatedK0SDaughters",daughter->Pt(),daughter->Eta(),myEt);
1468                         FillHisto2D("EtSimulatedK0SDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
1469                       }
1470                     }
1471                   }
1472                 }
1473               }
1474               filled = true;
1475             }
1476             if(pdgCode == fgK0LCode){
1477               float myEt = Et(part);
1478               fSimHadEt += myEt;
1479               fSimTotEt += myEt;
1480               if( !fRunLightweight){
1481                 FillHisto2D("EtSimulatedK0L",part->Pt(),part->Eta(),myEt);
1482                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1483                 Float_t weight = K0Weight(part->Pt());
1484                 FillHisto2D("EtSimulatedK0LReweighted",part->Pt(),part->Eta(),myEt*weight);
1485               }
1486               filled = true;
1487             }
1488             if(pdgCode == fgOmegaCode){
1489               float myEt = Et(part);
1490               fSimHadEt += myEt;
1491               fSimTotEt += myEt;
1492               if( !fRunLightweight){
1493                 FillHisto2D("EtSimulatedOmega",part->Pt(),part->Eta(),myEt);
1494                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1495                 Int_t ndaughters = part->GetNDaughters();
1496                 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1497                   Int_t daughterindex = part->GetDaughter(idaughter);
1498                   if(daughterindex<0 || daughterindex>1e5) continue;
1499                   TParticle *daughter = stack->Particle(daughterindex);
1500                   if(daughter){
1501                     if(daughter->GetPDG(0)){
1502                       
1503                       Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1504                       if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgKMinusCode){
1505                         myEt = Et(daughter);
1506                         FillHisto2D("EtSimulatedOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
1507                       }
1508                     }
1509                   }
1510                 }
1511               }
1512               filled = true;
1513             }
1514             if(pdgCode == fgAntiOmegaCode){
1515               float myEt = Et(part);
1516               fSimHadEt += myEt;
1517               fSimTotEt += myEt;
1518               if( !fRunLightweight){
1519                 FillHisto2D("EtSimulatedOmega",part->Pt(),part->Eta(),myEt);
1520                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1521                 Int_t ndaughters = part->GetNDaughters();
1522                 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1523                   Int_t daughterindex = part->GetDaughter(idaughter);
1524                   if(daughterindex<0 || daughterindex>1e5) continue;
1525                   TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1526                   if(daughter){
1527                     if(daughter->GetPDG(0)){
1528                       Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1529                       if(daughtercode==fgPiMinusCode || daughtercode==fgAntiProtonCode || daughtercode==fgKPlusCode){
1530                         myEt = Et(daughter);
1531                         FillHisto2D("EtSimulatedAntiOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
1532                       }
1533                     }
1534                   }
1535                 }
1536               }
1537               filled = true;
1538             }
1539             //There are two codes for Sigmas
1540             if(pdgCode == fgSigmaCode || pdgCode == -3222){
1541               float myEt = Et(part);
1542               fSimHadEt += myEt;
1543               fSimTotEt += myEt;
1544               if( !fRunLightweight){
1545                 FillHisto2D("EtSimulatedSigma",part->Pt(),part->Eta(),myEt);
1546                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1547               }
1548               filled = true;
1549             }
1550             if(pdgCode == fgAntiSigmaCode || pdgCode == 3222){
1551               float myEt = Et(part);
1552               fSimHadEt += myEt;
1553               fSimTotEt += myEt;
1554               if( !fRunLightweight){
1555                 FillHisto2D("EtSimulatedAntiSigma",part->Pt(),part->Eta(),myEt);
1556                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1557               }
1558               filled = true;
1559             }
1560             if(pdgCode == fgXiCode){
1561               float myEt = Et(part);
1562               fSimHadEt += myEt;
1563               fSimTotEt += myEt;
1564               if( !fRunLightweight){
1565                 FillHisto2D("EtSimulatedXi",part->Pt(),part->Eta(),myEt);
1566                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1567                 Int_t ndaughters = part->GetNDaughters();
1568                 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1569                   Int_t daughterindex = part->GetDaughter(idaughter);
1570                   if(daughterindex<0 || daughterindex>1e5 || daughterindex>1e5) continue;
1571                   TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1572                   if(daughter){
1573                     if(daughter->GetPDG(0)){
1574                       
1575                       Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1576                       if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgPiMinusCode){
1577                         myEt = Et(daughter);
1578                         FillHisto2D("EtSimulatedXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
1579                       }
1580                     }
1581                   }
1582                 }
1583               }
1584               filled = true;
1585             }
1586             if(pdgCode == fgAntiXiCode){
1587               float myEt = Et(part);
1588               fSimHadEt += myEt;
1589               fSimTotEt += myEt;
1590               if( !fRunLightweight){
1591                 FillHisto2D("EtSimulatedAntiXi",part->Pt(),part->Eta(),myEt);
1592                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1593                 Int_t ndaughters = part->GetNDaughters();
1594                 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1595                   Int_t daughterindex = part->GetDaughter(idaughter);
1596                   if(daughterindex<0 || daughterindex>1e5) continue;
1597                   TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1598                   if(daughter){
1599                     if(daughter->GetPDG(0)){
1600                       Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1601                       if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode || daughtercode==fgPiMinusCode){
1602                         myEt = Et(daughter);
1603                         FillHisto2D("EtSimulatedAntiXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
1604                       }
1605                     }
1606                   }
1607                 }
1608               }
1609               filled = true;
1610             }
1611             if(pdgCode == fgXi0Code){
1612               float myEt = Et(part);
1613               fSimHadEt += myEt;
1614               fSimTotEt += myEt;
1615               if( !fRunLightweight){
1616                 FillHisto2D("EtSimulatedXi0",part->Pt(),part->Eta(),myEt);
1617                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1618               }
1619               filled = true;
1620             }
1621             if(pdgCode == fgAntiXi0Code){
1622               float myEt = Et(part);
1623               fSimHadEt += myEt;
1624               fSimTotEt += myEt;
1625               if( !fRunLightweight){
1626                 FillHisto2D("EtSimulatedAntiXi0",part->Pt(),part->Eta(),myEt);
1627                 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1628               }
1629               filled = true;
1630             }
1631             //============electrons===================================
1632
1633             if(pdgCode == fgEPlusCode){
1634               float myEt = Et(part);
1635               fSimTotEt += myEt;
1636               if( !fRunLightweight){
1637                 FillHisto2D("EtSimulatedEPlus",part->Pt(),part->Eta(),myEt);
1638               }
1639               filled = true;
1640             }
1641             if(pdgCode == fgEMinusCode){
1642               float myEt = Et(part);
1643               fSimTotEt += myEt;
1644               if( !fRunLightweight){
1645                 FillHisto2D("EtSimulatedEMinus",part->Pt(),part->Eta(),myEt);
1646               }
1647               filled = true;
1648             }
1649             //============neutrals===================================
1650             if(pdgCode == fgGammaCode){
1651               TParticle *mom = NULL;
1652               Int_t pdgCodeMom = -99999999;
1653               float momEta = -30;
1654               float mompT = -5;
1655               if(part->GetFirstMother()>=0){
1656                 mom = stack->Particle(part->GetFirstMother());
1657                 if(mom->GetPDG(0)){
1658                   pdgCodeMom =  mom->GetPDG(0)->PdgCode();
1659                   momEta = mom->Eta();
1660                   mompT = mom->Pt();
1661                 }
1662               }
1663               //We want to separate the gammas by pi0, eta, omega0 but we don't want to double count energy so we get the et from the gamma daughter
1664               if(pdgCodeMom == fgEtaCode){
1665                 float myEt = Et(part);
1666                 fSimTotEt += myEt;
1667                 if( !fRunLightweight){
1668                   FillHisto2D("EtSimulatedEta",mompT,momEta,myEt);
1669                 }
1670                 filled = true;
1671               }
1672               if(pdgCodeMom == fgPi0Code){
1673                 float myEt = Et(part);
1674                 fSimTotEt += myEt;
1675                 if( !fRunLightweight){
1676                   FillHisto2D("EtSimulatedPi0",mompT,momEta,myEt);
1677                 }
1678                 filled = true;
1679               }
1680               if(pdgCodeMom == fgOmega0Code){
1681                 float myEt = Et(part);
1682                 fSimTotEt += myEt;
1683                 if( !fRunLightweight){
1684                   FillHisto2D("EtSimulatedOmega0",mompT,momEta,myEt);
1685                 }
1686                 filled = true;
1687               }
1688               if(!filled){
1689                 float myEt = Et(part);
1690                 fSimTotEt += myEt;
1691                 if( !fRunLightweight){
1692                   FillHisto2D("EtSimulatedGamma",part->Pt(),part->Eta(),myEt);
1693                 }
1694                 filled = true;
1695               }
1696             }
1697             if(pdgCode == fgEtaCode){
1698               float myEt = Et(part);
1699               fSimTotEt += myEt;
1700               if( !fRunLightweight){
1701                 FillHisto2D("EtSimulatedEta",part->Pt(),part->Eta(),myEt);
1702               }
1703               filled = true;
1704             }
1705             if(pdgCode == fgPi0Code){
1706               float myEt = Et(part);
1707               fSimTotEt += myEt;
1708               if( !fRunLightweight){
1709                 FillHisto2D("EtSimulatedPi0",part->Pt(),part->Eta(),myEt);
1710               }
1711               filled = true;
1712             }
1713             if(pdgCode == fgOmega0Code){
1714               float myEt = Et(part);
1715               fSimTotEt += myEt;
1716               if( !fRunLightweight){
1717                 FillHisto2D("EtSimulatedOmega0",part->Pt(),part->Eta(),myEt);
1718               }
1719               filled = true;
1720             }
1721           }
1722         }
1723     }
1724
1725     FillHisto1D("SimTotEt",fSimTotEt,1.0);
1726     FillHisto1D("SimHadEt",fSimHadEt,1.0);
1727     FillHisto1D("SimPiKPEt",fSimPiKPEt,1.0);
1728     FillHisto1D("SimRawEtTPC",fSimRawEtTPC,1.0);
1729     FillHisto1D("SimRawEtITS",fSimRawEtITS,1.0);
1730     if((fDataSet!=20100 || fDataSet==2011) && AliPWG0Helper::GetEventProcessType(mcEvent->Header()) == AliPWG0Helper::kND){
1731       FillHisto1D("SimHadEtND",fSimHadEt,1.0);
1732       FillHisto1D("SimTotEtND",fSimTotEt,1.0);
1733       FillHisto1D("NEventsND",0.5,1);
1734       FillHisto1D("SimPiKPEtND",fSimPiKPEt,1.0);
1735       FillHisto1D("SimRawEtNDTPC",fSimRawEtTPC,1.0);
1736       FillHisto1D("SimRawEtNDITS",fSimRawEtITS,1.0);
1737       if(kIsOfflineV0AND){
1738         FillHisto1D("SimHadEtNDV0AND",fSimHadEt,1.0);
1739         FillHisto1D("SimTotEtNDV0AND",fSimTotEt,1.0);
1740         FillHisto1D("NEventsNDV0AND",0.5,1);
1741         FillHisto1D("SimPiKPEtNDV0AND",fSimPiKPEt,1.0);
1742         FillHisto1D("SimRawEtNDV0ANDTPC",fSimRawEtTPC,1.0);
1743         FillHisto1D("SimRawEtNDV0ANDITS",fSimRawEtITS,1.0);
1744       }
1745       if(kIsOfflineMB){
1746         FillHisto1D("SimHadEtNDMB",fSimHadEt,1.0);
1747         FillHisto1D("SimTotEtNDMB",fSimTotEt,1.0);
1748         FillHisto1D("NEventsNDMB",0.5,1);
1749         FillHisto1D("SimPiKPEtNDMB",fSimPiKPEt,1.0);
1750         FillHisto1D("SimRawEtNDMBTPC",fSimRawEtTPC,1.0);
1751         FillHisto1D("SimRawEtNDMBITS",fSimRawEtITS,1.0);
1752       }
1753     }
1754     if((fDataSet!=20100||fDataSet==2011) && AliPWG0Helper::GetEventProcessType(mcEvent->Header()) == AliPWG0Helper::kSD){
1755       FillHisto1D("SimHadEtSD",fSimHadEt,1.0);
1756       FillHisto1D("SimTotEtSD",fSimTotEt,1.0);
1757       FillHisto1D("NEventsSD",0.5,1);
1758       FillHisto1D("SimPiKPEtSD",fSimPiKPEt,1.0);
1759       FillHisto1D("SimRawEtSDTPC",fSimRawEtTPC,1.0);
1760       FillHisto1D("SimRawEtSDITS",fSimRawEtITS,1.0);
1761       if(kIsOfflineV0AND){
1762         FillHisto1D("SimHadEtSDV0AND",fSimHadEt,1.0);
1763         FillHisto1D("SimTotEtSDV0AND",fSimTotEt,1.0);
1764         FillHisto1D("NEventsSDV0AND",0.5,1);
1765         FillHisto1D("SimPiKPEtSDV0AND",fSimPiKPEt,1.0);
1766         FillHisto1D("SimRawEtSDV0ANDTPC",fSimRawEtTPC,1.0);
1767         FillHisto1D("SimRawEtSDV0ANDITS",fSimRawEtITS,1.0);
1768       }
1769       if(kIsOfflineMB){
1770         FillHisto1D("SimHadEtSDMB",fSimHadEt,1.0);
1771         FillHisto1D("SimTotEtSDMB",fSimTotEt,1.0);
1772         FillHisto1D("NEventsSDMB",0.5,1);
1773         FillHisto1D("SimPiKPEtSDMB",fSimPiKPEt,1.0);
1774         FillHisto1D("SimRawEtSDMBTPC",fSimRawEtTPC,1.0);
1775         FillHisto1D("SimRawEtSDMBITS",fSimRawEtITS,1.0);
1776       }
1777     }
1778     if((fDataSet!=20100 || fDataSet==2011) && AliPWG0Helper::GetEventProcessType(mcEvent->Header()) == AliPWG0Helper::kDD){
1779       FillHisto1D("SimHadEtDD",fSimHadEt,1.0);
1780       FillHisto1D("SimTotEtDD",fSimTotEt,1.0);
1781       FillHisto1D("NEventsDD",0.5,1);
1782       FillHisto1D("SimPiKPEtDD",fSimPiKPEt,1.0);
1783       FillHisto1D("SimRawEtDDTPC",fSimRawEtTPC,1.0);
1784       if(kIsOfflineV0AND){
1785         FillHisto1D("SimHadEtDDV0AND",fSimHadEt,1.0);
1786         FillHisto1D("SimTotEtDDV0AND",fSimTotEt,1.0);
1787         FillHisto1D("NEventsDDV0AND",0.5,1);
1788         FillHisto1D("SimPiKPEtDDV0AND",fSimPiKPEt,1.0);
1789         FillHisto1D("SimRawEtDDV0ANDTPC",fSimRawEtTPC,1.0);
1790         FillHisto1D("SimRawEtDDV0ANDITS",fSimRawEtITS,1.0);
1791       }
1792       if(kIsOfflineMB){
1793         FillHisto1D("SimHadEtDDMB",fSimHadEt,1.0);
1794         FillHisto1D("SimTotEtDDMB",fSimTotEt,1.0);
1795         FillHisto1D("NEventsDDMB",0.5,1);
1796         FillHisto1D("SimPiKPEtDDMB",fSimPiKPEt,1.0);
1797         FillHisto1D("SimRawEtDDMBTPC",fSimRawEtTPC,1.0);
1798         FillHisto1D("SimRawEtDDMBITS",fSimRawEtITS,1.0);
1799       }
1800     }
1801     if(fCentBin != -1){//if we have Pb+Pb and a centrality bin was found
1802       if(fSimTotEt>0.0) FillHisto1D(Form("SimTotEtCB%i",fCentBin),fSimTotEt,1.0);
1803       if(fSimHadEt>0.0) FillHisto1D(Form("SimHadEtCB%i",fCentBin),fSimHadEt,1.0);
1804       if(fSimPiKPEt>0.0)FillHisto1D(Form("SimPiKPEtCB%i",fCentBin),fSimPiKPEt,1.0);
1805     }
1806
1807     if(fInvestigateSmearing && !fRunLightweight){
1808       //Smearing histograms
1809       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtSmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtSmeared)/fSimPiKPEt,1.0);
1810       FillHisto1D("SimPiKPEtPtSmeared",fSimPiKPEtPtSmeared,1.0);
1811       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimEfficiencySmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtEfficiencySmeared)/fSimPiKPEt,1.0);
1812       FillHisto1D("SimPiKPEtEfficiencySmeared",fSimPiKPEtEfficiencySmeared,1.0);
1813       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtCutSmearedTPC",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtCutSmearedTPC)/fSimPiKPEt,1.0);
1814       FillHisto1D("SimPiKPEtPtCutSmearedTPC",fSimPiKPEtPtCutSmearedTPC,1.0);
1815       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtCutSmearedITS",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtCutSmearedITS)/fSimPiKPEt,1.0);
1816       FillHisto1D("SimPiKPEtPtCutSmearedITS",fSimPiKPEtPtCutSmearedTPC,1.0);
1817       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPIDSmeared)/fSimPiKPEt,1.0);
1818       FillHisto1D("SimPiKPEtPIDSmeared",fSimPiKPEtPIDSmeared,1.0);
1819       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmearedNoID",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPIDSmearedNoID)/fSimPiKPEt,1.0);
1820       FillHisto1D("SimPiKPEtPIDSmearedNoID",fSimPiKPEtPIDSmearedNoID,1.0);
1821     }
1822     return 1;
1823     
1824 }
1825
1826 void AliAnalysisHadEtMonteCarlo::Init()
1827 { // Init
1828     AliAnalysisHadEt::Init();
1829     if(!fPtSmearer) fPtSmearer = new TRandom();
1830 }
1831 void AliAnalysisHadEtMonteCarlo::CreateHistograms(){
1832   //for simulated Et only (no reconstruction)
1833
1834   AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
1835   if (!man) {
1836     AliFatal("Analysis manager needed");
1837     return;
1838   }
1839   AliInputEventHandler *inputHandler=dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
1840   if (!inputHandler) {
1841     AliFatal("Input handler needed");
1842     return;
1843   }
1844
1845   //pid response object
1846   fPIDResponse=inputHandler->GetPIDResponse();
1847   if (!fPIDResponse) AliError("PIDResponse object was not created");
1848
1849   if( !fRunLightweight){
1850     CreateEtaPtHisto2D(TString("EtSimulatedPiPlus"),TString("Simulated E_{T} from #pi^{+}"));
1851     CreateEtaPtHisto2D("EtSimulatedPiMinus","Simulated E_{T} from #pi^{-}");
1852     CreateEtaPtHisto2D("EtSimulatedKPlus","Simulated E_{T} from K^{+}");
1853     CreateEtaPtHisto2D("EtSimulatedKMinus","Simulated E_{T} from K^{-}");
1854     CreateEtaPtHisto2D("EtSimulatedProton","Simulated E_{T} from p");
1855     CreateEtaPtHisto2D("EtSimulatedAntiProton","Simulated E_{T} from #bar{p}");//Both baryon enhancement and strangeness rescaling
1856     if(fBaryonEnhancement){
1857       CreateEtaPtHisto2D("EtSimulatedProtonEnhanced","Simulated E_{T} from p");
1858       CreateEtaPtHisto2D("EtSimulatedAntiProtonEnhanced","Simulated E_{T} from #bar{p}");
1859     }
1860     CreateEtaPtHisto2D("EtSimulatedChargedHadron","Simulated E_{T} from charged hadrons");
1861     CreateEtaPtHisto2D("EtNSimulatedPiPlus","Number of Simulated #pi^{+}");
1862     CreateEtaPtHisto2D("EtNSimulatedPiMinus","Number of simulated #pi^{-}");
1863     CreateEtaPtHisto2D("EtNSimulatedKPlus","Number of simulated K^{+}");
1864     CreateEtaPtHisto2D("EtNSimulatedKMinus","Number of simulated K^{-}");
1865     CreateEtaPtHisto2D("EtNSimulatedProton","Number of simulated p");
1866     CreateEtaPtHisto2D("EtNSimulatedAntiProton","Number of simulated #bar{p}");
1867     if(fBaryonEnhancement){
1868       CreateEtaPtHisto2D("EtNSimulatedProtonEnhanced","Number of simulated p");
1869       CreateEtaPtHisto2D("EtNSimulatedAntiProtonEnhanced","Number of simulated #bar{p}");
1870     }
1871     CreateEtaPtHisto2D("EtNSimulatedChargedHadron","Number of simulated charged hadrons");
1872     if(fDataSet==20100 || fDataSet==2011){//If this is Pb+Pb
1873       Int_t width = 5;
1874       if(fNCentBins<21) width = 10;
1875       for(Int_t i=0;i<fNCentBins;i++){
1876         CreateEtaPtHisto2D(Form("EtNSimulatedPiPlusCB%i",i),Form("Number of Simulated #pi^{+} for %i-%i central",i*width,(i+1)*width));
1877         CreateEtaPtHisto2D(Form("EtNSimulatedPiMinusCB%i",i),Form("Number of simulated #pi^{-} for %i-%i central",i*width,(i+1)*width));
1878         CreateEtaPtHisto2D(Form("EtNSimulatedKPlusCB%i",i),Form("Number of simulated K^{+} for %i-%i central",i*width,(i+1)*width));
1879         CreateEtaPtHisto2D(Form("EtNSimulatedKMinusCB%i",i),Form("Number of simulated K^{-} for %i-%i central",i*width,(i+1)*width));
1880         CreateEtaPtHisto2D(Form("EtNSimulatedProtonCB%i",i),Form("Number of simulated p for %i-%i central",i*width,(i+1)*width));
1881         CreateEtaPtHisto2D(Form("EtNSimulatedAntiProtonCB%i",i),Form("Number of simulated #bar{p} for %i-%i central",i*width,(i+1)*width));
1882         CreateEtaPtHisto2D(Form("EtNSimulatedChargedHadronCB%i",i),Form("Number of simulated charged hadrons for %i-%i central",i*width,(i+1)*width));
1883       }
1884     }
1885     CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingNoPt","Simulated E_{T} from charged hadrons assuming p_{T}=0");
1886     CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut","Simulated E_{T} from charged hadrons assuming p_{T}=0.15");
1887     CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPtITSCut","Simulated E_{T} from charged hadrons assuming p_{T}=0.10");
1888
1889     CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPion","Simulated E_{T} from charged hadrons assuming they are all pions");
1890     CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingProton","Simulated E_{T} from charged hadrons assuming they are all pions");
1891     CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingKaon","Simulated E_{T} from charged hadrons assuming they are all pions");
1892     CreateEtaPtHisto2D("EtSimulatedKPlusAssumingPion","Simulated E_{T} from K^{+} assuming #pi mass");
1893     CreateEtaPtHisto2D("EtSimulatedKMinusAssumingPion","Simulated E_{T} from K^{-} assuming #pi mass");
1894     CreateEtaPtHisto2D("EtSimulatedProtonAssumingPion","Simulated E_{T} from p assuming #pi mass");
1895     CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingPion","Simulated E_{T} from #bar{p} assuming #pi mass");
1896     CreateEtaPtHisto2D("EtSimulatedKPlusAssumingProton","Simulated E_{T} from K^{+} assuming #pi mass");
1897     CreateEtaPtHisto2D("EtSimulatedKMinusAssumingProton","Simulated E_{T} from K^{-} assuming #pi mass");
1898     CreateEtaPtHisto2D("EtSimulatedPiPlusAssumingProton","Simulated E_{T} from p assuming #pi mass");
1899     CreateEtaPtHisto2D("EtSimulatedPiMinusAssumingProton","Simulated E_{T} from #bar{p} assuming #pi mass");
1900     CreateEtaPtHisto2D("EtSimulatedPiPlusAssumingKaon","Simulated E_{T} from K^{+} assuming #pi mass");
1901     CreateEtaPtHisto2D("EtSimulatedPiMinusAssumingKaon","Simulated E_{T} from K^{-} assuming #pi mass");
1902     CreateEtaPtHisto2D("EtSimulatedProtonAssumingKaon","Simulated E_{T} from p assuming #pi mass");
1903     CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingKaon","Simulated E_{T} from #bar{p} assuming #pi mass");
1904     if(fBaryonEnhancement){
1905       CreateEtaPtHisto2D("EtSimulatedProtonAssumingPionEnhanced","Simulated E_{T} from p assuming #pi mass");
1906       CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingPionEnhanced","Simulated E_{T} from #bar{p} assuming #pi mass");
1907     }
1908
1909     CreateEtaPtHisto2D("EtSimulatedLambda","Simulated E_{T} from #Lambda");
1910     CreateEtaPtHisto2D("EtSimulatedAntiLambda","Simulated E_{T} from #bar{#Lambda}");
1911     CreateEtaPtHisto2D("EtSimulatedK0S","Simulated E_{T} from K^{0}_{S}");
1912     CreateEtaPtHisto2D("EtSimulatedK0L","Simulated E_{T} from K^{0}_{L}");
1913     CreateEtaPtHisto2D("EtSimulatedLambdaReweighted","Simulated E_{T} from #Lambda");//These will also be used for baryon enhancement
1914     CreateEtaPtHisto2D("EtSimulatedAntiLambdaReweighted","Simulated E_{T} from #bar{#Lambda}");
1915     CreateEtaPtHisto2D("EtSimulatedK0SReweighted","Simulated E_{T} from K^{0}_{S}");
1916     CreateEtaPtHisto2D("EtSimulatedK0LReweighted","Simulated E_{T} from K^{0}_{L}");
1917     CreateEtaPtHisto2D("EtSimulatedNeutron","Simulated E_{T} from neutrons");
1918     CreateEtaPtHisto2D("EtSimulatedAntiNeutron","Simulated E_{T} from #bar{n}");
1919     CreateEtaPtHisto2D("EtSimulatedEPlus","Simulated E_{T} from e^{+}");
1920     CreateEtaPtHisto2D("EtSimulatedEMinus","Simulated E_{T} from e^{-}");
1921     CreateEtaPtHisto2D("EtSimulatedOmega","Simulated E_{T} from #Omega^{-}");
1922     CreateEtaPtHisto2D("EtSimulatedAntiOmega","Simulated E_{T} from #Omega^{+}");
1923     CreateEtaPtHisto2D("EtSimulatedXi","Simulated E_{T} from #Xi^{-}");
1924     CreateEtaPtHisto2D("EtSimulatedAntiXi","Simulated E_{T} from #Xi^{+}");
1925     CreateEtaPtHisto2D("EtSimulatedSigma","Simulated E_{T} from #Xi^{-}");
1926     CreateEtaPtHisto2D("EtSimulatedAntiSigma","Simulated E_{T} from #Xi^{+}");
1927     CreateEtaPtHisto2D("EtSimulatedXi0","Simulated E_{T} from #Xi^{0}");
1928     CreateEtaPtHisto2D("EtSimulatedAntiXi0","Simulated E_{T} from #Xi^{0}");
1929     CreateEtaPtHisto2D("EtSimulatedAllHadron","Simulated E_{T} from all hadrons");
1930
1931
1932     CreateEtaPtHisto2D("EtSimulatedLambdaDaughters","Simulated E_{T} from #Lambda Daughters");
1933     CreateEtaPtHisto2D("EtSimulatedAntiLambdaDaughters","Simulated E_{T} from #bar{#Lambda} Daughters");
1934     CreateEtaPtHisto2D("EtSimulatedK0SDaughters","Simulated E_{T} from K^{0}_{S} Daughters");
1935     CreateEtaPtHisto2D("EtSimulatedLambdaDaughtersReweighted","Simulated E_{T} from #Lambda Daughters");
1936     CreateEtaPtHisto2D("EtSimulatedAntiLambdaDaughtersReweighted","Simulated E_{T} from #bar{#Lambda} Daughters");
1937     CreateEtaPtHisto2D("EtSimulatedK0SDaughtersReweighted","Simulated E_{T} from K^{0}_{S} Daughters");
1938     CreateEtaPtHisto2D("EtSimulatedOmegaDaughters","Simulated E_{T} from #Omega^{-} Daughters");
1939     CreateEtaPtHisto2D("EtSimulatedAntiOmegaDaughters","Simulated E_{T} from #Omega^{+} Daughters");
1940     CreateEtaPtHisto2D("EtSimulatedXiDaughters","Simulated E_{T} from #Xi^{-} Daughters");
1941     CreateEtaPtHisto2D("EtSimulatedAntiXiDaughters","Simulated E_{T} from #Xi^{+} Daughters");
1942
1943
1944     CreateEtaPtHisto2D("EtSimulatedGamma","Simulated E_{T} from #gamma");
1945     CreateEtaPtHisto2D("EtSimulatedEta","Simulated E_{T} from #eta");
1946     CreateEtaPtHisto2D("EtSimulatedPi0","Simulated E_{T} from #pi^{0}");
1947     CreateEtaPtHisto2D("EtSimulatedOmega0","Simulated E_{T} from #omega");
1948   }
1949   TString *strTPC = new TString("TPC");
1950   TString *strITS = new TString("ITS");
1951   TString *strTPCITS = new TString("TPCITS");
1952   Int_t lastcutset = 1;
1953   if(fRequireITSHits) lastcutset = 2;
1954   for(Int_t i=0;i<=lastcutset;i++){
1955     TString *cutName = NULL;
1956     Float_t maxPtdEdx = 10;
1957     Float_t mindEdx = 35;
1958     Float_t maxdEdx = 150.0;
1959     switch(i){
1960     case 0:
1961       cutName = strTPC;
1962       break;
1963     case 1:
1964       cutName = strITS;
1965       maxPtdEdx = 5;
1966       maxdEdx = 500.0;
1967       break;
1968     case 2:
1969       cutName = strTPCITS;
1970       break;
1971     default:
1972       cerr<<"Error:  cannot make histograms!"<<endl;
1973       return;
1974     }
1975
1976     if( !fRunLightweight){
1977       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedPiPlus",cutName->Data()),"Reconstructed E_{T} from identified #pi^{+}");
1978       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedPiMinus",cutName->Data()),"Reconstructed E_{T} from identified #pi^{-}");
1979       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedKPlus",cutName->Data()),"Reconstructed E_{T} from identified K^{+}");
1980       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedEMinus",cutName->Data()),"Reconstructed E_{T} from identified e^{-}");
1981       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedEPlus",cutName->Data()),"Reconstructed E_{T} from identified e^{+}");
1982       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedKMinus",cutName->Data()),"Reconstructed E_{T} from identified K^{-}");
1983       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedProton",cutName->Data()),"Reconstructed E_{T} from identified p");
1984       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedAntiProton",cutName->Data()),"Reconstructed E_{T} from identified #bar{p}");
1985       if(fBaryonEnhancement){
1986         CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from identified p");
1987         CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from identified #bar{p}");
1988       }
1989       CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentified",cutName->Data()),"Number of Reconstructed unidentified particles");
1990       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1991       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1992       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1993
1994       CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedKaon",cutName->Data()),"Number of Reconstructed unidentified kaons particles");
1995       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1996       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1997       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1998       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming kaon mass");
1999       CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedProton",cutName->Data()),"Number of Reconstructed unidentified proton particles");
2000       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
2001       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
2002       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
2003       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
2004       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
2005       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
2006       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProton",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming proton mass");
2007       if(fBaryonEnhancement){
2008         CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),"Number of Reconstructed unidentified proton particles");
2009         CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
2010         CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming proton mass");
2011       }
2012       CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedPion",cutName->Data()),"Number of Reconstructed unidentified pions particles");
2013       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
2014       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
2015       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
2016       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPion",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
2017
2018       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentified",cutName->Data()),"Reconstructed E_{T} from unidentified particles using real mass");
2019       CreateEtaPtHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),"Reconstructed E_{T} from misidentified electrons");
2020
2021
2022       CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlus",cutName->Data()),"Reconstructed E_{T} from #pi^{+}");
2023       CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinus",cutName->Data()),"Reconstructed E_{T} from #pi^{-}");
2024       CreateEtaPtHisto2D(Form("EtReconstructed%sKPlus",cutName->Data()),"Reconstructed E_{T} from K^{+}");
2025       CreateEtaPtHisto2D(Form("EtReconstructed%sKMinus",cutName->Data()),"Reconstructed E_{T} from K^{-}");
2026       CreateEtaPtHisto2D(Form("EtReconstructed%sProton",cutName->Data()),"Reconstructed E_{T} from p");
2027       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProton",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
2028       if(fBaryonEnhancement){
2029         CreateEtaPtHisto2D(Form("EtReconstructed%sProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from p");
2030         CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
2031       }
2032       CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
2033       CreateEtaPtHisto2D(Form("EtNReconstructed%sPiPlus",cutName->Data()),"Reconstructed E_{T} from #pi^{+}");
2034       CreateEtaPtHisto2D(Form("EtNReconstructed%sPiMinus",cutName->Data()),"Reconstructed E_{T} from #pi^{-}");
2035       CreateEtaPtHisto2D(Form("EtNReconstructed%sKPlus",cutName->Data()),"Reconstructed E_{T} from K^{+}");
2036       CreateEtaPtHisto2D(Form("EtNReconstructed%sKMinus",cutName->Data()),"Reconstructed E_{T} from K^{-}");
2037       CreateEtaPtHisto2D(Form("EtNReconstructed%sProton",cutName->Data()),"Reconstructed E_{T} from p");
2038       CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProton",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
2039       if(fBaryonEnhancement){
2040         CreateEtaPtHisto2D(Form("EtNReconstructed%sProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from p");
2041         CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
2042       }
2043       CreateEtaPtHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
2044       if(fDataSet==20100||fDataSet==2011){//If this is Pb+Pb
2045         Int_t width = 5;
2046         if(fNCentBins<21) width = 10;
2047         for(Int_t j=0;j<fNCentBins;j++){
2048           CreateEtaPtHisto2D(Form("EtNReconstructed%sPiPlusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #pi^{+} for %i-%i central",j*width,(j+1)*width));
2049           CreateEtaPtHisto2D(Form("EtNReconstructed%sPiMinusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #pi^{-} for %i-%i central",j*width,(j+1)*width));
2050           CreateEtaPtHisto2D(Form("EtNReconstructed%sKPlusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from K^{+} for %i-%i central",j*width,(j+1)*width));
2051           CreateEtaPtHisto2D(Form("EtNReconstructed%sKMinusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from K^{-} for %i-%i central",j*width,(j+1)*width));
2052           CreateEtaPtHisto2D(Form("EtNReconstructed%sProtonCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from p for %i-%i central",j*width,(j+1)*width));
2053           CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProtonCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #bar{p} for %i-%i central",j*width,(j+1)*width));
2054           CreateEtaPtHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from charged hadrons for %i-%i central",j*width,(j+1)*width));
2055         }
2056       }
2057
2058       CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
2059       CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
2060       CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
2061       CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingPion",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
2062       CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingPion",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
2063       CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
2064       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
2065       CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
2066       CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
2067       CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
2068       CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
2069       CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
2070       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
2071
2072       CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingProton",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
2073       CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingProton",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
2074       CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinusAssumingProton",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
2075       CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlusAssumingProton",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
2076       CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
2077       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
2078
2079       if(fBaryonEnhancement){
2080         CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
2081         CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
2082       }
2083
2084       CreateEtaPtHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),"Reconstructed E_{T} from e^{+}");
2085       CreateEtaPtHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),"Reconstructed E_{T} from e^{-}");
2086
2087
2088
2089       CreateEtaPtHisto2D(Form("EtReconstructed%sLambdaDaughters",cutName->Data()),"Reconstructed E_{T} from #Lambda Daughters");
2090       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiLambdaDaughters",cutName->Data()),"Reconstructed E_{T} from #bar{#Lambda} Daughters");
2091       CreateEtaPtHisto2D(Form("EtReconstructed%sK0SDaughters",cutName->Data()),"Reconstructed E_{T} from K^{0}_{S} Daughters");
2092       CreateEtaPtHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from #Lambda Daughters");
2093       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from #bar{#Lambda} Daughters");
2094       CreateEtaPtHisto2D(Form("EtReconstructed%sK0SDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from K^{0}_{S} Daughters");
2095       CreateEtaPtHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),"Reconstructed E_{T} from #Omega^{-} Daughters");
2096       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),"Reconstructed E_{T} from #Omega^{+} Daughters");
2097       CreateEtaPtHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),"Reconstructed E_{T} from #Xi^{-} Daughters");
2098       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),"Reconstructed E_{T} from #Xi^{+} Daughters");
2099       CreateEtaPtHisto2D(Form("EtReconstructed%sConversionElectrons",cutName->Data()),"Reconstructed E_{T} from conversion electrons");
2100       CreateEtaPtHisto2D(Form("EtReconstructed%sSecondaryMuons",cutName->Data()),"Reconstructed E_{T} from secondary muons");//from pions
2101       CreateEtaPtHisto2D(Form("EtReconstructed%sSecondaryPions",cutName->Data()),"Reconstructed E_{T} from secondary pions");//from rescattering and sigma+-
2102       CreateEtaPtHisto2D(Form("EtReconstructed%sSecondaryProtons",cutName->Data()),"Reconstructed E_{T} from secondary protons");//from rescattering and sigma+-
2103     }
2104     CreateIntHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),"PIDs of unidentified particles", "PID", "Number of particles",9, -4,4);
2105     CreateHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),"PIDs of misidentified particles", "PID real","PID identified",5, -.5,4.5,5, -.5,4.5);
2106     CreateHisto2D(Form("dEdxAll%s",cutName->Data()),"dE/dx for all particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
2107     CreateHisto2D(Form("dEdxPion%s",cutName->Data()),"dE/dx for #pi^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
2108     CreateHisto2D(Form("dEdxKaon%s",cutName->Data()),"dE/dx for K^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
2109     CreateHisto2D(Form("dEdxProton%s",cutName->Data()),"dE/dx for p(#bar{p})","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
2110     CreateHisto2D(Form("dEdxElectron%s",cutName->Data()),"dE/dx for e^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
2111     CreateHisto2D(Form("dEdxUnidentified%s",cutName->Data()),"dE/dx for unidentified particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
2112   }
2113   delete strTPC;
2114   delete strITS;
2115   delete strTPCITS;
2116
2117   Float_t minEt = 0.0;
2118   Float_t maxEt = 100.0;
2119   Float_t minEtPiKP = 0.0;
2120   Float_t maxEtPiKP = 100.0;
2121   if(fDataSet==20100 || fDataSet==2011){
2122     maxEt=4000.0;
2123     maxEtPiKP = 2500;
2124   }
2125   if(fDataSet==2013){
2126     maxEt=100.0;
2127     maxEtPiKP = 100.0;
2128   }
2129   Int_t nbinsEt = 100;
2130   char histoname[200];
2131   char histotitle[200];
2132   char xtitle[50];
2133   char ytitle[50];
2134   TString *sTPC = new TString("TPC");
2135   TString *sITS = new TString("ITS");
2136   TString *sTPCpt = new TString("0.15");
2137   TString *sITSpt = new TString("0.10");
2138   TString *sPID = new TString("");
2139   TString *sNoPID = new TString("NoPID");
2140   TString *sNoPIDString = new TString(", No PID");
2141   TString *sHadEt = new TString("HadEt");
2142   TString *sTotEt = new TString("TotEt");
2143   TString *sPiKPEt =  new TString("PiKPEt");
2144   TString *sRawEt =  new TString("RawEt");
2145   TString *sTotEtString = new TString("total E_{T}");
2146   TString *sHadEtString = new TString("hadronic E_{T}");
2147   TString *sPiKPEtString = new TString("E_{T}^{#pi,K,p}");
2148   TString *sRawEtString = new TString("E_{T}^{raw}");
2149   TString *sFull = new TString("Full");
2150   TString *sEMCAL = new TString("EMCAL");
2151   TString *sPHOS = new TString("PHOS");
2152   float etDiff = 1.5;
2153   float etDiffLow = etDiff;
2154   if(fDataSet!=20100 && fDataSet!=2011){//If this is p+p
2155     etDiffLow = 2.5;
2156   }
2157
2158   for(int tpc = 0;tpc<lastcutset;tpc++){
2159     TString *detector = NULL;
2160     TString *ptstring = NULL;
2161     if(tpc==1) {detector = sTPC; ptstring = sTPCpt;}
2162     else{detector = sITS; ptstring = sITSpt;}
2163     for(int hadet = 0;hadet<2;hadet++){
2164       TString *et = NULL;
2165       TString *etstring = NULL;
2166       if(hadet==1) {et = sHadEt; etstring = sHadEtString;}
2167       else{et = sTotEt; etstring = sTotEtString;}
2168       for(int type = 0;type<3;type++){
2169         if(type==0 && !fInvestigateFull) continue;
2170         if(type==1 && !fInvestigateEMCal) continue;
2171         if(type==2 && !fInvestigatePHOS) continue;
2172         TString *acceptance = NULL;
2173         switch(type){
2174         case 0:
2175           acceptance = sFull;
2176           etDiff = 1.5;
2177           break;
2178         case 1:
2179           acceptance = sEMCAL;
2180           etDiff = 5;
2181           break;
2182         case 2:
2183           acceptance = sPHOS;
2184           etDiff = 5;
2185           break;
2186         default:
2187           acceptance = sFull;
2188         }
2189         for(int pid = 0;pid<2;pid++){
2190           TString *partid = NULL;
2191           TString *partidstring = NULL;
2192           if(pid==1){partid = sPID; partidstring = sPID;}
2193           else{partid = sNoPID; partidstring = sNoPIDString;}
2194
2195           snprintf(histoname,200,"Sim%sMinusReco%s%sAcceptance%s%s",et->Data(),et->Data(),acceptance->Data(),detector->Data(),partid->Data());
2196           snprintf(histotitle,200,"(Simulated %s - reconstructed %s)/(Simulated %s) with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),etstring->Data(),etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
2197           snprintf(ytitle,50,"(Simulated %s - reconstructed %s)/(Simulated %s)",etstring->Data(),etstring->Data(),etstring->Data());
2198           snprintf(xtitle,50,"Simulated %s",etstring->Data());
2199           CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiffLow,etDiff);
2200
2201           if(type==0){//only fill for full acceptance
2202             snprintf(histoname,200,"Sim%sVsReco%s%sAcceptance%s%s",et->Data(),et->Data(),acceptance->Data(),detector->Data(),partid->Data());
2203             snprintf(histotitle,200,"Simulated %s vs reconstructed %s with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
2204             snprintf(ytitle,50,"Reconstructed %s",etstring->Data());
2205             snprintf(xtitle,50,"Simulated %s",etstring->Data());
2206             CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt*4,minEt,maxEt,nbinsEt*4,minEt,maxEt);
2207             if(hadet==1){//on top of that we want to create pikp histograms without adding a full option parallel to had and tot et - therefore we will just create these histos when we create the hadet histos
2208               snprintf(histoname,200,"Sim%sVsReco%s%sAcceptance%s%s",sPiKPEt->Data(),sPiKPEt->Data(),acceptance->Data(),detector->Data(),partid->Data());
2209               snprintf(histotitle,200,"Simulated %s vs reconstructed %s with %s acceptance for p_{T}>%s GeV/c%s",sPiKPEtString->Data(),sPiKPEtString->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
2210               snprintf(ytitle,50,"Reconstructed %s",sPiKPEtString->Data());
2211               snprintf(xtitle,50,"Simulated %s",sPiKPEtString->Data());
2212               CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt*4,minEtPiKP,maxEtPiKP,nbinsEt*4,minEtPiKP,maxEtPiKP);
2213
2214               //And for the raw ET
2215               snprintf(histoname,200,"Sim%sVsReco%s%sAcceptance%s%s",sRawEt->Data(),sRawEt->Data(),acceptance->Data(),detector->Data(),partid->Data());
2216               snprintf(histotitle,200,"Simulated %s vs reconstructed %s with %s acceptance for p_{T}>%s GeV/c%s",sRawEtString->Data(),sRawEtString->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
2217               snprintf(ytitle,50,"Reconstructed %s",sRawEtString->Data());
2218               snprintf(xtitle,50,"Simulated %s",sRawEtString->Data());
2219               CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt*4,minEtPiKP,maxEtPiKP,nbinsEt*4,minEtPiKP,maxEtPiKP);
2220             }
2221           }
2222
2223           if(hadet==0 && type==0 && fInvestigatePiKP){//we only want to do this once...  not the most elegant way of coding but hey...
2224             snprintf(histoname,200,"SimPiKPMinusRecoPiKP%sAcceptance%s%s",acceptance->Data(),detector->Data(),partid->Data());
2225             snprintf(histotitle,200,"(Sim PiKP - reco PiKP)/(Sim PiKP) with %s acceptance for p_{T}>%s GeV/c%s",acceptance->Data(),ptstring->Data(),partidstring->Data());
2226             snprintf(ytitle,50,"(Sim PiKP - reco PiKP)/(Sim PiKP)");
2227             snprintf(xtitle,50,"Simulated E_{T}^{#pi,K,p}");
2228             CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiffLow,etDiff);
2229           }
2230         }
2231       }
2232     }
2233   }
2234   CreateHisto1D("SimPiKPEt","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2235   CreateHisto1D("SimPiKPEtND","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2236   CreateHisto1D("SimPiKPEtDD","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2237   CreateHisto1D("SimPiKPEtSD","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2238   CreateHisto1D("SimPiKPEtNDV0AND","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2239   CreateHisto1D("SimPiKPEtDDV0AND","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2240   CreateHisto1D("SimPiKPEtSDV0AND","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2241   CreateHisto1D("SimPiKPEtNDMB","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2242   CreateHisto1D("SimPiKPEtDDMB","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2243   CreateHisto1D("SimPiKPEtSDMB","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2244   CreateHisto1D("SimRawEtTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2245   CreateHisto1D("SimRawEtNDTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2246   CreateHisto1D("SimRawEtDDTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2247   CreateHisto1D("SimRawEtSDTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2248   CreateHisto1D("SimRawEtNDV0ANDTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2249   CreateHisto1D("SimRawEtDDV0ANDTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2250   CreateHisto1D("SimRawEtSDV0ANDTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2251   CreateHisto1D("SimRawEtNDMBTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2252   CreateHisto1D("SimRawEtDDMBTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2253   CreateHisto1D("SimRawEtSDMBTPC","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2254   CreateHisto1D("SimRawEtITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2255   CreateHisto1D("SimRawEtNDITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2256   CreateHisto1D("SimRawEtDDITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2257   CreateHisto1D("SimRawEtSDITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2258   CreateHisto1D("SimRawEtNDV0ANDITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2259   CreateHisto1D("SimRawEtDDV0ANDITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2260   CreateHisto1D("SimRawEtSDV0ANDITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2261   CreateHisto1D("SimRawEtNDMBITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2262   CreateHisto1D("SimRawEtDDMBITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2263   CreateHisto1D("SimRawEtSDMBITS","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt*4,minEtPiKP,maxEtPiKP);
2264   CreateHisto1D("SimTotEt","Simulated Total E_{T}","Simulated Total E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
2265   CreateHisto1D("SimHadEt","Simulated Hadronic E_{T}","Simulated Hadronic E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
2266   CreateHisto1D("SimTotEtND","Simulated Total E_{T}","Simulated Total E_{T} for non-diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2267   CreateHisto1D("SimHadEtND","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for non-diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2268   CreateHisto1D("SimTotEtNDV0AND","Simulated Total E_{T}","Simulated Total E_{T} for non-diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2269   CreateHisto1D("SimHadEtNDV0AND","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for non-diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2270   CreateHisto1D("SimTotEtNDMB","Simulated Total E_{T}","Simulated Total E_{T} for non-diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2271   CreateHisto1D("SimHadEtNDMB","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for non-diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2272   CreateHisto1D("SimTotEtSD","Simulated Total E_{T}","Simulated Total E_{T} for singly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2273   CreateHisto1D("SimHadEtSD","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for singly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2274   CreateHisto1D("SimTotEtSDV0AND","Simulated Total E_{T}","Simulated Total E_{T} for singly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2275   CreateHisto1D("SimHadEtSDV0AND","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for singly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2276   CreateHisto1D("SimTotEtSDMB","Simulated Total E_{T}","Simulated Total E_{T} for singly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2277   CreateHisto1D("SimHadEtSDMB","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for singly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2278   CreateHisto1D("SimTotEtDD","Simulated Total E_{T}","Simulated Total E_{T} for doubly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2279   CreateHisto1D("SimHadEtDD","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for doubly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2280   CreateHisto1D("SimTotEtDDV0AND","Simulated Total E_{T}","Simulated Total E_{T} for doubly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2281   CreateHisto1D("SimHadEtDDV0AND","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for doubly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2282   CreateHisto1D("SimTotEtDDMB","Simulated Total E_{T}","Simulated Total E_{T} for doubly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2283   CreateHisto1D("SimHadEtDDMB","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for doubly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
2284   if(fDataSet==20100||fDataSet==2011){
2285     Int_t width = 5;
2286     if(fNCentBins<21) width = 10;
2287     for(Int_t j=0;j<fNCentBins;j++){
2288       CreateHisto1D(Form("SimTotEtCB%i",j),Form("Simulated Total E_{T} for %i-%i central",j*width,(j+1)*width),"Simulated Total E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
2289       CreateHisto1D(Form("SimHadEtCB%i",j),Form("Simulated Hadronic E_{T} for %i-%i central",j*width,(j+1)*width),"Simulated Hadronic E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
2290       CreateHisto1D(Form("SimPiKPEtCB%i",j),Form("Simulated #pi,K,p E_{T} for %i-%i central",j*width,(j+1)*width),"Simulated #pi,K,p E_{T}","Number of events",nbinsEt,minEt,maxEt);
2291     }
2292   }
2293
2294   etDiff = 0.15;
2295
2296   if(fInvestigateSmearing && !fRunLightweight){
2297     //======================================================================
2298
2299     snprintf(histoname,200,"SimPiKPEtMeasMinusEtRealPiKP");
2300     snprintf(histotitle,200,"Simulated (all reconstructed - primaries)/all reconstructed for reconstructed tracks only");
2301     snprintf(ytitle,50,"(primary-all)/primary");
2302     snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
2303     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
2304
2305     snprintf(histoname,200,"SimPiKPEtMinusSimAllCorrSmearedRecoOnly");
2306     snprintf(histotitle,200,"Simulated (primary-all)/primary for reconstructed tracks only");
2307     snprintf(ytitle,50,"(primary-all)/primary");
2308     snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
2309     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
2310
2311     snprintf(histoname,200,"SimPiKPEtMinusSimEffCorrRecoOnly");
2312     snprintf(histotitle,200,"(sim-reco)/sim primary #pi,k,p for p_{T}>0.15");
2313     snprintf(ytitle,50,"(sim-reco)/sim");
2314     snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
2315     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
2316
2317     snprintf(histoname,200,"SimPiKPEtMinusSimEffBkgdCorrRecoOnly");
2318     snprintf(histotitle,200,"(sim-reco)/sim primary #pi,k,p for p_{T}>0.15 with background subtraction");
2319     snprintf(ytitle,50,"(sim-reco)/sim");
2320     snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
2321     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
2322
2323     snprintf(histoname,200,"SimPiKPEtMinusSimEffCorrRecoPiOnly");
2324     snprintf(histotitle,200,"(sim-reco)/sim primary #pi for p_{T}>0.15");
2325     snprintf(ytitle,50,"(sim-reco)/sim");
2326     snprintf(xtitle,50,"true #pi E_{T} for primary tracks");
2327     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt/2,nbinsEt,-etDiff*5,etDiff*5);
2328
2329     snprintf(histoname,200,"SimPiKPEtMinusSimEffCorrRecoKOnly");
2330     snprintf(histotitle,200,"(sim-reco)/sim primary K for p_{T}>0.15");
2331     snprintf(ytitle,50,"(sim-reco)/sim");
2332     snprintf(xtitle,50,"true K E_{T} for primary tracks");
2333     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt/6,nbinsEt,-etDiff*5,etDiff*5);
2334
2335     snprintf(histoname,200,"SimPiKPEtMinusSimEffCorrRecoPOnly");
2336     snprintf(histotitle,200,"(sim-reco)/sim primary p for p_{T}>0.15");
2337     snprintf(ytitle,50,"(sim-reco)/sim");
2338     snprintf(xtitle,50,"true p E_{T} for primary tracks");
2339     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt/6,nbinsEt,-etDiff*5,etDiff*5);
2340
2341     snprintf(histoname,200,"SimPiKPEtMinusSimAllSmearedRecoOnly");
2342     snprintf(histotitle,200,"Simulated (primary-all)/primary for reconstructed tracks only");
2343     snprintf(ytitle,50,"(primary-all)/primary");
2344     snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
2345     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,0.0);
2346
2347     snprintf(histoname,200,"SimPiKPEtMinusSimPIDSmearedRecoOnly");
2348     snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only with PID smearing");
2349     snprintf(ytitle,50,"(true-smeared)/true");
2350     snprintf(xtitle,50,"true p, K, p E_{T}");
2351     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2352
2353     snprintf(histoname,200,"SimPiKPEtMinusSimSmearedRecoOnly");
2354     snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only");
2355     snprintf(ytitle,50,"(true-smeared)/true");
2356     snprintf(xtitle,50,"true p, K, p E_{T}");
2357     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/15,etDiff/15);
2358
2359     snprintf(histoname,200,"SimPiKPPtMinusSimSmearedRecoOnly");
2360     snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only");
2361     snprintf(ytitle,50,"(true-smeared)/true");
2362     snprintf(xtitle,50,"true p, K, p p_{T}");
2363     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/15,etDiff/15);
2364
2365     snprintf(histoname,200,"SimPiKPEtMinusSimSmearedMultRecoOnly");
2366     snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only");
2367     snprintf(ytitle,50,"(true-smeared)/true");
2368     snprintf(xtitle,50,"number of reconstructed particles");
2369     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/15,etDiff/15);
2370
2371     snprintf(histoname,200,"SimPiKPPtMinusSimSmearedMultRecoOnly");
2372     snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only");
2373     snprintf(ytitle,50,"(true-smeared)/true");
2374     snprintf(xtitle,50,"number of reconstructed particles");
2375     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/15,etDiff/15);
2376
2377     //======================================================================
2378
2379     snprintf(histoname,200,"SimPiKPEtMinusSimPtSmeared");
2380     snprintf(histotitle,200,"Simulated (true-smeared)/true for 0.5 percent momentum smearing");
2381     snprintf(ytitle,50,"(true-smeared)/true");
2382     snprintf(xtitle,50,"true p, K, p E_{T}");
2383     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2384     snprintf(histoname,200,"SimPiKPEtPtSmeared");
2385     snprintf(histotitle,200,"Simulated E_{T} for 0.5 percent momentum smearing");
2386     snprintf(ytitle,50,"Number of events");
2387     snprintf(xtitle,50,"p, K, p E_{T}");
2388     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2389
2390     //======================================================================
2391
2392     snprintf(histoname,200,"SimPiKPEtMinusSimEfficiencySmeared");
2393     snprintf(histotitle,200,"Simulated (true-smeared)/true for efficiency smearing");
2394     snprintf(ytitle,50,"(true-smeared)/true");
2395     snprintf(xtitle,50,"true p, K, p E_{T}");
2396     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*7,etDiff*7);
2397     snprintf(histoname,200,"SimPiKPEtEfficiencySmeared");
2398     snprintf(histotitle,200,"Simulated E_{T} for efficiency smearing");
2399     snprintf(ytitle,50,"Number of events");
2400     snprintf(xtitle,50,"p, K, p E_{T}");
2401     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2402
2403     //======================================================================
2404
2405     snprintf(histoname,200,"SimPiKPEtMinusSimPtCutSmearedTPC");
2406     snprintf(histotitle,200,"Simulated (true-smeared)/true for p_{T}>0.15 GeV/c smearing");
2407     snprintf(ytitle,50,"(true-smeared)/true");
2408     snprintf(xtitle,50,"true p, K, p E_{T}");
2409     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2410     snprintf(histoname,200,"SimPiKPEtPtCutSmearedTPC");
2411     snprintf(histotitle,200,"Simulated E_{T} for p_{T}>0.15 GeV/c smearing");
2412     snprintf(ytitle,50,"Number of events");
2413     snprintf(xtitle,50,"p, K, p E_{T}");
2414     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2415
2416
2417     //======================================================================
2418
2419     snprintf(histoname,200,"SimPiKPEtMinusSimPtCutSmearedITS");
2420     snprintf(histotitle,200,"Simulated (true-smeared)/true for p_{T}>0.10 GeV/c smearing");
2421     snprintf(ytitle,50,"(true-smeared)/true");
2422     snprintf(xtitle,50,"true p, K, p E_{T}");
2423     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2424     snprintf(histoname,200,"SimPiKPEtPtCutSmearedITS");
2425     snprintf(histotitle,200,"Simulated E_{T} for p_{T}>0.10 GeV/c smearing");
2426     snprintf(ytitle,50,"Number of events");
2427     snprintf(xtitle,50,"p, K, p E_{T}");
2428     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2429
2430     //======================================================================
2431
2432     snprintf(histoname,200,"SimPiKPEtMinusSimPIDSmeared");
2433     snprintf(histotitle,200,"Simulated (true-smeared)/true for PID smearing");
2434     snprintf(ytitle,50,"(true-smeared)/true");
2435     snprintf(xtitle,50,"true p, K, p E_{T}");
2436     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2437     snprintf(histoname,200,"SimPiKPEtPIDSmeared");
2438     snprintf(histotitle,200,"Simulated E_{T} for PID smearing");
2439     snprintf(ytitle,50,"Number of events");
2440     snprintf(xtitle,50,"p, K, p E_{T}");
2441     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2442
2443     //======================================================================
2444
2445     snprintf(histoname,200,"SimPiKPEtMinusSimPIDSmearedNoID");
2446     snprintf(histotitle,200,"Simulated (true-smeared)/true for PID smearing No ID");
2447     snprintf(ytitle,50,"(true-smeared)/true");
2448     snprintf(xtitle,50,"true p, K, p E_{T}");
2449     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2450     snprintf(histoname,200,"SimPiKPEtPIDSmearedNoID");
2451     snprintf(histotitle,200,"Simulated E_{T} for PID smearing No ID");
2452     snprintf(ytitle,50,"Number of events");
2453     snprintf(xtitle,50,"p, K, p E_{T}");
2454     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2455   }
2456   delete sTPC;
2457   delete sITS;
2458   delete sTPCpt;
2459   delete sITSpt;
2460   delete sPID;
2461   delete sNoPID;
2462   delete sNoPIDString;
2463   delete sHadEt;
2464   delete sTotEt;
2465   delete sPiKPEt;
2466   delete sTotEtString;
2467   delete sHadEtString;
2468   delete sPiKPEtString;
2469   delete sFull;
2470   delete sEMCAL;
2471   delete sPHOS;
2472   CreateIntHisto1D("NEvents","Number of events","number of events","Number of events",1,0,1);
2473   CreateIntHisto1D("NEventsSD","Number of events","number of singly diffractive events","Number of events",1,0,1);
2474   CreateIntHisto1D("NEventsDD","Number of events","number of doubly diffractive events","Number of events",1,0,1);
2475   CreateIntHisto1D("NEventsND","Number of events","number of non-diffractive events","Number of events",1,0,1);
2476   CreateIntHisto1D("NEventsSDV0AND","Number of events","number of singly diffractive events","Number of events",1,0,1);
2477   CreateIntHisto1D("NEventsDDV0AND","Number of events","number of doubly diffractive events","Number of events",1,0,1);
2478   CreateIntHisto1D("NEventsNDV0AND","Number of events","number of non-diffractive events","Number of events",1,0,1);
2479   CreateIntHisto1D("NEventsSDMB","Number of events","number of singly diffractive events","Number of events",1,0,1);
2480   CreateIntHisto1D("NEventsDDMB","Number of events","number of doubly diffractive events","Number of events",1,0,1);
2481   CreateIntHisto1D("NEventsNDMB","Number of events","number of non-diffractive events","Number of events",1,0,1);
2482   if( !fRunLightweight){
2483     CreateResolutionPtHisto2D("presolutionTPC","p resolution","p^{rec}","(p^{sim}-p^{rec})/p^{rec}");
2484     CreateResolutionPtHisto2D("pTresolutionTPC","p_{T} resolution","p_{T}^{rec}","(p_{T}^{sim}-p_{T}^{rec})/p_{T}^{rec}");
2485     CreateResolutionPtHisto2D("ETresolutionTPC","E_{T} resolution","E_{T}^{rec}","(E_{T}^{sim}-E_{T}^{rec})/E_{T}^{rec}");
2486     CreateResolutionPtHisto2D("pTresolutionTPCITS","p_{T} resolution","p_{T}^{rec}","(p_{T}^{sim}-p_{T}^{rec})/p_{T}^{rec}");
2487     CreateResolutionPtHisto2D("ETresolutionTPCITS","E_{T} resolution","E_{T}^{rec}","(E_{T}^{sim}-E_{T}^{rec})/E_{T}^{rec}");
2488     CreateResolutionPtHisto2D("presolutionTPCITS","p resolution","p^{rec}","(p^{sim}-p^{rec})/p^{rec}");
2489     CreateResolutionPtHisto2D("pTresolutionITS","p_{T} resolution","p_{T}^{rec}","(p_{T}^{sim}-p_{T}^{rec})/p_{T}^{rec}");
2490     CreateResolutionPtHisto2D("ETresolutionITS","E_{T} resolution","E_{T}^{rec}","(E_{T}^{sim}-E_{T}^{rec})/E_{T}^{rec}");
2491     CreateResolutionPtHisto2D("presolutionITS","p resolution","p^{rec}","(p^{sim}-p^{rec})/p^{rec}");
2492     CreatePtHisto1D("pTsimITS","p_{T}^{sim}","p_{T}^{sim}","Number of particles");
2493     CreatePtHisto1D("pTsimTPC","p_{T}^{sim}","p_{T}^{sim}","Number of particles");
2494     CreatePtHisto1D("pTsimTPCITS","p_{T}^{sim}","p_{T}^{sim}","Number of particles");
2495     CreatePtHisto1D("pTrecITS","p_{T}^{rec}","p_{T}^{rec}","Number of particles");
2496     CreatePtHisto1D("pTrecTPC","p_{T}^{rec}","p_{T}^{rec}","Number of particles");
2497     CreatePtHisto1D("pTrecTPCITS","p_{T}^{rec}","p_{T}^{rec}","Number of particles");
2498     if(fDataSet==20100||fDataSet==2011){
2499       Int_t width = 5;
2500       if(fNCentBins<21) width = 10;
2501       for(Int_t j=0;j<fNCentBins;j++){
2502         CreatePtHisto1D(Form("pTsimITSCB%i",j),Form("p_{T}^{sim} for %i-%i central",j*width,(j+1)*width),"p_{T}^{sim}","Number of particles");
2503         CreatePtHisto1D(Form("pTsimTPCITSCB%i",j),Form("p_{T}^{sim} for %i-%i central",j*width,(j+1)*width),"p_{T}^{sim}","Number of particles");
2504         CreatePtHisto1D(Form("pTsimTPCCB%i",j),Form("p_{T}^{sim} for %i-%i central",j*width,(j+1)*width),"p_{T}^{sim}","Number of particles");
2505         CreatePtHisto1D(Form("pTrecITSCB%i",j),Form("p_{T}^{rec} for %i-%i central",j*width,(j+1)*width),"p_{T}^{rec}","Number of particles");
2506         CreatePtHisto1D(Form("pTrecTPCITSCB%i",j),Form("p_{T}^{rec} for %i-%i central",j*width,(j+1)*width),"p_{T}^{rec}","Number of particles");
2507         CreatePtHisto1D(Form("pTrecTPCCB%i",j),Form("p_{T}^{rec} for %i-%i central",j*width,(j+1)*width),"p_{T}^{rec}","Number of particles");
2508       }
2509     }
2510   }
2511
2512 }
2513
2514 void AliAnalysisHadEtMonteCarlo::SetGeneratorMinMaxParticles(AliMCEvent *eventMC){
2515   // In case of access only to hijing particles in cocktail
2516   // get the min and max labels
2517   // TODO: Check when generator is not the first one ...
2518   
2519   fNMCProducedMin = 0;
2520   fNMCProducedMax = 0;
2521   
2522   AliGenEventHeader * eventHeader = eventMC->GenEventHeader();
2523   
2524   AliGenCocktailEventHeader *cocktail = dynamic_cast<AliGenCocktailEventHeader *>(eventHeader);
2525   
2526   if(!cocktail) return ;
2527     
2528   TList *genHeaders = cocktail->GetHeaders();
2529   
2530   Int_t nGenerators = genHeaders->GetEntries();
2531   //printf("N generators %d \n", nGenerators);
2532   
2533   for(Int_t igen = 0; igen < nGenerators; igen++)
2534     {
2535       AliGenEventHeader * eventHeader2 = (AliGenEventHeader*)genHeaders->At(igen) ;
2536       TString name = eventHeader2->GetName();
2537       
2538       //printf("Generator %d: Class Name %s, Name %s, title %s \n",igen, eventHeader2->ClassName(), name.Data(), eventHeader2->GetTitle());
2539       
2540       fNMCProducedMin = fNMCProducedMax;
2541       fNMCProducedMax+= eventHeader2->NProduced();
2542       
2543       if(name.Contains("Hijing",TString::kIgnoreCase)){
2544         //cout<<"Found HIJING event and set range "<<fNMCProducedMin<<"-"<<fNMCProducedMax<<endl;
2545         return ;
2546       }
2547     }
2548         
2549 }
2550 AliGenEventHeader* AliAnalysisHadEtMonteCarlo::GetGenEventHeader(AliMCEvent *eventMC) const
2551 {
2552   // Return pointer to Generated event header
2553   // If requested and cocktail, search for the hijing generator
2554   AliGenEventHeader * eventHeader = eventMC->GenEventHeader();
2555   AliGenCocktailEventHeader *cocktail = dynamic_cast<AliGenCocktailEventHeader *>(eventHeader);
2556   
2557   if(!cocktail) return 0x0 ;
2558   
2559   TList *genHeaders = cocktail->GetHeaders();
2560   
2561   Int_t nGenerators = genHeaders->GetEntries();
2562   //printf("N generators %d \n", nGenerators);
2563   
2564   for(Int_t igen = 0; igen < nGenerators; igen++)
2565     {
2566       AliGenEventHeader * eventHeader2 = (AliGenEventHeader*)genHeaders->At(igen) ;
2567       TString name = eventHeader2->GetName();
2568       
2569       //printf("Generator %d: Class Name %s, Name %s, title %s \n",igen, eventHeader2->ClassName(), name.Data(), eventHeader2->GetTitle());
2570       
2571       if(name.Contains("Hijing",TString::kIgnoreCase)) return eventHeader2 ;
2572     }
2573   
2574   return 0x0;
2575   
2576 }
2577 Bool_t AliAnalysisHadEtMonteCarlo::IsHIJINGLabel(Int_t label,AliMCEvent *eventMC,AliStack *stack)
2578 {
2579  
2580   // Find if cluster/track was generated by HIJING
2581   
2582   AliGenHijingEventHeader*  hijingHeader =  dynamic_cast<AliGenHijingEventHeader *> (GetGenEventHeader(eventMC));
2583   
2584   //printf("header %p, label %d\n",hijingHeader,label);
2585   
2586   if(!hijingHeader || label < 0 ) return kFALSE;
2587   
2588   
2589   //printf("pass a), N produced %d\n",nproduced);
2590   
2591   if(label >= fNMCProducedMin && label < fNMCProducedMax)
2592   {
2593     //printf(" accept!, label is smaller than produced, N %d\n",nproduced);
2594
2595     return kTRUE;
2596   }
2597   
2598   if(!stack) return kFALSE;
2599   
2600   Int_t nprimaries = stack->GetNtrack();
2601   
2602   if(label > nprimaries) return kFALSE;
2603     
2604   TParticle * mom = stack->Particle(label);
2605     
2606   Int_t iMom = label;
2607   Int_t iParent = mom->GetFirstMother();
2608   while(iParent!=-1){
2609     if(iParent >= fNMCProducedMin && iParent < fNMCProducedMax){
2610       return kTRUE;
2611     }
2612       
2613     iMom = iParent;
2614     mom = stack->Particle(iMom);
2615     iParent = mom->GetFirstMother();
2616   }
2617     
2618   return kFALSE ;
2619     
2620 }
2621
2622
2623
2624