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