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