Skip to content

Commit 92ce297

Browse files
pnwkwshahor02
authored andcommitted
Added TPC eta range removal
1 parent 7b7a55a commit 92ce297

4 files changed

Lines changed: 52 additions & 39 deletions

File tree

EventVisualisation/Workflow/include/EveWorkflow/EveWorkflowHelper.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,16 @@ class EveWorkflowHelper
111111
enum Filter : uint8_t {
112112
ITSROF,
113113
TimeBracket,
114+
EtaBracket,
114115
TotalNTracks,
115116
NFilters
116117
};
117118

118119
using FilterSet = std::bitset<Filter::NFilters>;
119120

120-
using TBracket = o2::math_utils::Bracketf_t;
121+
using Bracket = o2::math_utils::Bracketf_t;
121122

122-
EveWorkflowHelper(const FilterSet& enabledFilters = {}, std::size_t maxNTracks = -1, const TBracket& timeBracket = {});
123+
EveWorkflowHelper(const FilterSet& enabledFilters = {}, std::size_t maxNTracks = -1, const Bracket& timeBracket = {}, const Bracket& etaBracket = {});
123124
static std::vector<PNT> getTrackPoints(const o2::track::TrackPar& trc, float minR, float maxR, float maxStep, float minZ = -25000, float maxZ = 25000);
124125
void selectTracks(const CalibObjectsConst* calib, GID::mask_t maskCl,
125126
GID::mask_t maskTrk, GID::mask_t maskMatch);
@@ -165,7 +166,8 @@ class EveWorkflowHelper
165166

166167
FilterSet mEnabledFilters;
167168
std::size_t mMaxNTracks;
168-
TBracket mTimeBracket;
169+
Bracket mTimeBracket;
170+
Bracket mEtaBracket;
169171
o2::globaltracking::RecoContainer mRecoCont;
170172
o2::globaltracking::RecoContainer& getRecoContainer() { return mRecoCont; }
171173
TracksSet mTrackSet;

EventVisualisation/Workflow/include/EveWorkflow/O2DPLDisplay.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ 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::TBracket& timeBracket)
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)
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)
5555
{
5656
this->mTimeStamp = std::chrono::high_resolution_clock::now() - timeInterval; // first run meets condition
5757
}
@@ -68,10 +68,11 @@ class O2DPLDisplaySpec : public o2::framework::Task
6868
bool mEveHostNameMatch; // empty or correct hostname
6969
int mMinITSTracks; // minimum number of ITS tracks to produce a file
7070
int mMinTracks; // minimum number of all tracks to produce a file
71-
bool mNoEmptyOutput; // don't create files with no tracks/clusters
7271
bool mFilterITSROF; // don't display tracks outside ITS readout frame
7372
bool mFilterTime; // don't display tracks outside [min, max] range in TF time
74-
EveWorkflowHelper::TBracket mTimeBracket; // [min, max] range in TF time for the filter
73+
bool mRemoveTPCEta; // don't display TPC tracks inside [min, max] eta range
74+
EveWorkflowHelper::Bracket mTimeBracket; // [min, max] range in TF time for the filter
75+
EveWorkflowHelper::Bracket mEtaBracket; // [min, max] eta range for the TPC tracks removal
7576
std::string mJsonPath; // folder where files are stored
7677
std::chrono::milliseconds mTimeInterval; // minimal interval between files in milliseconds
7778
int mNumberOfFiles; // maximum number of files in folder - newer replaces older

EventVisualisation/Workflow/src/EveWorkflowHelper.cxx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ using namespace o2::event_visualisation;
3434
void EveWorkflowHelper::selectTracks(const CalibObjectsConst* calib,
3535
GID::mask_t maskCl, GID::mask_t maskTrk, GID::mask_t maskMatch)
3636
{
37-
std::vector<TBracket> itsROFBrackets;
37+
std::vector<Bracket> itsROFBrackets;
3838

3939
if (mEnabledFilters.test(Filter::ITSROF)) {
4040
const auto irFrames = getRecoContainer().getIRFramesITS();
@@ -76,10 +76,10 @@ void EveWorkflowHelper::selectTracks(const CalibObjectsConst* calib,
7676
// for all other tracks the time is in \mus with gaussian error
7777
terr += mPVParams->timeMarginTrackTime;
7878

79-
return TBracket{t0 - terr, t0 + terr};
79+
return Bracket{t0 - terr, t0 + terr};
8080
};
8181

82-
auto isInsideITSROF = [&itsROFBrackets](const TBracket& br) {
82+
auto isInsideITSROF = [&itsROFBrackets](const Bracket& br) {
8383
for (const auto& ir : itsROFBrackets) {
8484
const auto overlap = ir.getOverlap(br);
8585

@@ -470,10 +470,11 @@ void EveWorkflowHelper::drawMFTClusters(GID gid, float trackTime)
470470
void EveWorkflowHelper::drawTPC(GID gid, float trackTime)
471471
{
472472
const auto& tr = mRecoCont.getTPCTrack(gid);
473-
// this is a hack to suppress the noise
474-
// if (std::abs(tr.getEta()) < 0.05) {
475-
// return;
476-
// }
473+
474+
if (mEnabledFilters.test(Filter::EtaBracket) && mEtaBracket.isOutside(tr.getEta()) == Bracket::Relation::Inside) {
475+
return;
476+
}
477+
477478
auto vTrack = mEvent.addTrack({.time = static_cast<float>(trackTime),
478479
.charge = tr.getCharge(),
479480
.PID = tr.getPID(),
@@ -645,7 +646,7 @@ void EveWorkflowHelper::drawTRDClusters(const o2::trd::TrackTRD& tpcTrdTrack, fl
645646
}
646647
}
647648

648-
EveWorkflowHelper::EveWorkflowHelper(const FilterSet& enabledFilters, std::size_t maxNTracks, const TBracket& timeBracket) : mEnabledFilters(enabledFilters), mMaxNTracks(maxNTracks), mTimeBracket(timeBracket)
649+
EveWorkflowHelper::EveWorkflowHelper(const FilterSet& enabledFilters, std::size_t maxNTracks, const Bracket& timeBracket, const Bracket& etaBracket) : mEnabledFilters(enabledFilters), mMaxNTracks(maxNTracks), mTimeBracket(timeBracket), mEtaBracket(etaBracket)
649650
{
650651
o2::mch::TrackExtrap::setField();
651652
this->mMFTGeom = o2::mft::GeometryTGeo::Instance();

EventVisualisation/Workflow/src/O2DPLDisplay.cxx

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "DataFormatsMCH/ROFRecord.h"
3030
#include "DataFormatsMCH/Cluster.h"
3131
#include <unistd.h>
32-
#include <climits>
3332

3433
using namespace o2::event_visualisation;
3534
using namespace o2::framework;
@@ -58,6 +57,7 @@ void customize(std::vector<ConfigParamSpec>& workflowOptions)
5857
{"filter-its-rof", VariantType::Bool, false, {"don't display tracks outside ITS readout frame"}},
5958
{"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"}},
6059
{"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"}},
60+
{"remove-tpc-abs-eta", VariantType::Float, 0.f, {"remove TPC tracks in [-eta, +eta] range"}},
6161
};
6262

6363
std::swap(workflowOptions, options);
@@ -89,19 +89,12 @@ void O2DPLDisplaySpec::run(ProcessingContext& pc)
8989

9090
EveWorkflowHelper::FilterSet enabledFilters;
9191

92-
if (this->mFilterITSROF) {
93-
enabledFilters.set(EveWorkflowHelper::Filter::ITSROF);
94-
}
95-
96-
if (this->mFilterTime) {
97-
enabledFilters.set(EveWorkflowHelper::Filter::TimeBracket);
98-
}
92+
enabledFilters.set(EveWorkflowHelper::Filter::ITSROF, this->mFilterITSROF);
93+
enabledFilters.set(EveWorkflowHelper::Filter::TimeBracket, this->mFilterTime);
94+
enabledFilters.set(EveWorkflowHelper::Filter::EtaBracket, this->mRemoveTPCEta);
95+
enabledFilters.set(EveWorkflowHelper::Filter::TotalNTracks, this->mNumberOfTracks != -1);
9996

100-
if (this->mNumberOfTracks != -1) {
101-
enabledFilters.set(EveWorkflowHelper::Filter::TotalNTracks);
102-
}
103-
104-
EveWorkflowHelper helper(enabledFilters, this->mNumberOfTracks, this->mTimeBracket);
97+
EveWorkflowHelper helper(enabledFilters, this->mNumberOfTracks, this->mTimeBracket, this->mEtaBracket);
10598

10699
helper.getRecoContainer().collectData(pc, *mDataRequest);
107100
helper.selectTracks(&(mData.mConfig->configCalib), mClMask, mTrkMask, mTrkMask);
@@ -204,19 +197,35 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
204197
throw std::runtime_error("No input configured");
205198
}
206199

207-
bool filterTime;
208-
EveWorkflowHelper::TBracket timeBracket{cfgc.options().get<float>("filter-time-min"), cfgc.options().get<float>("filter-time-max")};
200+
auto isRangeEnabled = [&opts = cfgc.options()](const char* min_name, const char* max_name) {
201+
EveWorkflowHelper::Bracket bracket{opts.get<float>(min_name), opts.get<float>(max_name)};
202+
bool optEnabled = false;
209203

210-
if (timeBracket.getMin() < 0 && timeBracket.getMax() < 0) {
211-
filterTime = false;
212-
} else if (timeBracket.getMin() >= 0 && timeBracket.getMax() >= 0) {
213-
filterTime = true;
204+
if (bracket.getMin() < 0 && bracket.getMax() < 0) {
205+
optEnabled = false;
206+
} else if (bracket.getMin() >= 0 && bracket.getMax() >= 0) {
207+
optEnabled = true;
214208

215-
if (timeBracket.isInvalid()) {
216-
throw std::runtime_error("Filter time bracket is invalid");
209+
if (bracket.isInvalid()) {
210+
throw std::runtime_error(fmt::format("{}, {} bracket is invalid", min_name, max_name));
211+
}
212+
} else {
213+
throw std::runtime_error(fmt::format("Both boundaries, {} and {}, have to be specified at the same time", min_name, max_name));
217214
}
218-
} else {
219-
throw std::runtime_error("Both filter times, min and max, have to be specified at the same time");
215+
216+
return std::make_tuple(optEnabled, bracket);
217+
};
218+
219+
const auto [filterTime, timeBracket] = isRangeEnabled("filter-time-min", "filter-time-max");
220+
221+
const auto etaRange = cfgc.options().get<float>("remove-tpc-abs-eta");
222+
223+
bool removeTPCEta = false;
224+
EveWorkflowHelper::Bracket etaBracket;
225+
226+
if (etaRange != 0.f) {
227+
etaBracket = EveWorkflowHelper::Bracket{-etaRange, etaRange};
228+
removeTPCEta = true;
220229
}
221230

222231
std::shared_ptr<DataRequest> dataRequest = std::make_shared<DataRequest>();
@@ -238,7 +247,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
238247
"o2-eve-display",
239248
dataRequest->inputs,
240249
{},
241-
AlgorithmSpec{adaptFromTask<O2DPLDisplaySpec>(useMC, srcTrk, srcCl, dataRequest, jsonFolder, timeInterval, numberOfFiles, numberOfTracks, eveHostNameMatch, minITSTracks, minTracks, filterITSROF, filterTime, timeBracket)}});
250+
AlgorithmSpec{adaptFromTask<O2DPLDisplaySpec>(useMC, srcTrk, srcCl, dataRequest, jsonFolder, timeInterval, numberOfFiles, numberOfTracks, eveHostNameMatch, minITSTracks, minTracks, filterITSROF, filterTime, timeBracket, removeTPCEta, etaBracket)}});
242251

243252
return std::move(specs);
244253
}

0 commit comments

Comments
 (0)