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