3 // Container with name, TClonesArray and cuts for particles
7 #include <TClonesArray.h>
12 #include "AliParticleContainer.h"
14 ClassImp(AliParticleContainer)
16 //________________________________________________________________________
17 AliParticleContainer::AliParticleContainer():
18 AliEmcalContainer("AliParticleContainer"),
20 fParticleMinEta(-0.9),
30 // Default constructor.
32 fClassName = "AliVParticle";
35 //________________________________________________________________________
36 AliParticleContainer::AliParticleContainer(const char *name):
37 AliEmcalContainer(name),
39 fParticleMinEta(-0.9),
49 // Standard constructor.
51 fClassName = "AliVParticle";
54 //________________________________________________________________________
55 AliVParticle* AliParticleContainer::GetLeadingParticle(const char* opt)
57 // Get the leading particle; use p if "p" is contained in opt
62 Int_t tempID = fCurrentID;
64 AliVParticle *partMax = GetNextAcceptParticle(0);
65 AliVParticle *part = 0;
67 if (option.Contains("p")) {
68 while ((part = GetNextAcceptParticle())) {
69 if (part->P() > partMax->P()) partMax = part;
73 while ((part = GetNextAcceptParticle())) {
74 if (part->Pt() > partMax->Pt()) partMax = part;
83 //________________________________________________________________________
84 AliVParticle* AliParticleContainer::GetParticle(Int_t i) const
86 //Get i^th jet in array
88 if(i<0 || i>=fClArray->GetEntriesFast()) return 0;
89 AliVParticle *vp = static_cast<AliVParticle*>(fClArray->At(i));
94 //________________________________________________________________________
95 AliVParticle* AliParticleContainer::GetAcceptParticle(Int_t i) const {
96 //return pointer to particle if particle is accepted
98 AliVParticle *vp = GetParticle(i);
101 if(AcceptParticle(vp))
104 AliDebug(2,"Particle not accepted.");
109 //________________________________________________________________________
110 AliVParticle* AliParticleContainer::GetParticleWithLabel(Int_t lab) const
112 //Get particle with label lab in array
114 Int_t i = GetIndexFromLabel(lab);
115 return GetParticle(i);
118 //________________________________________________________________________
119 AliVParticle* AliParticleContainer::GetAcceptParticleWithLabel(Int_t lab) const
121 //Get particle with label lab in array
123 Int_t i = GetIndexFromLabel(lab);
124 return GetAcceptParticle(i);
128 //________________________________________________________________________
129 AliVParticle* AliParticleContainer::GetNextAcceptParticle(Int_t i)
131 //Get next accepted particle; if i >= 0 (re)start counter from i; return 0 if no accepted particle could be found
133 if (i>=0) fCurrentID = i;
135 const Int_t n = GetNEntries();
137 while (fCurrentID < n && !p) {
138 p = GetAcceptParticle(fCurrentID);
145 //________________________________________________________________________
146 AliVParticle* AliParticleContainer::GetNextParticle(Int_t i)
148 //Get next particle; if i >= 0 (re)start counter from i; return 0 if no particle could be found
150 if (i>=0) fCurrentID = i;
152 const Int_t n = GetNEntries();
154 while (fCurrentID < n && !p) {
155 p = GetParticle(fCurrentID);
162 //________________________________________________________________________
163 void AliParticleContainer::GetMomentum(TLorentzVector &mom, Int_t i) const
165 //Get momentum of the i^th particle in array
167 AliVParticle *vp = GetParticle(i);
168 if(vp) mom.SetPtEtaPhiM(vp->Pt(),vp->Eta(),vp->Phi(),0.139);
171 //________________________________________________________________________
172 Bool_t AliParticleContainer::AcceptParticle(AliVParticle *vp) const
174 // Return true if vp is accepted.
179 if (TMath::Abs(vp->GetLabel()) > fMinMCLabel) {
180 if(vp->TestBits(fMCTrackBitMap) != (Int_t)fMCTrackBitMap) {
181 AliDebug(2,"MC particle not accepted because of MC bit map.");
186 if(vp->TestBits(fTrackBitMap) != (Int_t)fTrackBitMap) {
187 AliDebug(2,"Track not accepted because of bit map.");
192 if (vp->Pt() < fParticlePtCut)
195 if (vp->Eta() < fParticleMinEta || vp->Eta() > fParticleMaxEta ||
196 vp->Phi() < fParticleMinPhi || vp->Phi() > fParticleMaxPhi)
199 if ((vp->GetFlag() & fMCFlag) != fMCFlag)
202 if (fGeneratorIndex >= 0 && fGeneratorIndex != vp->GetGeneratorIndex())
208 //________________________________________________________________________
209 Int_t AliParticleContainer::GetNAcceptedParticles()
211 // Get number of accepted particles
215 AliVParticle *vp = GetNextAcceptParticle(0);
217 while (GetNextAcceptParticle())
223 //________________________________________________________________________
224 void AliParticleContainer::SetClassName(const char *clname)
226 // Set the class name
229 if (cls.InheritsFrom("AliVParticle")) fClassName = clname;
230 else AliError(Form("Unable to set class name %s for a AliParticleContainer, it must inherits from AliVParticle!",clname));