15 #include <TClonesArray.h>
17 #include "AliVEvent.h"
20 #include "AliESDtrack.h"
40 fSelectionModeAny(kFALSE),
43 fEmcalTrackSelection(0),
47 fBaseClassName =
"AliVTrack";
48 SetClassName(
"AliVTrack");
49 fMassHypothesis = 0.139;
61 fSelectionModeAny(kFALSE),
63 fTrackCutsPeriod(period),
64 fEmcalTrackSelection(0),
68 fBaseClassName =
"AliVTrack";
69 SetClassName(
"AliVTrack");
71 if (
fTrackCutsPeriod.IsNull() && !AliTrackContainer::fgDefTrackCutsPeriod.IsNull()) {
72 AliInfo(Form(
"Default track cuts period is %s", AliTrackContainer::fgDefTrackCutsPeriod.
Data()));
75 fMassHypothesis = 0.139;
86 AliParticleContainer::SetArray(event);
95 AliInfo(
"Using custom track cuts");
98 if (fLoadedClass->InheritsFrom(
"AliAODTrack")) {
99 AliInfo(Form(
"Objects are of type %s: AOD track selection will be done.", fLoadedClass->GetName()));
102 else if (fLoadedClass->InheritsFrom(
"AliESDtrack")) {
103 AliInfo(Form(
"Objects are of type %s: ESD track selection will be done.", fLoadedClass->GetName()));
107 AliWarning(Form(
"Objects are of type %s: no track filtering will be done!!", fLoadedClass->GetName()));
127 AliInfo(Form(
"Using track cuts %d (no data period was provided!)",
fTrackFilterType));
130 if (fLoadedClass->InheritsFrom(
"AliAODTrack")) {
131 AliInfo(Form(
"Objects are of type %s: AOD track selection will be done.", fLoadedClass->GetName()));
134 else if (fLoadedClass->InheritsFrom(
"AliESDtrack")) {
135 AliInfo(Form(
"Objects are of type %s: ESD track selection will be done.", fLoadedClass->GetName()));
139 AliWarning(Form(
"Objects are of type %s: no track filtering will be done!!", fLoadedClass->GetName()));
157 TIter nextBitmap(trackBitmaps);
160 while ((bits = static_cast<TBits*>(nextBitmap()))) {
167 if (bits->FirstSetBit() == 0) {
170 else if (bits->FirstSetBit() == 1) {
171 if ((vTrack->GetStatus()&AliVTrack::kITSrefit) != 0) {
209 if (i == -1) i = fCurrentID;
214 AliDebug(2,
"Track not accepted.");
226 const Int_t n = GetNEntries();
230 if (fCurrentID >= n)
break;
244 const Int_t n = GetNEntries();
248 if (fCurrentID >= n)
break;
284 if (mass < 0) mass = track->M();
286 Bool_t useConstrainedParams = kFALSE;
290 useConstrainedParams = kTRUE;
294 if (useConstrainedParams) {
295 const AliESDtrack *esdtrack =
static_cast<const AliESDtrack*
>(track);
296 mom.SetPtEtaPhiM(esdtrack->GetConstrainedParam()->Pt(), esdtrack->GetConstrainedParam()->Eta(), esdtrack->GetConstrainedParam()->Phi(),
mass);
299 mom.SetPtEtaPhiM(track->Pt(), track->Eta(), track->Phi(),
mass);
304 mom.SetPtEtaPhiM(0, 0, 0, 0);
334 if (i == -1) i = fCurrentID;
337 if (mass < 0) mass = vp->M();
341 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
342 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
345 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
350 mom.SetPtEtaPhiM(0, 0, 0, 0);
370 if (mass < 0) mass = vp->M();
374 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
375 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
378 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
383 mom.SetPtEtaPhiM(0, 0, 0, 0);
403 if (i == -1) i = fCurrentID;
406 if (mass < 0) mass = vp->M();
410 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
411 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
414 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
420 mom.SetPtEtaPhiM(0, 0, 0, 0);
440 if (mass < 0) mass = vp->M();
444 AliESDtrack *track =
static_cast<AliESDtrack*
>(vp);
445 mom.SetPtEtaPhiM(track->GetConstrainedParam()->Pt(), track->GetConstrainedParam()->Eta(), track->GetConstrainedParam()->Phi(),
mass);
448 mom.SetPtEtaPhiM(vp->Pt(), vp->Eta(), vp->Phi(),
mass);
454 mom.SetPtEtaPhiM(0, 0, 0, 0);
472 if (!r)
return kFALSE;
494 if (!r)
return kFALSE;
547 if (icut < fListOfCuts->GetEntries()) {
548 return static_cast<AliVCuts *
>(
fListOfCuts->At(icut));
599 if (GetMinPt() == 0) {
600 trackString = TString::Format(
"%s_pT0000", GetArrayName().
Data());
602 else if (GetMinPt() < 1.0) {
603 trackString = TString::Format(
"%s_pT0%3.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
606 trackString = TString::Format(
"%s_pT%4.0f", GetArrayName().
Data(), GetMinPt()*1000.0);
609 return trackString.Data();
Interface for virtual track selection.
TObjArray * fFilteredTracks
! tracks filtered using fEmcalTrackSelection
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()
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)
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
virtual AliVTrack * GetTrack(Int_t i=-1) const
Track selected under the global hybrid track cuts.
TObjArray * GetAcceptedTracks(const TClonesArray *const tracks)
virtual AliVTrack * GetNextAcceptTrack()
Char_t GetTrackType(const AliVTrack *track) const
void AddTrackCuts(AliVCuts *cuts)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
void SetArray(const AliVEvent *event)
virtual AliVTrack * GetAcceptTrack(Int_t i=-1) const
virtual Bool_t GetNextAcceptMomentum(TLorentzVector &mom)
void SetSelectionModeAll()
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