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 "AliAnalysisHadEtCorrections.h"
25 #include "AliAnalysisEtCuts.h"
28 #include "AliAnalysisEtCommon.h"
29 #include "AliCentrality.h"
31 #include "AliPWG0Helper.h"
32 //class AliPWG0Helper;
33 //#include "$ALICE_ROOT/PWG0/AliPWG0Helper.h"
37 ClassImp(AliAnalysisHadEtMonteCarlo);
40 Int_t AliAnalysisHadEtMonteCarlo::fgNumSmearWidths = 4;
41 Float_t AliAnalysisHadEtMonteCarlo::fgSmearWidths[4] = {0.005,0.006,0.007,0.008};
43 AliAnalysisHadEtMonteCarlo::AliAnalysisHadEtMonteCarlo():AliAnalysisHadEt()
47 ,fSimPiKPEtShouldBeReco(0)
48 ,fSimPiKPEtShouldBeRecoPi(0)
49 ,fSimPiKPEtShouldBeRecoK(0)
50 ,fSimPiKPEtShouldBeRecoP(0)
51 ,fInvestigateSmearing(0)
57 ,fBaryonEnhancement(0)
63 AliAnalysisHadEtMonteCarlo::~AliAnalysisHadEtMonteCarlo(){//destructor
64 if(fPtSmearer) delete fPtSmearer;
67 void AliAnalysisHadEtMonteCarlo::ResetEventValues(){//resetting event variables
68 AliAnalysisHadEt::ResetEventValues();
73 Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev,AliVEvent* ev2)
74 { // analyse MC and real event info
75 FillHisto1D("NEvents",0.5,1);
77 AliFatal("ERROR: Event does not exist");
80 AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
81 AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev2);
82 if(!mcEvent || !realEvent){
83 AliFatal("ERROR: mcEvent or realEvent does not exist");
86 AliStack *stack = mcEvent->Stack();
88 fGoodEvent = kTRUE;//for p+p collisions if we made it this far we have a good event
89 if(fDataSet==20100){//If this is Pb+Pb
90 AliCentrality *centrality = realEvent->GetCentrality();
91 if(fNCentBins<21) fCentBin= centrality->GetCentralityClass10(fCentralityMethod);
92 else{ fCentBin= centrality->GetCentralityClass5(fCentralityMethod);}
93 if(fCentBin ==-1) fGoodEvent = kFALSE;//but for Pb+Pb events we don't want to count events where we did not find a centrality
98 AliESDpid *pID = new AliESDpid();//This is identified as a memory leak in valgrind but I delete this object so I think it may be a problem with AliESDpid.
100 //=============================================
102 //Roughly following $ALICE_ROOT/PWG0/dNdEta/AlidNdEtaCorrectionTask
104 //=============================================TPC&&ITS=============================================
105 //for investigating momentum smearing
106 Float_t pTtotalReco = 0.0;
107 Float_t pTtotalSim = 0.0;
108 Float_t eTtotalSimAll = 0.0;
109 Float_t eTtotalReco = 0.0;
110 Float_t eTtotalRecoEffCorr = 0.0;
111 Float_t eTtotalRecoEffBkgdCorr = 0.0;
112 Float_t eTtotalRecoBkgdCorr = 0.0;
113 Float_t eTtotalRecoUncorr = 0.0;
114 Float_t eTtotalRecoTotalUncorr = 0.0;
115 Float_t eTtotalRecoEffCorrPi = 0.0;
116 Float_t eTtotalRecoEffCorrK = 0.0;
117 Float_t eTtotalRecoEffCorrP = 0.0;
118 Float_t eTtotalRecoBkgd = 0.0;
119 Float_t eTtotalRecoPIDSmeared = 0.0;
120 Float_t eTtotalAsReconstructed = 0.0;
121 Float_t eTBkgdAsReconstructed = 0.0;
122 Float_t eTtotalAsReconstructedPi = 0.0;
123 Float_t eTtotalAsReconstructedP = 0.0;
124 Float_t eTtotalAsReconstructedK = 0.0;
125 Float_t eTtotalSim = 0.0;
127 TString *strTPC = new TString("TPC");
128 TString *strITS = new TString("ITS");
129 TString *strTPCITS = new TString("TPCITS");
130 Int_t lastcutset = 1;
131 if(fRequireITSHits) lastcutset = 2;
132 for(Int_t cutset=0;cutset<=lastcutset;cutset++){
133 TString *cutName = NULL;
134 TObjArray* list = NULL;
138 list = fEsdtrackCutsTPC->GetAcceptedTracks(realEvent);
142 list = fEsdtrackCutsITS->GetAcceptedTracks(realEvent);
146 list = fEsdtrackCutsITSTPC->GetAcceptedTracks(realEvent);
149 cerr<<"Error: cannot fill histograms!"<<endl;
152 Int_t nGoodTracks = list->GetEntries();
153 for (Int_t iTrack = 0; iTrack < nGoodTracks; iTrack++)
155 AliESDtrack *track = dynamic_cast<AliESDtrack*> (list->At(iTrack));
158 Printf("ERROR: Could not get track %d", iTrack);
162 Float_t nSigmaPion,nSigmaProton,nSigmaKaon,nSigmaElectron;
163 pID->MakeTPCPID(track);
164 pID->MakeITSPID(track);
166 nSigmaPion = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kPion));
167 nSigmaProton = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kProton));
168 nSigmaKaon = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kKaon));
169 nSigmaElectron = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kElectron));
172 nSigmaPion = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kPion));
173 nSigmaProton = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kProton));
174 nSigmaKaon = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kKaon));
175 nSigmaElectron = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kElectron));
177 // bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
178 // bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
179 // bool isKaon = (nSigmaPion>3.0 && nSigmaProton>2.0 && nSigmaKaon<2.0);
180 // bool isProton = (nSigmaPion>3.0 && nSigmaProton<2.0 && nSigmaKaon>2.0);
181 bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
182 bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
183 bool isKaon = (nSigmaPion>3.0 && nSigmaProton>3.0 && nSigmaKaon<3.0 && track->Pt()<0.45);
184 bool isProton = (nSigmaPion>3.0 && nSigmaProton<3.0 && nSigmaKaon>3.0 && track->Pt()<0.9);
186 bool unidentified = (!isProton && !isKaon && !isElectron && !isPion);
187 if(cutset==1){//ITS dE/dx identification requires tighter cuts on the tracks and we don't gain much from that so we won't do it
194 Float_t dEdx = track->GetTPCsignal();
195 if(cutset==1) dEdx = track->GetITSsignal();
197 FillHisto2D(Form("dEdxAll%s",cutName->Data()),track->P(),dEdx,1.0);
199 UInt_t label = (UInt_t)TMath::Abs(track->GetLabel());
200 TParticle *simPart = stack->Particle(label);
202 Printf("no MC particle\n");
206 if(fInvestigateSmearing && cutset==2){
207 //calculates what we would measure for the pi/k/p et with background
208 eTtotalRecoTotalUncorr += Et(simPart);
210 eTtotalRecoEffBkgdCorr += Et(simPart) *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
211 eTtotalRecoBkgdCorr += Et(simPart) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
212 eTtotalRecoTotalUncorr += Et(simPart);
215 eTtotalRecoEffBkgdCorr += Et(simPart) *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
216 eTtotalRecoBkgdCorr += Et(simPart) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
219 eTtotalRecoEffBkgdCorr += Et(simPart) *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
220 eTtotalRecoBkgdCorr += Et(simPart) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
223 eTtotalRecoEffBkgdCorr += Et(simPart) *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
224 eTtotalRecoBkgdCorr += Et(simPart) * fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
226 //for calculating et as it's done in the reconstructed data
227 Float_t corrBkgd=0.0;
228 Float_t corrNotID=0.0;
229 Float_t corrNoID=0.0;// = fHadEtReco->GetCorrections()->GetNotIDCorrectionNoPID(track->Pt());
230 Float_t corrEff = 0.0;
231 Float_t corrEffNoID = 0.0;
234 corrBkgd = fHadEtReco->GetCorrections()->GetBackgroundCorrectionTPC(track->Pt());
235 corrEffNoID = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
236 corrNotID = fHadEtReco->GetCorrections()->GetNotIDConstCorrectionTPC();
237 corrNoID = fHadEtReco->GetCorrections()->GetNotIDConstCorrectionTPCNoID();
240 corrBkgd = fHadEtReco->GetCorrections()->GetBackgroundCorrectionITS(track->Pt());
241 corrEffNoID = fHadEtReco->GetCorrections()->GetITSEfficiencyCorrectionHadron(track->Pt(),fCentBin);
242 corrNotID = fHadEtReco->GetCorrections()->GetNotIDConstCorrectionITS();
243 corrNoID = fHadEtReco->GetCorrections()->GetNotIDConstCorrectionITSNoID();
246 bool isprimary = stack->IsPhysicalPrimary(label);
247 if (TMath::Abs(track->Eta()) < fHadEtReco->GetCorrections()->GetEtaCut()){
249 et = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
250 corrEff = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin);
252 eTtotalAsReconstructed += et*corrBkgd*corrEff*corrNotID;
255 eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
259 et = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
260 corrEff = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin);
262 eTtotalAsReconstructed += et*corrBkgd*corrEff*corrNotID;
265 eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
269 et = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
270 corrEff = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin);
272 eTtotalAsReconstructed += et*corrBkgd*corrEff*corrNotID;
275 eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
279 et = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
280 corrEff = fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
282 eTtotalAsReconstructed += et*corrBkgd*corrEff*corrNotID;
285 eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
288 if(!isPion && !isProton && !isKaon && !unidentified){
289 eTBkgdAsReconstructed += et*corrBkgd*corrEff*corrNotID;
291 Int_t pdgCode = simPart->GetPDG(0)->PdgCode();
292 if(pdgCode==fgPiPlusCode ||pdgCode==fgPiMinusCode){eTtotalAsReconstructedPi+=et*corrBkgd*corrEff*corrNotID;}
293 if(pdgCode==fgKPlusCode ||pdgCode==fgKMinusCode){eTtotalAsReconstructedK+=et*corrBkgd*corrEff*corrNotID;}
294 if(pdgCode==fgProtonCode ||pdgCode==fgAntiProtonCode){eTtotalAsReconstructedP+=et*corrBkgd*corrEff*corrNotID;}
298 if(cutset==2) eTtotalSimAll += Et(simPart);
299 if(stack->IsPhysicalPrimary(label)){
300 if (TMath::Abs(simPart->Eta()) < fHadEtReco->GetCorrections()->GetEtaCut()){
301 Int_t pdgCode = simPart->GetPDG(0)->PdgCode();
303 if(pdgCode==AliAnalysisHadEt::fgPiPlusCode) mypid = 1;
304 if(pdgCode==fgProtonCode) mypid = 2;
305 if(pdgCode==fgKPlusCode) mypid = 3;
306 if(pdgCode==fgEPlusCode) mypid = 4;
307 if(pdgCode==fgPiMinusCode) mypid = 1;
308 if(pdgCode==fgAntiProtonCode) mypid = 2;
309 if(pdgCode==fgKMinusCode) mypid = 3;
310 if(pdgCode==fgEMinusCode) mypid = 4;
312 //for smearing investigations
313 if(fInvestigateSmearing && cutset==2){
314 pTtotalReco += simPart->Pt();
315 pTtotalSim += track->Pt();
316 eTtotalReco += Et(track->P(),track->Theta(),pdgCode,track->Charge());
317 eTtotalSim += Et(simPart);
320 //============Charged hadrons===================================
321 float myefficiencyCorrEt = 0.0;
324 if(pdgCode!=fgPiPlusCode && pdgCode!=fgPiMinusCode){
325 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),1,mypid,1);
327 float myEt = Et(simPart);
328 if(fInvestigateSmearing && cutset==2){
329 eTtotalRecoPIDSmeared +=myEt;
330 eTtotalRecoEffCorr += myEt *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin);
331 myefficiencyCorrEt = myEt * fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionPion(track->Pt(),fCentBin) ;
333 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedPiPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
334 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedPiMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
335 FillHisto2D(Form("dEdxPion%s",cutName->Data()),track->P(),dEdx,1.0);
338 if(pdgCode!=fgProtonCode && pdgCode!=fgAntiProtonCode){
339 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),2,mypid,1);
341 float myEt = Et(simPart);
342 if(fInvestigateSmearing && cutset==2){
343 eTtotalRecoPIDSmeared +=myEt;
344 eTtotalRecoEffCorr += myEt *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin);
345 myefficiencyCorrEt = myEt * fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionProton(track->Pt(),fCentBin);
347 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedProton",cutName->Data()),track->Pt(),track->Eta(),myEt);}
348 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedAntiProton",cutName->Data()),track->Pt(),track->Eta(),myEt);}
349 if(fBaryonEnhancement){
350 myEt = myEt*ProtonBaryonEnhancement(track->Pt());
351 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);}
352 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedAntiProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);}
354 FillHisto2D(Form("dEdxProton%s",cutName->Data()),track->P(),dEdx,1.0);
357 if(pdgCode!=fgKMinusCode && pdgCode!=fgKPlusCode){
358 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),3,mypid,1);
360 float myEt = Et(simPart);
361 if(fInvestigateSmearing && cutset==2){
362 eTtotalRecoPIDSmeared +=myEt;
363 eTtotalRecoEffCorr += myEt *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin);
364 myefficiencyCorrEt = myEt * fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionKaon(track->Pt(),fCentBin);
366 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedKPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
367 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedKMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
368 FillHisto2D(Form("dEdxKaon%s",cutName->Data()),track->P(),dEdx,1.0);
371 if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
372 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),4,mypid,1);
374 float myEt = Et(simPart);
375 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedEPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
376 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedEMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
377 FillHisto2D(Form("dEdxElectron%s",cutName->Data()),track->P(),dEdx,1.0);
380 if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
381 float myEtPi = Et(simPart,fgPionMass);
382 float myEtP = Et(simPart,fgProtonMass);
383 float myEtK = Et(simPart,fgKaonMass);
384 float myEt = Et(simPart);
385 if(fInvestigateSmearing && cutset==2){
386 eTtotalRecoPIDSmeared +=myEtPi;
387 eTtotalRecoEffCorr += myEt *fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
388 myefficiencyCorrEt = myEt * fHadEtReco->GetCorrections()->GetTPCEfficiencyCorrectionHadron(track->Pt(),fCentBin);
390 FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
391 FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
392 FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
393 FillHisto2D(Form("EtReconstructed%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),myEt);
394 FillHisto2D(Form("EtNReconstructed%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),1.0);
395 if(pdgCode == fgPiPlusCode||pdgCode == fgPiMinusCode){
396 FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
397 FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
398 FillHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
399 FillHisto2D(Form("EtReconstructed%sUnidentifiedPion",cutName->Data()),track->Pt(),track->Eta(),myEt);
400 FillHisto2D(Form("EtNReconstructed%sUnidentifiedPion",cutName->Data()),track->Pt(),track->Eta(),1.0);
402 if(pdgCode == fgKPlusCode||pdgCode == fgKMinusCode){
403 FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
404 FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
405 FillHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
406 FillHisto2D(Form("EtReconstructed%sUnidentifiedKaon",cutName->Data()),track->Pt(),track->Eta(),myEt);
407 FillHisto2D(Form("EtNReconstructed%sUnidentifiedKaon",cutName->Data()),track->Pt(),track->Eta(),1.0);
409 if(pdgCode == fgProtonCode||pdgCode == fgAntiProtonCode){
410 FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
411 FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingProton",cutName->Data()),track->Pt(),track->Eta(),myEtP);
412 FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),track->Pt(),track->Eta(),myEtK);
413 FillHisto2D(Form("EtReconstructed%sUnidentifiedProton",cutName->Data()),track->Pt(),track->Eta(),myEt);
414 FillHisto2D(Form("EtNReconstructed%sUnidentifiedProton",cutName->Data()),track->Pt(),track->Eta(),1.0);
415 if(fBaryonEnhancement){
416 myEt = myEt*ProtonBaryonEnhancement(track->Pt());
417 FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPionEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
418 FillHisto2D(Form("EtReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),myEt);
419 FillHisto2D(Form("EtNReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),track->Pt(),track->Eta(),1.0);
423 FillHisto2D(Form("dEdxUnidentified%s",cutName->Data()),track->P(),dEdx,1.0);
424 FillHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),mypid,1);
427 float myEtSim = Et(simPart);
428 float myEtReco = 0.0;
429 if(pdgCode == fgPiPlusCode){
430 float myEt = Et(simPart);
431 float myEtP = Et(simPart,fgProtonMass);
432 float myEtK = Et(simPart,fgKaonMass);
433 myEtReco = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
434 float pT = simPart->Pt();
435 float eta = simPart->Eta();
436 if(fInvestigateSmearing && cutset==2){
437 eTtotalRecoEffCorrPi+=myefficiencyCorrEt;
438 eTtotalRecoUncorr +=myEt;
440 if(fUseRecoPt){//Then we switch the pT and the Et
445 FillHisto2D(Form("EtReconstructed%sPiPlus",cutName->Data()),pT,eta,myEt);
446 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
447 FillHisto2D(Form("EtNReconstructed%sPiPlus",cutName->Data()),pT,eta,myEt);
448 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
449 if(fCentBin>=0){//if a centrality bin was defined
450 FillHisto2D(Form("EtNReconstructed%sPiPlusCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
451 FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
453 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEt);
454 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEtP);
455 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEtK);
456 FillHisto2D(Form("EtReconstructed%sPiPlusAssumingKaon",cutName->Data()),pT,eta,myEtK);
457 FillHisto2D(Form("EtReconstructed%sPiPlusAssumingProton",cutName->Data()),pT,eta,myEtP);
460 if(pdgCode == fgPiMinusCode){
461 float myEt = Et(simPart);
462 float myEtP = Et(simPart,fgProtonMass);
463 float myEtK = Et(simPart,fgKaonMass);
464 myEtReco = Et(track->P(),track->Theta(),fgPiMinusCode,track->Charge());
465 float pT = simPart->Pt();
466 float eta = simPart->Eta();
467 if(fInvestigateSmearing && cutset==2){
468 eTtotalRecoEffCorrPi+=myefficiencyCorrEt;
469 eTtotalRecoUncorr +=myEt;
471 if(fUseRecoPt){//Then we switch the pT and the Et
476 FillHisto2D(Form("EtReconstructed%sPiMinus",cutName->Data()),pT,eta,myEt);
477 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
478 FillHisto2D(Form("EtNReconstructed%sPiMinus",cutName->Data()),pT,eta,myEt);
479 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
480 if(fCentBin>=0){//if a centrality bin was defined
481 FillHisto2D(Form("EtNReconstructed%sPiMinusCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
482 FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
484 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEt);
485 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEtP);
486 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEtK);
487 FillHisto2D(Form("EtReconstructed%sPiMinusAssumingKaon",cutName->Data()),pT,eta,myEtK);
488 FillHisto2D(Form("EtReconstructed%sPiMinusAssumingProton",cutName->Data()),pT,eta,myEtP);
491 if(pdgCode == fgKPlusCode){
492 float myEt = Et(simPart);
493 float myEtPi = Et(simPart,fgPionMass);
494 float myEtP = Et(simPart,fgProtonMass);
495 myEtReco = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
496 float pT = simPart->Pt();
497 float eta = simPart->Eta();
498 if(fUseRecoPt){//Then we switch the pT and the Et
503 if(fInvestigateSmearing && cutset==2){
504 eTtotalRecoEffCorrK+=myefficiencyCorrEt;
505 eTtotalRecoUncorr +=myEt;
507 FillHisto2D(Form("EtReconstructed%sKPlus",cutName->Data()),pT,eta,myEt);
508 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
509 FillHisto2D(Form("EtNReconstructed%sKPlus",cutName->Data()),pT,eta,myEt);
510 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
511 if(fCentBin>=0){//if a centrality bin was defined
512 FillHisto2D(Form("EtNReconstructed%sKPlusCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
513 FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
515 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEtPi);
516 FillHisto2D(Form("EtReconstructed%sKPlusAssumingPion",cutName->Data()),pT,eta,myEtPi);
517 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEt);
518 FillHisto2D(Form("EtReconstructed%sKPlusAssumingKaon",cutName->Data()),pT,eta,myEt);
519 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEtP);
520 FillHisto2D(Form("EtReconstructed%sKPlusAssumingProton",cutName->Data()),pT,eta,myEtP);
523 if(pdgCode == fgKMinusCode){
524 float myEt = Et(simPart);
525 float myEtPi = Et(simPart,fgPionMass);
526 float myEtP = Et(simPart,fgProtonMass);
527 myEtReco = Et(track->P(),track->Theta(),fgKMinusCode,track->Charge());
528 float pT = simPart->Pt();
529 float eta = simPart->Eta();
530 if(fUseRecoPt){//Then we switch the pT and the Et
535 if(fInvestigateSmearing && cutset==2){
536 eTtotalRecoEffCorrK+=myefficiencyCorrEt;
537 eTtotalRecoUncorr +=myEt;
539 FillHisto2D(Form("EtReconstructed%sKMinus",cutName->Data()),pT,eta,myEt);
540 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
541 FillHisto2D(Form("EtNReconstructed%sKMinus",cutName->Data()),pT,eta,myEt);
542 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
543 if(fCentBin>=0){//if a centrality bin was defined
544 FillHisto2D(Form("EtNReconstructed%sKMinusCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
545 FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
547 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEtPi);
548 FillHisto2D(Form("EtReconstructed%sKMinusAssumingPion",cutName->Data()),pT,eta,myEtPi);
549 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEt);
550 FillHisto2D(Form("EtReconstructed%sKMinusAssumingKaon",cutName->Data()),pT,eta,myEt);
551 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEtP);
552 FillHisto2D(Form("EtReconstructed%sKMinusAssumingProton",cutName->Data()),pT,eta,myEtP);
555 if(pdgCode == fgProtonCode){
556 float myEt = Et(simPart);
557 float myEtPi = Et(simPart,fgPionMass);
558 float myEtK = Et(simPart,fgKaonMass);
559 myEtReco = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
560 float pT = simPart->Pt();
561 float eta = simPart->Eta();
562 if(fUseRecoPt){//Then we switch the pT and the Et
567 if(fInvestigateSmearing && cutset==2){
568 eTtotalRecoEffCorrP+=myefficiencyCorrEt;
569 eTtotalRecoUncorr +=myEt;
571 FillHisto2D(Form("EtReconstructed%sProton",cutName->Data()),pT,eta,myEt);
572 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
573 FillHisto2D(Form("EtNReconstructed%sProton",cutName->Data()),pT,eta,myEt);
574 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
575 if(fCentBin>=0){//if a centrality bin was defined
576 FillHisto2D(Form("EtNReconstructed%sProtonCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
577 FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
579 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEtPi);
580 FillHisto2D(Form("EtReconstructed%sProtonAssumingPion",cutName->Data()),pT,eta,myEtPi);
581 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEtK);
582 FillHisto2D(Form("EtReconstructed%sProtonAssumingKaon",cutName->Data()),pT,eta,myEtK);
583 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEt);
584 FillHisto2D(Form("EtReconstructed%sProtonAssumingProton",cutName->Data()),pT,eta,myEt);
587 if(fBaryonEnhancement){
588 float enhancement = ProtonBaryonEnhancement(track->Pt());
589 FillHisto2D(Form("EtReconstructed%sProtonEnhanced",cutName->Data()),pT,eta,myEt*enhancement);
590 FillHisto2D(Form("EtNReconstructed%sProtonEnhanced",cutName->Data()),pT,eta,myEt*enhancement);
591 FillHisto2D(Form("EtReconstructed%sProtonAssumingPionEnhanced",cutName->Data()),pT,eta,myEtPi*enhancement);
595 if(pdgCode == fgAntiProtonCode){
596 float myEt = Et(simPart);
597 float myEtPi = Et(simPart,fgPionMass);
598 float myEtK = Et(simPart,fgKaonMass);
599 myEtReco = Et(track->P(),track->Theta(),fgAntiProtonCode,track->Charge());
600 float pT = simPart->Pt();
601 float eta = simPart->Eta();
602 if(fUseRecoPt){//Then we switch the pT and the Et
607 if(fInvestigateSmearing && cutset==2){
608 eTtotalRecoEffCorrP+=myefficiencyCorrEt;
609 eTtotalRecoUncorr +=myEt;
611 FillHisto2D(Form("EtReconstructed%sAntiProton",cutName->Data()),pT,eta,myEt);
612 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
613 FillHisto2D(Form("EtNReconstructed%sAntiProton",cutName->Data()),pT,eta,myEt);
614 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),pT,eta,myEt);
615 if(fCentBin>=0){//if a centrality bin was defined
616 FillHisto2D(Form("EtNReconstructed%sAntiProtonCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
617 FillHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),fCentBin),pT,eta,myEt);
619 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),pT,eta,myEtPi);
620 FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingPion",cutName->Data()),pT,eta,myEtPi);
621 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),pT,eta,myEtK);
622 FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingKaon",cutName->Data()),pT,eta,myEtK);
623 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),pT,eta,myEt);
624 FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingProton",cutName->Data()),pT,eta,myEt);
626 if(fBaryonEnhancement){
627 float enhancement = ProtonBaryonEnhancement(track->Pt());
628 FillHisto2D(Form("EtReconstructed%sAntiProtonEnhanced",cutName->Data()),pT,eta,myEt*enhancement);
629 FillHisto2D(Form("EtNReconstructed%sAntiProtonEnhanced",cutName->Data()),pT,eta,myEt*enhancement);
630 FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingPionEnhanced",cutName->Data()),pT,eta,myEtPi*enhancement);
633 if(pdgCode == fgEPlusCode){
634 float myEt = Et(simPart);
635 FillHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
636 if(!isElectron || unidentified){
637 float myEtPi = Et(simPart,fgPionMass);
638 FillHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
642 if(pdgCode == fgEMinusCode){
643 if(!isElectron || unidentified){
644 float myEtPi = Et(simPart,fgPionMass);
645 FillHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
647 float myEt = Et(simPart);
648 FillHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
651 if(myEtReco>0.0){FillHisto2D(Form("ETresolution%s",cutName->Data()),myEtReco,(myEtSim-myEtReco)/myEtReco,1.0);}
652 if(track->Pt()>0.0){FillHisto2D(Form("pTresolution%s",cutName->Data()),track->Pt(),(simPart->Pt() - track->Pt())/track->Pt(),1.0);}
653 if(track->P()>0.0){FillHisto2D(Form("presolution%s",cutName->Data()),track->P(),(simPart->P() - track->P())/track->P(),1.0);}
654 FillHisto1D(Form("pTsim%s",cutName->Data()),simPart->Pt(),1.0);
655 FillHisto1D(Form("pTrec%s",cutName->Data()),track->Pt(),1.0);
657 FillHisto1D(Form("pTsim%sCB%i",cutName->Data(),fCentBin),simPart->Pt(),1.0);
658 FillHisto1D(Form("pTrec%sCB%i",cutName->Data(),fCentBin),track->Pt(),1.0);
663 else{//not a primary - we're after V0 daughters!
664 bool written = false;
665 //now, what is the et we would measure for this? Since this is the relevant et.
667 if(isPion || unidentified) myrecoEt = Et(track->P(),track->Theta(),fgPiPlusCode,track->Charge());
668 if(isProton) myrecoEt = Et(track->P(),track->Theta(),fgProtonCode,track->Charge());
669 if(isKaon) myrecoEt = Et(track->P(),track->Theta(),fgKPlusCode,track->Charge());
670 if (TMath::Abs(simPart->Eta()) < fHadEtReco->GetCorrections()->GetEtaCut()){
671 TParticle *mom = stack->Particle(simPart->GetFirstMother());
673 TParticlePDG *pc = mom->GetPDG(0);
675 Int_t pdgCode = mom->GetPDG(0)->PdgCode();
676 if(pdgCode == fgLambdaCode){
678 float myEt = Et(simPart);
679 float pT = simPart->Pt();
680 float eta = simPart->Eta();
681 eTtotalRecoBkgd+=myEt;
682 if(fUseRecoPt){//Then we switch the pT and the Et
683 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
687 FillHisto2D(Form("EtReconstructed%sLambdaDaughters",cutName->Data()),pT,eta,myrecoEt);
688 Float_t weight = LambdaWeight(mom->Pt());
689 if(fBaryonEnhancement){
690 float enhancement = ProtonBaryonEnhancement(track->Pt());
691 weight = weight*enhancement;
693 FillHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),pT,eta,myrecoEt*weight);
695 if(pdgCode == fgAntiLambdaCode){
697 float myEt = Et(simPart);
698 float pT = simPart->Pt();
699 float eta = simPart->Eta();
700 eTtotalRecoBkgd+=myEt;
701 if(fUseRecoPt){//Then we switch the pT and the Et
702 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
706 FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughters",cutName->Data()),pT,eta,myrecoEt);
707 Float_t weight = AntiLambdaWeight(mom->Pt());
708 if(fBaryonEnhancement){
709 float enhancement = ProtonBaryonEnhancement(track->Pt());
710 weight = weight*enhancement;
712 FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),pT,eta,myrecoEt*weight);
714 if(pdgCode == fgK0SCode || pdgCode == fgK0LCode || pdgCode == fgKPlusCode || pdgCode == fgKMinusCode){//actually get all kaon daughters
716 float myEt = Et(simPart);
717 float pT = simPart->Pt();
718 float eta = simPart->Eta();
719 eTtotalRecoBkgd+=myEt;
720 if(fUseRecoPt){//Then we switch the pT and the Et
721 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
725 FillHisto2D(Form("EtReconstructed%sK0SDaughters",cutName->Data()),pT,eta,myEt);
726 Float_t weight = K0Weight(mom->Pt());
727 FillHisto2D(Form("EtReconstructed%sK0SDaughtersReweighted",cutName->Data()),pT,eta,myrecoEt*weight);
729 if(pdgCode == fgXiCode){
731 float myEt = Et(simPart);
732 float pT = simPart->Pt();
733 float eta = simPart->Eta();
734 eTtotalRecoBkgd+=myEt;
735 if(fUseRecoPt){//Then we switch the pT and the Et
736 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
740 FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),pT,eta,myrecoEt);
742 if(pdgCode == fgAntiXiCode){
744 float myEt = Et(simPart);
745 float pT = simPart->Pt();
746 float eta = simPart->Eta();
747 eTtotalRecoBkgd+=myEt;
748 if(fUseRecoPt){//Then we switch the pT and the Et
749 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
753 FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),pT,eta,myrecoEt);
755 if(pdgCode == fgOmegaCode){
757 float myEt = Et(simPart);
758 float pT = simPart->Pt();
759 float eta = simPart->Eta();
760 eTtotalRecoBkgd+=myEt;
761 if(fUseRecoPt){//Then we switch the pT and the Et
762 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
766 FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),pT,eta,myrecoEt);
768 if(pdgCode == fgXiCode){
770 float myEt = Et(simPart);
771 float pT = simPart->Pt();
772 float eta = simPart->Eta();
773 eTtotalRecoBkgd+=myEt;
774 if(fUseRecoPt){//Then we switch the pT and the Et
775 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
779 FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),pT,eta,myrecoEt);
782 if(mom->GetFirstMother()>0){
783 TParticle *grandma = stack->Particle(mom->GetFirstMother());
785 Int_t pdgCodeMom = mom->GetPDG(0)->PdgCode();
786 if(pdgCodeMom==fgPiPlusCode || pdgCodeMom==fgPiMinusCode || pdgCodeMom==fgProtonCode ||pdgCodeMom==fgAntiProtonCode || pdgCodeMom==fgKPlusCode || pdgCode==fgKMinusCode){
787 Int_t pdgCodeGrandma = grandma->GetPDG(0)->PdgCode();
789 if(pdgCodeGrandma == fgXiCode){
791 float myEt = Et(simPart);
792 float pT = simPart->Pt();
793 float eta = simPart->Eta();
794 eTtotalRecoBkgd+=myEt;
795 if(fUseRecoPt){//Then we switch the pT and the Et
796 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
800 FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),pT,eta,myrecoEt);
802 if(pdgCodeGrandma == fgAntiXiCode){
804 float myEt = Et(simPart);
805 float pT = simPart->Pt();
806 float eta = simPart->Eta();
807 eTtotalRecoBkgd+=myEt;
808 if(fUseRecoPt){//Then we switch the pT and the Et
809 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
813 FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),pT,eta,myrecoEt);
815 if(pdgCodeGrandma == fgOmegaCode){
817 float myEt = Et(simPart);
818 float pT = simPart->Pt();
819 float eta = simPart->Eta();
820 eTtotalRecoBkgd+=myEt;
821 if(fUseRecoPt){//Then we switch the pT and the Et
822 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
826 FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),pT,eta,myrecoEt);
828 if(pdgCodeGrandma == fgXiCode){
830 float myEt = Et(simPart);
831 float pT = simPart->Pt();
832 float eta = simPart->Eta();
833 eTtotalRecoBkgd+=myEt;
834 if(fUseRecoPt){//Then we switch the pT and the Et
835 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
839 FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),pT,eta,myrecoEt);
846 int mycode = simPart->GetPDG(0)->PdgCode();
847 if( (pdgCode == fgGammaCode || pdgCode == fgPi0Code) && (mycode==fgEPlusCode||mycode==fgEMinusCode)){
849 float myEt = Et(simPart);
850 float pT = simPart->Pt();
851 float eta = simPart->Eta();
852 eTtotalRecoBkgd+=myEt;
853 if(fUseRecoPt){//Then we switch the pT and the Et
854 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
858 FillHisto2D(Form("EtReconstructed%sConversionElectrons",cutName->Data()),pT,eta,myrecoEt);
860 if(mycode==fgMuPlusCode || mycode==fgMuMinusCode){
862 float myEt = Et(simPart);
863 float pT = simPart->Pt();
864 float eta = simPart->Eta();
865 eTtotalRecoBkgd+=myEt;
866 if(fUseRecoPt){//Then we switch the pT and the Et
867 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
871 FillHisto2D(Form("EtReconstructed%sSecondaryMuons",cutName->Data()),pT,eta,myrecoEt);
873 if(mycode==fgPiPlusCode || mycode==fgPiMinusCode){
875 float myEt = Et(simPart);
876 float pT = simPart->Pt();
877 float eta = simPart->Eta();
878 eTtotalRecoBkgd+=myEt;
879 if(fUseRecoPt){//Then we switch the pT and the Et
880 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
884 FillHisto2D(Form("EtReconstructed%sSecondaryPions",cutName->Data()),pT,eta,myrecoEt);
886 if(mycode==fgAntiProtonCode || mycode==fgProtonCode){
888 float myEt = Et(simPart);
889 float pT = simPart->Pt();
890 float eta = simPart->Eta();
891 eTtotalRecoBkgd+=myEt;
892 if(fUseRecoPt){//Then we switch the pT and the Et
893 myEt = Et(track->P(),track->Theta(),simPart->GetPDG(0)->PdgCode(),track->Charge());
897 FillHisto2D(Form("EtReconstructed%sSecondaryProtons",cutName->Data()),pT,eta,myrecoEt);
899 //if(!written) cout<<"I was not counted in the background and I am a "<<simPart->GetName()<<" and my mother is a "<<mom->GetName()<<endl;
902 else{cout<<"No particle code!! 657"<<endl;}
904 else{cout<<"No mother particle!! 658"<<endl;}
913 if(fInvestigateSmearing){
914 if(fSimPiKPEtShouldBeReco>0.0) FillHisto2D("SimPiKPEtMinusSimEffCorrRecoOnly",fSimPiKPEtShouldBeReco,(fSimPiKPEtShouldBeReco-eTtotalRecoEffCorr)/fSimPiKPEtShouldBeReco,1.0);
915 if(fSimPiKPEtShouldBeReco>0.0) FillHisto2D("SimPiKPEtMinusSimEffBkgdCorrRecoOnly",fSimPiKPEtShouldBeReco,(fSimPiKPEtShouldBeReco-eTtotalRecoEffBkgdCorr)/fSimPiKPEtShouldBeReco,1.0);
916 if(fSimPiKPEtShouldBeRecoPi>0.0) FillHisto2D("SimPiKPEtMinusSimEffCorrRecoPiOnly",fSimPiKPEtShouldBeRecoPi,(fSimPiKPEtShouldBeRecoPi-eTtotalRecoEffCorrPi)/fSimPiKPEtShouldBeRecoPi,1.0);
917 if(fSimPiKPEtShouldBeRecoP>0.0) FillHisto2D("SimPiKPEtMinusSimEffCorrRecoPOnly",fSimPiKPEtShouldBeRecoP,(fSimPiKPEtShouldBeRecoP-eTtotalRecoEffCorrP)/fSimPiKPEtShouldBeRecoP,1.0);
918 if(fSimPiKPEtShouldBeRecoK>0.0) FillHisto2D("SimPiKPEtMinusSimEffCorrRecoKOnly",fSimPiKPEtShouldBeRecoK,(fSimPiKPEtShouldBeRecoK-eTtotalRecoEffCorrK)/fSimPiKPEtShouldBeRecoK,1.0);
919 if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimAllCorrSmearedRecoOnly",eTtotalSim,(eTtotalSim-eTtotalSimAll+eTtotalRecoBkgd)/eTtotalSim,1.0);
920 if(eTtotalRecoTotalUncorr>0.0) FillHisto2D("SimPiKPEtMeasMinusEtRealPiKP",eTtotalRecoTotalUncorr,(eTtotalRecoTotalUncorr-eTtotalRecoUncorr)/eTtotalRecoTotalUncorr,1.0);
921 if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimAllSmearedRecoOnly",eTtotalSim,(eTtotalSim-eTtotalSimAll)/eTtotalSim,1.0);
922 if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmearedRecoOnly",eTtotalSim,(eTtotalSim-eTtotalRecoPIDSmeared*1.01)/eTtotalSim,1.0);
923 if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimSmearedRecoOnly",eTtotalSim,(eTtotalSim-eTtotalReco)/eTtotalSim,1.0);
924 if(pTtotalSim>0.0) FillHisto2D("SimPiKPPtMinusSimSmearedRecoOnly",pTtotalSim,(pTtotalSim-pTtotalReco)/pTtotalSim,1.0);
925 if(eTtotalSim>0.0) FillHisto2D("SimPiKPEtMinusSimSmearedMultRecoOnly",nReco,(eTtotalSim-eTtotalReco)/eTtotalSim,1.0);
926 if(pTtotalSim>0.0) FillHisto2D("SimPiKPPtMinusSimSmearedMultRecoOnly",nReco,(pTtotalSim-pTtotalReco)/pTtotalSim,1.0);
934 Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev)
935 { // analyse MC event
938 AliFatal("ERROR: Event does not exist");
942 // Get us an mc event
943 AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
945 AliFatal("ERROR: MC Event does not exist");
949 // Let's play with the stack!
950 AliStack *stack = mcEvent->Stack();
952 Int_t nPrim = stack->GetNtrack();
954 Float_t fSimPiKPEtPtSmeared = 0;
955 Float_t fSimPiKPEtEfficiencySmeared = 0;
956 Float_t fSimPiKPEtPtCutSmearedTPC = 0;
957 Float_t fSimPiKPEtPtCutSmearedITS = 0;
958 Float_t fSimPiKPEtPIDSmeared = 0;
959 Float_t fSimPiKPEtPIDSmearedNoID = 0;
960 fSimPiKPEtShouldBeReco = 0;
961 fSimPiKPEtShouldBeRecoPi = 0;
962 fSimPiKPEtShouldBeRecoK = 0;
963 fSimPiKPEtShouldBeRecoP = 0;
964 //=================Tracks which may or may not have been reconstructed=================
966 for (Int_t iPart = 0; iPart < nPrim; iPart++)
969 TParticle *part = stack->Particle(iPart);//This line is identified as a loss of memory by valgrind, however, the pointer still belongs to the stack, so it's the stack's problem
973 Printf("ERROR: Could not get particle %d", iPart);
976 // Check if it is a primary particle
977 if (stack->IsPhysicalPrimary(iPart)){//primaries
979 if (TMath::Abs(part->Eta()) < fHadEtReco->GetCorrections()->GetEtaCut()) {
981 Int_t pdgCode = part->GetPDG(0)->PdgCode();
983 //Investigating smearing...
984 //Numbers are realistic correction factors from previous studies
985 if(fInvestigateSmearing){
986 if(pdgCode==fgPiPlusCode ||pdgCode==fgPiMinusCode ||pdgCode==fgKPlusCode ||pdgCode==fgKMinusCode ||pdgCode==fgProtonCode ||pdgCode==fgAntiProtonCode){
987 //To investigate Smearing...
988 Float_t myet = Et(part);
990 Float_t theta = part->Theta();
992 Float_t momentum = part->P();
994 Float_t pSmeared = momentum * fPtSmearer->Gaus(1,0.005);//Gaussian centered around 1
995 fSimPiKPEtPtSmeared += Et(pSmeared,theta,pdgCode,charge);
996 //Efficiency smearing
997 //to mock up the difference between TPC only tracks in p+p (~90% efficiency at high pT) and TPC+ITS tracks in Pb+Pb (about 70% efficiency at high pT) a factor of 7/9 was added in front
998 float efficiency = 7.0/9.0*2.26545*TMath::Exp(-TMath::Power(9.99977e-01/part->Pt(),7.85488e-02));//simple rough efficiency from fitting curve
999 if(fPtSmearer->Binomial(1,efficiency) ==1){
1000 fSimPiKPEtEfficiencySmeared += (1.0/efficiency)*myet;
1003 if(part->Pt()>0.10){fSimPiKPEtPtCutSmearedITS +=1.00988*myet;}
1004 if(part->Pt()>0.15){fSimPiKPEtPtCutSmearedTPC +=1.02994*myet;}
1006 fSimPiKPEtPIDSmearedNoID += 1.03018015790601458*Et(momentum,theta,fgPiPlusCode,charge);
1007 if(part->P()<1.0){//then the particle would have been ID'd
1008 fSimPiKPEtPIDSmeared += 1.00918051514628582*myet;
1010 else{//Then it would have been assumed to be a pion
1011 fSimPiKPEtPIDSmeared += 1.00918051514628582*Et(momentum,theta,fgPiPlusCode,charge);
1016 //============Charged hadrons===================================
1017 if(pdgCode == fgPiPlusCode){
1018 float myEt = Et(part);
1019 float myEtP = Et(part,fgProtonMass);
1020 float myEtK = Et(part,fgKaonMass);
1021 if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1022 if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoPi += myEt;
1027 FillHisto2D("EtSimulatedPiPlus",part->Pt(),part->Eta(),myEt);
1028 FillHisto2D("EtNSimulatedPiPlus",part->Pt(),part->Eta(),1.0);
1029 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1030 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1031 if(fCentBin>=0){//if a centrality bin was defined
1032 FillHisto2D(Form("EtNSimulatedPiPlusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1033 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1035 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEt);
1036 FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
1037 FillHisto2D("EtSimulatedPiPlusAssumingProton",part->Pt(),part->Eta(),myEtP);
1038 FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
1039 FillHisto2D("EtSimulatedPiPlusAssumingKaon",part->Pt(),part->Eta(),myEtK);
1040 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1042 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1043 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1044 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1045 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1046 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1047 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1050 if(pdgCode == fgPiMinusCode){
1051 float myEt = Et(part);
1052 float myEtP = Et(part,fgProtonMass);
1053 float myEtK = Et(part,fgKaonMass);
1054 if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1055 if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoPi += myEt;
1058 FillHisto2D("EtSimulatedPiMinus",part->Pt(),part->Eta(),myEt);
1059 FillHisto2D("EtNSimulatedPiMinus",part->Pt(),part->Eta(),1.0);
1060 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1061 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1062 if(fCentBin>=0){//if a centrality bin was defined
1063 FillHisto2D(Form("EtNSimulatedPiMinusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1064 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1066 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEt);
1067 FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
1068 FillHisto2D("EtSimulatedPiMinusAssumingProton",part->Pt(),part->Eta(),myEtP);
1069 FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
1070 FillHisto2D("EtSimulatedPiMinusAssumingKaon",part->Pt(),part->Eta(),myEtK);
1071 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1072 Short_t charge = -1;
1073 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1074 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1075 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1076 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1077 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1078 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1081 if(pdgCode == fgKPlusCode){
1082 float myEt = Et(part);
1083 float myEtPi = Et(part,fgPionMass);
1084 float myEtP = Et(part,fgProtonMass);
1085 if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1086 if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoK += myEt;
1089 FillHisto2D("EtSimulatedKPlus",part->Pt(),part->Eta(),myEt);
1090 FillHisto2D("EtNSimulatedKPlus",part->Pt(),part->Eta(),1.0);
1091 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1092 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1093 if(fCentBin>=0){//if a centrality bin was defined
1094 FillHisto2D(Form("EtNSimulatedKPlusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1095 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1097 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
1098 FillHisto2D("EtSimulatedKPlusAssumingPion",part->Pt(),part->Eta(),myEtPi);
1099 FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
1100 FillHisto2D("EtSimulatedKPlusAssumingProton",part->Pt(),part->Eta(),myEtP);
1101 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1103 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1104 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1105 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1106 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1107 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1108 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1111 if(pdgCode == fgKMinusCode){
1112 float myEt = Et(part);
1113 float myEtPi = Et(part,fgPionMass);
1114 float myEtP = Et(part,fgProtonMass);
1115 if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1116 if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoK += myEt;
1119 FillHisto2D("EtSimulatedKMinus",part->Pt(),part->Eta(),myEt);
1120 FillHisto2D("EtNSimulatedKMinus",part->Pt(),part->Eta(),1.0);
1121 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1122 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1123 if(fCentBin>=0){//if a centrality bin was defined
1124 FillHisto2D(Form("EtNSimulatedKMinusCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1125 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1127 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
1128 FillHisto2D("EtSimulatedKMinusAssumingPion",part->Pt(),part->Eta(),myEtPi);
1129 FillHisto2D("EtSimulatedChargedHadronAssumingProton",part->Pt(),part->Eta(),myEtP);
1130 FillHisto2D("EtSimulatedKMinusAssumingProton",part->Pt(),part->Eta(),myEtP);
1131 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1132 Short_t charge = -1;
1133 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1134 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1135 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1136 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1137 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1138 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1141 if(pdgCode == fgProtonCode){
1142 float myEt = Et(part);
1143 float myEtPi = Et(part,fgPionMass);
1144 float myEtK = Et(part,fgKaonMass);
1145 if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1146 if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoP += myEt;
1149 FillHisto2D("EtSimulatedProton",part->Pt(),part->Eta(),myEt);
1150 FillHisto2D("EtNSimulatedProton",part->Pt(),part->Eta(),1.0);
1151 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1152 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1153 if(fCentBin>=0){//if a centrality bin was defined
1154 FillHisto2D(Form("EtNSimulatedProtonCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1155 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1157 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
1158 FillHisto2D("EtSimulatedProtonAssumingPion",part->Pt(),part->Eta(),myEtPi);
1159 FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
1160 FillHisto2D("EtSimulatedProtonAssumingKaon",part->Pt(),part->Eta(),myEtK);
1161 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1163 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1164 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1165 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1166 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1167 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1168 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1170 if(fBaryonEnhancement){
1171 float enhancement = ProtonBaryonEnhancement(part->Pt());
1172 FillHisto2D("EtSimulatedProtonEnhanced",part->Pt(),part->Eta(),myEt*enhancement);
1173 FillHisto2D("EtNSimulatedProtonEnhanced",part->Pt(),part->Eta(),1.0*enhancement);
1174 FillHisto2D("EtSimulatedProtonAssumingPionEnhanced",part->Pt(),part->Eta(),myEtPi*enhancement);
1177 if(pdgCode == fgAntiProtonCode){
1178 float myEt = Et(part);
1179 float myEtPi = Et(part,fgPionMass);
1180 float myEtK = Et(part,fgKaonMass);
1181 if(part->Pt()>0.15) fSimPiKPEtShouldBeReco += myEt;
1182 if(part->Pt()>0.15) fSimPiKPEtShouldBeRecoP += myEt;
1185 FillHisto2D("EtSimulatedAntiProton",part->Pt(),part->Eta(),myEt);
1186 FillHisto2D("EtNSimulatedAntiProton",part->Pt(),part->Eta(),1.0);
1187 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
1188 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
1189 if(fCentBin>=0){//if a centrality bin was defined
1190 FillHisto2D(Form("EtNSimulatedAntiProtonCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1191 FillHisto2D(Form("EtNSimulatedChargedHadronCB%i",fCentBin),part->Pt(),part->Eta(),1.0);
1193 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
1194 FillHisto2D("EtSimulatedAntiProtonAssumingPion",part->Pt(),part->Eta(),myEtPi);
1195 FillHisto2D("EtSimulatedChargedHadronAssumingKaon",part->Pt(),part->Eta(),myEtK);
1196 FillHisto2D("EtSimulatedAntiProtonAssumingKaon",part->Pt(),part->Eta(),myEtK);
1197 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1198 Short_t charge = -1;
1199 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
1200 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1201 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
1202 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
1203 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
1204 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
1206 if(fBaryonEnhancement){
1207 float enhancement = ProtonBaryonEnhancement(part->Pt());
1208 FillHisto2D("EtSimulatedAntiProtonEnhanced",part->Pt(),part->Eta(),myEt*enhancement);
1209 FillHisto2D("EtNSimulatedAntiProtonEnhanced",part->Pt(),part->Eta(),1.0*enhancement);
1210 FillHisto2D("EtSimulatedAntiProtonAssumingPionEnhanced",part->Pt(),part->Eta(),myEtPi*enhancement);
1213 //============Other hadrons===================================
1215 if(pdgCode == fgNeutronCode){
1216 float myEt = Et(part);
1219 FillHisto2D("EtSimulatedNeutron",part->Pt(),part->Eta(),myEt);
1220 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1223 if(pdgCode == fgAntiNeutronCode){
1224 float myEt = Et(part);
1227 FillHisto2D("EtSimulatedAntiNeutron",part->Pt(),part->Eta(),myEt);
1228 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1231 if(pdgCode == fgLambdaCode){
1232 float myEt = Et(part);
1235 FillHisto2D("EtSimulatedLambda",part->Pt(),part->Eta(),myEt);
1236 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1237 Float_t weight = LambdaWeight(part->Pt());
1238 if(fBaryonEnhancement){
1239 float enhancement = ProtonBaryonEnhancement(part->Pt());
1240 weight = weight*enhancement;
1242 FillHisto2D("EtSimulatedLambdaReweighted",part->Pt(),part->Eta(),myEt*weight);
1243 Int_t ndaughters = part->GetNDaughters();
1244 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1245 Int_t daughterindex = part->GetDaughter(idaughter);
1246 if(daughterindex<0 || daughterindex>1e5) continue;
1247 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1249 if(daughter->GetPDG(0)){
1250 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1251 if(daughtercode==fgPiMinusCode || daughtercode==fgProtonCode){
1252 myEt = Et(daughter);
1253 FillHisto2D("EtSimulatedLambdaDaughters",daughter->Pt(),daughter->Eta(),myEt);
1254 FillHisto2D("EtSimulatedLambdaDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
1263 if(pdgCode == fgAntiLambdaCode){
1264 float myEt = Et(part);
1267 FillHisto2D("EtSimulatedAntiLambda",part->Pt(),part->Eta(),myEt);
1268 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1269 Float_t weight = AntiLambdaWeight(part->Pt());
1270 if(fBaryonEnhancement){
1271 float enhancement = ProtonBaryonEnhancement(part->Pt());
1272 weight = weight*enhancement;
1274 FillHisto2D("EtSimulatedAntiLambdaReweighted",part->Pt(),part->Eta(),myEt*weight);
1275 Int_t ndaughters = part->GetNDaughters();
1276 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1277 Int_t daughterindex = part->GetDaughter(idaughter);
1278 if(daughterindex<0 || daughterindex>1e5) continue;
1279 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1281 if(daughter->GetPDG(0)){
1282 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1283 if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode){
1284 myEt = Et(daughter);
1285 FillHisto2D("EtSimulatedAntiLambdaDaughters",daughter->Pt(),daughter->Eta(),myEt);
1286 FillHisto2D("EtSimulatedAntiLambdaDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
1293 if(pdgCode == fgK0SCode){
1294 float myEt = Et(part);
1297 FillHisto2D("EtSimulatedK0S",part->Pt(),part->Eta(),myEt);
1298 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1299 Float_t weight = K0Weight(part->Pt());
1300 FillHisto2D("EtSimulatedK0SReweighted",part->Pt(),part->Eta(),myEt*weight);
1301 Int_t ndaughters = part->GetNDaughters();
1302 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1303 Int_t daughterindex = part->GetDaughter(idaughter);
1304 if(daughterindex<0 || daughterindex>1e5) continue;
1305 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1307 if(daughter->GetPDG(0)){
1309 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1310 if(daughtercode==fgPiMinusCode || daughtercode==fgPiPlusCode){
1311 myEt = Et(daughter);
1312 FillHisto2D("EtSimulatedK0SDaughters",daughter->Pt(),daughter->Eta(),myEt);
1313 FillHisto2D("EtSimulatedK0SDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
1320 if(pdgCode == fgK0LCode){
1321 float myEt = Et(part);
1324 FillHisto2D("EtSimulatedK0L",part->Pt(),part->Eta(),myEt);
1325 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1326 Float_t weight = K0Weight(part->Pt());
1327 FillHisto2D("EtSimulatedK0LReweighted",part->Pt(),part->Eta(),myEt*weight);
1330 if(pdgCode == fgOmegaCode){
1331 float myEt = Et(part);
1334 FillHisto2D("EtSimulatedOmega",part->Pt(),part->Eta(),myEt);
1335 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1336 Int_t ndaughters = part->GetNDaughters();
1337 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1338 Int_t daughterindex = part->GetDaughter(idaughter);
1339 if(daughterindex<0 || daughterindex>1e5) continue;
1340 TParticle *daughter = stack->Particle(daughterindex);
1342 if(daughter->GetPDG(0)){
1344 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1345 if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgKMinusCode){
1346 myEt = Et(daughter);
1347 FillHisto2D("EtSimulatedOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
1354 if(pdgCode == fgAntiOmegaCode){
1355 float myEt = Et(part);
1358 FillHisto2D("EtSimulatedOmega",part->Pt(),part->Eta(),myEt);
1359 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1360 Int_t ndaughters = part->GetNDaughters();
1361 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1362 Int_t daughterindex = part->GetDaughter(idaughter);
1363 if(daughterindex<0 || daughterindex>1e5) continue;
1364 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1366 if(daughter->GetPDG(0)){
1367 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1368 if(daughtercode==fgPiMinusCode || daughtercode==fgAntiProtonCode || daughtercode==fgKPlusCode){
1369 myEt = Et(daughter);
1370 FillHisto2D("EtSimulatedAntiOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
1377 //There are two codes for Sigmas
1378 if(pdgCode == fgSigmaCode || pdgCode == -3222){
1379 float myEt = Et(part);
1382 FillHisto2D("EtSimulatedSigma",part->Pt(),part->Eta(),myEt);
1383 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1386 if(pdgCode == fgAntiSigmaCode || pdgCode == 3222){
1387 float myEt = Et(part);
1390 FillHisto2D("EtSimulatedAntiSigma",part->Pt(),part->Eta(),myEt);
1391 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1394 if(pdgCode == fgXiCode){
1395 float myEt = Et(part);
1398 FillHisto2D("EtSimulatedXi",part->Pt(),part->Eta(),myEt);
1399 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1400 Int_t ndaughters = part->GetNDaughters();
1401 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1402 Int_t daughterindex = part->GetDaughter(idaughter);
1403 if(daughterindex<0 || daughterindex>1e5 || daughterindex>1e5) continue;
1404 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1406 if(daughter->GetPDG(0)){
1408 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1409 if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgPiMinusCode){
1410 myEt = Et(daughter);
1411 FillHisto2D("EtSimulatedXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
1418 if(pdgCode == fgAntiXiCode){
1419 float myEt = Et(part);
1422 FillHisto2D("EtSimulatedAntiXi",part->Pt(),part->Eta(),myEt);
1423 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1424 Int_t ndaughters = part->GetNDaughters();
1425 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
1426 Int_t daughterindex = part->GetDaughter(idaughter);
1427 if(daughterindex<0 || daughterindex>1e5) continue;
1428 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
1430 if(daughter->GetPDG(0)){
1431 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
1432 if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode || daughtercode==fgPiMinusCode){
1433 myEt = Et(daughter);
1434 FillHisto2D("EtSimulatedAntiXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
1441 if(pdgCode == fgXi0Code){
1442 float myEt = Et(part);
1445 FillHisto2D("EtSimulatedXi0",part->Pt(),part->Eta(),myEt);
1446 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1449 if(pdgCode == fgAntiXi0Code){
1450 float myEt = Et(part);
1453 FillHisto2D("EtSimulatedAntiXi0",part->Pt(),part->Eta(),myEt);
1454 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
1457 //============electrons===================================
1459 if(pdgCode == fgEPlusCode){
1460 float myEt = Et(part);
1462 FillHisto2D("EtSimulatedEPlus",part->Pt(),part->Eta(),myEt);
1465 if(pdgCode == fgEMinusCode){
1466 float myEt = Et(part);
1468 FillHisto2D("EtSimulatedEMinus",part->Pt(),part->Eta(),myEt);
1471 //============neutrals===================================
1472 if(pdgCode == fgGammaCode){
1473 TParticle *mom = NULL;
1474 Int_t pdgCodeMom = -99999999;
1477 if(part->GetFirstMother()){
1478 mom = stack->Particle(part->GetFirstMother());
1479 pdgCodeMom = mom->GetPDG(0)->PdgCode();
1480 momEta = mom->Eta();
1483 //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
1484 if(pdgCodeMom == fgEtaCode){
1485 float myEt = Et(part);
1487 FillHisto2D("EtSimulatedEta",mompT,momEta,myEt);
1490 if(pdgCodeMom == fgPi0Code){
1491 float myEt = Et(part);
1493 FillHisto2D("EtSimulatedPi0",mompT,momEta,myEt);
1496 if(pdgCodeMom == fgOmega0Code){
1497 float myEt = Et(part);
1499 FillHisto2D("EtSimulatedOmega0",mompT,momEta,myEt);
1503 float myEt = Et(part);
1505 FillHisto2D("EtSimulatedGamma",part->Pt(),part->Eta(),myEt);
1509 if(pdgCode == fgEtaCode){
1510 float myEt = Et(part);
1512 FillHisto2D("EtSimulatedEta",part->Pt(),part->Eta(),myEt);
1515 if(pdgCode == fgPi0Code){
1516 float myEt = Et(part);
1518 FillHisto2D("EtSimulatedPi0",part->Pt(),part->Eta(),myEt);
1521 if(pdgCode == fgOmega0Code){
1522 float myEt = Et(part);
1524 FillHisto2D("EtSimulatedOmega0",part->Pt(),part->Eta(),myEt);
1531 if(fSimTotEt>0.0)FillHisto1D("SimTotEt",fSimTotEt,1.0);
1532 if(fSimHadEt>0.0)FillHisto1D("SimHadEt",fSimHadEt,1.0);
1533 if(fSimPiKPEt>0.0)FillHisto1D("SimPiKPEt",fSimPiKPEt,1.0);
1534 if(AliPWG0Helper::GetEventProcessType(mcEvent->Header()) == AliPWG0Helper::kND){
1535 FillHisto1D("SimHadEtND",fSimHadEt,1.0);
1536 FillHisto1D("SimTotEtND",fSimHadEt,1.0);
1537 FillHisto1D("NEventsND",0.5,1);
1539 if(AliPWG0Helper::GetEventProcessType(mcEvent->Header()) == AliPWG0Helper::kSD){
1540 FillHisto1D("SimHadEtSD",fSimHadEt,1.0);
1541 FillHisto1D("SimTotEtSD",fSimHadEt,1.0);
1542 FillHisto1D("NEventsSD",0.5,1);
1544 if(AliPWG0Helper::GetEventProcessType(mcEvent->Header()) == AliPWG0Helper::kDD){
1545 FillHisto1D("SimHadEtDD",fSimHadEt,1.0);
1546 FillHisto1D("SimTotEtDD",fSimHadEt,1.0);
1547 FillHisto1D("NEventsDD",0.5,1);
1549 if(fCentBin != -1){//if we have Pb+Pb and a centrality bin was found
1550 if(fSimTotEt>0.0) FillHisto1D(Form("SimTotEtCB%i",fCentBin),fSimTotEt,1.0);
1551 if(fSimHadEt>0.0) FillHisto1D(Form("SimHadEtCB%i",fCentBin),fSimHadEt,1.0);
1552 if(fSimPiKPEt>0.0)FillHisto1D(Form("SimPiKPEtCB%i",fCentBin),fSimPiKPEt,1.0);
1555 if(fInvestigateSmearing){
1556 //Smearing histograms
1557 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtSmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtSmeared)/fSimPiKPEt,1.0);
1558 FillHisto1D("SimPiKPEtPtSmeared",fSimPiKPEtPtSmeared,1.0);
1559 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimEfficiencySmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtEfficiencySmeared)/fSimPiKPEt,1.0);
1560 FillHisto1D("SimPiKPEtEfficiencySmeared",fSimPiKPEtEfficiencySmeared,1.0);
1561 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtCutSmearedTPC",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtCutSmearedTPC)/fSimPiKPEt,1.0);
1562 FillHisto1D("SimPiKPEtPtCutSmearedTPC",fSimPiKPEtPtCutSmearedTPC,1.0);
1563 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtCutSmearedITS",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtCutSmearedITS)/fSimPiKPEt,1.0);
1564 FillHisto1D("SimPiKPEtPtCutSmearedITS",fSimPiKPEtPtCutSmearedTPC,1.0);
1565 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPIDSmeared)/fSimPiKPEt,1.0);
1566 FillHisto1D("SimPiKPEtPIDSmeared",fSimPiKPEtPIDSmeared,1.0);
1567 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmearedNoID",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPIDSmearedNoID)/fSimPiKPEt,1.0);
1568 FillHisto1D("SimPiKPEtPIDSmearedNoID",fSimPiKPEtPIDSmearedNoID,1.0);
1574 void AliAnalysisHadEtMonteCarlo::Init()
1576 AliAnalysisHadEt::Init();
1577 if(!fPtSmearer) fPtSmearer = new TRandom();
1579 void AliAnalysisHadEtMonteCarlo::CreateHistograms(){
1580 //for simulated Et only (no reconstruction)
1581 CreateEtaPtHisto2D(TString("EtSimulatedPiPlus"),TString("Simulated E_{T} from #pi^{+}"));
1582 CreateEtaPtHisto2D("EtSimulatedPiMinus","Simulated E_{T} from #pi^{-}");
1583 CreateEtaPtHisto2D("EtSimulatedKPlus","Simulated E_{T} from K^{+}");
1584 CreateEtaPtHisto2D("EtSimulatedKMinus","Simulated E_{T} from K^{-}");
1585 CreateEtaPtHisto2D("EtSimulatedProton","Simulated E_{T} from p");
1586 CreateEtaPtHisto2D("EtSimulatedAntiProton","Simulated E_{T} from #bar{p}");//Both baryon enhancement and strangeness rescaling
1587 if(fBaryonEnhancement){
1588 CreateEtaPtHisto2D("EtSimulatedProtonEnhanced","Simulated E_{T} from p");
1589 CreateEtaPtHisto2D("EtSimulatedAntiProtonEnhanced","Simulated E_{T} from #bar{p}");
1591 CreateEtaPtHisto2D("EtSimulatedChargedHadron","Simulated E_{T} from charged hadrons");
1592 CreateEtaPtHisto2D("EtNSimulatedPiPlus","Number of Simulated #pi^{+}");
1593 CreateEtaPtHisto2D("EtNSimulatedPiMinus","Number of simulated #pi^{-}");
1594 CreateEtaPtHisto2D("EtNSimulatedKPlus","Number of simulated K^{+}");
1595 CreateEtaPtHisto2D("EtNSimulatedKMinus","Number of simulated K^{-}");
1596 CreateEtaPtHisto2D("EtNSimulatedProton","Number of simulated p");
1597 CreateEtaPtHisto2D("EtNSimulatedAntiProton","Number of simulated #bar{p}");
1598 if(fBaryonEnhancement){
1599 CreateEtaPtHisto2D("EtNSimulatedProtonEnhanced","Number of simulated p");
1600 CreateEtaPtHisto2D("EtNSimulatedAntiProtonEnhanced","Number of simulated #bar{p}");
1602 CreateEtaPtHisto2D("EtNSimulatedChargedHadron","Number of simulated charged hadrons");
1603 if(fDataSet==20100){//If this is Pb+Pb
1605 if(fNCentBins<21) width = 10;
1606 for(Int_t i=0;i<fNCentBins;i++){
1607 CreateEtaPtHisto2D(Form("EtNSimulatedPiPlusCB%i",i),Form("Number of Simulated #pi^{+} for %i-%i central",i*width,(i+1)*width));
1608 CreateEtaPtHisto2D(Form("EtNSimulatedPiMinusCB%i",i),Form("Number of simulated #pi^{-} for %i-%i central",i*width,(i+1)*width));
1609 CreateEtaPtHisto2D(Form("EtNSimulatedKPlusCB%i",i),Form("Number of simulated K^{+} for %i-%i central",i*width,(i+1)*width));
1610 CreateEtaPtHisto2D(Form("EtNSimulatedKMinusCB%i",i),Form("Number of simulated K^{-} for %i-%i central",i*width,(i+1)*width));
1611 CreateEtaPtHisto2D(Form("EtNSimulatedProtonCB%i",i),Form("Number of simulated p for %i-%i central",i*width,(i+1)*width));
1612 CreateEtaPtHisto2D(Form("EtNSimulatedAntiProtonCB%i",i),Form("Number of simulated #bar{p} for %i-%i central",i*width,(i+1)*width));
1613 CreateEtaPtHisto2D(Form("EtNSimulatedChargedHadronCB%i",i),Form("Number of simulated charged hadrons for %i-%i central",i*width,(i+1)*width));
1616 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingNoPt","Simulated E_{T} from charged hadrons assuming p_{T}=0");
1617 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut","Simulated E_{T} from charged hadrons assuming p_{T}=0.15");
1618 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPtITSCut","Simulated E_{T} from charged hadrons assuming p_{T}=0.10");
1620 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPion","Simulated E_{T} from charged hadrons assuming they are all pions");
1621 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingProton","Simulated E_{T} from charged hadrons assuming they are all pions");
1622 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingKaon","Simulated E_{T} from charged hadrons assuming they are all pions");
1623 CreateEtaPtHisto2D("EtSimulatedKPlusAssumingPion","Simulated E_{T} from K^{+} assuming #pi mass");
1624 CreateEtaPtHisto2D("EtSimulatedKMinusAssumingPion","Simulated E_{T} from K^{-} assuming #pi mass");
1625 CreateEtaPtHisto2D("EtSimulatedProtonAssumingPion","Simulated E_{T} from p assuming #pi mass");
1626 CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingPion","Simulated E_{T} from #bar{p} assuming #pi mass");
1627 CreateEtaPtHisto2D("EtSimulatedKPlusAssumingProton","Simulated E_{T} from K^{+} assuming #pi mass");
1628 CreateEtaPtHisto2D("EtSimulatedKMinusAssumingProton","Simulated E_{T} from K^{-} assuming #pi mass");
1629 CreateEtaPtHisto2D("EtSimulatedPiPlusAssumingProton","Simulated E_{T} from p assuming #pi mass");
1630 CreateEtaPtHisto2D("EtSimulatedPiMinusAssumingProton","Simulated E_{T} from #bar{p} assuming #pi mass");
1631 CreateEtaPtHisto2D("EtSimulatedPiPlusAssumingKaon","Simulated E_{T} from K^{+} assuming #pi mass");
1632 CreateEtaPtHisto2D("EtSimulatedPiMinusAssumingKaon","Simulated E_{T} from K^{-} assuming #pi mass");
1633 CreateEtaPtHisto2D("EtSimulatedProtonAssumingKaon","Simulated E_{T} from p assuming #pi mass");
1634 CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingKaon","Simulated E_{T} from #bar{p} assuming #pi mass");
1635 if(fBaryonEnhancement){
1636 CreateEtaPtHisto2D("EtSimulatedProtonAssumingPionEnhanced","Simulated E_{T} from p assuming #pi mass");
1637 CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingPionEnhanced","Simulated E_{T} from #bar{p} assuming #pi mass");
1640 CreateEtaPtHisto2D("EtSimulatedLambda","Simulated E_{T} from #Lambda");
1641 CreateEtaPtHisto2D("EtSimulatedAntiLambda","Simulated E_{T} from #bar{#Lambda}");
1642 CreateEtaPtHisto2D("EtSimulatedK0S","Simulated E_{T} from K^{0}_{S}");
1643 CreateEtaPtHisto2D("EtSimulatedK0L","Simulated E_{T} from K^{0}_{L}");
1644 CreateEtaPtHisto2D("EtSimulatedLambdaReweighted","Simulated E_{T} from #Lambda");//These will also be used for baryon enhancement
1645 CreateEtaPtHisto2D("EtSimulatedAntiLambdaReweighted","Simulated E_{T} from #bar{#Lambda}");
1646 CreateEtaPtHisto2D("EtSimulatedK0SReweighted","Simulated E_{T} from K^{0}_{S}");
1647 CreateEtaPtHisto2D("EtSimulatedK0LReweighted","Simulated E_{T} from K^{0}_{L}");
1648 CreateEtaPtHisto2D("EtSimulatedNeutron","Simulated E_{T} from neutrons");
1649 CreateEtaPtHisto2D("EtSimulatedAntiNeutron","Simulated E_{T} from #bar{n}");
1650 CreateEtaPtHisto2D("EtSimulatedEPlus","Simulated E_{T} from e^{+}");
1651 CreateEtaPtHisto2D("EtSimulatedEMinus","Simulated E_{T} from e^{-}");
1652 CreateEtaPtHisto2D("EtSimulatedOmega","Simulated E_{T} from #Omega^{-}");
1653 CreateEtaPtHisto2D("EtSimulatedAntiOmega","Simulated E_{T} from #Omega^{+}");
1654 CreateEtaPtHisto2D("EtSimulatedXi","Simulated E_{T} from #Xi^{-}");
1655 CreateEtaPtHisto2D("EtSimulatedAntiXi","Simulated E_{T} from #Xi^{+}");
1656 CreateEtaPtHisto2D("EtSimulatedSigma","Simulated E_{T} from #Xi^{-}");
1657 CreateEtaPtHisto2D("EtSimulatedAntiSigma","Simulated E_{T} from #Xi^{+}");
1658 CreateEtaPtHisto2D("EtSimulatedXi0","Simulated E_{T} from #Xi^{0}");
1659 CreateEtaPtHisto2D("EtSimulatedAntiXi0","Simulated E_{T} from #Xi^{0}");
1660 CreateEtaPtHisto2D("EtSimulatedAllHadron","Simulated E_{T} from all hadrons");
1663 CreateEtaPtHisto2D("EtSimulatedLambdaDaughters","Simulated E_{T} from #Lambda Daughters");
1664 CreateEtaPtHisto2D("EtSimulatedAntiLambdaDaughters","Simulated E_{T} from #bar{#Lambda} Daughters");
1665 CreateEtaPtHisto2D("EtSimulatedK0SDaughters","Simulated E_{T} from K^{0}_{S} Daughters");
1666 CreateEtaPtHisto2D("EtSimulatedLambdaDaughtersReweighted","Simulated E_{T} from #Lambda Daughters");
1667 CreateEtaPtHisto2D("EtSimulatedAntiLambdaDaughtersReweighted","Simulated E_{T} from #bar{#Lambda} Daughters");
1668 CreateEtaPtHisto2D("EtSimulatedK0SDaughtersReweighted","Simulated E_{T} from K^{0}_{S} Daughters");
1669 CreateEtaPtHisto2D("EtSimulatedOmegaDaughters","Simulated E_{T} from #Omega^{-} Daughters");
1670 CreateEtaPtHisto2D("EtSimulatedAntiOmegaDaughters","Simulated E_{T} from #Omega^{+} Daughters");
1671 CreateEtaPtHisto2D("EtSimulatedXiDaughters","Simulated E_{T} from #Xi^{-} Daughters");
1672 CreateEtaPtHisto2D("EtSimulatedAntiXiDaughters","Simulated E_{T} from #Xi^{+} Daughters");
1675 CreateEtaPtHisto2D("EtSimulatedGamma","Simulated E_{T} from #gamma");
1676 CreateEtaPtHisto2D("EtSimulatedEta","Simulated E_{T} from #eta");
1677 CreateEtaPtHisto2D("EtSimulatedPi0","Simulated E_{T} from #pi^{0}");
1678 CreateEtaPtHisto2D("EtSimulatedOmega0","Simulated E_{T} from #omega");
1680 TString *strTPC = new TString("TPC");
1681 TString *strITS = new TString("ITS");
1682 TString *strTPCITS = new TString("TPCITS");
1683 Int_t lastcutset = 1;
1684 if(fRequireITSHits) lastcutset = 2;
1685 for(Int_t i=0;i<=lastcutset;i++){
1686 TString *cutName = NULL;
1687 Float_t maxPtdEdx = 10;
1688 Float_t mindEdx = 35;
1689 Float_t maxdEdx = 150.0;
1700 cutName = strTPCITS;
1703 cerr<<"Error: cannot make histograms!"<<endl;
1707 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedPiPlus",cutName->Data()),"Reconstructed E_{T} from identified #pi^{+}");
1708 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedPiMinus",cutName->Data()),"Reconstructed E_{T} from identified #pi^{-}");
1709 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedKPlus",cutName->Data()),"Reconstructed E_{T} from identified K^{+}");
1710 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedEMinus",cutName->Data()),"Reconstructed E_{T} from identified e^{-}");
1711 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedEPlus",cutName->Data()),"Reconstructed E_{T} from identified e^{+}");
1712 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedKMinus",cutName->Data()),"Reconstructed E_{T} from identified K^{-}");
1713 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedProton",cutName->Data()),"Reconstructed E_{T} from identified p");
1714 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedAntiProton",cutName->Data()),"Reconstructed E_{T} from identified #bar{p}");
1715 if(fBaryonEnhancement){
1716 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from identified p");
1717 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from identified #bar{p}");
1719 CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentified",cutName->Data()),"Number of Reconstructed unidentified particles");
1720 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1721 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1722 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1724 CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedKaon",cutName->Data()),"Number of Reconstructed unidentified kaons particles");
1725 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1726 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1727 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1728 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming kaon mass");
1729 CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedProton",cutName->Data()),"Number of Reconstructed unidentified proton particles");
1730 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1731 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1732 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1733 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1734 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified kaons particles assuming pion mass");
1735 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1736 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProton",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming proton mass");
1737 if(fBaryonEnhancement){
1738 CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),"Number of Reconstructed unidentified proton particles");
1739 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming pion mass");
1740 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from unidentified proton particles assuming proton mass");
1742 CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentifiedPion",cutName->Data()),"Number of Reconstructed unidentified pions particles");
1743 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
1744 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingKaon",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
1745 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPionAssumingProton",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
1746 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedPion",cutName->Data()),"Reconstructed E_{T} from unidentified pions particles assuming pion mass");
1748 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentified",cutName->Data()),"Reconstructed E_{T} from unidentified particles using real mass");
1749 CreateEtaPtHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),"Reconstructed E_{T} from misidentified electrons");
1752 CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlus",cutName->Data()),"Reconstructed E_{T} from #pi^{+}");
1753 CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinus",cutName->Data()),"Reconstructed E_{T} from #pi^{-}");
1754 CreateEtaPtHisto2D(Form("EtReconstructed%sKPlus",cutName->Data()),"Reconstructed E_{T} from K^{+}");
1755 CreateEtaPtHisto2D(Form("EtReconstructed%sKMinus",cutName->Data()),"Reconstructed E_{T} from K^{-}");
1756 CreateEtaPtHisto2D(Form("EtReconstructed%sProton",cutName->Data()),"Reconstructed E_{T} from p");
1757 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProton",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1758 if(fBaryonEnhancement){
1759 CreateEtaPtHisto2D(Form("EtReconstructed%sProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from p");
1760 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1762 CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
1763 CreateEtaPtHisto2D(Form("EtNReconstructed%sPiPlus",cutName->Data()),"Reconstructed E_{T} from #pi^{+}");
1764 CreateEtaPtHisto2D(Form("EtNReconstructed%sPiMinus",cutName->Data()),"Reconstructed E_{T} from #pi^{-}");
1765 CreateEtaPtHisto2D(Form("EtNReconstructed%sKPlus",cutName->Data()),"Reconstructed E_{T} from K^{+}");
1766 CreateEtaPtHisto2D(Form("EtNReconstructed%sKMinus",cutName->Data()),"Reconstructed E_{T} from K^{-}");
1767 CreateEtaPtHisto2D(Form("EtNReconstructed%sProton",cutName->Data()),"Reconstructed E_{T} from p");
1768 CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProton",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1769 if(fBaryonEnhancement){
1770 CreateEtaPtHisto2D(Form("EtNReconstructed%sProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from p");
1771 CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProtonEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1773 CreateEtaPtHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
1774 if(fDataSet==20100){//If this is Pb+Pb
1776 if(fNCentBins<21) width = 10;
1777 for(Int_t j=0;j<fNCentBins;j++){
1778 CreateEtaPtHisto2D(Form("EtNReconstructed%sPiPlusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #pi^{+} for %i-%i central",j*width,(j+1)*width));
1779 CreateEtaPtHisto2D(Form("EtNReconstructed%sPiMinusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #pi^{-} for %i-%i central",j*width,(j+1)*width));
1780 CreateEtaPtHisto2D(Form("EtNReconstructed%sKPlusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from K^{+} for %i-%i central",j*width,(j+1)*width));
1781 CreateEtaPtHisto2D(Form("EtNReconstructed%sKMinusCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from K^{-} for %i-%i central",j*width,(j+1)*width));
1782 CreateEtaPtHisto2D(Form("EtNReconstructed%sProtonCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from p for %i-%i central",j*width,(j+1)*width));
1783 CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProtonCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from #bar{p} for %i-%i central",j*width,(j+1)*width));
1784 CreateEtaPtHisto2D(Form("EtNReconstructed%sChargedHadronCB%i",cutName->Data(),j),Form("Reconstructed E_{T} from charged hadrons for %i-%i central",j*width,(j+1)*width));
1788 CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
1789 CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingProton",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
1790 CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingKaon",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
1791 CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingPion",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1792 CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingPion",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1793 CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1794 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1795 CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1796 CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1797 CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1798 CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingKaon",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1799 CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1800 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingKaon",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1802 CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingProton",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1803 CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingProton",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1804 CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinusAssumingProton",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1805 CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlusAssumingProton",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1806 CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1807 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingProton",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1809 if(fBaryonEnhancement){
1810 CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1811 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingPionEnhanced",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1814 CreateEtaPtHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),"Reconstructed E_{T} from e^{+}");
1815 CreateEtaPtHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),"Reconstructed E_{T} from e^{-}");
1819 CreateEtaPtHisto2D(Form("EtReconstructed%sLambdaDaughters",cutName->Data()),"Reconstructed E_{T} from #Lambda Daughters");
1820 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiLambdaDaughters",cutName->Data()),"Reconstructed E_{T} from #bar{#Lambda} Daughters");
1821 CreateEtaPtHisto2D(Form("EtReconstructed%sK0SDaughters",cutName->Data()),"Reconstructed E_{T} from K^{0}_{S} Daughters");
1822 CreateEtaPtHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from #Lambda Daughters");
1823 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from #bar{#Lambda} Daughters");
1824 CreateEtaPtHisto2D(Form("EtReconstructed%sK0SDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from K^{0}_{S} Daughters");
1825 CreateEtaPtHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),"Reconstructed E_{T} from #Omega^{-} Daughters");
1826 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),"Reconstructed E_{T} from #Omega^{+} Daughters");
1827 CreateEtaPtHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),"Reconstructed E_{T} from #Xi^{-} Daughters");
1828 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),"Reconstructed E_{T} from #Xi^{+} Daughters");
1829 CreateEtaPtHisto2D(Form("EtReconstructed%sConversionElectrons",cutName->Data()),"Reconstructed E_{T} from conversion electrons");
1830 CreateEtaPtHisto2D(Form("EtReconstructed%sSecondaryMuons",cutName->Data()),"Reconstructed E_{T} from secondary muons");//from pions
1831 CreateEtaPtHisto2D(Form("EtReconstructed%sSecondaryPions",cutName->Data()),"Reconstructed E_{T} from secondary pions");//from rescattering and sigma+-
1832 CreateEtaPtHisto2D(Form("EtReconstructed%sSecondaryProtons",cutName->Data()),"Reconstructed E_{T} from secondary protons");//from rescattering and sigma+-
1834 CreateIntHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),"PIDs of unidentified particles", "PID", "Number of particles",9, -4,4);
1835 CreateHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),"PIDs of misidentified particles", "PID real","PID identified",5, -.5,4.5,5, -.5,4.5);
1836 CreateHisto2D(Form("dEdxAll%s",cutName->Data()),"dE/dx for all particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1837 CreateHisto2D(Form("dEdxPion%s",cutName->Data()),"dE/dx for #pi^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1838 CreateHisto2D(Form("dEdxKaon%s",cutName->Data()),"dE/dx for K^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1839 CreateHisto2D(Form("dEdxProton%s",cutName->Data()),"dE/dx for p(#bar{p})","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1840 CreateHisto2D(Form("dEdxElectron%s",cutName->Data()),"dE/dx for e^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1841 CreateHisto2D(Form("dEdxUnidentified%s",cutName->Data()),"dE/dx for unidentified particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1847 Float_t minEt = 0.0;
1848 Float_t maxEt = 100.0;
1849 if(fDataSet==20100) maxEt=4000.0;
1850 Int_t nbinsEt = 100;
1851 char histoname[200];
1852 char histotitle[200];
1855 TString *sTPC = new TString("TPC");
1856 TString *sITS = new TString("ITS");
1857 TString *sTPCpt = new TString("0.15");
1858 TString *sITSpt = new TString("0.10");
1859 TString *sPID = new TString("");
1860 TString *sNoPID = new TString("NoPID");
1861 TString *sNoPIDString = new TString(", No PID");
1862 TString *sHadEt = new TString("HadEt");
1863 TString *sTotEt = new TString("TotEt");
1864 TString *sTotEtString = new TString("total E_{T}");
1865 TString *sHadEtString = new TString("hadronic E_{T}");
1866 TString *sFull = new TString("Full");
1867 TString *sEMCAL = new TString("EMCAL");
1868 TString *sPHOS = new TString("PHOS");
1871 for(int tpc = 0;tpc<lastcutset;tpc++){
1872 TString *detector = NULL;
1873 TString *ptstring = NULL;
1874 if(tpc==1) {detector = sTPC; ptstring = sTPCpt;}
1875 else{detector = sITS; ptstring = sITSpt;}
1876 for(int hadet = 0;hadet<2;hadet++){
1878 TString *etstring = NULL;
1879 if(hadet==1) {et = sHadEt; etstring = sHadEtString;}
1880 else{et = sTotEt; etstring = sTotEtString;}
1881 for(int type = 0;type<3;type++){
1882 if(type==0 && !fInvestigateFull) continue;
1883 if(type==1 && !fInvestigateEMCal) continue;
1884 if(type==2 && !fInvestigatePHOS) continue;
1885 TString *acceptance = NULL;
1892 acceptance = sEMCAL;
1902 for(int pid = 0;pid<2;pid++){
1903 TString *partid = NULL;
1904 TString *partidstring = NULL;
1905 if(pid==1){partid = sPID; partidstring = sPID;}
1906 else{partid = sNoPID; partidstring = sNoPIDString;}
1907 snprintf(histoname,200,"Sim%sMinusReco%s%sAcceptance%s%s",et->Data(),et->Data(),acceptance->Data(),detector->Data(),partid->Data());
1908 snprintf(histotitle,200,"(Simulated %s - reconstructed %s)/(Simulated %s) with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),etstring->Data(),etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
1909 snprintf(ytitle,50,"(Simulated %s - reconstructed %s)/(Simulated %s)",etstring->Data(),etstring->Data(),etstring->Data());
1910 snprintf(xtitle,50,"Simulated %s",etstring->Data());
1911 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1912 if(hadet==0 && type==0 && fInvestigatePiKP){//we only want to do this once... not the most elegant way of coding but hey...
1913 snprintf(histoname,200,"SimPiKPMinusRecoPiKP%sAcceptance%s%s",acceptance->Data(),detector->Data(),partid->Data());
1914 snprintf(histotitle,200,"(Sim PiKP - reco PiKP)/(Sim PiKP) with %s acceptance for p_{T}>%s GeV/c%s",acceptance->Data(),ptstring->Data(),partidstring->Data());
1915 snprintf(ytitle,50,"(Sim PiKP - reco PiKP)/(Sim PiKP)");
1916 snprintf(xtitle,50,"Simulated E_{T}^{#pi,K,p}");
1917 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1923 CreateHisto1D("SimPiKPEt","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt,minEt,maxEt);
1924 CreateHisto1D("SimTotEt","Simulated Total E_{T}","Simulated Total E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
1925 CreateHisto1D("SimHadEt","Simulated Hadronic E_{T}","Simulated Hadronic E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
1926 CreateHisto1D("SimTotEtND","Simulated Total E_{T}","Simulated Total E_{T} for non-diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
1927 CreateHisto1D("SimHadEtND","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for non-diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
1928 CreateHisto1D("SimTotEtSD","Simulated Total E_{T}","Simulated Total E_{T} for singly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
1929 CreateHisto1D("SimHadEtSD","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for singly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
1930 CreateHisto1D("SimTotEtDD","Simulated Total E_{T}","Simulated Total E_{T} for doubly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
1931 CreateHisto1D("SimHadEtDD","Simulated Hadronic E_{T}","Simulated Hadronic E_{T} for doubly diffractive events","Number of events",nbinsEt*4,minEt,maxEt);
1932 if(fDataSet==20100){
1934 if(fNCentBins<21) width = 10;
1935 for(Int_t j=0;j<fNCentBins;j++){
1936 CreateHisto1D(Form("SimTotEtCB%i",j),Form("Simulated Total E_{T} for %i-%i central",j*width,(j+1)*width),"Simulated Total E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
1937 CreateHisto1D(Form("SimHadEtCB%i",j),Form("Simulated Hadronic E_{T} for %i-%i central",j*width,(j+1)*width),"Simulated Hadronic E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
1938 CreateHisto1D(Form("SimPiKPEtCB%i",j),Form("Simulated #pi,K,p E_{T} for %i-%i central",j*width,(j+1)*width),"Simulated #pi,K,p E_{T}","Number of events",nbinsEt,minEt,maxEt);
1944 if(fInvestigateSmearing){
1945 //======================================================================
1947 snprintf(histoname,200,"SimPiKPEtMeasMinusEtRealPiKP");
1948 snprintf(histotitle,200,"Simulated (all reconstructed - primaries)/all reconstructed for reconstructed tracks only");
1949 snprintf(ytitle,50,"(primary-all)/primary");
1950 snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
1951 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
1953 snprintf(histoname,200,"SimPiKPEtMinusSimAllCorrSmearedRecoOnly");
1954 snprintf(histotitle,200,"Simulated (primary-all)/primary for reconstructed tracks only");
1955 snprintf(ytitle,50,"(primary-all)/primary");
1956 snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
1957 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
1959 snprintf(histoname,200,"SimPiKPEtMinusSimEffCorrRecoOnly");
1960 snprintf(histotitle,200,"(sim-reco)/sim primary #pi,k,p for p_{T}>0.15");
1961 snprintf(ytitle,50,"(sim-reco)/sim");
1962 snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
1963 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
1965 snprintf(histoname,200,"SimPiKPEtMinusSimEffBkgdCorrRecoOnly");
1966 snprintf(histotitle,200,"(sim-reco)/sim primary #pi,k,p for p_{T}>0.15 with background subtraction");
1967 snprintf(ytitle,50,"(sim-reco)/sim");
1968 snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
1969 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
1971 snprintf(histoname,200,"SimPiKPEtMinusSimEffCorrRecoPiOnly");
1972 snprintf(histotitle,200,"(sim-reco)/sim primary #pi for p_{T}>0.15");
1973 snprintf(ytitle,50,"(sim-reco)/sim");
1974 snprintf(xtitle,50,"true #pi E_{T} for primary tracks");
1975 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt/2,nbinsEt,-etDiff*5,etDiff*5);
1977 snprintf(histoname,200,"SimPiKPEtMinusSimEffCorrRecoKOnly");
1978 snprintf(histotitle,200,"(sim-reco)/sim primary K for p_{T}>0.15");
1979 snprintf(ytitle,50,"(sim-reco)/sim");
1980 snprintf(xtitle,50,"true K E_{T} for primary tracks");
1981 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt/6,nbinsEt,-etDiff*5,etDiff*5);
1983 snprintf(histoname,200,"SimPiKPEtMinusSimEffCorrRecoPOnly");
1984 snprintf(histotitle,200,"(sim-reco)/sim primary p for p_{T}>0.15");
1985 snprintf(ytitle,50,"(sim-reco)/sim");
1986 snprintf(xtitle,50,"true p E_{T} for primary tracks");
1987 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt/6,nbinsEt,-etDiff*5,etDiff*5);
1989 snprintf(histoname,200,"SimPiKPEtMinusSimAllSmearedRecoOnly");
1990 snprintf(histotitle,200,"Simulated (primary-all)/primary for reconstructed tracks only");
1991 snprintf(ytitle,50,"(primary-all)/primary");
1992 snprintf(xtitle,50,"true p, K, p E_{T} for primary tracks");
1993 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,0.0);
1995 snprintf(histoname,200,"SimPiKPEtMinusSimPIDSmearedRecoOnly");
1996 snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only with PID smearing");
1997 snprintf(ytitle,50,"(true-smeared)/true");
1998 snprintf(xtitle,50,"true p, K, p E_{T}");
1999 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2001 snprintf(histoname,200,"SimPiKPEtMinusSimSmearedRecoOnly");
2002 snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only");
2003 snprintf(ytitle,50,"(true-smeared)/true");
2004 snprintf(xtitle,50,"true p, K, p E_{T}");
2005 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/15,etDiff/15);
2007 snprintf(histoname,200,"SimPiKPPtMinusSimSmearedRecoOnly");
2008 snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only");
2009 snprintf(ytitle,50,"(true-smeared)/true");
2010 snprintf(xtitle,50,"true p, K, p p_{T}");
2011 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/15,etDiff/15);
2013 snprintf(histoname,200,"SimPiKPEtMinusSimSmearedMultRecoOnly");
2014 snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only");
2015 snprintf(ytitle,50,"(true-smeared)/true");
2016 snprintf(xtitle,50,"number of reconstructed particles");
2017 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/15,etDiff/15);
2019 snprintf(histoname,200,"SimPiKPPtMinusSimSmearedMultRecoOnly");
2020 snprintf(histotitle,200,"Simulated (true-smeared)/true for reconstructed tracks only");
2021 snprintf(ytitle,50,"(true-smeared)/true");
2022 snprintf(xtitle,50,"number of reconstructed particles");
2023 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/15,etDiff/15);
2025 //======================================================================
2027 snprintf(histoname,200,"SimPiKPEtMinusSimPtSmeared");
2028 snprintf(histotitle,200,"Simulated (true-smeared)/true for 0.5 percent momentum smearing");
2029 snprintf(ytitle,50,"(true-smeared)/true");
2030 snprintf(xtitle,50,"true p, K, p E_{T}");
2031 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2032 snprintf(histoname,200,"SimPiKPEtPtSmeared");
2033 snprintf(histotitle,200,"Simulated E_{T} for 0.5 percent momentum smearing");
2034 snprintf(ytitle,50,"Number of events");
2035 snprintf(xtitle,50,"p, K, p E_{T}");
2036 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2038 //======================================================================
2040 snprintf(histoname,200,"SimPiKPEtMinusSimEfficiencySmeared");
2041 snprintf(histotitle,200,"Simulated (true-smeared)/true for efficiency smearing");
2042 snprintf(ytitle,50,"(true-smeared)/true");
2043 snprintf(xtitle,50,"true p, K, p E_{T}");
2044 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
2045 snprintf(histoname,200,"SimPiKPEtEfficiencySmeared");
2046 snprintf(histotitle,200,"Simulated E_{T} for efficiency smearing");
2047 snprintf(ytitle,50,"Number of events");
2048 snprintf(xtitle,50,"p, K, p E_{T}");
2049 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2051 //======================================================================
2053 snprintf(histoname,200,"SimPiKPEtMinusSimPtCutSmearedTPC");
2054 snprintf(histotitle,200,"Simulated (true-smeared)/true for p_{T}>0.15 GeV/c smearing");
2055 snprintf(ytitle,50,"(true-smeared)/true");
2056 snprintf(xtitle,50,"true p, K, p E_{T}");
2057 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2058 snprintf(histoname,200,"SimPiKPEtPtCutSmearedTPC");
2059 snprintf(histotitle,200,"Simulated E_{T} for p_{T}>0.15 GeV/c smearing");
2060 snprintf(ytitle,50,"Number of events");
2061 snprintf(xtitle,50,"p, K, p E_{T}");
2062 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2065 //======================================================================
2067 snprintf(histoname,200,"SimPiKPEtMinusSimPtCutSmearedITS");
2068 snprintf(histotitle,200,"Simulated (true-smeared)/true for p_{T}>0.10 GeV/c smearing");
2069 snprintf(ytitle,50,"(true-smeared)/true");
2070 snprintf(xtitle,50,"true p, K, p E_{T}");
2071 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2072 snprintf(histoname,200,"SimPiKPEtPtCutSmearedITS");
2073 snprintf(histotitle,200,"Simulated E_{T} for p_{T}>0.10 GeV/c smearing");
2074 snprintf(ytitle,50,"Number of events");
2075 snprintf(xtitle,50,"p, K, p E_{T}");
2076 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2078 //======================================================================
2080 snprintf(histoname,200,"SimPiKPEtMinusSimPIDSmeared");
2081 snprintf(histotitle,200,"Simulated (true-smeared)/true for PID smearing");
2082 snprintf(ytitle,50,"(true-smeared)/true");
2083 snprintf(xtitle,50,"true p, K, p E_{T}");
2084 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2085 snprintf(histoname,200,"SimPiKPEtPIDSmeared");
2086 snprintf(histotitle,200,"Simulated E_{T} for PID smearing");
2087 snprintf(ytitle,50,"Number of events");
2088 snprintf(xtitle,50,"p, K, p E_{T}");
2089 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2091 //======================================================================
2093 snprintf(histoname,200,"SimPiKPEtMinusSimPIDSmearedNoID");
2094 snprintf(histotitle,200,"Simulated (true-smeared)/true for PID smearing No ID");
2095 snprintf(ytitle,50,"(true-smeared)/true");
2096 snprintf(xtitle,50,"true p, K, p E_{T}");
2097 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
2098 snprintf(histoname,200,"SimPiKPEtPIDSmearedNoID");
2099 snprintf(histotitle,200,"Simulated E_{T} for PID smearing No ID");
2100 snprintf(ytitle,50,"Number of events");
2101 snprintf(xtitle,50,"p, K, p E_{T}");
2102 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
2110 delete sNoPIDString;
2113 delete sTotEtString;
2114 delete sHadEtString;
2118 CreateIntHisto1D("NEvents","Number of events","number of events","Number of events",1,0,1);
2119 CreateIntHisto1D("NEventsSD","Number of events","number of singly diffractive events","Number of events",1,0,1);
2120 CreateIntHisto1D("NEventsDD","Number of events","number of doubly diffractive events","Number of events",1,0,1);
2121 CreateIntHisto1D("NEventsND","Number of events","number of non-diffractive events","Number of events",1,0,1);
2122 CreateResolutionPtHisto2D("presolutionTPC","p resolution","p^{rec}","(p^{sim}-p^{rec})/p^{rec}");
2123 CreateResolutionPtHisto2D("pTresolutionTPC","p_{T} resolution","p_{T}^{rec}","(p_{T}^{sim}-p_{T}^{rec})/p_{T}^{rec}");
2124 CreateResolutionPtHisto2D("ETresolutionTPC","E_{T} resolution","E_{T}^{rec}","(E_{T}^{sim}-E_{T}^{rec})/E_{T}^{rec}");
2125 CreateResolutionPtHisto2D("pTresolutionTPCITS","p_{T} resolution","p_{T}^{rec}","(p_{T}^{sim}-p_{T}^{rec})/p_{T}^{rec}");
2126 CreateResolutionPtHisto2D("ETresolutionTPCITS","E_{T} resolution","E_{T}^{rec}","(E_{T}^{sim}-E_{T}^{rec})/E_{T}^{rec}");
2127 CreateResolutionPtHisto2D("presolutionTPCITS","p resolution","p^{rec}","(p^{sim}-p^{rec})/p^{rec}");
2128 CreateResolutionPtHisto2D("pTresolutionITS","p_{T} resolution","p_{T}^{rec}","(p_{T}^{sim}-p_{T}^{rec})/p_{T}^{rec}");
2129 CreateResolutionPtHisto2D("ETresolutionITS","E_{T} resolution","E_{T}^{rec}","(E_{T}^{sim}-E_{T}^{rec})/E_{T}^{rec}");
2130 CreateResolutionPtHisto2D("presolutionITS","p resolution","p^{rec}","(p^{sim}-p^{rec})/p^{rec}");
2131 CreatePtHisto1D("pTsimITS","p_{T}^{sim}","p_{T}^{sim}","Number of particles");
2132 CreatePtHisto1D("pTsimTPC","p_{T}^{sim}","p_{T}^{sim}","Number of particles");
2133 CreatePtHisto1D("pTsimTPCITS","p_{T}^{sim}","p_{T}^{sim}","Number of particles");
2134 CreatePtHisto1D("pTrecITS","p_{T}^{rec}","p_{T}^{rec}","Number of particles");
2135 CreatePtHisto1D("pTrecTPC","p_{T}^{rec}","p_{T}^{rec}","Number of particles");
2136 CreatePtHisto1D("pTrecTPCITS","p_{T}^{rec}","p_{T}^{rec}","Number of particles");
2137 if(fDataSet==20100){
2139 if(fNCentBins<21) width = 10;
2140 for(Int_t j=0;j<fNCentBins;j++){
2141 CreatePtHisto1D(Form("pTsimITSCB%i",j),Form("p_{T}^{sim} for %i-%i central",j*width,(j+1)*width),"p_{T}^{sim}","Number of particles");
2142 CreatePtHisto1D(Form("pTsimTPCITSCB%i",j),Form("p_{T}^{sim} for %i-%i central",j*width,(j+1)*width),"p_{T}^{sim}","Number of particles");
2143 CreatePtHisto1D(Form("pTsimTPCCB%i",j),Form("p_{T}^{sim} for %i-%i central",j*width,(j+1)*width),"p_{T}^{sim}","Number of particles");
2144 CreatePtHisto1D(Form("pTrecITSCB%i",j),Form("p_{T}^{rec} for %i-%i central",j*width,(j+1)*width),"p_{T}^{rec}","Number of particles");
2145 CreatePtHisto1D(Form("pTrecTPCITSCB%i",j),Form("p_{T}^{rec} for %i-%i central",j*width,(j+1)*width),"p_{T}^{rec}","Number of particles");
2146 CreatePtHisto1D(Form("pTrecTPCCB%i",j),Form("p_{T}^{rec} for %i-%i central",j*width,(j+1)*width),"p_{T}^{rec}","Number of particles");