Skip to content

Commit f3f4439

Browse files
jmyrchashahor02
authored andcommitted
added 'track-sorting' parameter (enabled by default) to drive sorting/not sorting tracks
1 parent 1ad815c commit f3f4439

4 files changed

Lines changed: 35 additions & 25 deletions

File tree

EventVisualisation/Workflow/include/EveWorkflow/EveWorkflowHelper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class EveWorkflowHelper
138138
EveWorkflowHelper(const FilterSet& enabledFilters = {}, std::size_t maxNTracks = -1, const Bracket& timeBracket = {}, const Bracket& etaBracket = {});
139139
static std::vector<PNT> getTrackPoints(const o2::track::TrackPar& trc, float minR, float maxR, float maxStep, float minZ = -25000, float maxZ = 25000);
140140
void selectTracks(const CalibObjectsConst* calib, GID::mask_t maskCl,
141-
GID::mask_t maskTrk, GID::mask_t maskMatch);
141+
GID::mask_t maskTrk, GID::mask_t maskMatch, bool trackSorting);
142142
void addTrackToEvent(const o2::track::TrackParCov& tr, GID gid, float trackTime, float dz, GID::Source source = GID::NSources, float maxStep = 4.f);
143143
void draw();
144144
void drawTPC(GID gid, float trackTime);

EventVisualisation/Workflow/include/EveWorkflow/O2DPLDisplay.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,11 @@ class O2DPLDisplaySpec : public o2::framework::Task
5050
O2DPLDisplaySpec(bool useMC, o2::dataformats::GlobalTrackID::mask_t trkMask,
5151
o2::dataformats::GlobalTrackID::mask_t clMask,
5252
std::shared_ptr<o2::globaltracking::DataRequest> dataRequest, const std::string& jsonPath,
53-
std::chrono::milliseconds timeInterval, int numberOfFiles, int numberOfTracks, bool eveHostNameMatch, int minITSTracks, int minTracks, bool filterITSROF, bool filterTime, const EveWorkflowHelper::Bracket& timeBracket, bool removeTPCEta, const EveWorkflowHelper::Bracket& etaBracket)
54-
: mUseMC(useMC), mTrkMask(trkMask), mClMask(clMask), mDataRequest(dataRequest), mJsonPath(jsonPath), mTimeInterval(timeInterval), mNumberOfFiles(numberOfFiles), mNumberOfTracks(numberOfTracks), mEveHostNameMatch(eveHostNameMatch), mMinITSTracks(minITSTracks), mMinTracks(minTracks), mFilterITSROF(filterITSROF), mFilterTime(filterTime), mTimeBracket(timeBracket), mRemoveTPCEta(removeTPCEta), mEtaBracket(etaBracket)
53+
std::chrono::milliseconds timeInterval, int numberOfFiles, int numberOfTracks,
54+
bool eveHostNameMatch, int minITSTracks, int minTracks, bool filterITSROF, bool filterTime,
55+
const EveWorkflowHelper::Bracket& timeBracket, bool removeTPCEta,
56+
const EveWorkflowHelper::Bracket& etaBracket, bool trackSorting)
57+
: mUseMC(useMC), mTrkMask(trkMask), mClMask(clMask), mDataRequest(dataRequest), mJsonPath(jsonPath), mTimeInterval(timeInterval), mNumberOfFiles(numberOfFiles), mNumberOfTracks(numberOfTracks), mEveHostNameMatch(eveHostNameMatch), mMinITSTracks(minITSTracks), mMinTracks(minTracks), mFilterITSROF(filterITSROF), mFilterTime(filterTime), mTimeBracket(timeBracket), mRemoveTPCEta(removeTPCEta), mEtaBracket(etaBracket), mTrackSorting(trackSorting)
5558
{
5659
this->mTimeStamp = std::chrono::high_resolution_clock::now() - timeInterval; // first run meets condition
5760
}
@@ -77,6 +80,7 @@ class O2DPLDisplaySpec : public o2::framework::Task
7780
std::chrono::milliseconds mTimeInterval; // minimal interval between files in milliseconds
7881
int mNumberOfFiles; // maximum number of files in folder - newer replaces older
7982
int mNumberOfTracks; // maximum number of track in single file (0 means no limit)
83+
bool mTrackSorting; // perform sorting tracks by track time before applying filters
8084
std::chrono::time_point<std::chrono::high_resolution_clock> mTimeStamp;
8185

8286
o2::dataformats::GlobalTrackID::mask_t mTrkMask;

EventVisualisation/Workflow/src/EveWorkflowHelper.cxx

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,18 @@
3333
#include "PHOSBase/Geometry.h"
3434
#include <TGeoBBox.h>
3535
#include <tuple>
36+
#include <gsl/span>
3637

3738
using namespace o2::event_visualisation;
3839

40+
struct TrackTimeNode {
41+
GID trackGID;
42+
float trackTime;
43+
};
44+
3945
void EveWorkflowHelper::selectTracks(const CalibObjectsConst* calib,
40-
GID::mask_t maskCl, GID::mask_t maskTrk, GID::mask_t maskMatch)
46+
GID::mask_t maskCl, GID::mask_t maskTrk, GID::mask_t maskMatch, bool trackSorting)
4147
{
42-
struct TrackTimeNode {
43-
GID trackGID;
44-
float trackTime;
45-
};
4648
std::vector<TrackTimeNode> trackTimeNodes;
4749
std::vector<Bracket> itsROFBrackets;
4850

@@ -106,10 +108,6 @@ void EveWorkflowHelper::selectTracks(const CalibObjectsConst* calib,
106108
return true;
107109
}
108110

109-
if (mEnabledFilters.test(Filter::TotalNTracks) && mTrackSet.trackGID.size() >= mMaxNTracks) {
110-
return true;
111-
}
112-
113111
auto bracket = correctTrackTime(trk, time, terr);
114112

115113
if (mEnabledFilters.test(Filter::TimeBracket) && mTimeBracket.getOverlap(bracket).isInvalid()) {
@@ -120,9 +118,6 @@ void EveWorkflowHelper::selectTracks(const CalibObjectsConst* calib,
120118
return true;
121119
}
122120

123-
// mTrackSet.trackGID.push_back(gid);
124-
// mTrackSet.trackTime.push_back(bracket.mean());
125-
126121
TrackTimeNode node;
127122
node.trackGID = gid;
128123
node.trackTime = bracket.mean();
@@ -132,14 +127,20 @@ void EveWorkflowHelper::selectTracks(const CalibObjectsConst* calib,
132127
};
133128

134129
this->mRecoCont.createTracksVariadic(creator);
135-
std::sort(trackTimeNodes.begin(), trackTimeNodes.end(),
136-
[](TrackTimeNode a, TrackTimeNode b) {
137-
return a.trackTime > b.trackTime;
138-
});
139-
for (auto node : trackTimeNodes) {
140-
if (mEnabledFilters.test(Filter::TotalNTracks) && mTrackSet.trackGID.size() >= mMaxNTracks) {
141-
break;
142-
}
130+
131+
if (trackSorting) {
132+
std::sort(trackTimeNodes.begin(), trackTimeNodes.end(),
133+
[](TrackTimeNode a, TrackTimeNode b) {
134+
return a.trackTime > b.trackTime;
135+
});
136+
}
137+
138+
std::size_t trackCount = trackTimeNodes.size();
139+
if (mEnabledFilters.test(Filter::TotalNTracks) && trackCount >= mMaxNTracks) {
140+
trackCount = mMaxNTracks;
141+
}
142+
143+
for (auto node : gsl::span<const TrackTimeNode>(trackTimeNodes.data(), trackCount)) {
143144
mTrackSet.trackGID.push_back(node.trackGID);
144145
mTrackSet.trackTime.push_back(node.trackTime);
145146
}

EventVisualisation/Workflow/src/O2DPLDisplay.cxx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ void customize(std::vector<ConfigParamSpec>& workflowOptions)
5858
{"filter-time-min", VariantType::Float, -1.f, {"display tracks only in [min, max] microseconds time range in each time frame, requires --filter-time-max to be specified as well"}},
5959
{"filter-time-max", VariantType::Float, -1.f, {"display tracks only in [min, max] microseconds time range in each time frame, requires --filter-time-min to be specified as well"}},
6060
{"remove-tpc-abs-eta", VariantType::Float, 0.f, {"remove TPC tracks in [-eta, +eta] range"}},
61+
{"track-sorting", VariantType::Bool, true, {"sort track by track time before applying filters"}},
6162
};
6263

6364
std::swap(workflowOptions, options);
@@ -97,7 +98,7 @@ void O2DPLDisplaySpec::run(ProcessingContext& pc)
9798
EveWorkflowHelper helper(enabledFilters, this->mNumberOfTracks, this->mTimeBracket, this->mEtaBracket);
9899

99100
helper.getRecoContainer().collectData(pc, *mDataRequest);
100-
helper.selectTracks(&(mData.mConfig->configCalib), mClMask, mTrkMask, mTrkMask);
101+
helper.selectTracks(&(mData.mConfig->configCalib), mClMask, mTrkMask, mTrkMask, mTrackSorting);
101102

102103
helper.prepareITSClusters(mData.mITSDict);
103104
helper.prepareMFTClusters(mData.mMFTDict);
@@ -242,12 +243,16 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
242243

243244
auto minITSTracks = cfgc.options().get<int>("min-its-tracks");
244245
auto minTracks = cfgc.options().get<int>("min-tracks");
246+
auto tracksSorting = cfgc.options().get<bool>("track-sorting");
247+
if (numberOfTracks == -1) {
248+
tracksSorting = false; // do not sort if all tracks are allowed
249+
}
245250

246251
specs.emplace_back(DataProcessorSpec{
247252
"o2-eve-display",
248253
dataRequest->inputs,
249254
{},
250-
AlgorithmSpec{adaptFromTask<O2DPLDisplaySpec>(useMC, srcTrk, srcCl, dataRequest, jsonFolder, timeInterval, numberOfFiles, numberOfTracks, eveHostNameMatch, minITSTracks, minTracks, filterITSROF, filterTime, timeBracket, removeTPCEta, etaBracket)}});
255+
AlgorithmSpec{adaptFromTask<O2DPLDisplaySpec>(useMC, srcTrk, srcCl, dataRequest, jsonFolder, timeInterval, numberOfFiles, numberOfTracks, eveHostNameMatch, minITSTracks, minTracks, filterITSROF, filterTime, timeBracket, removeTPCEta, etaBracket, tracksSorting)}});
251256

252257
return std::move(specs);
253258
}

0 commit comments

Comments
 (0)