1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies
3 // Base class for MC analysis
7 //*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
8 //_________________________________________________________________________
10 #include "AliAnalysisEtMonteCarlo.h"
11 #include "AliAnalysisEtCuts.h"
12 #include "AliESDtrack.h"
14 #include "AliVEvent.h"
15 #include "AliMCEvent.h"
16 #include "AliESDEvent.h"
18 #include "TParticle.h"
19 #include "AliGenHijingEventHeader.h"
20 #include "AliGenPythiaEventHeader.h"
22 #include "AliESDCaloCluster.h"
27 ClassImp(AliAnalysisEtMonteCarlo);
31 AliAnalysisEtMonteCarlo::AliAnalysisEtMonteCarlo():AliAnalysisEt()
35 ,fHistPrimElectronEtaEET(0)
36 ,fHistSecElectronEtaEET(0)
37 ,fHistConvElectronEtaEET(0)
38 ,fHistPrimGammaEtaEET(0)
39 ,fHistPion0GammaEtaEET(0)
40 ,fHistEtaGammaEtaEET(0)
41 ,fHistOmega0GammaEtaEET(0)
42 ,fHistSecGammaEtaEET(0)
44 ,fHistPrimElectronEtaE(0)
45 ,fHistSecElectronEtaE(0)
46 ,fHistConvElectronEtaE(0)
47 ,fHistPrimGammaEtaE(0)
48 ,fHistPion0GammaEtaE(0)
50 ,fHistOmega0GammaEtaE(0)
53 ,fHistPrimElectronEtaERec(0)
54 ,fHistSecElectronEtaERec(0)
55 ,fHistConvElectronEtaERec(0)
56 ,fHistPrimGammaEtaERec(0)
57 ,fHistSecGammaEtaERec(0)
58 ,fHistPion0GammaEtaERec(0)
59 ,fHistEtaGammaEtaERec(0)
60 ,fHistOmega0GammaEtaERec(0)
64 ,fHistElectronERecEMC(0)
66 ,fHistElectronFirstMother(0)
67 ,fHistElectronLastMother(0)
68 ,fHistElectronFirstMotherEtaAcc(0)
69 ,fHistElectronFirstMotherNPP(0)
70 ,fHistElectronFirstMotherNPPAcc(0)
72 ,fHistGammaFirstMother(0)
73 ,fHistGammaLastMother(0)
74 ,fHistGammaFirstMotherEtaAcc(0)
75 ,fHistGammaFirstMotherNPP(0)
76 ,fHistGammaFirstMotherNPPAcc(0)
81 AliAnalysisEtMonteCarlo::~AliAnalysisEtMonteCarlo()
85 Int_t AliAnalysisEtMonteCarlo::AnalyseEvent(AliVEvent* ev)
91 AliFatal("ERROR: Event does not exist");
94 AliMCEvent *event = dynamic_cast<AliMCEvent*>(ev);
96 AliFatal("ERROR: MC Event does not exist");
100 Double_t protonMass =fgProtonMass;
103 AliGenEventHeader* genHeader = event->GenEventHeader();
105 Printf("ERROR: Event generation header does not exist");
108 AliGenHijingEventHeader* hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
109 if (hijingGenHeader) {
110 fImpactParameter = hijingGenHeader->ImpactParameter();
111 fNcoll = hijingGenHeader->HardScatters(); // or should this be some combination of NN() NNw() NwN() NwNw() ?
112 fNpart = hijingGenHeader->ProjectileParticipants() + hijingGenHeader->TargetParticipants();
114 printf("Hijing: ImpactParameter %g ReactionPlaneAngle %g \n",
115 hijingGenHeader->ImpactParameter(), hijingGenHeader->ReactionPlaneAngle());
116 printf("HardScatters %d ProjecileParticipants %d TargetParticipants %d\n",
117 hijingGenHeader->HardScatters(), hijingGenHeader->ProjectileParticipants(), hijingGenHeader->TargetParticipants());
118 printf("ProjSpectatorsn %d ProjSpectatorsp %d TargSpectatorsn %d TargSpectatorsp %d\n",
119 hijingGenHeader->ProjSpectatorsn(), hijingGenHeader->ProjSpectatorsp(), hijingGenHeader->TargSpectatorsn(), hijingGenHeader->TargSpectatorsp());
120 printf("NN %d NNw %d NwN %d, NwNw %d\n",
121 hijingGenHeader->NN(), hijingGenHeader->NNw(), hijingGenHeader->NwN(), hijingGenHeader->NwNw());
125 /* // placeholder if we want to get some Pythia info later
126 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
127 if (pythiaGenHeader) { // not Hijing; try with Pythia
128 printf("Pythia: ProcessType %d GetPtHard %g \n",
129 pythiaGenHeader->ProcessType(), pythiaGenHeader->GetPtHard());
133 // Let's play with the stack!
134 AliStack *stack = event->Stack();
136 Int_t nPrim = stack->GetNtrack();
138 for (Int_t iPart = 0; iPart < nPrim; iPart++)
141 TParticle *part = stack->Particle(iPart);
142 TParticle *partMom = 0;
143 TParticle *partMomLast = 0;
147 Printf("ERROR: Could not get particle %d", iPart);
151 Int_t iPartMom = part->GetMother(0);
152 Int_t iPartLastMom = part->GetMother(1);
154 TParticlePDG *pdg = part->GetPDG(0);
155 TParticlePDG *pdgMom = 0;
156 TParticlePDG *pdgMomLast = 0;
160 //Printf("ERROR: Could not get particle PDG %d", iPart);
166 partMom = stack->Particle(iPartMom);
167 pdgMom = partMom->GetPDG(0);
172 partMomLast = stack->Particle(iPartLastMom);
173 pdgMomLast = partMomLast->GetPDG(0);
177 Double_t particleMassPart = 0; //The mass part in the Et calculation for this particle
179 // Check if it is a primary particle
180 //if (!stack->IsPhysicalPrimary(iPart)) continue;
182 // it goes to the next particle in case it is not a physical primary or not a electron or gamma (want to check the contribution from secondary)
183 if (!stack->IsPhysicalPrimary(iPart))
185 // this part is used only to check the origin of secondary electrons and gammas
188 //if (!stack->IsPhysicalPrimary(iPartMom)) continue;
192 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
194 fHistElectronFirstMotherNPP->Fill(pdgMom->PdgCode());
195 // inside EMCal acceptance
196 if (TMath::Abs(part->Eta()) < fEtaCutAcc && part->Phi() < fPhiCutAccMax && part->Phi() > fPhiCutAccMin)
197 fHistElectronFirstMotherNPPAcc->Fill(pdgMom->PdgCode());
199 else if (pdg->PdgCode() == fgGammaCode)
201 fHistGammaFirstMotherNPP->Fill(pdgMom->PdgCode());
202 if (TMath::Abs(part->Eta()) < fEtaCutAcc && part->Phi() < fPhiCutAccMax && part->Phi() > fPhiCutAccMin)
203 fHistGammaFirstMotherNPPAcc->Fill(pdgMom->PdgCode());
208 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
209 fHistElectronFirstMotherNPP->Fill(-598);
210 else if (pdg->PdgCode() == fgGammaCode)
211 fHistGammaFirstMotherNPP->Fill(-598);
218 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
219 fHistElectronFirstMotherNPP->Fill(-599);
220 else if (pdg->PdgCode() == fgGammaCode)
221 fHistGammaFirstMotherNPP->Fill(-599);
226 if (!((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode) || (pdg->PdgCode() == fgGammaCode)))
229 // this part is used only to check the origin of physical primary electrons and gammas
236 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
237 fHistElectronFirstMother->Fill(pdgMom->PdgCode());
238 else if (pdg->PdgCode() == fgGammaCode)
239 fHistGammaFirstMother->Fill(pdgMom->PdgCode());
241 if (TMath::Abs(part->Eta()) < fCuts->GetCommonEtaCut())
243 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
244 fHistElectronFirstMotherEtaAcc->Fill(pdgMom->PdgCode());
245 else if (pdg->PdgCode() == fgGammaCode)
246 fHistGammaFirstMotherEtaAcc->Fill(pdgMom->PdgCode());
251 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
252 fHistElectronFirstMother->Fill(-598);
253 else if (pdg->PdgCode() == fgGammaCode)
254 fHistGammaFirstMother->Fill(-598);
259 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
260 fHistElectronFirstMother->Fill(-599);
261 else if (pdg->PdgCode() == fgGammaCode)
262 fHistGammaFirstMother->Fill(-599);
269 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
270 fHistElectronLastMother->Fill(pdgMomLast->PdgCode());
271 else if (pdg->PdgCode() == fgGammaCode)
272 fHistGammaLastMother->Fill(pdgMomLast->PdgCode());
276 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
277 fHistElectronLastMother->Fill(-598);
278 else if (pdg->PdgCode() == fgGammaCode)
279 fHistGammaLastMother->Fill(-598);
284 if ((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode))
285 fHistElectronLastMother->Fill(-599);
286 else if (pdg->PdgCode() == fgGammaCode)
287 fHistGammaLastMother->Fill(-599);
291 //printf("MC: iPart %03d eta %4.3f phi %4.3f code %d charge %g \n", iPart, part->Eta(), part->Phi(), pdg->PdgCode(), pdg->Charge()); // tmp/debug printout
293 // Check for reasonable (for now neutral and singly charged) charge on the particle
294 //TODO:Maybe not only singly charged?
295 if (TMath::Abs(TMath::Abs(pdg->Charge()) - fCuts->GetMonteCarloSingleChargedParticle())<1e-3 && TMath::Abs(TMath::Abs(pdg->Charge()) - fCuts->GetMonteCarloNeutralParticle())<1e-3) continue;
299 if (TMath::Abs(part->Eta()) < fCuts->GetCommonEtaCut())
303 TMath::Abs(pdg->PdgCode()) == fgProtonCode ||
304 TMath::Abs(pdg->PdgCode()) == fgNeutronCode ||
305 TMath::Abs(pdg->PdgCode()) == fgLambdaCode ||
306 TMath::Abs(pdg->PdgCode()) == fgXiCode ||
307 TMath::Abs(pdg->PdgCode()) == fgXi0Code ||
308 TMath::Abs(pdg->PdgCode()) == fgOmegaCode
311 if (pdg->PdgCode() > 0) { particleMassPart = - protonMass;}
312 if (pdg->PdgCode() < 0) { particleMassPart = protonMass;}
314 Double_t et = part->Energy() * TMath::Sin(part->Theta()) + particleMassPart;
316 // Fill up total E_T counters for each particle species
317 if (pdg->PdgCode() == fgProtonCode || pdg->PdgCode() == fgAntiProtonCode)
321 if (pdg->PdgCode() == fgPiPlusCode || pdg->PdgCode() == fgPiMinusCode)
325 if (pdg->PdgCode() == fgKPlusCode || pdg->PdgCode() == fgKMinusCode)
327 fChargedKaonEt += et;
329 if (pdg->PdgCode() == fgMuPlusCode || pdg->PdgCode() == fgMuMinusCode)
333 if (pdg->PdgCode() == fgEPlusCode || pdg->PdgCode() == fgEMinusCode)
338 // some neutrals also
339 if(pdg->PdgCode() == fgNeutronCode)
343 if(pdg->PdgCode() == fgAntiNeutronCode)
345 fAntiNeutronEt += et;
347 if(pdg->PdgCode() == fgGammaCode)
353 if (TMath::Abs(pdg->Charge() - fCuts->GetMonteCarloNeutralParticle()) <1e-3 )
355 fNeutralMultiplicity++;
358 // inside EMCal acceptance
359 if (TMath::Abs(part->Eta()) < fEtaCutAcc && part->Phi() < fPhiCutAccMax && part->Phi() > fPhiCutAccMin)
361 fTotNeutralEtAcc += et;
364 if(pdg->PdgCode() == fgGammaCode)
366 if (!stack->IsPhysicalPrimary(iPart))
368 fHistSecGammaEtaE->Fill(part->Energy(),part->Eta());
369 fHistSecGammaEtaEET->Fill(part->Energy(),part->Eta(),et);
375 if (pdgMom->PdgCode() == fgPi0Code)
377 fHistPion0GammaEtaE->Fill(part->Energy(),part->Eta());
378 fHistPion0GammaEtaEET->Fill(part->Energy(),part->Eta(),et);
380 else if (pdgMom->PdgCode() == fgOmega0Code)
382 fHistOmega0GammaEtaE->Fill(part->Energy(),part->Eta());
383 fHistOmega0GammaEtaEET->Fill(part->Energy(),part->Eta(),et);
385 else if (pdgMom->PdgCode() == fgEtaCode)
387 fHistEtaGammaEtaE->Fill(part->Energy(),part->Eta());
388 fHistEtaGammaEtaEET->Fill(part->Energy(),part->Eta(),et);
392 fHistPrimGammaEtaE->Fill(part->Energy(),part->Eta());
393 fHistPrimGammaEtaEET->Fill(part->Energy(),part->Eta(),et);
398 fHistPrimGammaEtaE->Fill(part->Energy(),part->Eta());
399 fHistPrimGammaEtaEET->Fill(part->Energy(),part->Eta(),et);
406 else if (TMath::Abs( pdg->Charge() - fCuts->GetMonteCarloNeutralParticle())>1e-3 )
408 fChargedMultiplicity++;
411 // inside EMCal acceptance
412 if (TMath::Abs(part->Eta()) < fEtaCutAcc && part->Phi() < fPhiCutAccMax && part->Phi() > fPhiCutAccMin)
414 fTotChargedEtAcc += et;
417 if (pdg->PdgCode() == fgProtonCode || pdg->PdgCode() == fgAntiProtonCode)
421 if (pdg->PdgCode() == fgPiPlusCode || pdg->PdgCode() == fgPiMinusCode)
425 if (pdg->PdgCode() == fgKPlusCode || pdg->PdgCode() == fgKMinusCode)
427 fChargedKaonEtAcc += et;
429 if (pdg->PdgCode() == fgMuPlusCode || pdg->PdgCode() == fgMuMinusCode)
434 if (pdg->PdgCode() == fgEPlusCode || pdg->PdgCode() == fgEMinusCode)
436 fElectronEtAcc += et;
439 if (pdg->PdgCode() == fgEPlusCode || pdg->PdgCode() == fgEMinusCode)
441 if (!stack->IsPhysicalPrimary(iPart))
445 if ((pdgMom->PdgCode() == fgGammaCode) && (stack->IsPhysicalPrimary(iPartMom)))
447 fHistConvElectronEtaE->Fill(part->Energy(),part->Eta());
448 fHistConvElectronEtaEET->Fill(part->Energy(),part->Eta(),et);
452 fHistSecElectronEtaE->Fill(part->Energy(),part->Eta());
453 fHistSecElectronEtaEET->Fill(part->Energy(),part->Eta(),et);
458 fHistSecElectronEtaE->Fill(part->Energy(),part->Eta());
459 fHistSecElectronEtaEET->Fill(part->Energy(),part->Eta(),et);
464 fElectronEtAcc += et;
465 fHistPrimElectronEtaE->Fill(part->Energy(),part->Eta());
466 fHistPrimElectronEtaEET->Fill(part->Energy(),part->Eta(),et);
469 } // inside EMCal acceptance
471 // if (TrackHitsCalorimeter(part, event->GetMagneticField()))
472 if (TrackHitsCalorimeter(part)) // magnetic field info not filled?
474 if (pdg->Charge() > 0) fHistPhivsPtPos->Fill(part->Phi(),part->Pt());
475 else fHistPhivsPtNeg->Fill(part->Phi(), part->Pt());
481 fTotEt = fTotChargedEt + fTotNeutralEt;
482 fTotEtAcc = fTotChargedEtAcc + fTotNeutralEtAcc;
488 //Int_t AliAnalysisEtMonteCarlo::AnalyseEvent(AliMCEvent* mcEvent,AliESDEvent* realEvent)
489 Int_t AliAnalysisEtMonteCarlo::AnalyseEvent(AliVEvent* ev,AliVEvent* ev2)
490 { // analyse MC and real event info
491 //if(!mcEvent || !realEvent){
493 AliFatal("ERROR: Event does not exist");
496 //AnalyseEvent(mcEvent);
498 AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
499 AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev2);
500 if(!mcEvent || !realEvent){
501 AliFatal("ERROR: mcEvent or realEvent does not exist");
505 AliStack *stack = mcEvent->Stack();
507 // get all emcal clusters
508 TRefArray* caloClusters = new TRefArray();
509 realEvent->GetEMCALClusters( caloClusters );
511 Int_t nCluster = caloClusters->GetEntries();
514 for (int iCluster = 0; iCluster < nCluster; iCluster++ )
516 AliESDCaloCluster* caloCluster = ( AliESDCaloCluster* )caloClusters->At( iCluster );
517 Float_t caloE = caloCluster->E();
519 UInt_t iPart = (UInt_t)TMath::Abs(caloCluster->GetLabel());
520 TParticle *part = stack->Particle(iPart);
521 TParticle *partMom = 0;
525 Printf("No MC particle %d", iCluster);
529 // compare MC and Rec energies for all particles
530 fHistAllERecEMC->Fill(part->Energy(),caloE);
532 TParticlePDG *pdg = part->GetPDG(0);
533 TParticlePDG *pdgMom = 0;
537 Printf("ERROR: Could not get particle PDG %d", iPart);
541 Int_t iPartMom = part->GetMother(0);
545 partMom = stack->Particle(iPartMom);
546 pdgMom = partMom->GetPDG(0);
549 // Check if it is a primary particle
550 //if (!stack->IsPhysicalPrimary(iPart)) continue;
551 if (!stack->IsPhysicalPrimary(iPart)) // check whether particle is primary. we keep secondary electron and gamma for testing.
553 if (!((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode) || (pdg->PdgCode() == fgGammaCode)))
555 } // end of primary particle check
557 if (TMath::Abs(TMath::Abs(pdg->Charge()) - fCuts->GetMonteCarloSingleChargedParticle())<1e-3 && TMath::Abs(TMath::Abs(pdg->Charge()) - fCuts->GetMonteCarloNeutralParticle())<1e-3) continue;
559 if(pdg->PdgCode() == fgGammaCode)
561 // compare MC and Rec energies for gammas
562 fHistGammaERecEMC->Fill(part->Energy(),caloE);
564 if (!stack->IsPhysicalPrimary(iPart))
566 fHistSecGammaEtaERec->Fill(part->Energy(),part->Eta());
572 if (pdgMom->PdgCode() == fgPi0Code)
574 fHistPion0GammaEtaERec->Fill(part->Energy(),part->Eta());
576 else if (partMom->GetPDG(0)->PdgCode() == fgOmega0Code)
578 fHistOmega0GammaEtaERec->Fill(part->Energy(),part->Eta());
580 else if (partMom->GetPDG(0)->PdgCode() == fgEtaCode)
582 fHistEtaGammaEtaERec->Fill(part->Energy(),part->Eta());
586 fHistPrimGammaEtaERec->Fill(part->Energy(),part->Eta());
591 fHistPrimGammaEtaERec->Fill(part->Energy(),part->Eta());
596 if (pdg->PdgCode() == fgEPlusCode || pdg->PdgCode() == fgEMinusCode)
598 // compare MC and Rec energies for electrons
599 fHistElectronERecEMC->Fill(part->Energy(),caloE);
601 if (!stack->IsPhysicalPrimary(iPart))
605 if ((pdgMom->PdgCode() == fgGammaCode) && (stack->IsPhysicalPrimary(iPartMom)))
607 fHistConvElectronEtaERec->Fill(part->Energy(),part->Eta());
611 fHistSecElectronEtaERec->Fill(part->Energy(),part->Eta());
616 fHistSecElectronEtaERec->Fill(part->Energy(),part->Eta());
621 fHistPrimElectronEtaERec->Fill(part->Energy(),part->Eta());
624 } // end of loop over clusters
628 void AliAnalysisEtMonteCarlo::Init()
630 AliAnalysisEt::Init();
633 void AliAnalysisEtMonteCarlo::ResetEventValues()
634 { // reset event values
635 AliAnalysisEt::ResetEventValues();
637 // collision geometry defaults for p+p:
638 fImpactParameter = 0;
643 void AliAnalysisEtMonteCarlo::CreateHistograms()
644 { // histogram related additions
645 AliAnalysisEt::CreateHistograms();
647 fTree->Branch("fImpactParameter",&fImpactParameter,"fImpactParameter/D");
648 fTree->Branch("fNcoll",&fNcoll,"fNcoll/I");
649 fTree->Branch("fNpart",&fNpart,"fNpart/I");
651 fHistPrimElectronEtaEET = CreateEtaEHisto2D("fHistPrimElectronEtaEET","MC E_{T}, primary electrons","E_{T}(GeV)");
652 fHistSecElectronEtaEET = CreateEtaEHisto2D("fHistSecElectronEtaEET","MC E_{T}, secondary (no conversion) electrons","E_{T}(GeV)");
653 fHistConvElectronEtaEET = CreateEtaEHisto2D("fHistConvElectronEtaEET","MC E_{T}, electrons from conversion","E_{T}(GeV)");
654 fHistPrimGammaEtaEET = CreateEtaEHisto2D("fHistPrimGammaEtaEET","MC E_{T}, primary gammas","E_{T}(GeV)");
655 fHistPion0GammaEtaEET = CreateEtaEHisto2D("fHistPion0GammaEtaEET","MC E_{T}, #pi^{0}","E_{T}(GeV)");
656 fHistOmega0GammaEtaEET = CreateEtaEHisto2D("fHistOmega0GammaEtaEET","MC E_{T}, #omega^{0}","E_{T}(GeV)");
657 fHistEtaGammaEtaEET = CreateEtaEHisto2D("fHistEtaGammaEtaEET","MC E_{T}, #eta","E_{T}(GeV)");
658 fHistSecGammaEtaEET = CreateEtaEHisto2D("fHistSecGammaEtaEET","MC E_{T}, secondary (no #pi^{0}, #eta or #omega) gammas","E_{T}(GeV)");
660 fHistPrimElectronEtaE = CreateEtaEHisto2D("fHistPrimElectronEtaE","MC E_{T}, primary electrons","#");
661 fHistSecElectronEtaE = CreateEtaEHisto2D("fHistSecElectronEtaE","MC E_{T}, secondary (no conversion) electrons","#");
662 fHistConvElectronEtaE = CreateEtaEHisto2D("fHistConvElectronEtaE","MC E_{T}, electrons from conversion","#");
663 fHistPrimGammaEtaE = CreateEtaEHisto2D("fHistPrimGammaEtaE","MC E_{T}, primary gammas","#");
664 fHistPion0GammaEtaE = CreateEtaEHisto2D("fHistPion0GammaEtaE","MC E_{T}, #pi^{0}","#");
665 fHistOmega0GammaEtaE = CreateEtaEHisto2D("fHistOmega0GammaEtaE","MC E_{T}, #omega^{0}","#");
666 fHistEtaGammaEtaE = CreateEtaEHisto2D("fHistEtaGammaEtaE","MC E_{T}, #eta","#");
667 fHistSecGammaEtaE = CreateEtaEHisto2D("fHistSecGammaEtaE","MC E_{T}, secondary (no #pi^{0}, #eta or #omega) gammas","#");
669 fHistPrimElectronEtaERec = CreateEtaEHisto2D("fHistPrimElectronEtaERec","MC E_{T}, primary electrons","#");
670 fHistSecElectronEtaERec = CreateEtaEHisto2D("fHistSecElectronEtaERec","MC E_{T}, secondary (no conversion) electrons","#");
671 fHistConvElectronEtaERec = CreateEtaEHisto2D("fHistConvElectronEtaERec","MC E_{T}, electrons from conversion","#");
672 fHistPrimGammaEtaERec = CreateEtaEHisto2D("fHistPrimGammaEtaERec","MC E_{T}, primary gammas","#");
673 fHistPion0GammaEtaERec = CreateEtaEHisto2D("fHistPion0GammaEtaERec","MC E_{T}, #pi^{0}","#");
674 fHistOmega0GammaEtaERec = CreateEtaEHisto2D("fHistOmega0GammaEtaERec","MC E_{T}, #omega","#");
675 fHistEtaGammaEtaERec = CreateEtaEHisto2D("fHistEtaGammaEtaERec","MC E_{T}, #eta","#");
676 fHistSecGammaEtaERec = CreateEtaEHisto2D("fHistSecGammaEtaERec","MC E_{T}, secondary (no #pi^{0}, #eta or #omega) gammas","#");
678 fHistAllERecEMC = new TH2F("fHistAllERecEMC","E cluster Rec vs MC, all particles",fgNumOfEBins, fgEAxis,fgNumOfEBins, fgEAxis);
679 fHistAllERecEMC->SetXTitle("E_{MC}(GeV)");
680 fHistAllERecEMC->SetYTitle("E_{Rec}(GeV)");
682 fHistElectronERecEMC = new TH2F("fHistElectronERecEMC","E cluster Rec vs MC, Electrons",fgNumOfEBins, fgEAxis,fgNumOfEBins, fgEAxis);
683 fHistElectronERecEMC->SetXTitle("E_{MC}(GeV)");
684 fHistElectronERecEMC->SetYTitle("E_{Rec}(GeV)");
686 fHistGammaERecEMC = new TH2F("fHistGammaERecEMC","E cluster Rec vs MC, Gammas",fgNumOfEBins, fgEAxis,fgNumOfEBins, fgEAxis);
687 fHistGammaERecEMC->SetXTitle("E_{MC}(GeV)");
688 fHistGammaERecEMC->SetYTitle("E_{Rec}(GeV)");
690 fHistElectronFirstMother = new TH1F("fHistElectronFirstMother","Electron First Mother PDG Code Distribution",1201,-600.5,600.5);
691 fHistElectronLastMother = new TH1F("fHistElectronLastMother","Electron Last Mother PDG Code Distribution",1201,-600.5,600.5);
692 fHistElectronFirstMotherEtaAcc = new TH1F("fHistElectronFirstMotherEtaAcc","Electron First Mother PDG Code Distribution",1201,-600.5,600.5);
693 fHistElectronFirstMotherNPP = new TH1F("fHistElectronFirstMotherNPP","Electron First Mother PDG Code Distribution",1201,-600.5,600.5);
694 fHistElectronFirstMotherNPPAcc = new TH1F("fHistElectronFirstMotherNPPAcc","Electron First Mother PDG Code Distribution",1201,-600.5,600.5);
696 fHistGammaFirstMother = new TH1F("fHistGammaFirstMother","Gamma First Mother PDG Code Distribution",1201,-600.5,600.5);
697 fHistGammaLastMother = new TH1F("fHistGammaLastMother","Gamma Last Mother PDG Code Distribution",1201,-600.5,600.5);
698 fHistGammaFirstMotherEtaAcc = new TH1F("fHistGammaFirstMotherEtaAcc","Gamma First Mother PDG Code Distribution",1201,-600.5,600.5);
699 fHistGammaFirstMotherNPP = new TH1F("fHistGammaFirstMotherNPP","Gamma First Mother PDG Code Distribution",1201,-600.5,600.5);
700 fHistGammaFirstMotherNPPAcc = new TH1F("fHistGammaFirstMotherNPP","Gamma First Mother PDG Code Distribution",1201,-600.5,600.5);
703 void AliAnalysisEtMonteCarlo::FillOutputList(TList *list)
704 {//fill the output list
705 AliAnalysisEt::FillOutputList(list);
707 list->Add(fHistPrimElectronEtaEET);
708 list->Add(fHistSecElectronEtaEET);
709 list->Add(fHistConvElectronEtaEET);
710 list->Add(fHistPrimGammaEtaEET);
711 list->Add(fHistPion0GammaEtaEET);
712 list->Add(fHistOmega0GammaEtaEET);
713 list->Add(fHistEtaGammaEtaEET);
714 list->Add(fHistSecGammaEtaEET);
716 list->Add(fHistPrimElectronEtaE);
717 list->Add(fHistSecElectronEtaE);
718 list->Add(fHistConvElectronEtaE);
719 list->Add(fHistPrimGammaEtaE);
720 list->Add(fHistPion0GammaEtaE);
721 list->Add(fHistOmega0GammaEtaE);
722 list->Add(fHistEtaGammaEtaE);
723 list->Add(fHistSecGammaEtaE);
725 list->Add(fHistPrimElectronEtaERec);
726 list->Add(fHistSecElectronEtaERec);
727 list->Add(fHistConvElectronEtaERec);
728 list->Add(fHistPrimGammaEtaERec);
729 list->Add(fHistPion0GammaEtaERec);
730 list->Add(fHistOmega0GammaEtaERec);
731 list->Add(fHistEtaGammaEtaERec);
732 list->Add(fHistSecGammaEtaERec);
734 list->Add(fHistAllERecEMC);
735 list->Add(fHistElectronERecEMC);
736 list->Add(fHistGammaERecEMC);
738 list->Add(fHistElectronFirstMother);
739 list->Add(fHistElectronLastMother);
740 list->Add(fHistElectronFirstMotherEtaAcc);
741 list->Add(fHistElectronFirstMotherNPP);
742 list->Add(fHistElectronFirstMotherNPPAcc);
744 list->Add(fHistGammaFirstMother);
745 list->Add(fHistGammaLastMother);
746 list->Add(fHistGammaFirstMotherEtaAcc);
747 list->Add(fHistGammaFirstMotherNPP);
748 list->Add(fHistGammaFirstMotherNPPAcc);
752 bool AliAnalysisEtMonteCarlo::TrackHitsCalorimeter(TParticle* part, Double_t magField)
754 // printf(" TrackHitsCalorimeter - magField %f\n", magField);
755 AliESDtrack *esdTrack = new AliESDtrack(part);
756 // Printf("MC Propagating track: eta: %f, phi: %f, pt: %f", esdTrack->Eta(), esdTrack->Phi(), esdTrack->Pt());
758 Bool_t prop = esdTrack->PropagateTo(fDetectorRadius, magField);
760 // if(prop) Printf("Track propagated, eta: %f, phi: %f, pt: %f", esdTrack->Eta(), esdTrack->Phi(), esdTrack->Pt());
762 bool status = prop &&
763 TMath::Abs(esdTrack->Eta()) < fEtaCutAcc &&
764 esdTrack->Phi() > fPhiCutAccMin*TMath::Pi()/180. &&
765 esdTrack->Phi() < fPhiCutAccMax*TMath::Pi()/180.;