Skip to content

Commit f0b95fe

Browse files
pnwkwshahor02
authored andcommitted
Add filter for time range inside time frame
1 parent 11430fe commit f0b95fe

File tree

4 files changed

+55
-21
lines changed

4 files changed

+55
-21
lines changed

EventVisualisation/Workflow/include/EveWorkflow/EveWorkflowHelper.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ class EveWorkflowHelper
117117

118118
using FilterSet = std::bitset<Filter::NFilters>;
119119

120-
EveWorkflowHelper(const FilterSet& enabledFilters = {}, std::size_t maxNTracks = -1);
120+
using TBracket = o2::math_utils::Bracketf_t;
121+
122+
EveWorkflowHelper(const FilterSet& enabledFilters = {}, std::size_t maxNTracks = -1, const TBracket& timeBracket = {});
121123
static std::vector<PNT> getTrackPoints(const o2::track::TrackPar& trc, float minR, float maxR, float maxStep, float minZ = -25000, float maxZ = 25000);
122124
void selectTracks(const CalibObjectsConst* calib, GID::mask_t maskCl,
123125
GID::mask_t maskTrk, GID::mask_t maskMatch);
@@ -162,6 +164,7 @@ class EveWorkflowHelper
162164

163165
FilterSet mEnabledFilters;
164166
std::size_t mMaxNTracks;
167+
TBracket mTimeBracket;
165168
o2::globaltracking::RecoContainer mRecoCont;
166169
o2::globaltracking::RecoContainer& getRecoContainer() { return mRecoCont; }
167170
TracksSet mTrackSet;

EventVisualisation/Workflow/include/EveWorkflow/O2DPLDisplay.h

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ class O2DPLDisplaySpec : public o2::framework::Task
4949
static constexpr float mWorkflowVersion = 1.02; // helps recognizing version of workflow which produce data
5050
O2DPLDisplaySpec(bool useMC, o2::dataformats::GlobalTrackID::mask_t trkMask,
5151
o2::dataformats::GlobalTrackID::mask_t clMask,
52-
std::shared_ptr<o2::globaltracking::DataRequest> dataRequest, std::string jsonPath,
53-
std::chrono::milliseconds timeInterval, int numberOfFiles, int numberOfTracks, bool eveHostNameMatch, bool noEmptyOutput, bool filterITSROF)
54-
: mUseMC(useMC), mTrkMask(trkMask), mClMask(clMask), mDataRequest(dataRequest), mJsonPath(jsonPath), mTimeInteval(timeInterval), mNumberOfFiles(numberOfFiles), mNumberOfTracks(numberOfTracks), mEveHostNameMatch(eveHostNameMatch), mNoEmptyOutput(noEmptyOutput), mFilterITSROF(filterITSROF)
52+
std::shared_ptr<o2::globaltracking::DataRequest> dataRequest, const std::string& jsonPath,
53+
std::chrono::milliseconds timeInterval, int numberOfFiles, int numberOfTracks, bool eveHostNameMatch, bool noEmptyOutput, bool filterITSROF, bool filterTime, const EveWorkflowHelper::TBracket& timeBracket)
54+
: mUseMC(useMC), mTrkMask(trkMask), mClMask(clMask), mDataRequest(dataRequest), mJsonPath(jsonPath), mTimeInteval(timeInterval), mNumberOfFiles(numberOfFiles), mNumberOfTracks(numberOfTracks), mEveHostNameMatch(eveHostNameMatch), mNoEmptyOutput(noEmptyOutput), mFilterITSROF(filterITSROF), mFilterTime(filterTime), mTimeBracket(timeBracket)
5555
{
5656
this->mTimeStamp = std::chrono::high_resolution_clock::now() - timeInterval; // first run meets condition
5757
}
@@ -65,13 +65,15 @@ class O2DPLDisplaySpec : public o2::framework::Task
6565
void updateTimeDependentParams(o2::framework::ProcessingContext& pc);
6666

6767
bool mUseMC = false;
68-
bool mEveHostNameMatch; // empty or correct hostname
69-
bool mNoEmptyOutput; // don't create files with no tracks/clusters
70-
bool mFilterITSROF; // don't display tracks outside ITS readout frame
71-
std::string mJsonPath; // folder where files are stored
72-
std::chrono::milliseconds mTimeInteval; // minimal interval between files in miliseconds
73-
int mNumberOfFiles; // maximun number of files in folder - newer replaces older
74-
int mNumberOfTracks; // maximun number of track in single file (0 means no limit)
68+
bool mEveHostNameMatch; // empty or correct hostname
69+
bool mNoEmptyOutput; // don't create files with no tracks/clusters
70+
bool mFilterITSROF; // don't display tracks outside ITS readout frame
71+
bool mFilterTime; // don't display tracks outside [min, max] range in TF time
72+
EveWorkflowHelper::TBracket mTimeBracket; // [min, max] range in TF time for the filter
73+
std::string mJsonPath; // folder where files are stored
74+
std::chrono::milliseconds mTimeInteval; // minimal interval between files in milliseconds
75+
int mNumberOfFiles; // maximum number of files in folder - newer replaces older
76+
int mNumberOfTracks; // maximum number of track in single file (0 means no limit)
7577
std::chrono::time_point<std::chrono::high_resolution_clock> mTimeStamp;
7678

7779
o2::dataformats::GlobalTrackID::mask_t mTrkMask;

EventVisualisation/Workflow/src/EveWorkflowHelper.cxx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ using namespace o2::event_visualisation;
3333
void EveWorkflowHelper::selectTracks(const CalibObjectsConst* calib,
3434
GID::mask_t maskCl, GID::mask_t maskTrk, GID::mask_t maskMatch)
3535
{
36-
using TBracket = o2::math_utils::Bracketf_t;
37-
3836
std::vector<TBracket> itsROFBrackets;
3937

4038
if (mEnabledFilters.test(Filter::ITSROF)) {
@@ -103,6 +101,10 @@ void EveWorkflowHelper::selectTracks(const CalibObjectsConst* calib,
103101

104102
auto bracket = correctTrackTime(trk, time, terr);
105103

104+
if (mEnabledFilters.test(Filter::TimeBracket) && mTimeBracket.getOverlap(bracket).isInvalid()) {
105+
return true;
106+
}
107+
106108
if (mEnabledFilters.test(Filter::ITSROF) && !isInsideITSROF(bracket)) {
107109
return true;
108110
}
@@ -642,7 +644,7 @@ void EveWorkflowHelper::drawTRDClusters(const o2::trd::TrackTRD& tpcTrdTrack, fl
642644
}
643645
}
644646

645-
EveWorkflowHelper::EveWorkflowHelper(const FilterSet& enabledFilters, std::size_t maxNTracks) : mEnabledFilters(enabledFilters), mMaxNTracks(maxNTracks)
647+
EveWorkflowHelper::EveWorkflowHelper(const FilterSet& enabledFilters, std::size_t maxNTracks, const TBracket& timeBracket) : mEnabledFilters(enabledFilters), mMaxNTracks(maxNTracks), mTimeBracket(timeBracket)
646648
{
647649
o2::mch::TrackExtrap::setField();
648650
this->mMFTGeom = o2::mft::GeometryTGeo::Instance();

EventVisualisation/Workflow/src/O2DPLDisplay.cxx

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,16 @@ void customize(std::vector<ConfigParamSpec>& workflowOptions)
4747
{"number-of_files", VariantType::Int, 300, {"maximum number of json files in folder"}},
4848
{"number-of_tracks", VariantType::Int, -1, {"maximum number of track stored in json file (-1 means no limit)"}},
4949
{"time-interval", VariantType::Int, 5000, {"time interval in milliseconds between stored files"}},
50-
{"disable-mc", o2::framework::VariantType::Bool, false, {"disable visualization of MC data"}},
50+
{"disable-mc", VariantType::Bool, false, {"disable visualization of MC data"}},
5151
{"display-clusters", VariantType::String, "ITS,TPC,TRD,TOF", {"comma-separated list of clusters to display"}},
5252
{"display-tracks", VariantType::String, "TPC,ITS,ITS-TPC,TPC-TRD,ITS-TPC-TRD,TPC-TOF,ITS-TPC-TOF", {"comma-separated list of tracks to display"}},
53-
{"disable-root-input", o2::framework::VariantType::Bool, false, {"disable root-files input reader"}},
53+
{"disable-root-input", VariantType::Bool, false, {"disable root-files input reader"}},
5454
{"configKeyValues", VariantType::String, "", {"Semicolon separated key=value strings ..."}},
55-
{"skipOnEmptyInput", o2::framework::VariantType::Bool, false, {"Just don't run the ED when no input is provided"}},
56-
{"no-empty-output", o2::framework::VariantType::Bool, false, {"don't create files with no tracks/clusters"}},
57-
{"filter-its-rof", o2::framework::VariantType::Bool, false, {"don't display tracks outside ITS readout frame"}},
55+
{"skipOnEmptyInput", VariantType::Bool, false, {"Just don't run the ED when no input is provided"}},
56+
{"filter-its-rof", VariantType::Bool, false, {"don't display tracks outside ITS readout frame"}},
57+
{"no-empty-output", VariantType::Bool, false, {"don't create files with no tracks/clusters"}},
58+
{"filter-time-min", VariantType::Float, -1, {"display tracks only in [min, max] microseconds time range in each time frame, requires --filter-time-max to be specified as well"}},
59+
{"filter-time-max", VariantType::Float, -1, {"display tracks only in [min, max] microseconds time range in each time frame, requires --filter-time-min to be specified as well"}},
5860
};
5961

6062
std::swap(workflowOptions, options);
@@ -90,11 +92,15 @@ void O2DPLDisplaySpec::run(ProcessingContext& pc)
9092
enabledFilters.set(EveWorkflowHelper::Filter::ITSROF);
9193
}
9294

95+
if (this->mFilterTime) {
96+
enabledFilters.set(EveWorkflowHelper::Filter::TimeBracket);
97+
}
98+
9399
if (this->mNumberOfTracks != -1) {
94100
enabledFilters.set(EveWorkflowHelper::Filter::TotalNTracks);
95101
}
96102

97-
EveWorkflowHelper helper(enabledFilters, this->mNumberOfTracks);
103+
EveWorkflowHelper helper(enabledFilters, this->mNumberOfTracks, this->mTimeBracket);
98104

99105
helper.getRecoContainer().collectData(pc, *mDataRequest);
100106
helper.selectTracks(&(mData.mConfig->configCalib), mClMask, mTrkMask, mTrkMask);
@@ -181,6 +187,27 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
181187
}
182188
throw std::runtime_error("No input configured");
183189
}
190+
191+
bool filterTime;
192+
EveWorkflowHelper::TBracket timeBracket;
193+
194+
if (cfgc.options().isDefault("filter-time-min") && cfgc.options().isDefault("filter-time-max")) {
195+
filterTime = false;
196+
} else if (!cfgc.options().isDefault("filter-time-min") && !cfgc.options().isDefault("filter-time-max")) {
197+
filterTime = true;
198+
199+
auto filterTimeMin = cfgc.options().get<float>("filter-time-min");
200+
auto filterTimeMax = cfgc.options().get<float>("filter-time-max");
201+
202+
timeBracket = EveWorkflowHelper::TBracket{filterTimeMin, filterTimeMax};
203+
204+
if (timeBracket.isInvalid()) {
205+
throw std::runtime_error("Filter time bracket is invalid");
206+
}
207+
} else {
208+
throw std::runtime_error("Both filter times, min and max, have to be specified at the same time");
209+
}
210+
184211
std::shared_ptr<DataRequest> dataRequest = std::make_shared<DataRequest>();
185212
dataRequest->requestTracks(srcTrk, useMC);
186213
dataRequest->requestClusters(srcCl, useMC);
@@ -199,7 +226,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
199226
"o2-eve-display",
200227
dataRequest->inputs,
201228
{},
202-
AlgorithmSpec{adaptFromTask<O2DPLDisplaySpec>(useMC, srcTrk, srcCl, dataRequest, jsonFolder, timeInterval, numberOfFiles, numberOfTracks, eveHostNameMatch, noEmptyFiles, filterITSROF)}});
229+
AlgorithmSpec{adaptFromTask<O2DPLDisplaySpec>(useMC, srcTrk, srcCl, dataRequest, jsonFolder, timeInterval, numberOfFiles, numberOfTracks, eveHostNameMatch, noEmptyFiles, filterITSROF, filterTime, timeBracket)}});
203230

204231
return std::move(specs);
205232
}

0 commit comments

Comments
 (0)