1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies, charged hadrons
3 // Base class for MC analysis
7 //Created by Christine Nattrass, Rebecca Scott, Irakli Martashvili
8 //University of Tennessee at Knoxville
9 //_________________________________________________________________________
10 #include "AliAnalysisHadEtMonteCarlo.h"
11 #include "AliAnalysisEtCuts.h"
14 #include "AliMCEvent.h"
15 #include "AliESDEvent.h"
16 #include "AliESDtrackCuts.h"
17 #include "AliESDpid.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"
27 #include "AliAnalysisEtCommon.h"
31 ClassImp(AliAnalysisHadEtMonteCarlo);
34 Int_t AliAnalysisHadEtMonteCarlo::fgNumSmearWidths = 4;
35 Float_t AliAnalysisHadEtMonteCarlo::fgSmearWidths[4] = {0.005,0.006,0.007,0.008};
37 AliAnalysisHadEtMonteCarlo::AliAnalysisHadEtMonteCarlo():AliAnalysisHadEt()
41 ,fInvestigateSmearing(0)
47 ,fBaryonEnhancement(0)
51 AliAnalysisHadEtMonteCarlo::~AliAnalysisHadEtMonteCarlo(){//destructor
52 if(fPtSmearer) delete fPtSmearer;
55 void AliAnalysisHadEtMonteCarlo::ResetEventValues(){//resetting event variables
56 AliAnalysisHadEt::ResetEventValues();
61 Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev,AliVEvent* ev2)
62 { // analyse MC and real event info
63 FillHisto1D("NEvents",0.5,1);
66 AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
67 AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev2);
68 AliStack *stack = mcEvent->Stack();
71 AliESDpid *pID = new AliESDpid();
73 //=============================================
75 //Roughly following $ALICE_ROOT/PWG0/dNdEta/AlidNdEtaCorrectionTask
77 //=============================================TPC&&ITS=============================================
78 TString *strTPC = new TString("TPC");
79 TString *strITS = new TString("ITS");
80 TString *strTPCITS = new TString("TPCITS");
82 if(fRequireITSHits) lastcutset = 2;
83 for(Int_t cutset=0;cutset<=lastcutset;cutset++){
89 list = fEsdtrackCutsTPC->GetAcceptedTracks(realEvent);
93 list = fEsdtrackCutsITS->GetAcceptedTracks(realEvent);
97 list = fEsdtrackCutsITSTPC->GetAcceptedTracks(realEvent);
100 cerr<<"Error: cannot fill histograms!"<<endl;
103 Int_t nGoodTracks = list->GetEntries();
104 for (Int_t iTrack = 0; iTrack < nGoodTracks; iTrack++)
106 AliESDtrack *track = dynamic_cast<AliESDtrack*> (list->At(iTrack));
109 Printf("ERROR: Could not get track %d", iTrack);
113 Float_t nSigmaPion,nSigmaProton,nSigmaKaon,nSigmaElectron;
114 pID->MakeTPCPID(track);
115 pID->MakeITSPID(track);
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));
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));
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);
133 bool unidentified = (!isProton && !isKaon && !isElectron);
134 Float_t dEdx = track->GetTPCsignal();
135 if(cutset==1) dEdx = track->GetITSsignal();
137 FillHisto2D(Form("dEdxAll%s",cutName->Data()),track->P(),dEdx,1.0);
139 UInt_t label = (UInt_t)TMath::Abs(track->GetLabel());
140 TParticle *simPart = stack->Particle(label);
142 Printf("no MC particle\n");
146 if(stack->IsPhysicalPrimary(label)){
147 if (TMath::Abs(simPart->Eta()) < fCuts->GetCommonEtaCut()){
148 Int_t pdgCode = simPart->GetPDG(0)->PdgCode();
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;
159 //============Charged hadrons===================================
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;
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);
172 if(pdgCode!=fgProtonCode && pdgCode!=fgAntiProtonCode){
173 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),2,mypid,1);
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);}
183 FillHisto2D(Form("dEdxProton%s",cutName->Data()),track->P(),dEdx,1.0);
186 if(pdgCode!=fgKMinusCode && pdgCode!=fgKPlusCode){
187 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),3,mypid,1);
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);
195 if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
196 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),4,mypid,1);
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);
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);
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);
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);
228 FillHisto2D(Form("dEdxUnidentified%s",cutName->Data()),track->P(),dEdx,1.0);
229 FillHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),mypid,1);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
322 float myEt = Et(simPart);
323 FillHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
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());
333 TParticlePDG *pc = mom->GetPDG(0);
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;
344 FillHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),track->Pt(),track->Eta(),myEt*weight);
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;
354 FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),track->Pt(),track->Eta(),myEt*weight);
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);
362 if(pdgCode == fgXiCode){
363 float myEt = Et(simPart);
364 FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
366 if(pdgCode == fgAntiXiCode){
367 float myEt = Et(simPart);
368 FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
370 if(pdgCode == fgOmegaCode){
371 float myEt = Et(simPart);
372 FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
374 if(pdgCode == fgXiCode){
375 float myEt = Et(simPart);
376 FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
379 if(mom->GetFirstMother()>0){
380 TParticle *grandma = stack->Particle(mom->GetFirstMother());
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();
386 if(pdgCodeGrandma == fgXiCode){
387 float myEt = Et(simPart);
388 FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
390 if(pdgCodeGrandma == fgAntiXiCode){
391 float myEt = Et(simPart);
392 FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
394 if(pdgCodeGrandma == fgOmegaCode){
395 float myEt = Et(simPart);
396 FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
398 if(pdgCodeGrandma == fgXiCode){
399 float myEt = Et(simPart);
400 FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
423 Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev)
424 { // analyse MC event
427 // Get us an mc event
428 AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
430 // Let's play with the stack!
431 AliStack *stack = mcEvent->Stack();
433 Int_t nPrim = stack->GetNtrack();
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=================
443 for (Int_t iPart = 0; iPart < nPrim; iPart++)
446 TParticle *part = stack->Particle(iPart);
450 Printf("ERROR: Could not get particle %d", iPart);
454 //TParticlePDG *pc = part->GetPDG(0);
456 // Check if it is a primary particle
457 if (stack->IsPhysicalPrimary(iPart)){//primaries
459 if (TMath::Abs(part->Eta()) < fCuts->GetCommonEtaCut()) {
461 Int_t pdgCode = part->GetPDG(0)->PdgCode();
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);
470 Float_t theta = part->Theta();
472 Float_t momentum = part->P();
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;
482 if(part->Pt()>0.10){fSimPiKPEtPtCutSmearedITS +=1.00645645*myet;}
483 if(part->Pt()>0.15){fSimPiKPEtPtCutSmearedTPC +=1.02000723*myet;}
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;
489 else{//Then it would have been assumed to be a pion
490 fSimPiKPEtPIDSmeared += 1.0085942*Et(momentum,theta,fgPiPlusCode,charge);
495 //============Charged hadrons===================================
496 if(pdgCode == fgPiPlusCode){
497 float myEt = Et(part);
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);
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);
517 if(pdgCode == fgPiMinusCode){
518 float myEt = Et(part);
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);
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);
536 if(pdgCode == fgKPlusCode){
537 float myEt = Et(part);
538 float myEtPi = Et(part,fgPionMass);
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);
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);
557 if(pdgCode == fgKMinusCode){
558 float myEt = Et(part);
559 float myEtPi = Et(part,fgPionMass);
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);
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);
578 if(pdgCode == fgProtonCode){
579 float myEt = Et(part);
580 float myEtPi = Et(part,fgPionMass);
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);
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);
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);
605 if(pdgCode == fgAntiProtonCode){
606 float myEt = Et(part);
607 float myEtPi = Et(part,fgPionMass);
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);
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);
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);
632 //============Other hadrons===================================
634 if(pdgCode == fgNeutronCode){
635 float myEt = Et(part);
638 FillHisto2D("EtSimulatedNeutron",part->Pt(),part->Eta(),myEt);
639 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
642 if(pdgCode == fgAntiNeutronCode){
643 float myEt = Et(part);
646 FillHisto2D("EtSimulatedAntiNeutron",part->Pt(),part->Eta(),myEt);
647 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
650 if(pdgCode == fgLambdaCode){
651 float myEt = Et(part);
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;
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);
669 if(daughter->GetPDG(0)){
670 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
671 if(daughtercode==fgPiMinusCode || daughtercode==fgProtonCode){
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;
679 //cout<<"Lambda daughter is a "<<daughter->GetName()<<endl;
685 if(pdgCode == fgAntiLambdaCode){
686 float myEt = Et(part);
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;
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);
703 if(daughter->GetPDG(0)){
704 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
705 if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode){
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;
713 //cout<<"AntiLambda daughter is a "<<daughter->GetName()<<endl;
719 if(pdgCode == fgK0SCode){
720 float myEt = Et(part);
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);
733 if(daughter->GetPDG(0)){
735 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
736 if(daughtercode==fgPiMinusCode || daughtercode==fgPiPlusCode){
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;
744 //cout<<"K0S daughter is a "<<daughter->GetName()<<endl;
750 if(pdgCode == fgK0LCode){
751 float myEt = Et(part);
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);
760 if(pdgCode == fgOmegaCode){
761 float myEt = Et(part);
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);
772 if(daughter->GetPDG(0)){
774 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
775 if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgKMinusCode){
777 FillHisto2D("EtSimulatedOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
778 //cout<<"Omega daughter is a "<<daughter->GetName()<<endl;
782 //cout<<"Omega daughter is a "<<daughter->GetName()<<endl;
788 if(pdgCode == fgAntiOmegaCode){
789 float myEt = Et(part);
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);
800 if(daughter->GetPDG(0)){
801 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
802 if(daughtercode==fgPiMinusCode || daughtercode==fgAntiProtonCode || daughtercode==fgKPlusCode){
804 FillHisto2D("EtSimulatedAntiOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
805 //cout<<"AntiOmega daughter is a "<<daughter->GetName()<<endl;
809 //cout<<"AntiOmega daughter is a "<<daughter->GetName()<<endl;
815 //There are two codes for Sigmas
816 if(pdgCode == fgSigmaCode || pdgCode == -3222){
817 float myEt = Et(part);
820 FillHisto2D("EtSimulatedSigma",part->Pt(),part->Eta(),myEt);
821 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
824 if(pdgCode == fgAntiSigmaCode || pdgCode == 3222){
825 float myEt = Et(part);
828 FillHisto2D("EtSimulatedAntiSigma",part->Pt(),part->Eta(),myEt);
829 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
832 if(pdgCode == fgXiCode){
833 float myEt = Et(part);
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);
845 if(daughter->GetPDG(0)){
847 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
848 if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgPiMinusCode){
850 FillHisto2D("EtSimulatedXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
851 //cout<<"Xi daughter is a "<<daughter->GetName()<<endl;
855 //cout<<"Xi daughter is a "<<daughter->GetName()<<endl;
861 if(pdgCode == fgAntiXiCode){
862 float myEt = Et(part);
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);
873 if(daughter->GetPDG(0)){
874 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
875 if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode || daughtercode==fgPiMinusCode){
877 FillHisto2D("EtSimulatedAntiXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
878 //cout<<"AntiXi daughter is a "<<daughter->GetName()<<endl;
882 //cout<<"AntiXi daughter is a "<<daughter->GetName()<<endl;
888 if(pdgCode == fgXi0Code){
889 float myEt = Et(part);
892 FillHisto2D("EtSimulatedXi0",part->Pt(),part->Eta(),myEt);
893 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
896 if(pdgCode == fgAntiXi0Code){
897 float myEt = Et(part);
900 FillHisto2D("EtSimulatedAntiXi0",part->Pt(),part->Eta(),myEt);
901 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
904 //============electrons===================================
906 if(pdgCode == fgEPlusCode){
907 float myEt = Et(part);
909 FillHisto2D("EtSimulatedEPlus",part->Pt(),part->Eta(),myEt);
912 if(pdgCode == fgEMinusCode){
913 float myEt = Et(part);
915 FillHisto2D("EtSimulatedEMinus",part->Pt(),part->Eta(),myEt);
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);
927 FillHisto2D("EtSimulatedEta",mom->Pt(),mom->Eta(),myEt);
930 if(pdgCodeMom == fgPi0Code){
931 float myEt = Et(part);
933 FillHisto2D("EtSimulatedPi0",mom->Pt(),mom->Eta(),myEt);
936 if(pdgCodeMom == fgOmega0Code){
937 float myEt = Et(part);
939 FillHisto2D("EtSimulatedOmega0",mom->Pt(),mom->Eta(),myEt);
943 float myEt = Et(part);
945 FillHisto2D("EtSimulatedGamma",part->Pt(),part->Eta(),myEt);
949 if(pdgCode == fgEtaCode){
950 float myEt = Et(part);
952 FillHisto2D("EtSimulatedEta",part->Pt(),part->Eta(),myEt);
955 if(pdgCode == fgPi0Code){
956 float myEt = Et(part);
958 FillHisto2D("EtSimulatedPi0",part->Pt(),part->Eta(),myEt);
961 if(pdgCode == fgOmega0Code){
962 float myEt = Et(part);
964 FillHisto2D("EtSimulatedOmega0",part->Pt(),part->Eta(),myEt);
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;
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);
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);
999 void AliAnalysisHadEtMonteCarlo::Init()
1001 AliAnalysisHadEt::Init();
1002 if(!fPtSmearer) fPtSmearer = new TRandom();
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}");
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}");
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");
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");
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");
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");
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");
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++){
1089 Float_t maxPtdEdx = 10;
1090 Float_t mindEdx = 35;
1091 Float_t maxdEdx = 150.0;
1102 cutName = strTPCITS;
1105 cerr<<"Error: cannot make histograms!"<<endl;
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}");
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");
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");
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");
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");
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}");
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}");
1160 CreateEtaPtHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
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");
1172 CreateEtaPtHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),"Reconstructed E_{T} from e^{+}");
1173 CreateEtaPtHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),"Reconstructed E_{T} from e^{-}");
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");
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);
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];
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");
1225 for(int tpc = 0;tpc<lastcutset;tpc++){
1228 if(tpc==1) {detector = sTPC; ptstring = sTPCpt;}
1229 else{detector = sITS; ptstring = sITSpt;}
1230 for(int hadet = 0;hadet<2;hadet++){
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;
1246 acceptance = sEMCAL;
1256 for(int pid = 0;pid<2;pid++){
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);
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);
1283 if(fInvestigateSmearing){
1285 //======================================================================
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);
1298 //======================================================================
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);
1311 //======================================================================
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);
1325 //======================================================================
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);
1338 //======================================================================
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);
1351 //======================================================================
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);
1370 delete sNoPIDString;
1373 delete sTotEtString;
1374 delete sHadEtString;
1378 CreateIntHisto1D("NEvents","Number of events","number of events","Number of events",1,0,1);