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),
24 fMinDistanceTPCSectorEdge(-1),
32 // Default constructor.
34 fClassName = "AliVParticle";
37 //________________________________________________________________________
38 AliParticleContainer::AliParticleContainer(const char *name):
39 AliEmcalContainer(name),
41 fParticleMinEta(-0.9),
45 fMinDistanceTPCSectorEdge(-1),
53 // Standard constructor.
55 fClassName = "AliVParticle";
58 //________________________________________________________________________
59 AliVParticle* AliParticleContainer::GetLeadingParticle(const char* opt)
61 // Get the leading particle; use p if "p" is contained in opt
66 Int_t tempID = fCurrentID;
68 AliVParticle *partMax = GetNextAcceptParticle(0);
69 AliVParticle *part = 0;
71 if (option.Contains("p")) {
72 while ((part = GetNextAcceptParticle())) {
73 if (part->P() > partMax->P()) partMax = part;
77 while ((part = GetNextAcceptParticle())) {
78 if (part->Pt() > partMax->Pt()) partMax = part;
87 //________________________________________________________________________
88 AliVParticle* AliParticleContainer::GetParticle(Int_t i) const
90 //Get i^th jet in array
92 if(i<0 || i>=fClArray->GetEntriesFast()) return 0;
93 AliVParticle *vp = static_cast<AliVParticle*>(fClArray->At(i));
98 //________________________________________________________________________
99 AliVParticle* AliParticleContainer::GetAcceptParticle(Int_t i) {
100 //return pointer to particle if particle is accepted
102 AliVParticle *vp = GetParticle(i);
105 if(AcceptParticle(vp))
108 AliDebug(2,"Particle not accepted.");
113 //________________________________________________________________________
114 AliVParticle* AliParticleContainer::GetParticleWithLabel(Int_t lab) const
116 //Get particle with label lab in array
118 Int_t i = GetIndexFromLabel(lab);
119 return GetParticle(i);
122 //________________________________________________________________________
123 AliVParticle* AliParticleContainer::GetAcceptParticleWithLabel(Int_t lab)
125 //Get particle with label lab in array
127 Int_t i = GetIndexFromLabel(lab);
128 return GetAcceptParticle(i);
132 //________________________________________________________________________
133 AliVParticle* AliParticleContainer::GetNextAcceptParticle(Int_t i)
135 //Get next accepted particle; if i >= 0 (re)start counter from i; return 0 if no accepted particle could be found
137 if (i>=0) fCurrentID = i;
139 const Int_t n = GetNEntries();
141 while (fCurrentID < n && !p) {
142 p = GetAcceptParticle(fCurrentID);
149 //________________________________________________________________________
150 AliVParticle* AliParticleContainer::GetNextParticle(Int_t i)
152 //Get next particle; if i >= 0 (re)start counter from i; return 0 if no particle could be found
154 if (i>=0) fCurrentID = i;
156 const Int_t n = GetNEntries();
158 while (fCurrentID < n && !p) {
159 p = GetParticle(fCurrentID);
166 //________________________________________________________________________
167 void AliParticleContainer::GetMomentum(TLorentzVector &mom, Int_t i) const
169 //Get momentum of the i^th particle in array
171 AliVParticle *vp = GetParticle(i);
172 if(vp) mom.SetPtEtaPhiM(vp->Pt(),vp->Eta(),vp->Phi(),0.139);
175 //________________________________________________________________________
176 Bool_t AliParticleContainer::AcceptParticle(AliVParticle *vp)
178 // Return true if vp is accepted.
180 fRejectionReason = 0;
183 fRejectionReason |= kNullObject;
187 if (vp->Pt() < fParticlePtCut) {
188 fRejectionReason |= kPtCut;
192 if (vp->Eta() < fParticleMinEta || vp->Eta() > fParticleMaxEta ||
193 vp->Phi() < fParticleMinPhi || vp->Phi() > fParticleMaxPhi) {
194 fRejectionReason |= kAcceptanceCut;
198 if(fMinDistanceTPCSectorEdge>0.) {
199 const Double_t pi = TMath::Pi();
200 const Double_t kSector = pi/9;
201 Double_t phiDist = TMath::Abs(vp->Phi() - TMath::FloorNint(vp->Phi()/kSector)*kSector);
202 if(phiDist<fMinDistanceTPCSectorEdge) {
203 fRejectionReason |= kMinDistanceTPCSectorEdgeCut;
208 if (TMath::Abs(vp->GetLabel()) > fMinMCLabel) {
209 if(vp->TestBits(fMCTrackBitMap) != (Int_t)fMCTrackBitMap) {
210 AliDebug(2,"MC particle not accepted because of MC bit map.");
211 fRejectionReason |= kBitMapCut;
216 if(vp->TestBits(fTrackBitMap) != (Int_t)fTrackBitMap) {
217 AliDebug(2,"Track not accepted because of bit map.");
218 fRejectionReason |= kBitMapCut;
223 if ((vp->GetFlag() & fMCFlag) != fMCFlag) {
224 fRejectionReason |= kMCFlag;
228 if (fGeneratorIndex >= 0 && fGeneratorIndex != vp->GetGeneratorIndex()) {
229 fRejectionReason |= kMCGeneratorCut;
233 if (fCharge>=0 && fCharge != vp->Charge()) {
234 fRejectionReason |= kChargeCut;
241 //________________________________________________________________________
242 Int_t AliParticleContainer::GetNAcceptedParticles()
244 // Get number of accepted particles
248 AliVParticle *vp = GetNextAcceptParticle(0);
250 while (GetNextAcceptParticle())
256 //________________________________________________________________________
257 void AliParticleContainer::SetClassName(const char *clname)
259 // Set the class name
262 if (cls.InheritsFrom("AliVParticle")) fClassName = clname;
263 else AliError(Form("Unable to set class name %s for a AliParticleContainer, it must inherits from AliVParticle!",clname));