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