]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/totEt/AliAnalysisHadEtMonteCarlo.cxx
Adding functions to facilitate cross checks with Monte Carlo
[u/mrichter/AliRoot.git] / PWG4 / 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 "AliAnalysisEtCuts.h"
25 #include <iostream>
26 #include "TRandom.h"
27 #include "AliAnalysisEtCommon.h"
28 #include "AliCentrality.h"
29 #include "AliLog.h"
30
31 using namespace std;
32
33 ClassImp(AliAnalysisHadEtMonteCarlo);
34
35
36 Int_t AliAnalysisHadEtMonteCarlo::fgNumSmearWidths = 4;
37 Float_t AliAnalysisHadEtMonteCarlo::fgSmearWidths[4] = {0.005,0.006,0.007,0.008};
38
39 AliAnalysisHadEtMonteCarlo::AliAnalysisHadEtMonteCarlo():AliAnalysisHadEt()
40                                                         ,fSimPiKPEt(0)
41                                                         ,fSimHadEt(0)
42                                                         ,fSimTotEt(0) 
43                                                         ,fInvestigateSmearing(0)
44                                                         ,fInvestigateFull(0)
45                                                         ,fInvestigateEMCal(0)
46                                                         ,fInvestigatePHOS(0)
47                                                         ,fInvestigatePiKP(0)
48                                                         ,fRequireITSHits(0)
49                                                         ,fBaryonEnhancement(0)
50                                                         ,fPtSmearer(0)
51 {
52 }
53 AliAnalysisHadEtMonteCarlo::~AliAnalysisHadEtMonteCarlo(){//destructor
54   if(fPtSmearer) delete fPtSmearer;
55 }
56
57 void AliAnalysisHadEtMonteCarlo::ResetEventValues(){//resetting event variables
58   AliAnalysisHadEt::ResetEventValues();
59     fSimHadEt=0.0;
60     fSimTotEt=0.0;
61     fSimPiKPEt=0.0;
62 }
63 Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev,AliVEvent* ev2)
64 { // analyse MC and real event info
65   FillHisto1D("NEvents",0.5,1);
66   if(!ev || !ev2){
67     AliFatal("ERROR: Event does not exist");   
68     return 0;
69   }
70   AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
71   AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev2);
72   if(!mcEvent || !realEvent){  
73     AliFatal("ERROR: mcEvent or realEvent does not exist");
74     return 0;
75   }
76   AliStack *stack = mcEvent->Stack();
77   fCentBin= -1;
78   if(fDataSet==20100){//If this is Pb+Pb
79     AliCentrality *centrality = realEvent->GetCentrality();
80     if(fNCentBins<20) fCentBin= centrality->GetCentralityClass10(fCentralityMethod);
81     else{ fCentBin= centrality->GetCentralityClass5(fCentralityMethod);}
82   }
83   AnalyseEvent(ev);
84
85   //for PID
86   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.
87
88   //=============================================
89
90   //Roughly following $ALICE_ROOT/PWG0/dNdEta/AlidNdEtaCorrectionTask
91
92   //=============================================TPC&&ITS=============================================
93   TString *strTPC = new TString("TPC");
94   TString *strITS = new TString("ITS");
95   TString *strTPCITS = new TString("TPCITS");
96   Int_t lastcutset = 1;
97   if(fRequireITSHits) lastcutset = 2;
98   for(Int_t cutset=0;cutset<=lastcutset;cutset++){
99     TString *cutName = NULL;
100     TObjArray* list = NULL;
101     switch(cutset){
102     case 0:
103       cutName = strTPC;
104       list = fEsdtrackCutsTPC->GetAcceptedTracks(realEvent);
105       break;
106     case 1:
107       cutName = strITS;
108       list = fEsdtrackCutsITS->GetAcceptedTracks(realEvent);
109       break;
110     case 2:
111       cutName = strTPCITS;
112       list = fEsdtrackCutsITSTPC->GetAcceptedTracks(realEvent);
113       break;
114     default:
115       cerr<<"Error:  cannot fill histograms!"<<endl;
116       return -1;
117     }
118     Int_t nGoodTracks = list->GetEntries();
119     for (Int_t iTrack = 0; iTrack < nGoodTracks; iTrack++)
120       {
121         AliESDtrack *track = dynamic_cast<AliESDtrack*> (list->At(iTrack));
122         if (!track)
123           {
124             Printf("ERROR: Could not get track %d", iTrack);
125             continue;
126           }
127         else{
128           Float_t nSigmaPion,nSigmaProton,nSigmaKaon,nSigmaElectron;
129           pID->MakeTPCPID(track);
130           pID->MakeITSPID(track);
131           if(cutset!=1){
132             nSigmaPion = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kPion));
133             nSigmaProton = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kProton));
134             nSigmaKaon = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kKaon));
135             nSigmaElectron = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kElectron));
136           }
137           else{
138             nSigmaPion = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kPion));
139             nSigmaProton = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kProton));
140             nSigmaKaon = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kKaon));
141             nSigmaElectron = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kElectron));
142           }
143 //        bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
144 //        bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
145 //        bool isKaon = (nSigmaPion>3.0 && nSigmaProton>2.0 && nSigmaKaon<2.0);
146 //        bool isProton = (nSigmaPion>3.0 && nSigmaProton<2.0 && nSigmaKaon>2.0);
147           bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
148           bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
149           bool isKaon = (nSigmaPion>3.0 && nSigmaProton>3.0 && nSigmaKaon<3.0 && track->Pt()<0.45);
150           bool isProton = (nSigmaPion>3.0 && nSigmaProton<3.0 && nSigmaKaon>3.0 && track->Pt()<0.9);
151
152           bool unidentified = (!isProton && !isKaon && !isElectron);
153           Float_t dEdx = track->GetTPCsignal();
154           if(cutset==1) dEdx = track->GetITSsignal();
155
156           FillHisto2D(Form("dEdxAll%s",cutName->Data()),track->P(),dEdx,1.0);
157
158           UInt_t label = (UInt_t)TMath::Abs(track->GetLabel());
159           TParticle  *simPart  = stack->Particle(label);
160           if(!simPart) {
161             Printf("no MC particle\n");                 
162             continue;           
163           }
164           else{//analysis
165             if(stack->IsPhysicalPrimary(label)){
166               if (TMath::Abs(simPart->Eta()) < fCuts->GetCommonEtaCut()){
167                 Int_t pdgCode =  simPart->GetPDG(0)->PdgCode();
168                 Int_t mypid = 0;
169                 if(pdgCode==AliAnalysisHadEt::fgPiPlusCode) mypid = 1;
170                 if(pdgCode==fgProtonCode) mypid = 2;
171                 if(pdgCode==fgKPlusCode) mypid = 3;
172                 if(pdgCode==fgEPlusCode) mypid = 4;
173                 if(pdgCode==fgPiMinusCode) mypid = 1;
174                 if(pdgCode==fgAntiProtonCode) mypid = 2;
175                 if(pdgCode==fgKMinusCode) mypid = 3;
176                 if(pdgCode==fgEMinusCode) mypid = 4;
177                 bool filled = false;      
178                 //============Charged hadrons===================================
179                 //identified...
180                 if(isPion){
181                   if(pdgCode!=fgPiPlusCode && pdgCode!=fgPiMinusCode){
182                     FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),1,mypid,1);
183                     //if(mypid==0)cerr<<"I was misidentified! I'm not a pion! I am a "<<simPart->GetName()<<endl;
184                   }
185                   float myEt = Et(simPart);
186                   if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedPiPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
187                   else{ FillHisto2D(Form("EtReconstructed%sIdentifiedPiMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
188                   FillHisto2D(Form("dEdxPion%s",cutName->Data()),track->P(),dEdx,1.0);
189                 }
190                 if(isProton){
191                   if(pdgCode!=fgProtonCode && pdgCode!=fgAntiProtonCode){
192                     FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),2,mypid,1);
193                   }
194                   float myEt = Et(simPart);
195                   if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedProton",cutName->Data()),track->Pt(),track->Eta(),myEt);}
196                   else{ FillHisto2D(Form("EtReconstructed%sIdentifiedAntiProton",cutName->Data()),track->Pt(),track->Eta(),myEt);}
197                   if(fBaryonEnhancement){
198                     myEt = myEt*ProtonBaryonEnhancement(track->Pt());
199                     if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);}
200                     else{ FillHisto2D(Form("EtReconstructed%sIdentifiedAntiProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);}
201                   }
202                   FillHisto2D(Form("dEdxProton%s",cutName->Data()),track->P(),dEdx,1.0);
203                 }
204                 if(isKaon){
205                   if(pdgCode!=fgKMinusCode && pdgCode!=fgKPlusCode){
206                     FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),3,mypid,1);
207                   }
208                   float myEt = Et(simPart);
209                   if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedKPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
210                   else{ FillHisto2D(Form("EtReconstructed%sIdentifiedKMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
211                   FillHisto2D(Form("dEdxKaon%s",cutName->Data()),track->P(),dEdx,1.0);
212                 }
213                 if(isElectron){
214                   if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
215                     FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),4,mypid,1);
216                   }
217                   float myEt = Et(simPart);
218                   if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedEPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
219                   else{ FillHisto2D(Form("EtReconstructed%sIdentifiedEMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
220                   FillHisto2D(Form("dEdxElectron%s",cutName->Data()),track->P(),dEdx,1.0);
221                 }
222                 if(unidentified){
223                   if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
224                     float myEtPi = Et(simPart,fgPionMass);
225                     float myEtP = Et(simPart,fgProtonMass);
226                     float myEtK = Et(simPart,fgKaonMass);
227                     float myEt = Et(simPart);
228                     FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
229                     FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
230                     FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
231                     FillHisto2D(Form("EtReconstructed%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),myEt);
232                     FillHisto2D(Form("EtNReconstructed%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),1.0);
233                     if(pdgCode == fgPiPlusCode||pdgCode == fgPiMinusCode){
234                       FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
235                       FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
236                       FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
237                       FillHisto2D(Form("EtReconstructed%sUnidentifiedPion",cutName->Data()),track->Pt(),track->Eta(),myEt);
238                       FillHisto2D(Form("EtNReconstructed%sUnidentifiedPion",cutName->Data()),track->Pt(),track->Eta(),1.0);
239                     }
240                     if(pdgCode == fgKPlusCode||pdgCode == fgKMinusCode){
241                       FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
242                       FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
243                       FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
244                       FillHisto2D(Form("EtReconstructed%sUnidentifiedKaon",cutName->Data()),track->Pt(),track->Eta(),myEt);
245                       FillHisto2D(Form("EtNReconstructed%sUnidentifiedKaon",cutName->Data()),track->Pt(),track->Eta(),1.0);
246                     }
247                     if(pdgCode == fgProtonCode||pdgCode == fgAntiProtonCode){
248                       FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
249                       FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
250                       FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
251                       FillHisto2D(Form("EtReconstructed%sUnidentifiedProton",cutName->Data()),track->Pt(),track->Eta(),myEt);
252                       FillHisto2D(Form("EtNReconstructed%sUnidentifiedProton",cutName->Data()),track->Pt(),track->Eta(),1.0);
253                       if(fBaryonEnhancement){
254                         myEt = myEt*ProtonBaryonEnhancement(track->Pt());
255                         FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPionEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
256                         FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);
257                         FillHisto2D(Form("EtNReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),1.0);
258                       }
259                     }
260                   }
261                   FillHisto2D(Form("dEdxUnidentified%s",cutName->Data()),track->P(),dEdx,1.0);
262                   FillHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),mypid,1);
263                 }
264                 //...simulated
265                 if(pdgCode == fgPiPlusCode){            
266                   float myEt = Et(simPart);
267                   float myEtP = Et(simPart,fgProtonMass);
268                   float myEtK = Et(simPart,fgKaonMass);
269                   FillHisto2D(Form("EtReconstructed%sPiPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
270                   FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
271                   FillHisto2D(Form("EtNReconstructed%sPiPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
272                   FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
273                   if(fCentBin>=0){//if a centrality bin was defined
274                     FillHisto2D(Form("EtNReconstructed%sPiPlusCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
275                     FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
276                   }
277                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
278                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtP);
279                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtK);
280                   FillHisto2D(Form("EtReconstructed%sPiPlusAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtK);
281                   FillHisto2D(Form("EtReconstructed%sPiPlusAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtP);
282                   filled = true;
283                 }
284                 if(pdgCode == fgPiMinusCode){
285                   float myEt = Et(simPart);
286                   float myEtP = Et(simPart,fgProtonMass);
287                   float myEtK = Et(simPart,fgKaonMass);
288                   FillHisto2D(Form("EtReconstructed%sPiMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
289                   FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
290                   FillHisto2D(Form("EtNReconstructed%sPiMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
291                   FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
292                   if(fCentBin>=0){//if a centrality bin was defined
293                     FillHisto2D(Form("EtNReconstructed%sPiMinusCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
294                     FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
295                   }
296                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
297                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtP);
298                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtK);
299                   FillHisto2D(Form("EtReconstructed%sPiMinusAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtK);
300                   FillHisto2D(Form("EtReconstructed%sPiMinusAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtP);
301                   filled = true;
302                 }
303                 if(pdgCode == fgKPlusCode){
304                   float myEt = Et(simPart);
305                   float myEtPi = Et(simPart,fgPionMass);
306                   float myEtP = Et(simPart,fgProtonMass);
307                   FillHisto2D(Form("EtReconstructed%sKPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
308                   FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
309                   FillHisto2D(Form("EtNReconstructed%sKPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
310                   FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
311                   if(fCentBin>=0){//if a centrality bin was defined
312                     FillHisto2D(Form("EtNReconstructed%sKPlusCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
313                     FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
314                   }
315                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
316                   FillHisto2D(Form("EtReconstructed%sKPlusAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
317                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
318                   FillHisto2D(Form("EtReconstructed%sKPlusAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
319                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtP);
320                   FillHisto2D(Form("EtReconstructed%sKPlusAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtP);
321                   filled = true;
322                 }
323                 if(pdgCode == fgKMinusCode){
324                   float myEt = Et(simPart);
325                   float myEtPi = Et(simPart,fgPionMass);
326                   float myEtP = Et(simPart,fgProtonMass);
327                   FillHisto2D(Form("EtReconstructed%sKMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
328                   FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
329                   FillHisto2D(Form("EtNReconstructed%sKMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
330                   FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
331                   if(fCentBin>=0){//if a centrality bin was defined
332                     FillHisto2D(Form("EtNReconstructed%sKMinusCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
333                     FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
334                   }
335                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
336                   FillHisto2D(Form("EtReconstructed%sKMinusAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
337                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
338                   FillHisto2D(Form("EtReconstructed%sKMinusAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
339                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtP);
340                   FillHisto2D(Form("EtReconstructed%sKMinusAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtP);
341                   filled = true;
342                 }
343                 if(pdgCode == fgProtonCode){
344                   float myEt = Et(simPart);
345                   float myEtPi = Et(simPart,fgPionMass);
346                   float myEtK = Et(simPart,fgKaonMass);
347                   FillHisto2D(Form("EtReconstructed%sProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
348                   FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
349                   FillHisto2D(Form("EtNReconstructed%sProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
350                   FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
351                   if(fCentBin>=0){//if a centrality bin was defined
352                     FillHisto2D(Form("EtNReconstructed%sProtonCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
353                     FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
354                   }
355                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
356                   FillHisto2D(Form("EtReconstructed%sProtonAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
357                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtK);
358                   FillHisto2D(Form("EtReconstructed%sProtonAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtK);
359                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
360                   FillHisto2D(Form("EtReconstructed%sProtonAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
361                   filled = true;
362
363                       if(fBaryonEnhancement){
364                         float enhancement = ProtonBaryonEnhancement(track->Pt());
365                         FillHisto2D(Form("EtReconstructed%sProtonEnhanced",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt*enhancement);
366                         FillHisto2D(Form("EtNReconstructed%sProtonEnhanced",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt*enhancement);
367                         FillHisto2D(Form("EtReconstructed%sProtonAssumingPionEnhanced",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi*enhancement);
368                       }
369
370                 }
371                 if(pdgCode == fgAntiProtonCode){
372                   float myEt = Et(simPart);
373                   float myEtPi = Et(simPart,fgPionMass);
374                   float myEtK = Et(simPart,fgKaonMass);
375                   FillHisto2D(Form("EtReconstructed%sAntiProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
376                   FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
377                   FillHisto2D(Form("EtNReconstructed%sAntiProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
378                   FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
379                   if(fCentBin>=0){//if a centrality bin was defined
380                     FillHisto2D(Form("EtNReconstructed%sAntiProtonCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
381                     FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),simPart->Pt(),simPart->Eta(),myEt);
382                   }
383                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
384                   FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
385                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtK);
386                   FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingKaon",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtK);
387                   FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
388                   FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
389                   filled = true;
390                   if(fBaryonEnhancement){
391                         float enhancement = ProtonBaryonEnhancement(track->Pt());
392                         FillHisto2D(Form("EtReconstructed%sAntiProtonEnhanced",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt*enhancement);
393                     FillHisto2D(Form("EtNReconstructed%sAntiProtonEnhanced",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt*enhancement);
394                     FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingPionEnhanced",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi*enhancement);
395                   }
396                 }
397                 if(pdgCode == fgEPlusCode){
398                   float myEt = Et(simPart);
399                   FillHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
400                   if(!isElectron || unidentified){
401                     float myEtPi = Et(simPart,fgPionMass);
402                     FillHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
403                   }
404                   filled = true;
405                 }
406                 if(pdgCode == fgEMinusCode){
407                   if(!isElectron || unidentified){
408                     float myEtPi = Et(simPart,fgPionMass);
409                     FillHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
410                   }
411                   float myEt = Et(simPart);
412                     FillHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
413                     filled = true;
414                 }
415               }
416               
417             }
418             else{//not a primary - we're after V0 daughters!
419               if (TMath::Abs(simPart->Eta()) < fCuts->GetCommonEtaCut()){
420                 TParticle *mom = stack->Particle(simPart->GetFirstMother());
421                 if(mom){
422                   TParticlePDG *pc = mom->GetPDG(0);
423                   if(pc){
424                     Int_t pdgCode =  mom->GetPDG(0)->PdgCode();
425                     if(pdgCode == fgLambdaCode){
426                       float myEt = Et(simPart);
427                       FillHisto2D(Form("EtReconstructed%sLambdaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
428                       Float_t weight = LambdaWeight(mom->Pt());
429                       if(fBaryonEnhancement){
430                         float enhancement = ProtonBaryonEnhancement(track->Pt());
431                         weight = weight*enhancement;
432                       }
433                       FillHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),track->Pt(),track->Eta(),myEt*weight);
434                     }
435                     if(pdgCode == fgAntiLambdaCode){
436                       float myEt = Et(simPart);
437                       FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
438                       Float_t weight = AntiLambdaWeight(mom->Pt());
439                       if(fBaryonEnhancement){
440                         float enhancement = ProtonBaryonEnhancement(track->Pt());
441                         weight = weight*enhancement;
442                       }
443                       FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),track->Pt(),track->Eta(),myEt*weight);
444                     }
445                     if(pdgCode == fgK0SCode){
446                       float myEt = Et(simPart);
447                       FillHisto2D(Form("EtReconstructed%sK0SDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
448                       Float_t weight = K0Weight(mom->Pt());
449                       FillHisto2D(Form("EtReconstructed%sK0SDaughtersReweighted",cutName->Data()),track->Pt(),track->Eta(),myEt*weight);
450                     }
451                     if(pdgCode == fgXiCode){
452                       float myEt = Et(simPart);
453                       FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
454                     }
455                     if(pdgCode == fgAntiXiCode){
456                       float myEt = Et(simPart);
457                       FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
458                     }
459                     if(pdgCode == fgOmegaCode){
460                       float myEt = Et(simPart);
461                       FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
462                     }
463                     if(pdgCode == fgXiCode){
464                       float myEt = Et(simPart);
465                       FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
466                     }
467
468                     if(mom->GetFirstMother()>0){
469                       TParticle *grandma = stack->Particle(mom->GetFirstMother());
470                       if(grandma){
471                         Int_t pdgCodeMom =  mom->GetPDG(0)->PdgCode();
472                         if(pdgCodeMom==fgPiPlusCode || pdgCodeMom==fgPiMinusCode || pdgCodeMom==fgProtonCode ||pdgCodeMom==fgAntiProtonCode || pdgCodeMom==fgKPlusCode || pdgCode==fgKMinusCode){
473                           Int_t pdgCodeGrandma =  grandma->GetPDG(0)->PdgCode();
474                       
475                           if(pdgCodeGrandma == fgXiCode){
476                             float myEt = Et(simPart);
477                             FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
478                           }
479                           if(pdgCodeGrandma == fgAntiXiCode){
480                             float myEt = Et(simPart);
481                             FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
482                           }
483                           if(pdgCodeGrandma == fgOmegaCode){
484                             float myEt = Et(simPart);
485                             FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
486                           }
487                           if(pdgCodeGrandma == fgXiCode){
488                             float myEt = Et(simPart);
489                             FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
490                           }
491
492                         }
493                       }
494                     }
495                   }
496                 }
497               }
498             }
499           }
500
501         }
502       }
503     delete list;
504   }
505   delete pID;
506   delete strTPC;
507   delete strITS;
508   delete strTPCITS;
509   //delete AliESDpid;
510   return 1;
511 }
512 Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev)
513 { // analyse MC event
514      ResetEventValues();
515      if(!ev){
516             AliFatal("ERROR: Event does not exist");   
517             return 0;
518      }
519      
520     // Get us an mc event
521     AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
522     if(!mcEvent){  
523       AliFatal("ERROR: MC Event does not exist");
524       return 0;
525     }
526     // Let's play with the stack!
527     AliStack *stack = mcEvent->Stack();
528
529     Int_t nPrim = stack->GetNtrack();
530
531     Float_t fSimPiKPEtPtSmeared = 0;
532     Float_t fSimPiKPEtEfficiencySmeared = 0;
533     Float_t fSimPiKPEtPtCutSmearedTPC = 0;
534     Float_t fSimPiKPEtPtCutSmearedITS = 0;
535     Float_t fSimPiKPEtPIDSmeared = 0;
536     Float_t fSimPiKPEtPIDSmearedNoID = 0;
537     //=================Tracks which may or may not have been reconstructed=================
538
539     for (Int_t iPart = 0; iPart < nPrim; iPart++)
540     {
541
542       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
543
544         if (!part)
545           {
546             Printf("ERROR: Could not get particle %d", iPart);
547             continue;
548           }
549
550         //TParticlePDG *pc = part->GetPDG(0);
551
552         // Check if it is a primary particle
553         if (stack->IsPhysicalPrimary(iPart)){//primaries
554
555           if (TMath::Abs(part->Eta()) < fCuts->GetCommonEtaCut())           {
556
557             Int_t pdgCode =  part->GetPDG(0)->PdgCode();
558             bool filled = false;
559             //Investigating smearing...
560             //Numbers are realistic correction factors from previous studies
561             if(fInvestigateSmearing){
562               if(pdgCode==fgPiPlusCode ||pdgCode==fgPiMinusCode ||pdgCode==fgKPlusCode ||pdgCode==fgKMinusCode ||pdgCode==fgProtonCode ||pdgCode==fgAntiProtonCode){
563                 //To investigate Smearing...
564                 Float_t myet = Et(part);
565                 fSimPiKPEt += myet;
566                 Float_t theta = part->Theta();
567                 Short_t charge = 1;
568                 Float_t momentum = part->P();
569                 //pt smearing
570                 Float_t pSmeared = momentum *  fPtSmearer->Gaus(1,0.005);//Gaussian centered around 1
571                 fSimPiKPEtPtSmeared += Et(pSmeared,theta,pdgCode,charge);
572                 //Efficiency smearing
573                 float efficiency = 2.26545*TMath::Exp(-TMath::Power(9.99977e-01/part->Pt(),7.85488e-02));//simple rough efficiency from fitting curve
574                 if(fPtSmearer->Binomial(1,efficiency) ==1){
575                   fSimPiKPEtEfficiencySmeared += (1.0/efficiency)*myet;
576                 }
577                 //pT cut smeared
578                 if(part->Pt()>0.10){fSimPiKPEtPtCutSmearedITS +=1.00645645*myet;}
579                 if(part->Pt()>0.15){fSimPiKPEtPtCutSmearedTPC +=1.02000723*myet;}
580                 //PID smearing
581                 fSimPiKPEtPIDSmearedNoID += 1.02679314*Et(momentum,theta,fgPiPlusCode,charge);
582                 if(part->P()<1.0){//then the particle would have been ID'd
583                   fSimPiKPEtPIDSmeared += 1.0085942*myet;
584                 }
585                 else{//Then it would have been assumed to be a pion
586                   fSimPiKPEtPIDSmeared += 1.0085942*Et(momentum,theta,fgPiPlusCode,charge);
587                 }
588               }
589             }
590
591             //============Charged hadrons===================================
592             if(pdgCode == fgPiPlusCode){
593               float myEt = Et(part);
594               float myEtP = Et(part,fgProtonMass);
595               float myEtK = Et(part,fgKaonMass);
596
597               fSimHadEt += myEt;
598               fSimTotEt += myEt;
599
600               FillHisto2D("EtSimulatedPiPlus",part->Pt(),part->Eta(),myEt);
601               FillHisto2D("EtNSimulatedPiPlus",part->Pt(),part->Eta(),1.0);
602               FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
603               FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
604               if(fCentBin>=0){//if a centrality bin was defined
605                 FillHisto2D(Form("EtNSimulatedPiPlusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
606                 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
607               }
608               FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEt);
609               FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
610               FillHisto2D("EtSimulatedPiPlusAssumingProton",part->Pt(),part->Eta(),myEtP);
611               FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
612               FillHisto2D("EtSimulatedPiPlusAssumingKaon",part->Pt(),part->Eta(),myEtK);
613               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
614               Short_t charge = 1;
615               Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
616               Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
617               Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
618               FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
619               FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
620               FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
621               filled = true;
622             }
623             if(pdgCode == fgPiMinusCode){
624               float myEt = Et(part);
625               float myEtP = Et(part,fgProtonMass);
626               float myEtK = Et(part,fgKaonMass);
627               fSimHadEt += myEt;
628               fSimTotEt += myEt;
629               FillHisto2D("EtSimulatedPiMinus",part->Pt(),part->Eta(),myEt);
630               FillHisto2D("EtNSimulatedPiMinus",part->Pt(),part->Eta(),1.0);
631               FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
632               FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
633               if(fCentBin>=0){//if a centrality bin was defined
634                 FillHisto2D(Form("EtNSimulatedPiMinusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
635                 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
636               }
637               FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEt);
638               FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
639               FillHisto2D("EtSimulatedPiMinusAssumingProton",part->Pt(),part->Eta(),myEtP);
640               FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
641               FillHisto2D("EtSimulatedPiMinusAssumingKaon",part->Pt(),part->Eta(),myEtK);
642               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
643               Short_t charge = -1;
644               Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
645               Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
646               Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
647               FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
648               FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
649               FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
650               filled = true;
651             }
652             if(pdgCode == fgKPlusCode){
653               float myEt = Et(part);
654               float myEtPi = Et(part,fgPionMass);
655               float myEtP = Et(part,fgProtonMass);
656               fSimHadEt += myEt;
657               fSimTotEt += myEt;
658               FillHisto2D("EtSimulatedKPlus",part->Pt(),part->Eta(),myEt);
659               FillHisto2D("EtNSimulatedKPlus",part->Pt(),part->Eta(),1.0);
660               FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
661               FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
662               if(fCentBin>=0){//if a centrality bin was defined
663                 FillHisto2D(Form("EtNSimulatedKPlusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
664                 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
665               }
666               FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
667               FillHisto2D("EtSimulatedKPlusAssumingPion",part->Pt(),part->Eta(),myEtPi);
668               FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
669               FillHisto2D("EtSimulatedKPlusAssumingProton",part->Pt(),part->Eta(),myEtP);
670               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
671               Short_t charge = 1;
672               Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
673               Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
674               Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
675               FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
676               FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
677               FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
678               filled = true;
679             }
680             if(pdgCode == fgKMinusCode){
681               float myEt = Et(part);
682               float myEtPi = Et(part,fgPionMass);
683               float myEtP = Et(part,fgProtonMass);
684               fSimHadEt += myEt;
685               fSimTotEt += myEt;
686               FillHisto2D("EtSimulatedKMinus",part->Pt(),part->Eta(),myEt);
687               FillHisto2D("EtNSimulatedKMinus",part->Pt(),part->Eta(),1.0);
688               FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
689               FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
690               if(fCentBin>=0){//if a centrality bin was defined
691                 FillHisto2D(Form("EtNSimulatedKMinusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
692                 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
693               }
694               FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
695               FillHisto2D("EtSimulatedKMinusAssumingPion",part->Pt(),part->Eta(),myEtPi);
696               FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
697               FillHisto2D("EtSimulatedKMinusAssumingProton",part->Pt(),part->Eta(),myEtP);
698               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
699               Short_t charge = -1;
700               Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
701               Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
702               Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
703               FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
704               FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
705               FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
706               filled = true;
707             }
708             if(pdgCode == fgProtonCode){
709               float myEt = Et(part);
710               float myEtPi = Et(part,fgPionMass);
711               float myEtK = Et(part,fgKaonMass);
712               fSimHadEt += myEt;
713               fSimTotEt += myEt;
714               FillHisto2D("EtSimulatedProton",part->Pt(),part->Eta(),myEt);
715               FillHisto2D("EtNSimulatedProton",part->Pt(),part->Eta(),1.0);
716               FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
717               FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
718               if(fCentBin>=0){//if a centrality bin was defined
719                 FillHisto2D(Form("EtNSimulatedProtonCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
720                 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
721               }
722               FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
723               FillHisto2D("EtSimulatedProtonAssumingPion",part->Pt(),part->Eta(),myEtPi);
724               FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
725               FillHisto2D("EtSimulatedProtonAssumingKaon",part->Pt(),part->Eta(),myEtK);
726               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
727               Short_t charge = 1;
728               Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
729               Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
730               Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
731               FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
732               FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
733               FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
734               filled = true;
735               if(fBaryonEnhancement){
736                 float enhancement = ProtonBaryonEnhancement(part->Pt());
737                 FillHisto2D("EtSimulatedProtonEnhanced",part->Pt(),part->Eta(),myEt*enhancement);
738                 FillHisto2D("EtNSimulatedProtonEnhanced",part->Pt(),part->Eta(),1.0*enhancement);
739                 FillHisto2D("EtSimulatedProtonAssumingPionEnhanced",part->Pt(),part->Eta(),myEtPi*enhancement);
740               }
741             }
742             if(pdgCode == fgAntiProtonCode){
743               float myEt = Et(part);
744               float myEtPi = Et(part,fgPionMass);
745               float myEtK = Et(part,fgKaonMass);
746               fSimHadEt += myEt;
747               fSimTotEt += myEt;
748               FillHisto2D("EtSimulatedAntiProton",part->Pt(),part->Eta(),myEt);
749               FillHisto2D("EtNSimulatedAntiProton",part->Pt(),part->Eta(),1.0);
750               FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
751               FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
752               if(fCentBin>=0){//if a centrality bin was defined
753                 FillHisto2D(Form("EtNSimulatedAntiProtonCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
754                 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
755               }
756               FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
757               FillHisto2D("EtSimulatedAntiProtonAssumingPion",part->Pt(),part->Eta(),myEtPi);
758               FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
759               FillHisto2D("EtSimulatedAntiProtonAssumingKaon",part->Pt(),part->Eta(),myEtK);
760               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
761               Short_t charge = -1;
762               Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
763               Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
764               Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
765               FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
766               FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
767               FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
768               filled = true;
769               if(fBaryonEnhancement){
770                 float enhancement = ProtonBaryonEnhancement(part->Pt());
771                 FillHisto2D("EtSimulatedAntiProtonEnhanced",part->Pt(),part->Eta(),myEt*enhancement);
772                 FillHisto2D("EtNSimulatedAntiProtonEnhanced",part->Pt(),part->Eta(),1.0*enhancement);
773                 FillHisto2D("EtSimulatedAntiProtonAssumingPionEnhanced",part->Pt(),part->Eta(),myEtPi*enhancement);
774               }
775             }
776             //============Other hadrons===================================
777
778             if(pdgCode == fgNeutronCode){
779               float myEt = Et(part);
780               fSimHadEt += myEt;
781               fSimTotEt += myEt;
782               FillHisto2D("EtSimulatedNeutron",part->Pt(),part->Eta(),myEt);
783               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
784               filled = true;
785             }
786             if(pdgCode == fgAntiNeutronCode){
787               float myEt = Et(part);
788               fSimHadEt += myEt;
789               fSimTotEt += myEt;
790               FillHisto2D("EtSimulatedAntiNeutron",part->Pt(),part->Eta(),myEt);
791               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
792               filled = true;
793             }
794             if(pdgCode == fgLambdaCode){
795               float myEt = Et(part);
796               fSimHadEt += myEt;
797               fSimTotEt += myEt;
798               //cout<<"I am a simulated lambda! pt "<<part->Pt()<<" eta "<<part->Eta()<<endl;
799               FillHisto2D("EtSimulatedLambda",part->Pt(),part->Eta(),myEt);
800               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
801               Float_t weight = LambdaWeight(part->Pt());
802               if(fBaryonEnhancement){
803                 float enhancement = ProtonBaryonEnhancement(part->Pt());
804                 weight = weight*enhancement;
805               }
806               FillHisto2D("EtSimulatedLambdaReweighted",part->Pt(),part->Eta(),myEt*weight);
807               Int_t ndaughters = part->GetNDaughters();
808               for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
809                 Int_t daughterindex = part->GetDaughter(idaughter);
810                 if(daughterindex<0 || daughterindex>1e5) continue;
811                 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
812                 if(daughter){
813                   if(daughter->GetPDG(0)){
814                     Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
815                     if(daughtercode==fgPiMinusCode || daughtercode==fgProtonCode){
816                       myEt = Et(daughter);
817                       FillHisto2D("EtSimulatedLambdaDaughters",daughter->Pt(),daughter->Eta(),myEt);
818                       FillHisto2D("EtSimulatedLambdaDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
819                       //cout<<"Lambda daughter is a "<<daughter->GetName()<<endl;
820                     }
821                   }
822                   else{
823                     //cout<<"Lambda daughter is a "<<daughter->GetName()<<endl;
824                   }
825                 }
826               }
827               filled = true;
828             }
829             if(pdgCode == fgAntiLambdaCode){
830               float myEt = Et(part);
831               fSimHadEt += myEt;
832               fSimTotEt += myEt;
833               FillHisto2D("EtSimulatedAntiLambda",part->Pt(),part->Eta(),myEt);
834               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
835               Float_t weight = AntiLambdaWeight(part->Pt());
836               if(fBaryonEnhancement){
837                 float enhancement = ProtonBaryonEnhancement(part->Pt());
838                 weight = weight*enhancement;
839               }
840               FillHisto2D("EtSimulatedAntiLambdaReweighted",part->Pt(),part->Eta(),myEt*weight);
841               Int_t ndaughters = part->GetNDaughters();
842               for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
843                 Int_t daughterindex = part->GetDaughter(idaughter);
844                 if(daughterindex<0 || daughterindex>1e5) continue;
845                 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
846                 if(daughter){
847                   if(daughter->GetPDG(0)){
848                     Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
849                     if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode){
850                       myEt = Et(daughter);
851                       FillHisto2D("EtSimulatedAntiLambdaDaughters",daughter->Pt(),daughter->Eta(),myEt);
852                       FillHisto2D("EtSimulatedAntiLambdaDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
853                       //cout<<"AntiLambda daughter is a "<<daughter->GetName()<<endl;
854                     }
855                   }
856                   else{
857                     //cout<<"AntiLambda daughter is a "<<daughter->GetName()<<endl;
858                   }
859                 }
860               }
861               filled = true;
862             }
863             if(pdgCode == fgK0SCode){
864               float myEt = Et(part);
865               fSimHadEt += myEt;
866               fSimTotEt += myEt;
867               FillHisto2D("EtSimulatedK0S",part->Pt(),part->Eta(),myEt);
868               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
869               Float_t weight = K0Weight(part->Pt());
870               FillHisto2D("EtSimulatedK0SReweighted",part->Pt(),part->Eta(),myEt*weight);
871               Int_t ndaughters = part->GetNDaughters();
872               for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
873                 Int_t daughterindex = part->GetDaughter(idaughter);
874                 if(daughterindex<0 || daughterindex>1e5) continue;
875                 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
876                 if(daughter){
877                   if(daughter->GetPDG(0)){
878
879                     Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
880                     if(daughtercode==fgPiMinusCode || daughtercode==fgPiPlusCode){
881                       myEt = Et(daughter);
882                       FillHisto2D("EtSimulatedK0SDaughters",daughter->Pt(),daughter->Eta(),myEt);
883                       FillHisto2D("EtSimulatedK0SDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
884                       //cout<<"K0S daughter is a "<<daughter->GetName()<<endl;
885                     }
886                   }
887                   else{
888                     //cout<<"K0S daughter is a "<<daughter->GetName()<<endl;
889                   }
890                 }
891               }
892               filled = true;
893             }
894             if(pdgCode == fgK0LCode){
895               float myEt = Et(part);
896               fSimHadEt += myEt;
897               fSimTotEt += myEt;
898               FillHisto2D("EtSimulatedK0L",part->Pt(),part->Eta(),myEt);
899               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
900               Float_t weight = K0Weight(part->Pt());
901               FillHisto2D("EtSimulatedK0LReweighted",part->Pt(),part->Eta(),myEt*weight);
902               filled = true;
903             }
904             if(pdgCode == fgOmegaCode){
905               float myEt = Et(part);
906               fSimHadEt += myEt;
907               fSimTotEt += myEt;
908               FillHisto2D("EtSimulatedOmega",part->Pt(),part->Eta(),myEt);
909               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
910               Int_t ndaughters = part->GetNDaughters();
911               for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
912                 Int_t daughterindex = part->GetDaughter(idaughter);
913                 if(daughterindex<0 || daughterindex>1e5) continue;
914                 TParticle *daughter = stack->Particle(daughterindex);
915                 if(daughter){
916                   if(daughter->GetPDG(0)){
917
918                     Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
919                     if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgKMinusCode){
920                       myEt = Et(daughter);
921                       FillHisto2D("EtSimulatedOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
922                     //cout<<"Omega daughter is a "<<daughter->GetName()<<endl;
923                     }
924                   }
925                   else{
926                     //cout<<"Omega daughter is a "<<daughter->GetName()<<endl;
927                   }
928                 }
929               }
930               filled = true;
931             }
932             if(pdgCode == fgAntiOmegaCode){
933               float myEt = Et(part);
934               fSimHadEt += myEt;
935               fSimTotEt += myEt;
936               FillHisto2D("EtSimulatedOmega",part->Pt(),part->Eta(),myEt);
937               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
938               Int_t ndaughters = part->GetNDaughters();
939               for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
940                 Int_t daughterindex = part->GetDaughter(idaughter);
941                 if(daughterindex<0 || daughterindex>1e5) continue;
942                 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
943                 if(daughter){
944                   if(daughter->GetPDG(0)){
945                     Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
946                     if(daughtercode==fgPiMinusCode || daughtercode==fgAntiProtonCode || daughtercode==fgKPlusCode){
947                       myEt = Et(daughter);
948                       FillHisto2D("EtSimulatedAntiOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
949                       //cout<<"AntiOmega daughter is a "<<daughter->GetName()<<endl;
950                     }
951                   }
952                   else{
953                     //cout<<"AntiOmega daughter is a "<<daughter->GetName()<<endl;
954                   }
955                 }
956               }
957               filled = true;
958             }
959             //There are two codes for Sigmas
960             if(pdgCode == fgSigmaCode || pdgCode == -3222){
961               float myEt = Et(part);
962               fSimHadEt += myEt;
963               fSimTotEt += myEt;
964               FillHisto2D("EtSimulatedSigma",part->Pt(),part->Eta(),myEt);
965               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
966               filled = true;
967             }
968             if(pdgCode == fgAntiSigmaCode || pdgCode == 3222){
969               float myEt = Et(part);
970               fSimHadEt += myEt;
971               fSimTotEt += myEt;
972               FillHisto2D("EtSimulatedAntiSigma",part->Pt(),part->Eta(),myEt);
973               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
974               filled = true;
975             }
976             if(pdgCode == fgXiCode){
977               float myEt = Et(part);
978               fSimHadEt += myEt;
979               fSimTotEt += myEt;
980               FillHisto2D("EtSimulatedXi",part->Pt(),part->Eta(),myEt);
981               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
982               Int_t ndaughters = part->GetNDaughters();
983               for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
984                 Int_t daughterindex = part->GetDaughter(idaughter);
985                 if(daughterindex<0 || daughterindex>1e5 || daughterindex>1e5) continue;
986                 //cerr<<"Daughter index "<<daughterindex<<" npart "<<nPrim<<endl;
987                 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
988                 if(daughter){
989                   if(daughter->GetPDG(0)){
990
991                     Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
992                     if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgPiMinusCode){
993                       myEt = Et(daughter);
994                       FillHisto2D("EtSimulatedXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
995                     //cout<<"Xi daughter is a "<<daughter->GetName()<<endl;
996                     }
997                   }
998                   else{
999                     //cout<<"Xi daughter is a "<<daughter->GetName()<<endl;
1000                   }
1001                 }
1002               }
1003               filled = true;
1004             }
1005             if(pdgCode == fgAntiXiCode){
1006               float myEt = Et(part);
1007               fSimHadEt += myEt;
1008               fSimTotEt += myEt;
1009               FillHisto2D("EtSimulatedAntiXi",part->Pt(),part->Eta(),myEt);
1010               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1011               Int_t ndaughters = part->GetNDaughters();
1012               for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1013                 Int_t daughterindex = part->GetDaughter(idaughter);
1014                 if(daughterindex<0 || daughterindex>1e5) continue;
1015                 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1016                 if(daughter){
1017                   if(daughter->GetPDG(0)){
1018                     Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1019                     if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode || daughtercode==fgPiMinusCode){
1020                       myEt = Et(daughter);
1021                       FillHisto2D("EtSimulatedAntiXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
1022                       //cout<<"AntiXi daughter is a "<<daughter->GetName()<<endl;
1023                     }
1024                   }
1025                   else{
1026                     //cout<<"AntiXi daughter is a "<<daughter->GetName()<<endl;
1027                   }
1028                 }
1029               }
1030               filled = true;
1031             }
1032             if(pdgCode == fgXi0Code){
1033               float myEt = Et(part);
1034               fSimHadEt += myEt;
1035               fSimTotEt += myEt;
1036               FillHisto2D("EtSimulatedXi0",part->Pt(),part->Eta(),myEt);
1037               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1038               filled = true;
1039             }
1040             if(pdgCode == fgAntiXi0Code){
1041               float myEt = Et(part);
1042               fSimHadEt += myEt;
1043               fSimTotEt += myEt;
1044               FillHisto2D("EtSimulatedAntiXi0",part->Pt(),part->Eta(),myEt);
1045               FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1046               filled = true;
1047             }
1048             //============electrons===================================
1049
1050             if(pdgCode == fgEPlusCode){
1051               float myEt = Et(part);
1052               fSimTotEt += myEt;
1053               FillHisto2D("EtSimulatedEPlus",part->Pt(),part->Eta(),myEt);
1054               filled = true;
1055             }
1056             if(pdgCode == fgEMinusCode){
1057               float myEt = Et(part);
1058               fSimTotEt += myEt;
1059               FillHisto2D("EtSimulatedEMinus",part->Pt(),part->Eta(),myEt);
1060               filled = true;
1061             }
1062             //============neutrals===================================
1063             if(pdgCode == fgGammaCode){
1064               TParticle *mom = stack->Particle(part->GetFirstMother());
1065               Int_t pdgCodeMom =  mom->GetPDG(0)->PdgCode();
1066               //cout<<"I am a gamma and my mom is "<<mom->GetName()<<endl;
1067               //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
1068               if(pdgCodeMom == fgEtaCode){
1069                 float myEt = Et(part);
1070                 fSimTotEt += myEt;
1071                 FillHisto2D("EtSimulatedEta",mom->Pt(),mom->Eta(),myEt);
1072                 filled = true;
1073               }
1074               if(pdgCodeMom == fgPi0Code){
1075                 float myEt = Et(part);
1076                 fSimTotEt += myEt;
1077                 FillHisto2D("EtSimulatedPi0",mom->Pt(),mom->Eta(),myEt);
1078                 filled = true;
1079               }
1080               if(pdgCodeMom == fgOmega0Code){
1081                 float myEt = Et(part);
1082                 fSimTotEt += myEt;
1083                 FillHisto2D("EtSimulatedOmega0",mom->Pt(),mom->Eta(),myEt);
1084                 filled = true;
1085               }
1086               if(!filled){
1087                 float myEt = Et(part);
1088                 fSimTotEt += myEt;
1089                 FillHisto2D("EtSimulatedGamma",part->Pt(),part->Eta(),myEt);
1090                 filled = true;
1091               }
1092             }
1093             if(pdgCode == fgEtaCode){
1094               float myEt = Et(part);
1095               fSimTotEt += myEt;
1096               FillHisto2D("EtSimulatedEta",part->Pt(),part->Eta(),myEt);
1097               filled = true;
1098             }
1099             if(pdgCode == fgPi0Code){
1100               float myEt = Et(part);
1101               fSimTotEt += myEt;
1102               FillHisto2D("EtSimulatedPi0",part->Pt(),part->Eta(),myEt);
1103               filled = true;
1104             }
1105             if(pdgCode == fgOmega0Code){
1106               float myEt = Et(part);
1107               fSimTotEt += myEt;
1108               FillHisto2D("EtSimulatedOmega0",part->Pt(),part->Eta(),myEt);
1109               filled = true;
1110             }
1111             if(!filled){
1112               //if( strcmp(pc->ParticleClass(),"Baryon")==0 || strcmp(pc->ParticleClass(),"Meson")==0 ){
1113               //cout<<"Did not find a place for "<<part->GetName()<<" "<<pdgCode<<" which is a "<<pc->ParticleClass()<<endl;
1114                 //}
1115             }
1116           }
1117         }
1118     }
1119
1120     if(fSimTotEt>0.0)FillHisto1D("SimTotEt",fSimTotEt,1.0);
1121     if(fSimHadEt>0.0)FillHisto1D("SimHadEt",fSimHadEt,1.0);
1122     if(fSimPiKPEt>0.0)FillHisto1D("SimPiKPEt",fSimPiKPEt,1.0);
1123     if(fCentBin != -1){//if we have Pb+Pb and a centrality bin was found
1124       if(fSimTotEt>0.0) FillHisto1D(Form("SimTotEtCB%i",fCentBin),fSimTotEt,1.0);
1125       if(fSimHadEt>0.0) FillHisto1D(Form("SimHadEtCB%i",fCentBin),fSimHadEt,1.0);
1126       if(fSimPiKPEt>0.0)FillHisto1D(Form("SimPiKPEtCB%i",fCentBin),fSimPiKPEt,1.0);
1127     }
1128
1129     if(fInvestigateSmearing){
1130       //Smearing histograms
1131       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtSmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtSmeared)/fSimPiKPEt,1.0);
1132       FillHisto1D("SimPiKPEtPtSmeared",fSimPiKPEtPtSmeared,1.0);
1133       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimEfficiencySmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtEfficiencySmeared)/fSimPiKPEt,1.0);
1134       FillHisto1D("SimPiKPEtEfficiencySmeared",fSimPiKPEtEfficiencySmeared,1.0);
1135       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtCutSmearedTPC",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtCutSmearedTPC)/fSimPiKPEt,1.0);
1136       FillHisto1D("SimPiKPEtPtCutSmearedTPC",fSimPiKPEtPtCutSmearedTPC,1.0);
1137       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtCutSmearedITS",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtCutSmearedITS)/fSimPiKPEt,1.0);
1138       FillHisto1D("SimPiKPEtPtCutSmearedITS",fSimPiKPEtPtCutSmearedTPC,1.0);
1139       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPIDSmeared)/fSimPiKPEt,1.0);
1140       FillHisto1D("SimPiKPEtPIDSmeared",fSimPiKPEtPIDSmeared,1.0);
1141       if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmearedNoID",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPIDSmearedNoID)/fSimPiKPEt,1.0);
1142       FillHisto1D("SimPiKPEtPIDSmearedNoID",fSimPiKPEtPIDSmearedNoID,1.0);
1143     }
1144     return 1;
1145     
1146 }
1147
1148 void AliAnalysisHadEtMonteCarlo::Init()
1149 { // Init
1150     AliAnalysisHadEt::Init();
1151     if(!fPtSmearer) fPtSmearer = new TRandom();
1152 }
1153 void AliAnalysisHadEtMonteCarlo::CreateHistograms(){
1154   //for simulated Et only (no reconstruction)
1155   CreateEtaPtHisto2D(TString("EtSimulatedPiPlus"),TString("Simulated E_{T} from #pi^{+}"));
1156   CreateEtaPtHisto2D("EtSimulatedPiMinus","Simulated E_{T} from #pi^{-}");
1157   CreateEtaPtHisto2D("EtSimulatedKPlus","Simulated E_{T} from K^{+}");
1158   CreateEtaPtHisto2D("EtSimulatedKMinus","Simulated E_{T} from K^{-}");
1159   CreateEtaPtHisto2D("EtSimulatedProton","Simulated E_{T} from p");
1160   CreateEtaPtHisto2D("EtSimulatedAntiProton","Simulated E_{T} from #bar{p}");//Both baryon enhancement and strangeness rescaling
1161   if(fBaryonEnhancement){
1162     CreateEtaPtHisto2D("EtSimulatedProtonEnhanced","Simulated E_{T} from p");
1163     CreateEtaPtHisto2D("EtSimulatedAntiProtonEnhanced","Simulated E_{T} from #bar{p}");
1164   }
1165   CreateEtaPtHisto2D("EtSimulatedChargedHadron","Simulated E_{T} from charged hadrons");
1166   CreateEtaPtHisto2D("EtNSimulatedPiPlus","Number of Simulated #pi^{+}");
1167   CreateEtaPtHisto2D("EtNSimulatedPiMinus","Number of simulated #pi^{-}");
1168   CreateEtaPtHisto2D("EtNSimulatedKPlus","Number of simulated K^{+}");
1169   CreateEtaPtHisto2D("EtNSimulatedKMinus","Number of simulated K^{-}");
1170   CreateEtaPtHisto2D("EtNSimulatedProton","Number of simulated p");
1171   CreateEtaPtHisto2D("EtNSimulatedAntiProton","Number of simulated #bar{p}");
1172   if(fBaryonEnhancement){
1173     CreateEtaPtHisto2D("EtNSimulatedProtonEnhanced","Number of simulated p");
1174     CreateEtaPtHisto2D("EtNSimulatedAntiProtonEnhanced","Number of simulated #bar{p}");
1175   }
1176   CreateEtaPtHisto2D("EtNSimulatedChargedHadron","Number of simulated charged hadrons");
1177   if(fDataSet==20100){//If this is Pb+Pb
1178     Int_t width = 5;
1179     if(fNCentBins<20) width = 10;
1180     for(Int_t i=0;i<fNCentBins;i++){
1181       CreateEtaPtHisto2D(Form("EtNSimulatedPiPlusCB%i",i),Form("Number of Simulated #pi^{+} for %i-%i central",i*width,(i+1)*width));
1182       CreateEtaPtHisto2D(Form("EtNSimulatedPiMinusCB%i",i),Form("Number of simulated #pi^{-} for %i-%i central",i*width,(i+1)*width));
1183       CreateEtaPtHisto2D(Form("EtNSimulatedKPlusCB%i",i),Form("Number of simulated K^{+} for %i-%i central",i*width,(i+1)*width));
1184       CreateEtaPtHisto2D(Form("EtNSimulatedKMinusCB%i",i),Form("Number of simulated K^{-} for %i-%i central",i*width,(i+1)*width));
1185       CreateEtaPtHisto2D(Form("EtNSimulatedProtonCB%i",i),Form("Number of simulated p for %i-%i central",i*width,(i+1)*width));
1186       CreateEtaPtHisto2D(Form("EtNSimulatedAntiProtonCB%i",i),Form("Number of simulated #bar{p} for %i-%i central",i*width,(i+1)*width));
1187       CreateEtaPtHisto2D(Form("EtNSimulatedChargedHadronCB%i",i),Form("Number of simulated charged hadrons for %i-%i central",i*width,(i+1)*width));
1188     }
1189   }
1190   CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingNoPt","Simulated E_{T} from charged hadrons assuming p_{T}=0");
1191   CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut","Simulated E_{T} from charged hadrons assuming p_{T}=0.15");
1192   CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPtITSCut","Simulated E_{T} from charged hadrons assuming p_{T}=0.10");
1193
1194   CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPion","Simulated E_{T} from charged hadrons assuming they are all pions");
1195   CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingProton","Simulated E_{T} from charged hadrons assuming they are all pions");
1196   CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingKaon","Simulated E_{T} from charged hadrons assuming they are all pions");
1197   CreateEtaPtHisto2D("EtSimulatedKPlusAssumingPion","Simulated E_{T} from K^{+} assuming #pi mass");
1198   CreateEtaPtHisto2D("EtSimulatedKMinusAssumingPion","Simulated E_{T} from K^{-} assuming #pi mass");
1199   CreateEtaPtHisto2D("EtSimulatedProtonAssumingPion","Simulated E_{T} from p assuming #pi mass");
1200   CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingPion","Simulated E_{T} from #bar{p} assuming #pi mass");
1201   CreateEtaPtHisto2D("EtSimulatedKPlusAssumingProton","Simulated E_{T} from K^{+} assuming #pi mass");
1202   CreateEtaPtHisto2D("EtSimulatedKMinusAssumingProton","Simulated E_{T} from K^{-} assuming #pi mass");
1203   CreateEtaPtHisto2D("EtSimulatedPiPlusAssumingProton","Simulated E_{T} from p assuming #pi mass");
1204   CreateEtaPtHisto2D("EtSimulatedPiMinusAssumingProton","Simulated E_{T} from #bar{p} assuming #pi mass");
1205   CreateEtaPtHisto2D("EtSimulatedPiPlusAssumingKaon","Simulated E_{T} from K^{+} assuming #pi mass");
1206   CreateEtaPtHisto2D("EtSimulatedPiMinusAssumingKaon","Simulated E_{T} from K^{-} assuming #pi mass");
1207   CreateEtaPtHisto2D("EtSimulatedProtonAssumingKaon","Simulated E_{T} from p assuming #pi mass");
1208   CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingKaon","Simulated E_{T} from #bar{p} assuming #pi mass");
1209   if(fBaryonEnhancement){
1210     CreateEtaPtHisto2D("EtSimulatedProtonAssumingPionEnhanced","Simulated E_{T} from p assuming #pi mass");
1211     CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingPionEnhanced","Simulated E_{T} from #bar{p} assuming #pi mass");
1212   }
1213
1214   CreateEtaPtHisto2D("EtSimulatedLambda","Simulated E_{T} from #Lambda");
1215   CreateEtaPtHisto2D("EtSimulatedAntiLambda","Simulated E_{T} from #bar{#Lambda}");
1216   CreateEtaPtHisto2D("EtSimulatedK0S","Simulated E_{T} from K^{0}_{S}");
1217   CreateEtaPtHisto2D("EtSimulatedK0L","Simulated E_{T} from K^{0}_{L}");
1218   CreateEtaPtHisto2D("EtSimulatedLambdaReweighted","Simulated E_{T} from #Lambda");//These will also be used for baryon enhancement
1219   CreateEtaPtHisto2D("EtSimulatedAntiLambdaReweighted","Simulated E_{T} from #bar{#Lambda}");
1220   CreateEtaPtHisto2D("EtSimulatedK0SReweighted","Simulated E_{T} from K^{0}_{S}");
1221   CreateEtaPtHisto2D("EtSimulatedK0LReweighted","Simulated E_{T} from K^{0}_{L}");
1222   CreateEtaPtHisto2D("EtSimulatedNeutron","Simulated E_{T} from neutrons");
1223   CreateEtaPtHisto2D("EtSimulatedAntiNeutron","Simulated E_{T} from #bar{n}");
1224   CreateEtaPtHisto2D("EtSimulatedEPlus","Simulated E_{T} from e^{+}");
1225   CreateEtaPtHisto2D("EtSimulatedEMinus","Simulated E_{T} from e^{-}");
1226   CreateEtaPtHisto2D("EtSimulatedOmega","Simulated E_{T} from #Omega^{-}");
1227   CreateEtaPtHisto2D("EtSimulatedAntiOmega","Simulated E_{T} from #Omega^{+}");
1228   CreateEtaPtHisto2D("EtSimulatedXi","Simulated E_{T} from #Xi^{-}");
1229   CreateEtaPtHisto2D("EtSimulatedAntiXi","Simulated E_{T} from #Xi^{+}");
1230   CreateEtaPtHisto2D("EtSimulatedSigma","Simulated E_{T} from #Xi^{-}");
1231   CreateEtaPtHisto2D("EtSimulatedAntiSigma","Simulated E_{T} from #Xi^{+}");
1232   CreateEtaPtHisto2D("EtSimulatedXi0","Simulated E_{T} from #Xi^{0}");
1233   CreateEtaPtHisto2D("EtSimulatedAntiXi0","Simulated E_{T} from #Xi^{0}");
1234   CreateEtaPtHisto2D("EtSimulatedAllHadron","Simulated E_{T} from all hadrons");
1235
1236
1237   CreateEtaPtHisto2D("EtSimulatedLambdaDaughters","Simulated E_{T} from #Lambda Daughters");
1238   CreateEtaPtHisto2D("EtSimulatedAntiLambdaDaughters","Simulated E_{T} from #bar{#Lambda} Daughters");
1239   CreateEtaPtHisto2D("EtSimulatedK0SDaughters","Simulated E_{T} from K^{0}_{S} Daughters");
1240   CreateEtaPtHisto2D("EtSimulatedLambdaDaughtersReweighted","Simulated E_{T} from #Lambda Daughters");
1241   CreateEtaPtHisto2D("EtSimulatedAntiLambdaDaughtersReweighted","Simulated E_{T} from #bar{#Lambda} Daughters");
1242   CreateEtaPtHisto2D("EtSimulatedK0SDaughtersReweighted","Simulated E_{T} from K^{0}_{S} Daughters");
1243   CreateEtaPtHisto2D("EtSimulatedOmegaDaughters","Simulated E_{T} from #Omega^{-} Daughters");
1244   CreateEtaPtHisto2D("EtSimulatedAntiOmegaDaughters","Simulated E_{T} from #Omega^{+} Daughters");
1245   CreateEtaPtHisto2D("EtSimulatedXiDaughters","Simulated E_{T} from #Xi^{-} Daughters");
1246   CreateEtaPtHisto2D("EtSimulatedAntiXiDaughters","Simulated E_{T} from #Xi^{+} Daughters");
1247
1248
1249   CreateEtaPtHisto2D("EtSimulatedGamma","Simulated E_{T} from #gamma");
1250   CreateEtaPtHisto2D("EtSimulatedEta","Simulated E_{T} from #eta");
1251   CreateEtaPtHisto2D("EtSimulatedPi0","Simulated E_{T} from #pi^{0}");
1252   CreateEtaPtHisto2D("EtSimulatedOmega0","Simulated E_{T} from #omega");
1253
1254   TString *strTPC = new TString("TPC");
1255   TString *strITS = new TString("ITS");
1256   TString *strTPCITS = new TString("TPCITS");
1257   Int_t lastcutset = 1;
1258   if(fRequireITSHits) lastcutset = 2;
1259   for(Int_t i=0;i<=lastcutset;i++){
1260     TString *cutName = NULL;
1261     Float_t maxPtdEdx = 10;
1262     Float_t mindEdx = 35;
1263     Float_t maxdEdx = 150.0;
1264     switch(i){
1265     case 0:
1266       cutName = strTPC;
1267       break;
1268     case 1:
1269       cutName = strITS;
1270       maxPtdEdx = 5;
1271       maxdEdx = 500.0;
1272       break;
1273     case 2:
1274       cutName = strTPCITS;
1275       break;
1276     default:
1277       cerr<<"Error:  cannot make histograms!"<<endl;
1278       return;
1279     }
1280
1281     CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedPiPlus",cutName->Data()),"Reconstructed E_{T} from identified #pi^{+}");
1282     CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedPiMinus",cutName->Data()),"Reconstructed E_{T} from identified #pi^{-}");
1283     CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedKPlus",cutName->Data()),"Reconstructed E_{T} from identified K^{+}");
1284     CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedEMinus",cutName->Data()),"Reconstructed E_{T} from identified e^{-}");
1285     CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedEPlus",cutName->Data()),"Reconstructed E_{T} from identified e^{+}");
1286     CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedKMinus",cutName->Data()),"Reconstructed E_{T} from identified K^{-}");
1287     CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedProton",cutName->Data()),"Reconstructed E_{T} from identified p");
1288     CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedAntiProton",cutName->Data()),"Reconstructed E_{T} from identified #bar{p}");
1289     if(fBaryonEnhancement){
1290       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from identified p");
1291       CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from identified #bar{p}");
1292     }
1293     CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentified",cutName->Data()),"Number of Reconstructed unidentified particles");
1294     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1295     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1296     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1297
1298     CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedKaon",cutName->Data()),"Number of Reconstructed unidentified kaons particles");
1299     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1300     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1301     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1302     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming kaon mass");
1303     CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedProton",cutName->Data()),"Number of Reconstructed unidentified proton particles");
1304     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1305     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1306     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1307     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1308     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1309     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1310     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProton",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming proton mass");
1311     if(fBaryonEnhancement){
1312       CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),"Number of Reconstructed unidentified proton particles");
1313       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1314       CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming proton mass");
1315     }
1316     CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedPion",cutName->Data()),"Number of Reconstructed unidentified pions particles");
1317     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
1318     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
1319     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
1320     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPion",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
1321
1322     CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentified",cutName->Data()),"Reconstructed E_{T} from unidentified particles using real mass");
1323     CreateEtaPtHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),"Reconstructed E_{T} from misidentified electrons");
1324
1325
1326     CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlus",cutName->Data()),"Reconstructed E_{T} from #pi^{+}");
1327     CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinus",cutName->Data()),"Reconstructed E_{T} from #pi^{-}");
1328     CreateEtaPtHisto2D(Form("EtReconstructed%sKPlus",cutName->Data()),"Reconstructed E_{T} from K^{+}");
1329     CreateEtaPtHisto2D(Form("EtReconstructed%sKMinus",cutName->Data()),"Reconstructed E_{T} from K^{-}");
1330     CreateEtaPtHisto2D(Form("EtReconstructed%sProton",cutName->Data()),"Reconstructed E_{T} from p");
1331     CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProton",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1332     if(fBaryonEnhancement){
1333       CreateEtaPtHisto2D(Form("EtReconstructed%sProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from p");
1334       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1335     }
1336     CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
1337     CreateEtaPtHisto2D(Form("EtNReconstructed%sPiPlus",cutName->Data()),"Reconstructed E_{T} from #pi^{+}");
1338     CreateEtaPtHisto2D(Form("EtNReconstructed%sPiMinus",cutName->Data()),"Reconstructed E_{T} from #pi^{-}");
1339     CreateEtaPtHisto2D(Form("EtNReconstructed%sKPlus",cutName->Data()),"Reconstructed E_{T} from K^{+}");
1340     CreateEtaPtHisto2D(Form("EtNReconstructed%sKMinus",cutName->Data()),"Reconstructed E_{T} from K^{-}");
1341     CreateEtaPtHisto2D(Form("EtNReconstructed%sProton",cutName->Data()),"Reconstructed E_{T} from p");
1342     CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProton",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1343     if(fBaryonEnhancement){
1344       CreateEtaPtHisto2D(Form("EtNReconstructed%sProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from p");
1345       CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1346     }
1347     CreateEtaPtHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
1348     if(fDataSet==20100){//If this is Pb+Pb
1349       Int_t width = 5;
1350       if(fNCentBins<20) width = 10;
1351       for(Int_t j=0;j<fNCentBins;j++){
1352         CreateEtaPtHisto2D(Form("EtNReconstructed%sPiPlusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #pi^{+} for %i-%i central",j*width,(j+1)*width));
1353         CreateEtaPtHisto2D(Form("EtNReconstructed%sPiMinusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #pi^{-} for %i-%i central",j*width,(j+1)*width));
1354         CreateEtaPtHisto2D(Form("EtNReconstructed%sKPlusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from K^{+} for %i-%i central",j*width,(j+1)*width));
1355         CreateEtaPtHisto2D(Form("EtNReconstructed%sKMinusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from K^{-} for %i-%i central",j*width,(j+1)*width));
1356         CreateEtaPtHisto2D(Form("EtNReconstructed%sProtonCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from p for %i-%i central",j*width,(j+1)*width));
1357         CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProtonCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #bar{p} for %i-%i central",j*width,(j+1)*width));
1358         CreateEtaPtHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from charged hadrons for %i-%i central",j*width,(j+1)*width));
1359       }
1360     }
1361
1362     CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
1363     CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
1364     CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
1365     CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingPion",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1366     CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingPion",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1367     CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1368     CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1369     CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1370     CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1371     CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1372     CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1373     CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1374     CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1375
1376     CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingProton",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1377     CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingProton",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1378     CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinusAssumingProton",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1379     CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlusAssumingProton",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1380     CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1381     CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1382
1383     if(fBaryonEnhancement){
1384       CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1385       CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1386     }
1387
1388     CreateEtaPtHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),"Reconstructed E_{T} from e^{+}");
1389     CreateEtaPtHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),"Reconstructed E_{T} from e^{-}");
1390
1391
1392
1393     CreateEtaPtHisto2D(Form("EtReconstructed%sLambdaDaughters",cutName->Data()),"Reconstructed E_{T} from #Lambda Daughters");
1394   CreateEtaPtHisto2D(Form("EtReconstructed%sAntiLambdaDaughters",cutName->Data()),"Reconstructed E_{T} from #bar{#Lambda} Daughters");
1395   CreateEtaPtHisto2D(Form("EtReconstructed%sK0SDaughters",cutName->Data()),"Reconstructed E_{T} from K^{0}_{S} Daughters");
1396     CreateEtaPtHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from #Lambda Daughters");
1397   CreateEtaPtHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from #bar{#Lambda} Daughters");
1398   CreateEtaPtHisto2D(Form("EtReconstructed%sK0SDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from K^{0}_{S} Daughters");
1399   CreateEtaPtHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),"Reconstructed E_{T} from #Omega^{-} Daughters");
1400   CreateEtaPtHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),"Reconstructed E_{T} from #Omega^{+} Daughters");
1401   CreateEtaPtHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),"Reconstructed E_{T} from #Xi^{-} Daughters");
1402   CreateEtaPtHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),"Reconstructed E_{T} from #Xi^{+} Daughters");
1403
1404     CreateIntHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),"PIDs of unidentified particles", "PID", "Number of particles",9, -4,4);
1405     CreateHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),"PIDs of misidentified particles", "PID real","PID identified",5, -.5,4.5,5, -.5,4.5);
1406     CreateHisto2D(Form("dEdxAll%s",cutName->Data()),"dE/dx for all particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1407     CreateHisto2D(Form("dEdxPion%s",cutName->Data()),"dE/dx for #pi^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1408     CreateHisto2D(Form("dEdxKaon%s",cutName->Data()),"dE/dx for K^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1409     CreateHisto2D(Form("dEdxProton%s",cutName->Data()),"dE/dx for p(#bar{p})","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1410     CreateHisto2D(Form("dEdxElectron%s",cutName->Data()),"dE/dx for e^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1411     CreateHisto2D(Form("dEdxUnidentified%s",cutName->Data()),"dE/dx for unidentified particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1412   }
1413   delete strTPC;
1414   delete strITS;
1415   delete strTPCITS;
1416
1417   Float_t minEt = 0.0;
1418   Float_t maxEt = 100.0;
1419   if(fDataSet==20100) maxEt=3000.0;
1420   Int_t nbinsEt = 100;
1421   char histoname[200];
1422   char histotitle[200];
1423   char xtitle[50];
1424   char ytitle[50];
1425   TString *sTPC = new TString("TPC");
1426   TString *sITS = new TString("ITS");
1427   TString *sTPCpt = new TString("0.15");
1428   TString *sITSpt = new TString("0.10");
1429   TString *sPID = new TString("");
1430   TString *sNoPID = new TString("NoPID");
1431   TString *sNoPIDString = new TString(", No PID");
1432   TString *sHadEt = new TString("HadEt");
1433   TString *sTotEt = new TString("TotEt");
1434   TString *sTotEtString = new TString("total E_{T}");
1435   TString *sHadEtString = new TString("hadronic E_{T}");
1436   TString *sFull = new TString("Full");
1437   TString *sEMCAL = new TString("EMCAL");
1438   TString *sPHOS = new TString("PHOS");
1439   float etDiff = 1.5;
1440
1441   for(int tpc = 0;tpc<lastcutset;tpc++){
1442     TString *detector = NULL;
1443     TString *ptstring = NULL;
1444     if(tpc==1) {detector = sTPC; ptstring = sTPCpt;}
1445     else{detector = sITS; ptstring = sITSpt;}
1446     for(int hadet = 0;hadet<2;hadet++){
1447       TString *et = NULL;
1448       TString *etstring = NULL;
1449       if(hadet==1) {et = sHadEt; etstring = sHadEtString;}
1450       else{et = sTotEt; etstring = sTotEtString;}
1451       for(int type = 0;type<3;type++){
1452         if(type==0 && !fInvestigateFull) continue;
1453         if(type==1 && !fInvestigateEMCal) continue;
1454         if(type==2 && !fInvestigatePHOS) continue;
1455         TString *acceptance = NULL;
1456         switch(type){
1457         case 0:
1458           acceptance = sFull;
1459           etDiff = 1.5;
1460           break;
1461         case 1:
1462           acceptance = sEMCAL;
1463           etDiff = 5;
1464           break;
1465         case 2:
1466           acceptance = sPHOS;
1467           etDiff = 5;
1468           break;
1469         default:
1470           acceptance = sFull;
1471         }
1472         for(int pid = 0;pid<2;pid++){
1473           TString *partid = NULL;
1474           TString *partidstring = NULL;
1475           if(pid==1){partid = sPID; partidstring = sPID;}
1476           else{partid = sNoPID; partidstring = sNoPIDString;}
1477           snprintf(histoname,200,"Sim%sMinusReco%s%sAcceptance%s%s",et->Data(),et->Data(),acceptance->Data(),detector->Data(),partid->Data());
1478           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());
1479           snprintf(ytitle,50,"(Simulated %s - reconstructed %s)/(Simulated %s)",etstring->Data(),etstring->Data(),etstring->Data());
1480           snprintf(xtitle,50,"Simulated %s",etstring->Data());
1481           CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1482           if(hadet==0 && type==0 && fInvestigatePiKP){//we only want to do this once...  not the most elegant way of coding but hey...
1483             snprintf(histoname,200,"SimPiKPMinusRecoPiKP%sAcceptance%s%s",acceptance->Data(),detector->Data(),partid->Data());
1484             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());
1485             snprintf(ytitle,50,"(Sim PiKP - reco PiKP)/(Sim PiKP)");
1486             snprintf(xtitle,50,"Simulated E_{T}^{#pi,K,p}");
1487             CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1488           }
1489         }
1490       }
1491     }
1492   }
1493   CreateHisto1D("SimPiKPEt","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt,minEt,maxEt);
1494   CreateHisto1D("SimTotEt","Simulated Total E_{T}","Simulated Total E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
1495   CreateHisto1D("SimHadEt","Simulated Hadronic E_{T}","Simulated Hadronic E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
1496   if(fDataSet==20100){
1497     Int_t width = 5;
1498     if(fNCentBins<20) width = 10;
1499     for(Int_t j=0;j<fNCentBins;j++){
1500       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);
1501       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);
1502     }
1503   }
1504
1505   etDiff = 0.15;
1506
1507   if(fInvestigateSmearing){
1508
1509     //======================================================================
1510
1511     snprintf(histoname,200,"SimPiKPEtMinusSimPtSmeared");
1512     snprintf(histotitle,200,"Simulated (true-smeared)/true for 0.5 percent momentum smearing");
1513     snprintf(ytitle,50,"(true-smeared)/true");
1514     snprintf(xtitle,50,"true p, K, p E_{T}");
1515     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/10.0,etDiff/10.0);
1516     snprintf(histoname,200,"SimPiKPEtPtSmeared");
1517     snprintf(histotitle,200,"Simulated E_{T} for 0.5 percent momentum smearing");
1518     snprintf(ytitle,50,"Number of events");
1519     snprintf(xtitle,50,"p, K, p E_{T}");
1520     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1521
1522     //======================================================================
1523
1524     snprintf(histoname,200,"SimPiKPEtMinusSimEfficiencySmeared");
1525     snprintf(histotitle,200,"Simulated (true-smeared)/true for efficiency smearing");
1526     snprintf(ytitle,50,"(true-smeared)/true");
1527     snprintf(xtitle,50,"true p, K, p E_{T}");
1528     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
1529     snprintf(histoname,200,"SimPiKPEtEfficiencySmeared");
1530     snprintf(histotitle,200,"Simulated E_{T} for efficiency smearing");
1531     snprintf(ytitle,50,"Number of events");
1532     snprintf(xtitle,50,"p, K, p E_{T}");
1533     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1534
1535     //======================================================================
1536
1537     snprintf(histoname,200,"SimPiKPEtMinusSimPtCutSmearedTPC");
1538     snprintf(histotitle,200,"Simulated (true-smeared)/true for p_{T}>0.15 GeV/c smearing");
1539     snprintf(ytitle,50,"(true-smeared)/true");
1540     snprintf(xtitle,50,"true p, K, p E_{T}");
1541     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1542     snprintf(histoname,200,"SimPiKPEtPtCutSmearedTPC");
1543     snprintf(histotitle,200,"Simulated E_{T} for p_{T}>0.15 GeV/c smearing");
1544     snprintf(ytitle,50,"Number of events");
1545     snprintf(xtitle,50,"p, K, p E_{T}");
1546     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1547
1548
1549     //======================================================================
1550
1551     snprintf(histoname,200,"SimPiKPEtMinusSimPtCutSmearedITS");
1552     snprintf(histotitle,200,"Simulated (true-smeared)/true for p_{T}>0.10 GeV/c smearing");
1553     snprintf(ytitle,50,"(true-smeared)/true");
1554     snprintf(xtitle,50,"true p, K, p E_{T}");
1555     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1556     snprintf(histoname,200,"SimPiKPEtPtCutSmearedITS");
1557     snprintf(histotitle,200,"Simulated E_{T} for p_{T}>0.10 GeV/c smearing");
1558     snprintf(ytitle,50,"Number of events");
1559     snprintf(xtitle,50,"p, K, p E_{T}");
1560     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1561
1562     //======================================================================
1563
1564     snprintf(histoname,200,"SimPiKPEtMinusSimPIDSmeared");
1565     snprintf(histotitle,200,"Simulated (true-smeared)/true for PID smearing");
1566     snprintf(ytitle,50,"(true-smeared)/true");
1567     snprintf(xtitle,50,"true p, K, p E_{T}");
1568     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1569     snprintf(histoname,200,"SimPiKPEtPIDSmeared");
1570     snprintf(histotitle,200,"Simulated E_{T} for PID smearing");
1571     snprintf(ytitle,50,"Number of events");
1572     snprintf(xtitle,50,"p, K, p E_{T}");
1573     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1574
1575     //======================================================================
1576
1577     snprintf(histoname,200,"SimPiKPEtMinusSimPIDSmearedNoID");
1578     snprintf(histotitle,200,"Simulated (true-smeared)/true for PID smearing No ID");
1579     snprintf(ytitle,50,"(true-smeared)/true");
1580     snprintf(xtitle,50,"true p, K, p E_{T}");
1581     CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1582     snprintf(histoname,200,"SimPiKPEtPIDSmearedNoID");
1583     snprintf(histotitle,200,"Simulated E_{T} for PID smearing No ID");
1584     snprintf(ytitle,50,"Number of events");
1585     snprintf(xtitle,50,"p, K, p E_{T}");
1586     CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1587   }
1588   delete sTPC;
1589   delete sITS;
1590   delete sTPCpt;
1591   delete sITSpt;
1592   delete sPID;
1593   delete sNoPID;
1594   delete sNoPIDString;
1595   delete sHadEt;
1596   delete sTotEt;
1597   delete sTotEtString;
1598   delete sHadEtString;
1599   delete sFull;
1600   delete sEMCAL;
1601   delete sPHOS;
1602   CreateIntHisto1D("NEvents","Number of events","number of events","Number of events",1,0,1);
1603
1604 }
1605