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()));
159 TIter nextBitmap(trackBitmaps);
162 while ((bits = static_cast<TBits*>(nextBitmap()))) {
169 if (bits->FirstSetBit() == 0) {
172 else if (bits->FirstSetBit() == 1) {
173 if ((vTrack->GetStatus()&AliVTrack::kITSrefit) != 0) {
211 if (i == -1) i = fCurrentID;
216 AliDebug(2,
"Track not accepted.");
228 const Int_t n = GetNEntries();
232 if (fCurrentID >= n)
break;
246 const Int_t n = GetNEntries();
250 if (fCurrentID >= n)
break;
286 if (mass < 0) mass = track->M();
288 Bool_t useConstrainedParams = kFALSE;
292 useConstrainedParams = kTRUE;
296 if (useConstrainedParams) {
297 const AliESDtrack *esdtrack =
static_cast<const AliESDtrack*
>(track);
298 mom.SetPtEtaPhiM(esdtrack->GetConstrainedParam()->Pt(), esdtrack->GetConstrainedParam()->Eta(), esdtrack->GetConstrainedParam()->Phi(),
mass);
301 mom.SetPtEtaPhiM(track->Pt(), track->Eta(), track->Phi(),
mass);
306 mom.SetPtEtaPhiM(0, 0, 0, 0);
336 if (i == -1) i = fCurrentID;
339 if (mass < 0) mass = vp->M();
343 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
344 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
347 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
352 mom.SetPtEtaPhiM(0, 0, 0, 0);
372 if (mass < 0) mass = vp->M();
376 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
377 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
380 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
385 mom.SetPtEtaPhiM(0, 0, 0, 0);
405 if (i == -1) i = fCurrentID;
408 if (mass < 0) mass = vp->M();
412 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
413 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
416 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
422 mom.SetPtEtaPhiM(0, 0, 0, 0);
442 if (mass < 0) mass = vp->M();
446 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
447 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
450 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
456 mom.SetPtEtaPhiM(0, 0, 0, 0);
474 if (!r)
return kFALSE;
496 if (!r)
return kFALSE;
549 if (icut < fListOfCuts->GetEntries()) {
550 return static_cast<AliVCuts *
>(
fListOfCuts->At(icut));
601 if (GetMinPt() == 0) {
602 trackString = TString::Format(
"%s_pT0000", GetArrayName().
Data());
604 else if (GetMinPt() < 1.0) {
605 trackString = TString::Format(
"%s_pT0%3.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
608 trackString = TString::Format(
"%s_pT%4.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
611 return trackString.Data();
615 if(ev->IsA() == AliAODEvent::Class())
return "tracks";
616 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
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)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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