6 #include <TClonesArray.h>
11 #include "AliTLorentzVector.h"
21 fMCFlag(AliAODMCParticle::kPhysicalPrim)
25 fClassName =
"AliAODMCParticle";
29 AliMCParticleContainer::AliMCParticleContainer(
const char *name):
31 fMCFlag(AliAODMCParticle::kPhysicalPrim)
35 fClassName =
"AliAODMCParticle";
39 AliAODMCParticle* AliMCParticleContainer::GetMCParticleWithLabel(Int_t lab)
const
43 Int_t i = GetIndexFromLabel(lab);
44 return GetMCParticle(i);
48 AliAODMCParticle* AliMCParticleContainer::GetAcceptMCParticleWithLabel(Int_t lab)
52 Int_t i = GetIndexFromLabel(lab);
53 return GetAcceptMCParticle(i);
57 AliAODMCParticle* AliMCParticleContainer::GetMCParticle(Int_t i)
const
61 if (i == -1) i = fCurrentID;
62 if (i < 0 || i >= fClArray->GetEntriesFast())
return 0;
63 AliAODMCParticle *vp =
static_cast<AliAODMCParticle*
>(fClArray->At(i));
68 AliAODMCParticle* AliMCParticleContainer::GetAcceptMCParticle(Int_t i)
72 if (i == -1) i = fCurrentID;
73 if (AcceptMCParticle(i)) {
74 return GetMCParticle(i);
77 AliDebug(2,
"Particle not accepted.");
83 AliAODMCParticle* AliMCParticleContainer::GetNextAcceptMCParticle()
87 const Int_t n = GetNEntries();
88 AliAODMCParticle *p = 0;
91 if (fCurrentID >= n)
break;
92 p = GetAcceptMCParticle(fCurrentID);
99 AliAODMCParticle* AliMCParticleContainer::GetNextMCParticle()
103 const Int_t n = GetNEntries();
104 AliAODMCParticle *p = 0;
107 if (fCurrentID >= n)
break;
108 p = GetMCParticle(fCurrentID);
115 Bool_t AliMCParticleContainer::GetMomentum(TLorentzVector &mom,
const AliAODMCParticle* part, Double_t
mass)
118 if (mass < 0) mass = part->M();
119 mom.SetPtEtaPhiM(part->Pt(), part->Eta(), part->Phi(),
mass);
123 mom.SetPtEtaPhiM(0, 0, 0, 0);
129 Bool_t AliMCParticleContainer::GetMomentum(TLorentzVector &mom,
const AliAODMCParticle* part)
131 return GetMomentum(mom,part,fMassHypothesis);
135 Bool_t AliMCParticleContainer::GetMomentum(TLorentzVector &mom, Int_t i)
139 Double_t mass = fMassHypothesis;
141 if (i == -1) i = fCurrentID;
142 AliAODMCParticle *vp = GetMCParticle(i);
144 if (mass < 0) mass = vp->M();
145 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
149 mom.SetPtEtaPhiM(0, 0, 0, 0);
155 Bool_t AliMCParticleContainer::GetNextMomentum(TLorentzVector &mom)
159 Double_t mass = fMassHypothesis;
161 AliAODMCParticle *vp = GetNextMCParticle();
163 if (mass < 0) mass = vp->M();
164 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
168 mom.SetPtEtaPhiM(0, 0, 0, 0);
174 Bool_t AliMCParticleContainer::GetAcceptMomentum(TLorentzVector &mom, Int_t i)
178 Double_t mass = fMassHypothesis;
180 if (i == -1) i = fCurrentID;
181 AliAODMCParticle *vp = GetAcceptMCParticle(i);
183 if (mass < 0) mass = vp->M();
184 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
188 mom.SetPtEtaPhiM(0, 0, 0, 0);
194 Bool_t AliMCParticleContainer::GetNextAcceptMomentum(TLorentzVector &mom)
198 Double_t mass = fMassHypothesis;
200 AliAODMCParticle *vp = GetNextAcceptMCParticle();
202 if (mass < 0) mass = vp->M();
203 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
207 mom.SetPtEtaPhiM(0, 0, 0, 0);
213 Bool_t AliMCParticleContainer::AcceptMCParticle(
const AliAODMCParticle *vp)
216 Bool_t r = ApplyMCParticleCuts(vp);
217 if (!r)
return kFALSE;
219 AliTLorentzVector mom;
221 Int_t
id = fClArray->IndexOf(vp);
223 GetMomentum(mom,
id);
226 GetMomentum(mom, vp);
229 return ApplyKinematicCuts(mom);
233 Bool_t AliMCParticleContainer::AcceptMCParticle(Int_t i)
236 Bool_t r = ApplyMCParticleCuts(GetMCParticle(i));
237 if (!r)
return kFALSE;
239 AliTLorentzVector mom;
242 return ApplyKinematicCuts(mom);
246 Bool_t AliMCParticleContainer::ApplyMCParticleCuts(
const AliAODMCParticle* vp)
250 fRejectionReason = 0;
254 if ((vp->GetFlag() & fMCFlag) != fMCFlag) {
255 fRejectionReason |= kMCFlag;
259 return ApplyParticleCuts(vp);
263 void AliMCParticleContainer::SetClassName(
const char *clname)
268 if (cls.InheritsFrom(
"AliAODMCParticle")) fClassName = clname;
269 else AliError(Form(
"Unable to set class name %s for a AliMCParticleContainer, it must inherits from AliAODMCParticle!",clname));
273 const char* AliMCParticleContainer::GetTitle()
const
275 static TString trackString;
277 if (GetMinPt() == 0) {
278 trackString = TString::Format(
"%s_pT0000", GetArrayName().
Data());
280 else if (GetMinPt() < 1.0) {
281 trackString = TString::Format(
"%s_pT0%3.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
284 trackString = TString::Format(
"%s_pT%4.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
287 return trackString.Data();
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Container for particles within the EMCAL framework.
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Container for MC-true particles within the EMCAL framework.