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),
31 // Default constructor.
33 fClassName = "AliVParticle";
36 //________________________________________________________________________
37 AliParticleContainer::AliParticleContainer(const char *name):
38 AliEmcalContainer(name),
40 fParticleMinEta(-0.9),
51 // Standard constructor.
53 fClassName = "AliVParticle";
56 //________________________________________________________________________
57 AliVParticle* AliParticleContainer::GetLeadingParticle(const char* opt)
59 // Get the leading particle; use p if "p" is contained in opt
64 Int_t tempID = fCurrentID;
66 AliVParticle *partMax = GetNextAcceptParticle(0);
67 AliVParticle *part = 0;
69 if (option.Contains("p")) {
70 while ((part = GetNextAcceptParticle())) {
71 if (part->P() > partMax->P()) partMax = part;
75 while ((part = GetNextAcceptParticle())) {
76 if (part->Pt() > partMax->Pt()) partMax = part;
85 //________________________________________________________________________
86 AliVParticle* AliParticleContainer::GetParticle(Int_t i) const
88 //Get i^th jet in array
90 if(i<0 || i>=fClArray->GetEntriesFast()) return 0;
91 AliVParticle *vp = static_cast<AliVParticle*>(fClArray->At(i));
96 //________________________________________________________________________
97 AliVParticle* AliParticleContainer::GetAcceptParticle(Int_t i) {
98 //return pointer to particle if particle is accepted
100 AliVParticle *vp = GetParticle(i);
103 if(AcceptParticle(vp))
106 AliDebug(2,"Particle not accepted.");
111 //________________________________________________________________________
112 AliVParticle* AliParticleContainer::GetParticleWithLabel(Int_t lab) const
114 //Get particle with label lab in array
116 Int_t i = GetIndexFromLabel(lab);
117 return GetParticle(i);
120 //________________________________________________________________________
121 AliVParticle* AliParticleContainer::GetAcceptParticleWithLabel(Int_t lab)
123 //Get particle with label lab in array
125 Int_t i = GetIndexFromLabel(lab);
126 return GetAcceptParticle(i);
130 //________________________________________________________________________
131 AliVParticle* AliParticleContainer::GetNextAcceptParticle(Int_t i)
133 //Get next accepted particle; if i >= 0 (re)start counter from i; return 0 if no accepted particle could be found
135 if (i>=0) fCurrentID = i;
137 const Int_t n = GetNEntries();
139 while (fCurrentID < n && !p) {
140 p = GetAcceptParticle(fCurrentID);
147 //________________________________________________________________________
148 AliVParticle* AliParticleContainer::GetNextParticle(Int_t i)
150 //Get next particle; if i >= 0 (re)start counter from i; return 0 if no particle could be found
152 if (i>=0) fCurrentID = i;
154 const Int_t n = GetNEntries();
156 while (fCurrentID < n && !p) {
157 p = GetParticle(fCurrentID);
164 //________________________________________________________________________
165 void AliParticleContainer::GetMomentum(TLorentzVector &mom, Int_t i) const
167 //Get momentum of the i^th particle in array
169 AliVParticle *vp = GetParticle(i);
170 if(vp) mom.SetPtEtaPhiM(vp->Pt(),vp->Eta(),vp->Phi(),0.139);
173 //________________________________________________________________________
174 Bool_t AliParticleContainer::AcceptParticle(AliVParticle *vp)
176 // Return true if vp is accepted.
178 fRejectionReason = 0;
181 fRejectionReason |= kNullObject;
185 if (vp->Pt() < fParticlePtCut) {
186 fRejectionReason |= kPtCut;
190 if (vp->Eta() < fParticleMinEta || vp->Eta() > fParticleMaxEta ||
191 vp->Phi() < fParticleMinPhi || vp->Phi() > fParticleMaxPhi) {
192 fRejectionReason |= kAcceptanceCut;
196 if (TMath::Abs(vp->GetLabel()) > fMinMCLabel) {
197 if(vp->TestBits(fMCTrackBitMap) != (Int_t)fMCTrackBitMap) {
198 AliDebug(2,"MC particle not accepted because of MC bit map.");
199 fRejectionReason |= kBitMapCut;
204 if(vp->TestBits(fTrackBitMap) != (Int_t)fTrackBitMap) {
205 AliDebug(2,"Track not accepted because of bit map.");
206 fRejectionReason |= kBitMapCut;
211 if ((vp->GetFlag() & fMCFlag) != fMCFlag) {
212 fRejectionReason |= kMCFlag;
216 if (fGeneratorIndex >= 0 && fGeneratorIndex != vp->GetGeneratorIndex()) {
217 fRejectionReason |= kMCGeneratorCut;
221 if (fCharge>=0 && fCharge != vp->Charge()) {
222 fRejectionReason |= kChargeCut;
229 //________________________________________________________________________
230 Int_t AliParticleContainer::GetNAcceptedParticles()
232 // Get number of accepted particles
236 AliVParticle *vp = GetNextAcceptParticle(0);
238 while (GetNextAcceptParticle())
244 //________________________________________________________________________
245 void AliParticleContainer::SetClassName(const char *clname)
247 // Set the class name
250 if (cls.InheritsFrom("AliVParticle")) fClassName = clname;
251 else AliError(Form("Unable to set class name %s for a AliParticleContainer, it must inherits from AliVParticle!",clname));