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