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