15 #include <TClonesArray.h>
17 #include "AliAODEvent.h"
18 #include "AliESDEvent.h"
19 #include "AliVEvent.h"
22 #include "AliESDtrack.h"
42 fSelectionModeAny(kFALSE),
45 fEmcalTrackSelection(0),
49 fBaseClassName =
"AliVTrack";
50 SetClassName(
"AliVTrack");
51 fMassHypothesis = 0.139;
63 fSelectionModeAny(kFALSE),
65 fTrackCutsPeriod(period),
66 fEmcalTrackSelection(0),
70 fBaseClassName =
"AliVTrack";
71 SetClassName(
"AliVTrack");
73 if (
fTrackCutsPeriod.IsNull() && !AliTrackContainer::fgDefTrackCutsPeriod.IsNull()) {
74 AliInfo(Form(
"Default track cuts period is %s", AliTrackContainer::fgDefTrackCutsPeriod.
Data()));
77 fMassHypothesis = 0.139;
97 AliInfo(
"Using custom track cuts");
100 if (fLoadedClass->InheritsFrom(
"AliAODTrack")) {
101 AliInfo(Form(
"Objects are of type %s: AOD track selection will be done.", fLoadedClass->GetName()));
104 else if (fLoadedClass->InheritsFrom(
"AliESDtrack")) {
105 AliInfo(Form(
"Objects are of type %s: ESD track selection will be done.", fLoadedClass->GetName()));
109 AliWarning(Form(
"Objects are of type %s: no track filtering will be done!!", fLoadedClass->GetName()));
129 AliInfo(Form(
"Using track cuts %d (no data period was provided!)",
fTrackFilterType));
132 if (fLoadedClass->InheritsFrom(
"AliAODTrack")) {
133 AliInfo(Form(
"Objects are of type %s: AOD track selection will be done.", fLoadedClass->GetName()));
136 else if (fLoadedClass->InheritsFrom(
"AliESDtrack")) {
137 AliInfo(Form(
"Objects are of type %s: ESD track selection will be done.", fLoadedClass->GetName()));
141 AliWarning(Form(
"Objects are of type %s: no track filtering will be done!!", fLoadedClass->GetName()));
154 AliParticleContainer::NextEvent(event);
161 TIter nextBitmap(trackBitmaps);
164 while ((bits = static_cast<TBits*>(nextBitmap()))) {
171 if (bits->FirstSetBit() == 0) {
174 else if (bits->FirstSetBit() == 1) {
175 if ((vTrack->GetStatus()&AliVTrack::kITSrefit) != 0) {
213 if (i == -1) i = fCurrentID;
218 AliDebug(2,
"Track not accepted.");
230 const Int_t n = GetNEntries();
234 if (fCurrentID >= n)
break;
248 const Int_t n = GetNEntries();
252 if (fCurrentID >= n)
break;
288 if (mass < 0) mass = track->M();
290 Bool_t useConstrainedParams = kFALSE;
294 useConstrainedParams = kTRUE;
298 if (useConstrainedParams) {
299 const AliESDtrack *esdtrack =
static_cast<const AliESDtrack*
>(track);
300 mom.SetPtEtaPhiM(esdtrack->GetConstrainedParam()->Pt(), esdtrack->GetConstrainedParam()->Eta(), esdtrack->GetConstrainedParam()->Phi(),
mass);
303 mom.SetPtEtaPhiM(track->Pt(), track->Eta(), track->Phi(),
mass);
308 mom.SetPtEtaPhiM(0, 0, 0, 0);
338 if (i == -1) i = fCurrentID;
341 if (mass < 0) mass = vp->M();
345 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
346 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
349 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
354 mom.SetPtEtaPhiM(0, 0, 0, 0);
374 if (mass < 0) mass = vp->M();
378 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
379 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
382 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
387 mom.SetPtEtaPhiM(0, 0, 0, 0);
407 if (i == -1) i = fCurrentID;
410 if (mass < 0) mass = vp->M();
414 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
415 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
418 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
424 mom.SetPtEtaPhiM(0, 0, 0, 0);
444 if (mass < 0) mass = vp->M();
448 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
449 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
452 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
458 mom.SetPtEtaPhiM(0, 0, 0, 0);
476 if (!r)
return kFALSE;
498 if (!r)
return kFALSE;
551 if (icut < fListOfCuts->GetEntries()) {
552 return static_cast<AliVCuts *
>(
fListOfCuts->At(icut));
602 trackString = TString::Format(
"%s_pT%04d", GetArrayName().
Data(), static_cast<int>(GetMinPt()*1000.0));
603 return trackString.Data();
607 if(ev->IsA() == AliAODEvent::Class())
return "tracks";
608 else if(ev->IsA() == AliESDEvent::Class())
return "Tracks";
Interface for virtual track selection.
TObjArray * fFilteredTracks
! tracks filtered using fEmcalTrackSelection
void SetArray(const AliVEvent *event)
No filter (all tracks passing)
static TString fgDefTrackCutsPeriod
! default period string used to generate track cuts
const AliTrackIterableContainer accepted() const
Container with name, TClonesArray and cuts for particles.
EMCALIterableContainer::AliEmcalIterableContainerT< AliVTrack, EMCALIterableContainer::operator_star_object< AliVTrack > > AliTrackIterableContainer
Declaration of class AliTLorentzVector.
Track selected under the constrained hybrid track cuts.
virtual Bool_t ApplyParticleCuts(const AliVParticle *vp, UInt_t &rejectionReason) const
UInt_t fAODFilterBits
track filter bits
const TClonesArray * GetAcceptedTrackBitmaps() const
void NextEvent(const AliVEvent *event)
const AliTrackIterableContainer all() const
void SetSelectionModeAny()
Set selection mode to any.
AliVCuts * GetTrackCuts(Int_t icut)
virtual Bool_t GetNextMomentum(TLorentzVector &mom)
AliEmcalTrackSelection * fEmcalTrackSelection
! track selection object
virtual Bool_t GetMomentum(TLorentzVector &mom, Int_t i) const
ETrackFilterType_t fTrackFilterType
track filter type
TString fTrackCutsPeriod
period string used to generate track cuts
Container for particles within the EMCAL framework.
Track selected under the constrained hybrid track cuts without ITS refit.
virtual Bool_t GetAcceptMomentum(TLorentzVector &mom, Int_t i) const
virtual Bool_t GetMomentumFromTrack(TLorentzVector &mom, const AliVTrack *track, Double_t mass) const
virtual Bool_t ApplyTrackCuts(const AliVTrack *vp, UInt_t &rejectionReason) const
EMCALIterableContainer::AliEmcalIterableContainerT< AliVTrack, EMCALIterableContainer::operator_star_pair< AliVTrack > > AliTrackIterableMomentumContainer
virtual Bool_t AcceptTrack(const AliVTrack *vp, UInt_t &rejectionReason) const
Int_t GetNumberOfCutObjects() const
TArrayC fTrackTypes
! track types
TObjArray * fListOfCuts
list of track cut objects
void AddTrackCuts(AliVCuts *cuts)
Add new track cuts to the list of cuts.
Implement virtual track selection for AOD analysis.
virtual AliVTrack * GetNextTrack()
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)
Bool_t fSelectionModeAny
accept track if any of the cuts is fulfilled
Custom (user-defined) tracks.
virtual AliVTrack * GetTrack(Int_t i=-1) const
Track selected under the global hybrid track cuts.
TObjArray * GetAcceptedTracks(const TClonesArray *const tracks)
Select tracks from a TClonesArray of input tracks.
virtual AliVTrack * GetNextAcceptTrack()
Char_t GetTrackType(const AliVTrack *track) const
void AddTrackCuts(AliVCuts *cuts)
virtual TString GetDefaultArrayName(const AliVEvent *const ev) const
void SetArray(const AliVEvent *event)
virtual AliVTrack * GetAcceptTrack(Int_t i=-1) const
virtual Bool_t GetNextAcceptMomentum(TLorentzVector &mom)
void SetSelectionModeAll()
Set selection mode to all.
const AliTrackIterableMomentumContainer accepted_momentum() const
const char * GetTitle() const
virtual Bool_t ApplyKinematicCuts(const AliTLorentzVector &mom, UInt_t &rejectionReason) const
Implementation of virtual track selection for ESDs.
const AliTrackIterableMomentumContainer all_momentum() const