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"
19 #include "TParticle.h"
20 #include "AliGenHijingEventHeader.h"
21 #include "AliGenPythiaEventHeader.h"
23 #include "AliESDCaloCluster.h"
26 #include <AliCentrality.h>
30 ClassImp(AliAnalysisEtMonteCarlo);
34 AliAnalysisEtMonteCarlo::AliAnalysisEtMonteCarlo():AliAnalysisEt()
39 ,fHistDecayVertexNonRemovedCharged(0)
40 ,fHistDecayVertexRemovedCharged(0)
41 ,fHistDecayVertexNonRemovedNeutral(0)
42 ,fHistDecayVertexRemovedNeutral(0)
45 ,fHistEtNonRemovedProtons(0)
46 ,fHistEtNonRemovedAntiProtons(0)
47 ,fHistEtNonRemovedPiPlus(0)
48 ,fHistEtNonRemovedPiMinus(0)
49 ,fHistEtNonRemovedKaonPlus(0)
50 ,fHistEtNonRemovedKaonMinus(0)
51 ,fHistEtNonRemovedK0s(0)
52 ,fHistEtNonRemovedLambdas(0)
53 ,fHistEtNonRemovedElectrons(0)
54 ,fHistEtNonRemovedPositrons(0)
55 ,fHistEtNonRemovedMuPlus(0)
56 ,fHistEtNonRemovedMuMinus(0)
57 ,fHistEtNonRemovedNeutrons(0)
58 ,fHistEtNonRemovedAntiNeutrons(0)
59 ,fHistEtNonRemovedGammas(0)
60 ,fHistEtNonRemovedGammasFromPi0(0)
61 ,fHistEtRemovedGammas(0)
62 ,fHistEtRemovedNeutrons(0)
63 ,fHistEtRemovedAntiNeutrons(0)
64 ,fHistMultNonRemovedProtons(0)
65 ,fHistMultNonRemovedAntiProtons(0)
66 ,fHistMultNonRemovedPiPlus(0)
67 ,fHistMultNonRemovedPiMinus(0)
68 ,fHistMultNonRemovedKaonPlus(0)
69 ,fHistMultNonRemovedKaonMinus(0)
70 ,fHistMultNonRemovedK0s(0)
71 ,fHistMultNonRemovedLambdas(0)
72 ,fHistMultNonRemovedElectrons(0)
73 ,fHistMultNonRemovedPositrons(0)
74 ,fHistMultNonRemovedMuPlus(0)
75 ,fHistMultNonRemovedMuMinus(0)
76 ,fHistMultNonRemovedNeutrons(0)
77 ,fHistMultNonRemovedAntiNeutrons(0)
78 ,fHistMultNonRemovedGammas(0)
79 ,fHistMultRemovedGammas(0)
80 ,fHistMultRemovedNeutrons(0)
81 ,fHistMultRemovedAntiNeutrons(0)
82 ,fHistTrackMultvsNonRemovedCharged(0)
83 ,fHistTrackMultvsNonRemovedNeutral(0)
84 ,fHistTrackMultvsRemovedGamma(0)
85 ,fHistClusterMultvsNonRemovedCharged(0)
86 ,fHistClusterMultvsNonRemovedNeutral(0)
87 ,fHistClusterMultvsRemovedGamma(0)
88 ,fHistMultvsNonRemovedChargedE(0)
89 ,fHistMultvsNonRemovedNeutralE(0)
90 ,fHistMultvsRemovedGammaE(0)
91 ,fEtNonRemovedProtons(0)
92 ,fEtNonRemovedAntiProtons(0)
93 ,fEtNonRemovedPiPlus(0)
94 ,fEtNonRemovedPiMinus(0)
95 ,fEtNonRemovedKaonPlus(0)
96 ,fEtNonRemovedKaonMinus(0)
98 ,fEtNonRemovedLambdas(0)
99 ,fEtNonRemovedElectrons(0)
100 ,fEtNonRemovedPositrons(0)
101 ,fEtNonRemovedMuMinus(0)
102 ,fEtNonRemovedMuPlus(0)
103 ,fEtNonRemovedGammas(0)
104 ,fEtNonRemovedGammasFromPi0(0)
105 ,fEtNonRemovedNeutrons(0)
106 ,fEtNonRemovedAntiNeutrons(0)
108 ,fEtRemovedNeutrons(0)
109 ,fEtRemovedAntiNeutrons(0)
110 ,fMultNonRemovedProtons(0)
111 ,fMultNonRemovedAntiProtons(0)
112 ,fMultNonRemovedPiPlus(0)
113 ,fMultNonRemovedPiMinus(0)
114 ,fMultNonRemovedKaonPlus(0)
115 ,fMultNonRemovedKaonMinus(0)
116 ,fMultNonRemovedK0s(0)
117 ,fMultNonRemovedLambdas(0)
118 ,fMultNonRemovedElectrons(0)
119 ,fMultNonRemovedPositrons(0)
120 ,fMultNonRemovedMuMinus(0)
121 ,fMultNonRemovedMuPlus(0)
122 ,fMultNonRemovedGammas(0)
123 ,fMultNonRemovedNeutrons(0)
124 ,fMultNonRemovedAntiNeutrons(0)
125 ,fMultRemovedGammas(0)
126 ,fMultRemovedNeutrons(0)
127 ,fMultRemovedAntiNeutrons(0)
129 ,fHistDxDzNonRemovedCharged(0)
130 ,fHistDxDzRemovedCharged(0)
131 ,fHistDxDzNonRemovedNeutral(0)
132 ,fHistDxDzRemovedNeutral(0)
136 ,fHistPiPlusMultAcc(0)
137 ,fHistPiMinusMultAcc(0)
138 ,fHistPiZeroMultAcc(0)
147 ,fChargedNotRemoved(0)
148 ,fNeutralNotRemoved(0)
149 ,fEnergyNeutralRemoved(0)
150 ,fEnergyChargedRemoved(0)
151 ,fEnergyChargedNotRemoved(0)
152 ,fEnergyNeutralNotRemoved(0)
155 fTrackDistanceCut = 7.0;
159 AliAnalysisEtMonteCarlo::~AliAnalysisEtMonteCarlo()
161 delete fHistDecayVertexNonRemovedCharged; // Decay vertex for non-removed charged particles
162 delete fHistDecayVertexRemovedCharged; // Decay vertex for non-removed charged particles
163 delete fHistDecayVertexNonRemovedNeutral; // Decay vertex for non-removed charged particles
164 delete fHistDecayVertexRemovedNeutral; // Decay vertex for non-removed charged particles
166 delete fHistRemovedOrNot; // If charged/neutral particles were removed or not
168 delete fHistEtNonRemovedProtons; // enter comment here
169 delete fHistEtNonRemovedAntiProtons; // enter comment here
170 delete fHistEtNonRemovedPiPlus; // enter comment here
171 delete fHistEtNonRemovedPiMinus; // enter comment here
172 delete fHistEtNonRemovedKaonPlus; // enter comment here
173 delete fHistEtNonRemovedKaonMinus; // enter comment here
174 delete fHistEtNonRemovedK0s; // enter comment here
175 delete fHistEtNonRemovedLambdas; // enter comment here
176 delete fHistEtNonRemovedElectrons; // enter comment here
177 delete fHistEtNonRemovedPositrons; // enter comment here
178 delete fHistEtNonRemovedMuPlus; // enter comment here
179 delete fHistEtNonRemovedMuMinus; // enter comment here
180 delete fHistEtNonRemovedNeutrons; // enter comment here
181 delete fHistEtNonRemovedAntiNeutrons; // enter comment here
182 delete fHistEtNonRemovedGammas; // enter comment here
183 delete fHistEtNonRemovedGammasFromPi0; // enter comment here
185 delete fHistEtRemovedGammas; // enter comment here
186 delete fHistEtRemovedNeutrons; // enter comment here
187 delete fHistEtRemovedAntiNeutrons; // enter comment here
190 delete fHistMultNonRemovedProtons; // enter comment here
191 delete fHistMultNonRemovedAntiProtons; // enter comment here
192 delete fHistMultNonRemovedPiPlus; // enter comment here
193 delete fHistMultNonRemovedPiMinus; // enter comment here
194 delete fHistMultNonRemovedKaonPlus; // enter comment here
195 delete fHistMultNonRemovedKaonMinus; // enter comment here
196 delete fHistMultNonRemovedK0s; // enter comment here
197 delete fHistMultNonRemovedLambdas; // enter comment here
198 delete fHistMultNonRemovedElectrons; // enter comment here
199 delete fHistMultNonRemovedPositrons; // enter comment here
200 delete fHistMultNonRemovedMuPlus; // enter comment here
201 delete fHistMultNonRemovedMuMinus; // enter comment here
202 delete fHistMultNonRemovedNeutrons; // enter comment here
203 delete fHistMultNonRemovedAntiNeutrons; // enter comment here
204 delete fHistMultNonRemovedGammas; // enter comment here
206 delete fHistMultRemovedGammas; // enter comment here
207 delete fHistMultRemovedNeutrons; // enter comment here
208 delete fHistMultRemovedAntiNeutrons; // enter comment here
210 delete fHistTrackMultvsNonRemovedCharged; // enter comment here
211 delete fHistTrackMultvsNonRemovedNeutral; // enter comment here
212 delete fHistTrackMultvsRemovedGamma; // enter comment here
214 delete fHistClusterMultvsNonRemovedCharged; // enter comment here
215 delete fHistClusterMultvsNonRemovedNeutral; // enter comment here
216 delete fHistClusterMultvsRemovedGamma; // enter comment here
218 delete fHistMultvsNonRemovedChargedE; // enter comment here
219 delete fHistMultvsNonRemovedNeutralE; // enter comment here
220 delete fHistMultvsRemovedGammaE; // enter comment here
221 delete fHistDxDzNonRemovedCharged; // enter comment here
222 delete fHistDxDzRemovedCharged; // enter comment here
223 delete fHistDxDzNonRemovedNeutral; // enter comment here
224 delete fHistDxDzRemovedNeutral; // enter comment here
226 delete fHistPiPlusMult; // enter comment here
227 delete fHistPiMinusMult; // enter comment here
228 delete fHistPiZeroMult; // enter comment here
230 delete fHistPiPlusMultAcc; // enter comment here
231 delete fHistPiMinusMultAcc; // enter comment here
232 delete fHistPiZeroMultAcc; // enter comment here
235 Int_t AliAnalysisEtMonteCarlo::AnalyseEvent(AliVEvent* ev)
236 { // analyse MC event
244 fCentClass = fCentrality->GetCentralityClass10(fCentralityMethod);
247 fSparseTracks[0] = 0;
248 fSparseTracks[1] = 0;
249 fSparseTracks[2] = 0;
250 fSparseTracks[3] = 0;
251 fSparseTracks[4] = 0;
252 fSparseTracks[5] = 0;
253 fSparseTracks[6] = fCentClass;
256 // Get us an mc event
258 AliFatal("ERROR: Event does not exist");
261 AliMCEvent *event = dynamic_cast<AliMCEvent*>(ev);
263 AliFatal("ERROR: MC Event does not exist");
267 Double_t protonMass =fgProtonMass;
270 AliGenEventHeader* genHeader = event->GenEventHeader();
272 Printf("ERROR: Event generation header does not exist");
275 AliGenHijingEventHeader* hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
276 if (hijingGenHeader) {
277 fImpactParameter = hijingGenHeader->ImpactParameter();
278 fNcoll = hijingGenHeader->HardScatters(); // or should this be some combination of NN() NNw() NwN() NwNw() ?
279 fNpart = hijingGenHeader->ProjectileParticipants() + hijingGenHeader->TargetParticipants();
281 printf("Hijing: ImpactParameter %g ReactionPlaneAngle %g \n",
282 hijingGenHeader->ImpactParameter(), hijingGenHeader->ReactionPlaneAngle());
283 printf("HardScatters %d ProjecileParticipants %d TargetParticipants %d\n",
284 hijingGenHeader->HardScatters(), hijingGenHeader->ProjectileParticipants(), hijingGenHeader->TargetParticipants());
285 printf("ProjSpectatorsn %d ProjSpectatorsp %d TargSpectatorsn %d TargSpectatorsp %d\n",
286 hijingGenHeader->ProjSpectatorsn(), hijingGenHeader->ProjSpectatorsp(), hijingGenHeader->TargSpectatorsn(), hijingGenHeader->TargSpectatorsp());
287 printf("NN %d NNw %d NwN %d, NwNw %d\n",
288 hijingGenHeader->NN(), hijingGenHeader->NNw(), hijingGenHeader->NwN(), hijingGenHeader->NwNw());
292 /* // placeholder if we want to get some Pythia info later
293 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
294 if (pythiaGenHeader) { // not Hijing; try with Pythia
295 printf("Pythia: ProcessType %d GetPtHard %g \n",
296 pythiaGenHeader->ProcessType(), pythiaGenHeader->GetPtHard());
300 // Let's play with the stack!
301 AliStack *stack = event->Stack();
303 Int_t nPrim = stack->GetNtrack();
306 for (Int_t iPart = 0; iPart < nPrim; iPart++)
309 TParticle *part = stack->Particle(iPart);
310 // TParticle *partMom = 0;
311 // TParticle *partMomLast = 0;
315 Printf("ERROR: Could not get particle %d", iPart);
319 // Int_t iPartMom = part->GetMother(0);
320 // Int_t iPartLastMom = part->GetMother(1);
322 TParticlePDG *pdg = part->GetPDG(0);
323 //TParticlePDG *pdgMom = 0;
324 // TParticlePDG *pdgMomLast = 0;
328 //Printf("ERROR: Could not get particle PDG %d", iPart);
334 // partMom = stack->Particle(iPartMom);
335 // //pdgMom = partMom->GetPDG(0);
338 // if (iPartLastMom>0)
340 // partMomLast = stack->Particle(iPartLastMom);
341 // pdgMomLast = partMomLast->GetPDG(0);
345 Double_t particleMassPart = 0; //The mass part in the Et calculation for this particle
347 // Check if it is a primary particle
348 //if (!stack->IsPhysicalPrimary(iPart)) continue;
350 //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
352 // Check for reasonable (for now neutral and singly charged) charge on the particle
353 //TODO:Maybe not only singly charged?
354 if ((stack->IsPhysicalPrimary(iPart))&&( TMath::Abs(TMath::Abs(pdg->Charge()) - fCuts->GetMonteCarloSingleChargedParticle())<1e-3 || TMath::Abs(TMath::Abs(pdg->Charge()) - fCuts->GetMonteCarloNeutralParticle())<1e-3))
359 if (TMath::Abs(part->Eta()) < fCuts->GetCommonEtaCut())
363 TMath::Abs(pdg->PdgCode()) == fgProtonCode ||
364 TMath::Abs(pdg->PdgCode()) == fgNeutronCode ||
365 TMath::Abs(pdg->PdgCode()) == fgLambdaCode ||
366 TMath::Abs(pdg->PdgCode()) == fgXiCode ||
367 TMath::Abs(pdg->PdgCode()) == fgXi0Code ||
368 TMath::Abs(pdg->PdgCode()) == fgOmegaCode
371 if (pdg->PdgCode() > 0) {
372 particleMassPart = - protonMass;
374 if (pdg->PdgCode() < 0) {
375 particleMassPart = protonMass;
378 Double_t et = part->Energy() * TMath::Sin(part->Theta()) + particleMassPart;
380 fSparseTracks[0] = pdg->PdgCode();
381 fSparseTracks[1] = pdg->Charge()*3;
382 fSparseTracks[2] = pdg->Mass();
383 fSparseTracks[3] = et;
384 fSparseTracks[4] = part->Pt();
385 fSparseTracks[5] = part->Eta();
386 fSparseHistTracks->Fill(fSparseTracks);
388 // Fill up total E_T counters for each particle species
389 if (pdg->PdgCode() == fgProtonCode || pdg->PdgCode() == fgAntiProtonCode)
393 if (pdg->PdgCode() == fgPiPlusCode || pdg->PdgCode() == fgPiMinusCode)
396 if (pdg->PdgCode() == fgPiPlusCode)
405 if (pdg->PdgCode() == fgGammaCode)
409 if (pdg->PdgCode() == fgKPlusCode || pdg->PdgCode() == fgKMinusCode)
411 fChargedKaonEt += et;
413 if (pdg->PdgCode() == fgMuPlusCode || pdg->PdgCode() == fgMuMinusCode)
417 if (pdg->PdgCode() == fgEPlusCode || pdg->PdgCode() == fgEMinusCode)
422 // some neutrals also
423 if (pdg->PdgCode() == fgNeutronCode)
427 if (pdg->PdgCode() == fgAntiNeutronCode)
429 fAntiNeutronEt += et;
431 if (pdg->PdgCode() == fgGammaCode)
437 if (TMath::Abs(pdg->Charge() - fCuts->GetMonteCarloNeutralParticle()) <1e-3 )
440 if (et > fCuts->GetCommonClusterEnergyCut()) fTotNeutralEt += et;
442 // inside EMCal acceptance
443 if (TMath::Abs(part->Eta()) < fEtaCutAcc && part->Phi() < fPhiCutAccMax && part->Phi() > fPhiCutAccMin)
445 fNeutralMultiplicity++;
446 //std::cout << pdg->PdgCode() << ", " << iPart << ", " << part->GetMother(0) << ", " << stack->IsPhysicalPrimary(iPart) << ", " << part->GetNDaughters() << ", " << part->Energy() << ", " << part->Eta() << ", " << part->Phi() << std::endl;
448 //if(part->GetDaughter(0) > 0) std::cout << stack->Particle(part->GetDaughter(0))->GetPdgCode() << " " << stack->Particle(part->GetDaughter(1))->GetPdgCode() << std::endl;
449 if (et > fCuts->GetCommonClusterEnergyCut()) fTotNeutralEtAcc += et;
450 if (et > fCuts->GetCommonClusterEnergyCut()) fTotEtAcc += et;
451 if (part->Energy() > 0.05) partCount++;
455 else if (TMath::Abs( pdg->Charge() - fCuts->GetMonteCarloNeutralParticle())>1e-3 )
457 fChargedMultiplicity++;
460 // inside EMCal acceptance
461 if (TMath::Abs(part->Eta()) < fEtaCutAcc && part->Phi() < fPhiCutAccMax && part->Phi() > fPhiCutAccMin)
463 fTotChargedEtAcc += et;
466 if (pdg->PdgCode() == fgProtonCode || pdg->PdgCode() == fgAntiProtonCode)
470 if (pdg->PdgCode() == fgPiPlusCode || pdg->PdgCode() == fgPiMinusCode)
474 if (pdg->PdgCode() == fgKPlusCode || pdg->PdgCode() == fgKMinusCode)
476 fChargedKaonEtAcc += et;
478 if (pdg->PdgCode() == fgMuPlusCode || pdg->PdgCode() == fgMuMinusCode)
483 if (pdg->PdgCode() == fgEPlusCode || pdg->PdgCode() == fgEMinusCode)
485 fElectronEtAcc += et;
487 } // inside EMCal acceptance
489 // if (TrackHitsCalorimeter(part, event->GetMagneticField()))
490 if (TrackHitsCalorimeter(part)) // magnetic field info not filled?
492 if (pdg->Charge() > 0) fHistPhivsPtPos->Fill(part->Phi(),part->Pt());
493 else fHistPhivsPtNeg->Fill(part->Phi(), part->Pt());
501 fTotEt = fTotChargedEt + fTotNeutralEt;
502 fTotEtAcc = fTotChargedEtAcc + fTotNeutralEtAcc;
505 //std::cout << "Event done! # of particles: " << partCount << std::endl;
508 //Int_t AliAnalysisEtMonteCarlo::AnalyseEvent(AliMCEvent* mcEvent,AliESDEvent* realEvent)
509 Int_t AliAnalysisEtMonteCarlo::AnalyseEvent(AliVEvent* ev,AliVEvent* ev2)
510 { // analyse MC and real event info
511 //if(!mcEvent || !realEvent){
513 AliFatal("ERROR: Event does not exist");
517 fSparseClusters[0] = 0;
518 fSparseClusters[1] = 0;
519 fSparseClusters[2] = 0;
520 fSparseClusters[3] = 0;
521 fSparseClusters[4] = 0;
522 fSparseClusters[5] = 0;
523 fSparseClusters[6] = 0;
524 fSparseClusters[7] = 0;
525 fSparseClusters[8] = 0;
526 fSparseClusters[9] = fCentClass;
527 fSparseClusters[10] = 0;
529 //AnalyseEvent(mcEvent);
531 AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
532 AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev2);
533 if (!mcEvent || !realEvent) {
534 AliFatal("ERROR: mcEvent or realEvent does not exist");
538 AliStack *stack = mcEvent->Stack();
540 // get all detector clusters
541 TRefArray* caloClusters = new TRefArray();
542 if (fDetector == fCuts->GetDetectorEmcal()) realEvent->GetEMCALClusters( caloClusters );
543 else if (fDetector == fCuts->GetDetectorPhos()) realEvent->GetPHOSClusters( caloClusters );
545 AliFatal("Detector ID has not been specified");
549 // Track loop to fill a pT spectrum
550 for (Int_t iTracks = 0; iTracks < realEvent->GetNumberOfTracks(); iTracks++)
552 AliESDtrack* track = realEvent->GetTrack(iTracks);
555 Printf("ERROR: Could not receive track %d", iTracks);
559 if ( track->Phi() < fCuts->GetGeometryPhosPhiAccMaxCut() * TMath::Pi()/180. && track->Phi() > fCuts->GetGeometryPhosPhiAccMinCut() * TMath::Pi()/180. && TMath::Abs(track->Eta()) < fCuts->GetGeometryPhosEtaAccCut())
565 Int_t nCluster = caloClusters->GetEntries();
568 for (int iCluster = 0; iCluster < nCluster; iCluster++ )
570 AliESDCaloCluster* caloCluster = ( AliESDCaloCluster* )caloClusters->At( iCluster );
571 //Float_t caloE = caloCluster->E();
573 UInt_t iPart = (UInt_t)TMath::Abs(caloCluster->GetLabel());
574 TParticle *part = stack->Particle(iPart);
575 TParticle *partMom = 0;
579 Printf("No MC particle %d", iCluster);
583 // compare MC and Rec energies for all particles
584 //fHistAllERecEMC->Fill(part->Energy(),caloE);
586 TParticlePDG *pdg = part->GetPDG(0);
587 TParticlePDG *pdgMom = 0;
591 Printf("ERROR: Could not get particle PDG %d", iPart);
595 Int_t iPartMom = part->GetMother(0);
599 partMom = stack->Particle(iPartMom);
600 pdgMom = partMom->GetPDG(0);
603 // Check if it is a primary particle
604 //if (!stack->IsPhysicalPrimary(iPart)) continue;
605 if (!stack->IsPhysicalPrimary(iPart)) // check whether particle is primary. we keep secondary electron and gamma for testing.
607 if (!((pdg->PdgCode() == fgEPlusCode) || (pdg->PdgCode() == fgEMinusCode) || (pdg->PdgCode() == fgGammaCode)))
609 } // end of primary particle check
611 if (TMath::Abs(TMath::Abs(pdg->Charge()) - fCuts->GetMonteCarloSingleChargedParticle())<1e-3 && TMath::Abs(TMath::Abs(pdg->Charge()) - fCuts->GetMonteCarloNeutralParticle())<1e-3) continue;
613 Double_t clEt = CalculateTransverseEnergy(caloCluster);
614 if (caloCluster->E() < fCuts->GetCommonClusterEnergyCut()) continue;
617 caloCluster->GetPosition(pos);
620 fSparseClusters[0] = pdg->PdgCode();
621 fSparseClusters[1] = pdg->Charge()/3;
622 fSparseClusters[2] = pdg->Mass();
623 fSparseClusters[3] = clEt;
624 fSparseClusters[4] = caloCluster->E();
625 fSparseClusters[5] = cp.Eta();
626 fSparseClusters[6] = part->Energy() * TMath::Sin(part->Theta());
627 fSparseClusters[7] = part->Pt();
628 fSparseClusters[8] = part->Eta();
629 fSparseClusters[9] = fCentClass;
630 fSparseClusters[10] = 0;
631 fSparseHistClusters->Fill(fSparseClusters);
633 //if(caloCluster->GetEmcCpvDistance() < fTrackDistanceCut)
635 if (TMath::Abs(caloCluster->GetTrackDx()) < fTrackDxCut && TMath::Abs(caloCluster->GetTrackDz()) < fTrackDzCut)
638 if (pdg->Charge() != 0)
640 //std::cout << "Removing charged: " << pdg->PdgCode() << ", with energy: " << caloCluster->E() << ", dist matched: " << caloCluster->GetTrackDx() << " " << caloCluster->GetTrackDz() << std::endl;
642 fEnergyChargedRemoved += caloCluster->E();
643 fHistRemovedOrNot->Fill(0.0, fCentClass);
644 //std::cout << part->Vx() << " " << part->Vy() << " " << part->Vz() << " " << std::endl;
645 //fHistDecayVertexRemovedCharged->Fill(part->Vy(), part->Vx(), part->Vz());
646 fHistDxDzRemovedCharged->Fill(caloCluster->GetTrackDx(), caloCluster->GetTrackDz());
652 //std::cout << "Removing neutral: " << pdg->PdgCode() << ", with energy: " << caloCluster->E() << ", dist matched: " << caloCluster->GetTrackDx() << " " << caloCluster->GetTrackDz() << std::endl;
653 //std::cout << "Mother is: " << stack->Particle(part->GetMother(0))->GetPdgCode() << std::endl;
655 fEnergyNeutralRemoved += caloCluster->E();
656 fHistRemovedOrNot->Fill(1.0, fCentClass);
657 //std::cout << part->Vx() << " " << part->Vy() << " " << part->Vz() << " " << std::endl;
658 //fHistDecayVertexRemovedNeutral->Fill(part->Vy(), part->Vx(), part->Vz());
659 fHistDxDzRemovedNeutral->Fill(caloCluster->GetTrackDx(), caloCluster->GetTrackDz());
661 if (pdg->PdgCode() == fgGammaCode)
663 fEtRemovedGammas += clEt;
664 fMultRemovedGammas++;
666 else if (pdg->PdgCode() == fgNeutronCode)
668 fEtRemovedNeutrons += clEt;
669 fMultRemovedNeutrons++;
671 else if (pdg->PdgCode() == fgAntiNeutronCode)
673 fEtRemovedAntiNeutrons += clEt;
674 fMultRemovedAntiNeutrons++;
676 //else std::cout << "Hmm, what is this (neutral: " << pdg->PdgCode() << std::endl;
682 if (pdg->Charge() != 0)
684 //std::cout << "Not removing charged: " << pdg->PdgCode() << ", with energy: " << caloCluster->E() << ", dist matched: " << caloCluster->GetTrackDx() << " " << caloCluster->GetTrackDz() << std::endl;
685 //std::cout << "Mother is: " << stack->Particle(part->GetMother(0))->GetPdgCode() << std::endl;
686 fChargedNotRemoved++;
687 fEnergyChargedNotRemoved += caloCluster->E();
688 fHistRemovedOrNot->Fill(2.0, fCentClass);
689 //std::cout << fHistDecayVertexNonRemovedCharged << std::endl;
690 //std::cout << part->Vx() << " " << part->Vy() << " " << part->Vz() << " " << std::endl;
691 //fHistDecayVertexNonRemovedCharged->Fill(part->Vy(), part->Vx(), part->Vz());
692 fHistDxDzNonRemovedCharged->Fill(caloCluster->GetTrackDx(), caloCluster->GetTrackDz());
693 if (pdg->PdgCode() == fgProtonCode)
695 //std::cout << clEt << std::endl;
696 fEtNonRemovedProtons += clEt;
697 fMultNonRemovedProtons++;
699 else if (pdg->PdgCode() == fgAntiProtonCode)
701 //std::cout << clEt << std::endl;
702 fEtNonRemovedAntiProtons += clEt;
703 fMultNonRemovedAntiProtons++;
705 else if (pdg->PdgCode() == fgPiPlusCode)
707 //std::cout << "PI+" << clEt << std::endl;
708 fEtNonRemovedPiPlus += clEt;
709 fMultNonRemovedPiPlus++;
711 else if (pdg->PdgCode() == fgPiMinusCode)
713 // std::cout << "PI-" << clEt << std::endl;
714 fEtNonRemovedPiMinus += clEt;
715 fMultNonRemovedPiMinus++;
717 else if (pdg->PdgCode() == fgKPlusCode)
719 //std::cout << clEt << std::endl;
720 fEtNonRemovedKaonPlus += clEt;
721 fMultNonRemovedKaonPlus++;
723 else if (pdg->PdgCode() == fgKMinusCode)
725 //std::cout << clEt << std::endl;
726 fEtNonRemovedKaonMinus += clEt;
727 fMultNonRemovedKaonMinus++;
729 else if (pdg->PdgCode() == fgEPlusCode)
731 //std::cout << clEt << std::endl;
732 if (TMath::Sqrt(part->Vx()*part->Vx() + part->Vy()*part->Vy()) < 430)
734 fEtNonRemovedPositrons += clEt;
735 fMultNonRemovedPositrons++;
738 else if (pdg->PdgCode() == fgEMinusCode)
740 //std::cout << clEt << std::endl;
741 if (TMath::Sqrt(part->Vx()*part->Vx() + part->Vy()*part->Vy()) < 430)
743 fEtNonRemovedElectrons += clEt;
744 fMultNonRemovedElectrons++;
747 else if (pdg->PdgCode() == fgMuPlusCode)
749 std::cout << clEt << std::endl;
750 fEtNonRemovedMuPlus += clEt;
751 fMultNonRemovedMuPlus++;
753 else if (pdg->PdgCode() == fgMuMinusCode)
755 std::cout << clEt << std::endl;
756 fEtNonRemovedMuMinus += clEt;
757 fMultNonRemovedMuMinus++;
763 //std::cout << "Accepted: " << pdg->PdgCode() << ", with energy: " << caloCluster->E() << ", dist matched: " << caloCluster->GetTrackDx() << " " << caloCluster->GetTrackDz() << std::endl;
764 //std::cout << "Not removing charged: " << pdg->PdgCode() << ", with energy: " << caloCluster->E() << ", dist matched: " << caloCluster->GetTrackDx() << " " << caloCluster->GetTrackDz() << std::endl;
765 //std::cout << "Mother is: " << stack->Particle(part->GetMother(0))->GetPdgCode() << stack->Particle(part->GetMother(0))->GetPDG()->GetName() << ", E: " << part->Energy() << std::endl;
766 fNeutralNotRemoved++;
767 fEnergyNeutralNotRemoved += caloCluster->E();
768 fHistRemovedOrNot->Fill(3.0, fCentClass);
769 //std::cout << part->Vx() << " " << part->Vy() << " " << part->Vz() << " " << std::endl;
770 //fHistDecayVertexNonRemovedNeutral->Fill(part->Vy(), part->Vx(), part->Vz());
771 fHistDxDzNonRemovedNeutral->Fill(caloCluster->GetTrackDx(), caloCluster->GetTrackDz());
772 if (pdg->PdgCode() == fgGammaCode)
774 fEtNonRemovedGammas += clEt;
775 fMultNonRemovedGammas++;
778 if (TMath::Abs(pdgMom->PdgCode()) == fgPi0Code || TMath::Abs(pdgMom->PdgCode()) == fgEtaCode || TMath::Abs(pdgMom->PdgCode()) == 331)
780 // std::cout << "Mother of gamma: " << pdgMom->PdgCode() << " " << pdgMom->GetName() << ", E: " << part->Energy() << std::endl;
781 fEtNonRemovedGammasFromPi0 += clEt;
785 else if (pdg->PdgCode() == fgNeutronCode)
787 fEtNonRemovedNeutrons += clEt;
788 fMultNonRemovedNeutrons++;
790 else if (pdg->PdgCode() == fgAntiNeutronCode)
792 fEtNonRemovedAntiNeutrons += clEt;
793 fMultNonRemovedAntiNeutrons++;
795 else if (pdg->PdgCode() == fgK0LCode || pdg->PdgCode() == fgK0SCode)
797 fEtNonRemovedK0s += clEt;
798 fMultNonRemovedK0s++;
801 else if (TMath::Abs(pdg->PdgCode()) == fgLambdaCode)
803 fEtNonRemovedLambdas += clEt;
804 fMultNonRemovedLambdas++;
806 else std::cout << "Hmm, what is this (neutral not removed): " << pdg->PdgCode() << " " << pdg->GetName() << ", ET: " << clEt << std::endl;
809 } // end of loop over clusters
812 //std::cout << "Distance cut: " << fTrackDistanceCut << std::endl;
813 //std::cout << "Number of removed neutrals: " << fNeutralRemoved << std::endl;
814 //std::cout << "Number of removed charged: " << fChargedRemoved << std::endl;
815 //std::cout << "Number of non-removed charged: " << fChargedNotRemoved << std::endl;
816 //std::cout << "Number of non-removed neutral: " << fNeutralNotRemoved << std::endl;
818 // std::cout << "Energy of removed neutrals: " << fEnergyNeutralRemoved << std::endl;
819 // std::cout << "Energy of removed charged: " << fEnergyChargedRemoved << std::endl;
820 // std::cout << "Energy of non-removed charged: " << fEnergyChargedNotRemoved << std::endl;
821 // std::cout << "Energy of non-removed neutral: " << fEnergyNeutralNotRemoved << std::endl;
827 void AliAnalysisEtMonteCarlo::Init()
829 AliAnalysisEt::Init();
832 void AliAnalysisEtMonteCarlo::ResetEventValues()
833 { // reset event values
834 AliAnalysisEt::ResetEventValues();
836 // collision geometry defaults for p+p:
837 fImpactParameter = 0;
841 fEtNonRemovedProtons = 0;
842 fEtNonRemovedAntiProtons = 0;
843 fEtNonRemovedPiPlus = 0;
844 fEtNonRemovedPiMinus = 0;
845 fEtNonRemovedKaonPlus = 0;
846 fEtNonRemovedKaonMinus = 0;
847 fEtNonRemovedK0s = 0;
848 fEtNonRemovedLambdas = 0;
849 fEtNonRemovedElectrons = 0;
850 fEtNonRemovedPositrons = 0;
851 fEtNonRemovedMuPlus = 0;
852 fEtNonRemovedMuMinus = 0;
853 fEtNonRemovedNeutrons = 0;
854 fEtNonRemovedAntiNeutrons = 0;
855 fEtNonRemovedGammas = 0;
856 fEtNonRemovedGammasFromPi0 = 0;
858 fEtRemovedGammas = 0;
859 fEtRemovedNeutrons = 0;
860 fEtRemovedAntiNeutrons = 0;
862 fMultNonRemovedProtons = 0;
863 fMultNonRemovedAntiProtons = 0;
864 fMultNonRemovedPiPlus = 0;
865 fMultNonRemovedPiMinus = 0;
866 fMultNonRemovedKaonPlus = 0;
867 fMultNonRemovedKaonMinus = 0;
868 fMultNonRemovedK0s = 0;
869 fMultNonRemovedLambdas = 0;
870 fMultNonRemovedElectrons = 0;
871 fMultNonRemovedPositrons = 0;
872 fMultNonRemovedMuPlus = 0;
873 fMultNonRemovedMuMinus = 0;
874 fMultNonRemovedNeutrons = 0;
875 fMultNonRemovedAntiNeutrons = 0;
876 fMultNonRemovedGammas = 0;
878 fMultRemovedGammas = 0;
879 fMultRemovedNeutrons = 0;
880 fMultRemovedAntiNeutrons = 0;
886 void AliAnalysisEtMonteCarlo::CreateHistograms()
887 { // histogram related additions
888 AliAnalysisEt::CreateHistograms();
890 fTree->Branch("fImpactParameter",&fImpactParameter,"fImpactParameter/D");
891 fTree->Branch("fNcoll",&fNcoll,"fNcoll/I");
892 fTree->Branch("fNpart",&fNpart,"fNpart/I");
895 //fHistDecayVertexNonRemovedCharged = new TH3F("fHistDecayVertexNonRemovedCharged","fHistDecayVertexNonRemovedCharged", 500, -470, 30, 500, -300, 300, 40, -20, 20);
896 //fHistDecayVertexRemovedCharged = new TH3F("fHistDecayVertexRemovedCharged","fHistDecayVertexRemovedCharged", 500, -470, 30, 500, -300, 300, 40, -20, 20);
897 //fHistDecayVertexNonRemovedNeutral = new TH3F("fHistDecayVertexNonRemovedNeutral","fHistDecayVertexNonRemovedNeutral", 500, -470, 30, 500, -300, 300, 40, -20, 20);
898 //fHistDecayVertexRemovedNeutral = new TH3F("fHistDecayVertexRemovedNeutral","fHistDecayVertexRemovedNeutral", 500, -470, 30, 500, -300, 300, 40, -20, 20);
900 fHistRemovedOrNot = new TH2F("fHistRemovedOrNot", "fHistRemovedOrNot", 4, -0.5, 3.5, 10, -0.5, 9.5);
902 fHistEtNonRemovedProtons = new TH2F("fHistEtNonRemovedProtons", "fHistEtNonRemovedProtons", 1500, 0, 30, 10, -0.5, 9.5);
903 fHistEtNonRemovedAntiProtons = new TH2F("fHistEtNonRemovedAntiProtons", "fHistEtNonRemovedAntiProtons", 1500, 0, 30, 10, -0.5, 9.5);
904 fHistEtNonRemovedPiPlus = new TH2F("fHistEtNonRemovedPiPlus", "fHistEtNonRemovedPiPlus", 1500, 0, 30, 10, -0.5, 9.5);
905 fHistEtNonRemovedPiMinus = new TH2F("fHistEtNonRemovedPiMinus", "fHistEtNonRemovedPiMinus", 1500, 0, 30, 10, -0.5, 9.5);
906 fHistEtNonRemovedKaonPlus = new TH2F("fHistEtNonRemovedKaonPlus", "fHistEtNonRemovedKaonPlus", 1500, 0, 30, 10, -0.5, 9.5);
907 fHistEtNonRemovedKaonMinus = new TH2F("fHistEtNonRemovedKaonMinus", "fHistEtNonRemovedKaonMinus", 1500, 0, 30, 10, -0.5, 9.5);
908 fHistEtNonRemovedK0s = new TH2F("fHistEtNonRemovedK0s", "fHistEtNonRemovedK0s", 1500, 0, 30, 10, -0.5, 9.5);
909 fHistEtNonRemovedLambdas = new TH2F("fHistEtNonRemovedLambdas", "fHistEtNonRemovedLambdas", 1500, 0, 30, 10, -0.5, 9.5);
910 fHistEtNonRemovedElectrons = new TH2F("fHistEtNonRemovedElectrons", "fHistEtNonRemovedElectrons", 1500, 0, 30, 10, -0.5, 9.5);
911 fHistEtNonRemovedPositrons = new TH2F("fHistEtNonRemovedPositrons", "fHistEtNonRemovedPositrons", 1500, 0, 30, 10, -0.5, 9.5);
912 fHistEtNonRemovedMuPlus = new TH2F("fHistEtNonRemovedMuPlus", "fHistEtNonRemovedMuPlus", 1500, 0, 30, 10, -0.5, 9.5);
913 fHistEtNonRemovedMuMinus = new TH2F("fHistEtNonRemovedMuMinus", "fHistEtNonRemovedMuMinus", 1500, 0, 30, 10, -0.5, 9.5);
914 fHistEtNonRemovedNeutrons = new TH2F("fHistEtNonRemovedNeutrons", "fHistEtNonRemovedNeutrons", 1500, 0, 30, 10, -0.5, 9.5);
915 fHistEtNonRemovedAntiNeutrons = new TH2F("fHistEtNonRemovedAntiNeutrons", "fHistEtNonRemovedAntiNeutrons", 1500, 0, 30, 10, -0.5, 9.5);
917 fHistEtNonRemovedGammas = new TH2F("fHistEtNonRemovedGammas", "fHistEtNonRemovedGammas", 1500, 0, 30, 10, -0.5, 9.5);
918 fHistEtNonRemovedGammasFromPi0 = new TH2F("fHistEtNonRemovedGammasFromPi0", "fHistEtNonRemovedGammasFromPi0", 1500, 0, 30, 10, -0.5, 9.5);
920 fHistEtRemovedGammas = new TH2F("fHistEtRemovedGammas", "fHistEtRemovedGammas", 1500, 0, 30, 10, -0.5, 9.5);
921 fHistEtRemovedNeutrons = new TH2F("fHistEtRemovedNeutrons", "fHistEtRemovedNeutrons", 1500, 0, 30, 10, -0.5, 9.5);
922 fHistEtRemovedAntiNeutrons = new TH2F("fHistEtRemovedAntiNeutrons", "fHistEtRemovedAntiNeutrons", 1500, 0, 30, 10, -0.5, 9.5);
924 fHistMultNonRemovedProtons = new TH2F("fHistMultNonRemovedProtons", "fHistMultNonRemovedProtons", 100, -0.5, 99.5, 10, -0.5, 9.5);
925 fHistMultNonRemovedAntiProtons = new TH2F("fHistMultNonRemovedAntiProtons", "fHistMultNonRemovedAntiProtons", 100, -0.5, 99.5, 10, -0.5, 9.5);
926 fHistMultNonRemovedPiPlus = new TH2F("fHistMultNonRemovedPiPlus", "fHistMultNonRemovedPiPlus", 100, -0.5, 99.5, 10, -0.5, 9.5);
927 fHistMultNonRemovedPiMinus = new TH2F("fHistMultNonRemovedPiMinus", "fHistMultNonRemovedPiMinus", 100, -0.5, 99.5, 10, -0.5, 9.5);
928 fHistMultNonRemovedKaonPlus = new TH2F("fHistMultNonRemovedKaonPlus", "fHistMultNonRemovedKaonPlus", 100, -0.5, 99.5, 10, -0.5, 9.5);
929 fHistMultNonRemovedKaonMinus = new TH2F("fHistMultNonRemovedKaonMinus", "fHistMultNonRemovedKaonMinus", 100, -0.5, 99.5, 10, -0.5, 9.5);
930 fHistMultNonRemovedK0s = new TH2F("fHistMultNonRemovedK0s", "fHistMultNonRemovedK0s", 100, -0.5, 99.5, 10, -0.5, 9.5);
931 fHistMultNonRemovedLambdas = new TH2F("fHistMultNonRemovedLambdas", "fHistMultNonRemovedLambdas", 100, -0.5, 99.5, 10, -0.5, 9.5);
932 fHistMultNonRemovedElectrons = new TH2F("fHistMultNonRemovedElectrons", "fHistMultNonRemovedElectrons", 100, -0.5, 99.5, 10, -0.5, 9.5);
933 fHistMultNonRemovedPositrons = new TH2F("fHistMultNonRemovedPositrons", "fHistMultNonRemovedPositrons", 100, -0.5, 99.5, 10, -0.5, 9.5);
934 fHistMultNonRemovedMuPlus = new TH2F("fHistMultNonRemovedMuPlus", "fHistMultNonRemovedMuPlus", 100, -0.5, 99.5, 10, -0.5, 9.5);
935 fHistMultNonRemovedMuMinus = new TH2F("fHistMultNonRemovedMuMinus", "fHistMultNonRemovedMuMinus", 100, -0.5, 99.5, 10, -0.5, 9.5);
936 fHistMultNonRemovedNeutrons = new TH2F("fHistMultNonRemovedNeutrons", "fHistMultNonRemovedNeutrons", 100, -0.5, 99.5, 10, -0.5, 9.5);
937 fHistMultNonRemovedAntiNeutrons = new TH2F("fHistMultNonRemovedAntiNeutrons", "fHistMultNonRemovedAntiNeutrons", 100, -0.5, 99.5, 10, -0.5, 9.5);
939 fHistMultNonRemovedGammas = new TH2F("fHistMultNonRemovedGammas", "fHistMultNonRemovedGammas", 100, -0.5, 99.5, 10, -0.5, 9.5);
941 fHistMultRemovedGammas = new TH2F("fHistMultRemovedGammas", "fHistMultRemovedGammas", 100, -0.5, 99.5, 10, -0.5, 9.5);
942 fHistMultRemovedNeutrons = new TH2F("fHistMultRemovedNeutrons", "fHistMultRemovedNeutrons", 100, -0.5, 99.5, 10, -0.5, 9.5);
943 fHistMultRemovedAntiNeutrons = new TH2F("fHistMultRemovedAntiNeutrons", "fHistMultRemovedAntiNeutrons", 100, -0.5, 99.5, 10, -0.5, 9.5);
945 fHistTrackMultvsNonRemovedCharged = new TH2F("fHistTrackMultvsNonRemovedCharged", "fHistTrackMultvsNonRemovedCharged", 1000, -0.5, 999.5, 100, -0.5, 99.5);
946 fHistTrackMultvsNonRemovedNeutral = new TH2F("fHistTrackMultvsNonRemovedNeutral", "fHistTrackMultvsNonRemovedNeutral", 1000, -0.5, 999.5, 100, -0.5, 99.5);
947 fHistTrackMultvsRemovedGamma = new TH2F("fHistTrackMultvsRemovedGamma", "fHistTrackMultvsRemovedGamma", 1000, -0.5, 999.5, 100, -0.5, 99.5);
949 fHistClusterMultvsNonRemovedCharged = new TH2F("fHistClusterMultvsNonRemovedCharged", "fHistClusterMultvsNonRemovedCharged", 1000, -0.5, 999.5, 100, -0.5, 99.5);
950 fHistClusterMultvsNonRemovedNeutral = new TH2F("fHistClusterMultvsNonRemovedNeutral", "fHistClusterMultvsNonRemovedNeutral", 1000, -0.5, 999.5, 100, -0.5, 99.5);
951 fHistClusterMultvsRemovedGamma = new TH2F("fHistClusterMultvsRemovedGamma", "fHistClusterMultvsRemovedGamma", 1000, -0.5, 999.5, 100, -0.5, 99.5);
953 fHistDxDzNonRemovedCharged = new TH2F("fHistDxDzNonRemovedCharged", "fHistDxDzNonRemovedCharged", 800, -200, 200, 800, -200, 200);
954 fHistDxDzRemovedCharged = new TH2F("fHistDxDzRemovedCharged", "fHistDxDzRemovedCharged", 800, -200, 200, 800, -200, 200);
955 fHistDxDzNonRemovedNeutral = new TH2F("fHistDxDzNonRemovedNeutral", "fHistDxDzNonRemovedNeutral", 800, -200, 200, 800, -200, 200);
956 fHistDxDzRemovedNeutral = new TH2F("fHistDxDzRemovedNeutral", "fHistDxDzRemovedNeutral", 800, -200, 200, 800, -200, 200);
958 fHistPiPlusMult = new TH1F("fHistPiPlusMult", "fHistPiPlusMult", 2000, -0.5, 1999.5);
959 fHistPiMinusMult = new TH1F("fHistPiMinusMult", "fHistPiMinusMult", 2000, -0.5, 1999.5);
960 fHistPiZeroMult = new TH1F("fHistPiZeroMult", "fHistPiZeroMult", 2000, -0.5, 1999.5);
962 fHistPiPlusMultAcc = new TH1F("fHistPiPlusMultAcc", "fHistPiPlusMultAcc", 2000, -0.5, 1999.5);
963 fHistPiMinusMultAcc = new TH1F("fHistPiMinusMultAcc", "fHistPiMinusMultAcc", 2000, -0.5, 1999.5);
964 fHistPiZeroMultAcc = new TH1F("fHistPiZeroMultAcc", "fHistPiZeroMultAcc", 2000, -0.5, 1999.5);
968 void AliAnalysisEtMonteCarlo::FillOutputList(TList *list)
969 {//fill the output list
970 AliAnalysisEt::FillOutputList(list);
972 list->Add(fHistRemovedOrNot);
974 list->Add(fHistEtNonRemovedProtons);
975 list->Add(fHistEtNonRemovedAntiProtons);
976 list->Add(fHistEtNonRemovedPiPlus);
977 list->Add(fHistEtNonRemovedPiMinus);
978 list->Add(fHistEtNonRemovedKaonPlus);
979 list->Add(fHistEtNonRemovedKaonMinus);
980 list->Add(fHistEtNonRemovedK0s);
981 list->Add(fHistEtNonRemovedLambdas);
982 list->Add(fHistEtNonRemovedElectrons);
983 list->Add(fHistEtNonRemovedPositrons);
984 list->Add(fHistEtNonRemovedMuPlus);
985 list->Add(fHistEtNonRemovedMuMinus);
986 list->Add(fHistEtNonRemovedNeutrons);
987 list->Add(fHistEtNonRemovedAntiNeutrons);
988 list->Add(fHistEtNonRemovedGammas);
989 list->Add(fHistEtNonRemovedGammasFromPi0);
991 list->Add(fHistEtRemovedGammas);
992 list->Add(fHistEtRemovedNeutrons);
993 list->Add(fHistEtRemovedAntiNeutrons);
996 list->Add(fHistMultNonRemovedProtons);
997 list->Add(fHistMultNonRemovedAntiProtons);
998 list->Add(fHistMultNonRemovedPiPlus);
999 list->Add(fHistMultNonRemovedPiMinus);
1000 list->Add(fHistMultNonRemovedKaonPlus);
1001 list->Add(fHistMultNonRemovedKaonMinus);
1002 list->Add(fHistMultNonRemovedK0s);
1003 list->Add(fHistMultNonRemovedLambdas);
1004 list->Add(fHistMultNonRemovedElectrons);
1005 list->Add(fHistMultNonRemovedPositrons);
1006 list->Add(fHistMultNonRemovedMuPlus);
1007 list->Add(fHistMultNonRemovedMuMinus);
1008 list->Add(fHistMultNonRemovedNeutrons);
1009 list->Add(fHistMultNonRemovedAntiNeutrons);
1010 list->Add(fHistMultNonRemovedGammas);
1012 list->Add(fHistMultRemovedGammas);
1013 list->Add(fHistMultRemovedNeutrons);
1014 list->Add(fHistMultRemovedAntiNeutrons);
1016 list->Add(fHistTrackMultvsNonRemovedCharged);
1017 list->Add(fHistTrackMultvsNonRemovedNeutral);
1018 list->Add(fHistTrackMultvsRemovedGamma);
1020 list->Add(fHistClusterMultvsNonRemovedCharged);
1021 list->Add(fHistClusterMultvsNonRemovedNeutral);
1022 list->Add(fHistClusterMultvsRemovedGamma);
1024 //list->Add(fHistDecayVertexNonRemovedCharged);
1025 //list->Add(fHistDecayVertexNonRemovedNeutral);
1026 //list->Add(fHistDecayVertexRemovedCharged);
1027 //list->Add(fHistDecayVertexRemovedNeutral);
1029 list->Add(fHistDxDzNonRemovedCharged);
1030 list->Add(fHistDxDzRemovedCharged);
1031 list->Add(fHistDxDzNonRemovedNeutral);
1032 list->Add(fHistDxDzRemovedNeutral);
1034 list->Add(fHistPiPlusMult);
1035 list->Add(fHistPiMinusMult);
1036 list->Add(fHistPiZeroMult);
1037 list->Add(fHistPiPlusMultAcc);
1038 list->Add(fHistPiMinusMultAcc);
1039 list->Add(fHistPiZeroMultAcc);
1044 bool AliAnalysisEtMonteCarlo::TrackHitsCalorimeter(TParticle* part, Double_t magField)
1046 // printf(" TrackHitsCalorimeter - magField %f\n", magField);
1047 AliESDtrack *esdTrack = new AliESDtrack(part);
1048 // Printf("MC Propagating track: eta: %f, phi: %f, pt: %f", esdTrack->Eta(), esdTrack->Phi(), esdTrack->Pt());
1050 Bool_t prop = esdTrack->PropagateTo(fDetectorRadius, magField);
1052 // if(prop) Printf("Track propagated, eta: %f, phi: %f, pt: %f", esdTrack->Eta(), esdTrack->Phi(), esdTrack->Pt());
1054 bool status = prop &&
1055 TMath::Abs(esdTrack->Eta()) < fEtaCutAcc &&
1056 esdTrack->Phi() > fPhiCutAccMin*TMath::Pi()/180. &&
1057 esdTrack->Phi() < fPhiCutAccMax*TMath::Pi()/180.;
1063 void AliAnalysisEtMonteCarlo::FillHistograms()
1064 { // let base class fill its histograms, and us fill the local ones
1065 AliAnalysisEt::FillHistograms();
1066 //std::cout << fEtNonRemovedPiPlus << " " << fCentClass << std::endl;
1068 fHistEtNonRemovedProtons->Fill(fEtNonRemovedProtons, fCentClass);
1069 fHistEtNonRemovedAntiProtons->Fill(fEtNonRemovedAntiProtons, fCentClass);
1070 fHistEtNonRemovedKaonPlus->Fill(fEtNonRemovedKaonPlus, fCentClass);
1071 fHistEtNonRemovedKaonMinus->Fill(fEtNonRemovedKaonMinus, fCentClass);
1072 fHistEtNonRemovedK0s->Fill(fEtNonRemovedK0s, fCentClass);
1073 fHistEtNonRemovedLambdas->Fill(fEtNonRemovedLambdas, fCentClass);
1074 fHistEtNonRemovedPiPlus->Fill(fEtNonRemovedPiPlus, fCentClass);
1075 fHistEtNonRemovedPiMinus->Fill(fEtNonRemovedPiMinus, fCentClass);
1076 fHistEtNonRemovedElectrons->Fill(fEtNonRemovedElectrons, fCentClass);
1077 fHistEtNonRemovedPositrons->Fill(fEtNonRemovedPositrons, fCentClass);
1078 fHistEtNonRemovedMuPlus->Fill(fEtNonRemovedMuPlus, fCentClass);
1079 fHistEtNonRemovedMuMinus->Fill(fEtNonRemovedMuMinus, fCentClass);
1080 fHistEtNonRemovedNeutrons->Fill(fEtNonRemovedNeutrons, fCentClass);
1081 fHistEtNonRemovedAntiNeutrons->Fill(fEtNonRemovedAntiNeutrons, fCentClass);
1082 fHistEtNonRemovedGammas->Fill(fEtNonRemovedGammas, fCentClass);
1083 fHistEtNonRemovedGammasFromPi0->Fill(fEtNonRemovedGammasFromPi0, fCentClass);
1085 fHistEtRemovedGammas->Fill(fEtRemovedGammas, fCentClass);
1086 fHistEtRemovedNeutrons->Fill(fEtRemovedNeutrons, fCentClass);
1087 fHistEtRemovedAntiNeutrons->Fill(fEtRemovedAntiNeutrons, fCentClass);
1089 fHistMultNonRemovedProtons->Fill(fMultNonRemovedProtons, fCentClass);
1090 fHistMultNonRemovedAntiProtons->Fill(fMultNonRemovedAntiProtons, fCentClass);
1091 fHistMultNonRemovedKaonPlus->Fill(fMultNonRemovedKaonPlus, fCentClass);
1092 fHistMultNonRemovedKaonMinus->Fill(fMultNonRemovedKaonMinus, fCentClass);
1093 fHistMultNonRemovedK0s->Fill(fMultNonRemovedK0s, fCentClass);
1094 fHistMultNonRemovedLambdas->Fill(fMultNonRemovedLambdas, fCentClass);
1095 fHistMultNonRemovedPiPlus->Fill(fMultNonRemovedPiPlus, fCentClass);
1096 fHistMultNonRemovedPiMinus->Fill(fMultNonRemovedPiMinus, fCentClass);
1097 fHistMultNonRemovedElectrons->Fill(fMultNonRemovedElectrons, fCentClass);
1098 fHistMultNonRemovedPositrons->Fill(fMultNonRemovedPositrons, fCentClass);
1099 fHistMultNonRemovedMuPlus->Fill(fMultNonRemovedMuPlus, fCentClass);
1100 fHistMultNonRemovedMuMinus->Fill(fMultNonRemovedMuMinus, fCentClass);
1101 fHistMultNonRemovedNeutrons->Fill(fMultNonRemovedNeutrons, fCentClass);
1102 fHistMultNonRemovedAntiNeutrons->Fill(fMultNonRemovedAntiNeutrons, fCentClass);
1103 fHistMultNonRemovedGammas->Fill(fMultNonRemovedGammas, fCentClass);
1105 fHistMultRemovedGammas->Fill(fMultRemovedGammas, fCentClass);
1106 fHistMultRemovedNeutrons->Fill(fMultRemovedNeutrons, fCentClass);
1107 fHistMultRemovedAntiNeutrons->Fill(fMultRemovedAntiNeutrons, fCentClass);
1109 fHistTrackMultvsNonRemovedCharged->Fill(fTrackMultInAcc,
1110 fMultNonRemovedAntiProtons+fMultNonRemovedElectrons+fMultNonRemovedKaonMinus+fMultNonRemovedKaonPlus
1111 +fMultNonRemovedMuMinus+fMultNonRemovedMuPlus+fMultNonRemovedPiMinus+fMultNonRemovedPiPlus+fMultNonRemovedPositrons
1112 +fMultNonRemovedProtons);
1114 fHistTrackMultvsNonRemovedNeutral->Fill(fTrackMultInAcc,
1115 fMultNonRemovedNeutrons+fMultNonRemovedAntiNeutrons+fMultNonRemovedK0s+fMultNonRemovedLambdas);
1117 fHistTrackMultvsRemovedGamma->Fill(fTrackMultInAcc,
1118 fMultRemovedGammas);
1120 fHistClusterMultvsNonRemovedCharged->Fill(fNeutralMultiplicity,
1121 fMultNonRemovedAntiProtons+fMultNonRemovedElectrons+fMultNonRemovedKaonMinus
1122 +fMultNonRemovedKaonPlus+fMultNonRemovedMuMinus+fMultNonRemovedMuPlus
1123 +fMultNonRemovedPiMinus+fMultNonRemovedPiPlus+fMultNonRemovedPositrons+fMultNonRemovedProtons);
1125 fHistClusterMultvsNonRemovedNeutral->Fill(fTrackMultInAcc,
1126 fMultNonRemovedNeutrons+fMultNonRemovedAntiNeutrons+fMultNonRemovedK0s+fMultNonRemovedLambdas);
1128 fHistClusterMultvsRemovedGamma->Fill(fTrackMultInAcc,
1129 fMultRemovedGammas);