2929#include " DataFormatsMCH/ROFRecord.h"
3030#include " DataFormatsMCH/Cluster.h"
3131#include < unistd.h>
32- #include < climits>
3332
3433using namespace o2 ::event_visualisation;
3534using 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