Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 35 additions & 18 deletions Common/Core/TrackSelection.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,56 +70,66 @@ class TrackSelection

static const std::string mCutNames[static_cast<int>(TrackCuts::kNCuts)];

// True for Run 2 track types. Hoisted out of the per-cut IsSelected() so that
// the trackType() column is dereferenced once per track instead of once per cut.
template <typename T>
static bool IsRun2Track(T const& track)
{
const auto trackType = track.trackType();
return trackType == o2::aod::track::Run2Track || trackType == o2::aod::track::Run2Tracklet;
}

// Temporary function to check if track passes selection criteria. To be replaced by framework filters.
template <typename T>
bool IsSelected(T const& track) const
{
if (!IsSelected(track, TrackCuts::kTrackType)) {
const bool isRun2 = IsRun2Track(track);
if (!IsSelected(track, TrackCuts::kTrackType, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kPtRange)) {
if (!IsSelected(track, TrackCuts::kPtRange, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kEtaRange)) {
if (!IsSelected(track, TrackCuts::kEtaRange, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kTPCNCls)) {
if (!IsSelected(track, TrackCuts::kTPCNCls, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kTPCCrossedRows)) {
if (!IsSelected(track, TrackCuts::kTPCCrossedRows, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kTPCCrossedRowsOverNCls)) {
if (!IsSelected(track, TrackCuts::kTPCCrossedRowsOverNCls, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kTPCChi2NDF)) {
if (!IsSelected(track, TrackCuts::kTPCChi2NDF, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kTPCRefit)) {
if (!IsSelected(track, TrackCuts::kTPCRefit, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kITSNCls)) {
if (!IsSelected(track, TrackCuts::kITSNCls, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kITSChi2NDF)) {
if (!IsSelected(track, TrackCuts::kITSChi2NDF, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kITSRefit)) {
if (!IsSelected(track, TrackCuts::kITSRefit, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kITSHits)) {
if (!IsSelected(track, TrackCuts::kITSHits, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kGoldenChi2)) {
if (!IsSelected(track, TrackCuts::kGoldenChi2, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kDCAxy)) {
if (!IsSelected(track, TrackCuts::kDCAxy, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kDCAz)) {
if (!IsSelected(track, TrackCuts::kDCAz, isRun2)) {
return false;
}
if (!IsSelected(track, TrackCuts::kTPCFracSharedCls)) {
if (!IsSelected(track, TrackCuts::kTPCFracSharedCls, isRun2)) {
return false;
}
return true;
Expand All @@ -131,8 +141,9 @@ class TrackSelection
{
uint16_t flag = 0;

const bool isRun2 = IsRun2Track(track);
auto setFlag = [&](const TrackCuts& cut) {
if (IsSelected(track, cut)) {
if (IsSelected(track, cut, isRun2)) {
flag |= 1UL << static_cast<int>(cut);
}
};
Expand Down Expand Up @@ -161,8 +172,14 @@ class TrackSelection
template <typename T>
bool IsSelected(T const& track, const TrackCuts& cut) const
{
const bool isRun2 = track.trackType() == o2::aod::track::Run2Track || track.trackType() == o2::aod::track::Run2Tracklet;
return IsSelected(track, cut, IsRun2Track(track));
}

// Overload taking the pre-computed Run 2 flag, so that callers evaluating several
// cuts on the same track do not re-read trackType() for each of them.
template <typename T>
bool IsSelected(T const& track, const TrackCuts& cut, bool isRun2) const
{
switch (cut) {
case TrackCuts::kTrackType:
return track.trackType() == mTrackType;
Expand Down
4 changes: 2 additions & 2 deletions Common/Core/TrackSelectionDefaults.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ TrackSelection getGlobalTrackSelection()
selectedTracks.SetMaxChi2PerClusterTPC(4.f);
selectedTracks.SetRequireHitsInITSLayers(1, {0, 1}); // one hit in any SPD layer
selectedTracks.SetMaxChi2PerClusterITS(36.f);
selectedTracks.SetMaxDcaXYPtDep([](float pt) { return 0.0105f + 0.0350f / pow(pt, 1.1f); });
selectedTracks.SetMaxDcaXYPtDep([](float pt) { return 0.0105f + 0.0350f / std::pow(pt, 1.1f); });
selectedTracks.SetMaxDcaZ(2.f);
return selectedTracks;
}
Expand Down Expand Up @@ -115,7 +115,7 @@ TrackSelection getGlobalTrackSelectionRun3HF()
selectedTracks.SetMaxChi2PerClusterTPC(4.f);
selectedTracks.SetRequireHitsInITSLayers(1, {0, 1}); // one hit in any SPD layer
selectedTracks.SetMaxChi2PerClusterITS(36.f);
// selectedTracks.SetMaxDcaXYPtDep([](float pt) { return 0.0105f + 0.0350f / pow(pt, 1.1f); });
// selectedTracks.SetMaxDcaXYPtDep([](float pt) { return 0.0105f + 0.0350f / std::pow(pt, 1.1f); });
selectedTracks.SetMaxDcaZ(2.f);
selectedTracks.SetMaxDcaXY(0.25);

Expand Down
6 changes: 3 additions & 3 deletions Common/TableProducer/trackselection.cxx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.

Check failure on line 1 in Common/TableProducer/trackselection.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[name/workflow-file]

Name of a workflow file must match the name of the main struct in it (without the PWG prefix). (Class implementation files should be in "Core" directories.)

Check failure on line 1 in Common/TableProducer/trackselection.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-task]

Specify task name only when it cannot be derived from the struct name. Only append to the default name.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
Expand Down Expand Up @@ -157,18 +157,18 @@
}
if (isRun3) {
for (const auto& track : tracks) {
const o2::aod::track::TrackSelectionFlags::flagtype trackflagGlob = globalTracks.IsSelectedMask(track);

if (produceTable == 1) {
filterTable((uint8_t)0,
globalTracks.IsSelectedMask(track),
trackflagGlob,
filtBit1.IsSelected(track),
filtBit2.IsSelected(track),
filtBit3.IsSelected(track),
filtBit4.IsSelected(track),
filtBit5.IsSelected(track));
}
if (produceFBextendedTable == 1) {
o2::aod::track::TrackSelectionFlags::flagtype trackflagGlob = globalTracks.IsSelectedMask(track);
o2::aod::track::TrackSelectionFlags::flagtype trackflagFB1 = filtBit1.IsSelectedMask(track);
o2::aod::track::TrackSelectionFlags::flagtype trackflagFB2 = filtBit2.IsSelectedMask(track);
// o2::aod::track::TrackSelectionFlags::flagtype trackflagFB3 = filtBit3.IsSelectedMask(track); // only temporarily commented, will be used
Expand Down Expand Up @@ -201,7 +201,7 @@
o2::aod::track::TrackSelectionFlags::flagtype trackflagGlob = globalTracks.IsSelectedMask(track);
if (produceTable == 1) {
filterTable((uint8_t)globalTracksSDD.IsSelected(track),
globalTracks.IsSelectedMask(track),
trackflagGlob,
filtBit1.IsSelected(track),
filtBit2.IsSelected(track),
filtBit3.IsSelected(track),
Expand Down Expand Up @@ -238,6 +238,6 @@
//****************************************************************************************
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
WorkflowSpec workflow{adaptAnalysisTask<TrackSelectionTask>(cfgc, TaskName{"track-selection"})};

Check failure on line 241 in Common/TableProducer/trackselection.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-task]

Specified task name track-selection produces device name track-selection which does not match the device name track-selection-task from the struct name TrackSelectionTask. (Matching struct name TrackSelection)
return workflow;
}
Loading