Skip to content

Commit 04fcc27

Browse files
committed
MID: remove input wildcards in MID workflows
1 parent d9bbbfc commit 04fcc27

File tree

10 files changed

+76
-45
lines changed

10 files changed

+76
-45
lines changed

Detectors/MUON/MID/Workflow/include/MIDWorkflow/ColumnDataSpecsUtils.h

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "DataFormatsMID/ColumnData.h"
3535
#include "DataFormatsMID/ROFRecord.h"
3636
#include "DataFormatsMID/MCLabel.h"
37+
#include "Framework/Logger.h"
3738

3839
namespace o2
3940
{
@@ -42,21 +43,28 @@ namespace mid
4243
namespace specs
4344
{
4445

45-
/// Returns the input specs for MID Column Data and corresponding ROFs and labels
46+
/// Returns the input specs for MID Column Data and corresponding ROFs and labels for EventType Standard
4647
/// \param dataBind Data binding name
4748
/// \param dataDesc Input data description
4849
/// \param useMC Builds output specs for labels
4950
/// \return Vector of input specs
50-
std::vector<framework::InputSpec> buildInputSpecs(std::string_view dataBind, std::string_view dataDesc, bool useMC);
51+
std::vector<framework::InputSpec> buildStandardInputSpecs(std::string_view dataBind, std::string_view dataDesc, bool useMC);
5152

52-
/// Returns the input specs for MID Column Data and corresponding ROFs and labels
53+
/// Returns the input specs for MID Column Data and corresponding ROFs and labels for EventType Standard
5354
/// \param dataBind Data binding name
5455
/// \param dataDesc Input data description
5556
/// \param rofDesc Input ROF record description
5657
/// \param labelsDesc Input MC labels description
5758
/// \param useMC Builds output specs for labels
5859
/// \return Vector of input specs
59-
std::vector<framework::InputSpec> buildInputSpecs(std::string_view dataBind, std::string_view dataDesc, std::string_view rofDesc, std::string_view labelsDesc, bool useMC);
60+
std::vector<framework::InputSpec> buildStandardInputSpecs(std::string_view dataBind, std::string_view dataDesc, std::string_view rofDesc, std::string_view labelsDesc, bool useMC);
61+
62+
/// Returns the input specs for MID Column Data and corresponding ROFs and labels for all three EventTypes
63+
/// \param dataBind Data binding name
64+
/// \param dataDesc Input data description
65+
/// \param rofDesc Input ROF record description
66+
/// \return Vector of input specs
67+
std::vector<framework::InputSpec> buildInputSpecs(std::string_view dataBind, std::string_view dataDesc, std::string_view rofDesc);
6068

6169
/// Returns the output specs for the different event types
6270
/// \param bind Binding name
@@ -71,30 +79,27 @@ std::vector<framework::OutputSpec> buildOutputSpecs(std::string_view bind, std::
7179
/// \return Vector of Output specs
7280
std::vector<framework::OutputSpec> buildStandardOutputSpecs(std::string_view dataBind, std::string_view dataDesc, bool useMC);
7381

74-
/// Returns the inputs for the different event types
82+
/// Returns the input matching a specific binding
7583
/// \param pc Processing context
7684
/// \param bind Binding name
7785
/// \return Array of spans
7886
template <typename T>
79-
std::array<gsl::span<const T>, NEvTypes> getInput(framework::ProcessingContext& pc, std::string_view bind)
87+
gsl::span<const T> getInput(framework::ProcessingContext& pc, std::string_view bind)
8088
{
81-
std::array<gsl::span<const T>, 3> data;
8289
for (auto const& inputRef : framework::InputRecordWalker(pc.inputs())) {
83-
auto const* dh = framework::DataRefUtils::getHeader<o2::header::DataHeader*>(inputRef);
84-
auto subSpecIdx = static_cast<size_t>(dh->subSpecification);
8590
if (framework::DataRefUtils::match(inputRef, bind.data())) {
86-
data[subSpecIdx] = pc.inputs().get<gsl::span<T>>(inputRef);
91+
return pc.inputs().get<gsl::span<T>>(inputRef);
8792
}
8893
}
89-
return data;
94+
return gsl::span<const T>();
9095
}
9196

9297
/// Gets the outputs
9398
/// \param outputSpecs Vector of output specs
9499
/// \return vector of outputs
95100
std::vector<framework::Output> buildOutputs(std::vector<framework::OutputSpec> outputSpecs);
96101

97-
/// Returns the array of Column Data
102+
/// Returns the array of Column Data for all three EventTypes
98103
/// \param pc Processing context
99104
/// \param dataBind Data binding name
100105
/// \return Array of Column Data spans
@@ -105,9 +110,9 @@ std::array<gsl::span<const ColumnData>, NEvTypes> getData(framework::ProcessingC
105110
/// \param dataBind Data binding name
106111
/// \param eventType Event type
107112
/// \return Span of ColumnData
108-
gsl::span<const ColumnData> getData(framework::ProcessingContext& pc, std::string_view dataBind, EventType eventType);
113+
gsl::span<const ColumnData> getDataEventType(framework::ProcessingContext& pc, std::string_view dataBind, EventType eventType);
109114

110-
/// Returns the array of ROF records
115+
/// Returns the array of ROF records for all three EventTypes
111116
/// \param pc Processing context
112117
/// \param dataBind Data binding name
113118
/// \return Array of ROF Records spans
@@ -118,7 +123,7 @@ std::array<gsl::span<const ROFRecord>, NEvTypes> getRofs(framework::ProcessingCo
118123
/// \param dataBind Data binding name
119124
/// \param eventType Event type
120125
/// \return Span of ROF records
121-
gsl::span<const ROFRecord> getRofs(framework::ProcessingContext& pc, std::string_view dataBind, EventType eventType);
126+
gsl::span<const ROFRecord> getRofsEventType(framework::ProcessingContext& pc, std::string_view dataBind, EventType eventType);
122127

123128
/// Returns the MC labels
124129
/// \param pc Processing context

Detectors/MUON/MID/Workflow/src/ClusterizerSpec.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ class ClusterizerDeviceDPL
7777
{
7878
auto tStart = std::chrono::high_resolution_clock::now();
7979

80-
gsl::span<const ColumnData> patterns = specs::getData(pc, "mid_cluster_in", EventType::Standard);
81-
gsl::span<const ROFRecord> inROFRecords = specs::getRofs(pc, "mid_cluster_in", EventType::Standard);
80+
gsl::span<const ColumnData> patterns = specs::getDataEventType(pc, "mid_cluster_in", EventType::Standard);
81+
gsl::span<const ROFRecord> inROFRecords = specs::getRofsEventType(pc, "mid_cluster_in", EventType::Standard);
8282

8383
// Pre-clustering
8484
auto tAlgoStart = std::chrono::high_resolution_clock::now();
@@ -132,7 +132,7 @@ framework::DataProcessorSpec getClusterizerSpec(bool isMC, std::string_view inDa
132132
if (isMC) {
133133
outputSpecs.emplace_back(of::OutputSpec{header::gDataOriginMID, "CLUSTERSLABELS"});
134134
}
135-
auto inputSpecs = specs::buildInputSpecs("mid_cluster_in", inDataDesc, inRofDesc, inLabelsDesc, isMC);
135+
auto inputSpecs = specs::buildStandardInputSpecs("mid_cluster_in", inDataDesc, inRofDesc, inLabelsDesc, isMC);
136136

137137
return of::DataProcessorSpec{
138138
"MIDClusterizer",

Detectors/MUON/MID/Workflow/src/ColumnDataSpecsUtils.cxx

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,19 +78,31 @@ std::string buildSelectors(std::string_view dataBind, std::string_view dataDesc,
7878
if (!selector.empty()) {
7979
selector += ";";
8080
}
81-
selector += buildSelector(getLabelsBind(dataBind), labelsDesc, subSpec);
81+
selector += buildSelector(getLabelsBind(dataBind), labelsDesc);
8282
}
8383
return selector;
8484
}
8585

86-
std::vector<framework::InputSpec> buildInputSpecs(std::string_view dataBind, std::string_view dataDesc, bool useMC)
86+
std::vector<framework::InputSpec> buildInputSpecs(std::string_view dataBind, std::string_view dataDesc, std::string_view rofDesc)
8787
{
88-
return buildInputSpecs(dataBind, dataDesc, getROFDescription(dataDesc), getLabelsDescription(dataDesc), useMC);
88+
std::string selector;
89+
for (size_t ievt = 0; ievt < NEvTypes; ++ievt) {
90+
if (!selector.empty()) {
91+
selector += ";";
92+
}
93+
selector += buildSelectors(dataBind, dataDesc, rofDesc, "", false, ievt);
94+
}
95+
return framework::select(selector.c_str());
96+
}
97+
98+
std::vector<framework::InputSpec> buildStandardInputSpecs(std::string_view dataBind, std::string_view dataDesc, bool useMC)
99+
{
100+
return buildStandardInputSpecs(dataBind, dataDesc, getROFDescription(dataDesc), getLabelsDescription(dataDesc), useMC);
89101
}
90102

91-
std::vector<framework::InputSpec> buildInputSpecs(std::string_view dataBind, std::string_view dataDesc, std::string_view rofDesc, std::string_view labelsDesc, bool useMC)
103+
std::vector<framework::InputSpec> buildStandardInputSpecs(std::string_view dataBind, std::string_view dataDesc, std::string_view rofDesc, std::string_view labelsDesc, bool useMC)
92104
{
93-
std::string selector = buildSelectors(dataBind, dataDesc, rofDesc, labelsDesc, useMC);
105+
std::string selector = buildSelectors(dataBind, dataDesc, rofDesc, labelsDesc, useMC, 0);
94106
return framework::select(selector.c_str());
95107
}
96108

@@ -134,24 +146,34 @@ std::vector<framework::Output> buildOutputs(std::vector<framework::OutputSpec> o
134146

135147
std::array<gsl::span<const ColumnData>, NEvTypes> getData(framework::ProcessingContext& pc, std::string_view dataBind)
136148
{
137-
return getInput<ColumnData>(pc, dataBind);
149+
std::array<gsl::span<const ColumnData>, 3> data;
150+
for (size_t ievt = 0; ievt < NEvTypes; ++ievt) {
151+
data[ievt] = getInput<ColumnData>(pc, fmt::format("{}_{}", dataBind, ievt));
152+
}
153+
154+
return data;
138155
}
139156

140-
gsl::span<const ColumnData> getData(framework::ProcessingContext& pc, std::string_view dataBind, EventType eventType)
157+
gsl::span<const ColumnData> getDataEventType(framework::ProcessingContext& pc, std::string_view dataBind, EventType eventType)
141158
{
142159
auto idx = static_cast<size_t>(eventType);
143-
return getData(pc, dataBind)[idx];
160+
return getInput<ColumnData>(pc, fmt::format("{}_{}", dataBind.data(), idx));
144161
}
145162

146163
std::array<gsl::span<const ROFRecord>, NEvTypes> getRofs(framework::ProcessingContext& pc, std::string_view dataBind)
147164
{
148-
return getInput<ROFRecord>(pc, getROFBind(dataBind));
165+
std::array<gsl::span<const ROFRecord>, 3> data;
166+
for (size_t ievt = 0; ievt < NEvTypes; ++ievt) {
167+
data[ievt] = getInput<ROFRecord>(pc, fmt::format("{}_{}", getROFBind(dataBind).data(), ievt));
168+
}
169+
170+
return data;
149171
}
150172

151-
gsl::span<const ROFRecord> getRofs(framework::ProcessingContext& pc, std::string_view dataBind, EventType eventType)
173+
gsl::span<const ROFRecord> getRofsEventType(framework::ProcessingContext& pc, std::string_view dataBind, EventType eventType)
152174
{
153175
auto idx = static_cast<size_t>(eventType);
154-
return getRofs(pc, dataBind)[idx];
176+
return getInput<ROFRecord>(pc, fmt::format("{}_{}", getROFBind(dataBind).data(), idx));
155177
}
156178

157179
std::unique_ptr<const o2::dataformats::MCTruthContainer<MCLabel>> getLabels(framework::ProcessingContext& pc, std::string_view dataBind)

Detectors/MUON/MID/Workflow/src/DecodedDataAggregatorSpec.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class DecodedDataAggregatorDeviceDPL
5858
mAggregator.process(data, inROFRecords);
5959
mTimerAlgo += std::chrono::high_resolution_clock::now() - tAlgoStart;
6060

61-
for (o2::header::DataHeader::SubSpecificationType subSpec = 0; subSpec < 3; ++subSpec) {
61+
for (o2::header::DataHeader::SubSpecificationType subSpec = 0; subSpec < NEvTypes; ++subSpec) {
6262
EventType evtType = static_cast<EventType>(subSpec);
6363
pc.outputs().snapshot(of::Output{o2::header::gDataOriginMID, "DATA", subSpec}, mAggregator.getData(evtType));
6464
pc.outputs().snapshot(of::Output{o2::header::gDataOriginMID, "DATAROF", subSpec}, mAggregator.getROFRecords(evtType));
@@ -79,7 +79,7 @@ framework::DataProcessorSpec getDecodedDataAggregatorSpec()
7979
{
8080
std::vector<of::InputSpec> inputSpecs{of::InputSpec{"mid_decoded", header::gDataOriginMID, "DECODED"}, of::InputSpec{"mid_decoded_rof", header::gDataOriginMID, "DECODEDROF"}};
8181
std::vector<of::OutputSpec> outputSpecs;
82-
for (o2::header::DataHeader::SubSpecificationType subSpec = 0; subSpec < 3; ++subSpec) {
82+
for (o2::header::DataHeader::SubSpecificationType subSpec = 0; subSpec < NEvTypes; ++subSpec) {
8383
outputSpecs.emplace_back(of::OutputSpec{header::gDataOriginMID, "DATA", subSpec});
8484
outputSpecs.emplace_back(of::OutputSpec{header::gDataOriginMID, "DATAROF", subSpec});
8585
}

Detectors/MUON/MID/Workflow/src/EntropyEncoderSpec.cxx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,10 @@ void EntropyEncoderSpec::endOfStream(EndOfStreamContext& ec)
102102
DataProcessorSpec getEntropyEncoderSpec(bool selIR, const std::string& ctfdictOpt)
103103
{
104104
std::vector<InputSpec> inputs;
105-
inputs.emplace_back("rofs", ConcreteDataTypeMatcher(header::gDataOriginMID, "DATAROF"), Lifetime::Timeframe);
106-
inputs.emplace_back("cols", ConcreteDataTypeMatcher(header::gDataOriginMID, "DATA"), Lifetime::Timeframe);
105+
for (o2::header::DataHeader::SubSpecificationType subSpec = 0; subSpec < NEvTypes; ++subSpec) {
106+
inputs.emplace_back("cols", header::gDataOriginMID, "DATA", subSpec, Lifetime::Timeframe);
107+
inputs.emplace_back("rofs", header::gDataOriginMID, "DATAROF", subSpec, Lifetime::Timeframe);
108+
}
107109

108110
if (ctfdictOpt.empty() || ctfdictOpt == "ccdb") {
109111
inputs.emplace_back("ctfdict", header::gDataOriginMID, "CTFDICT", 0, Lifetime::Condition, ccdbParamSpec("MID/Calib/CTFDictionaryTree"));

Detectors/MUON/MID/Workflow/src/FilteringBCSpec.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ class FilteringBCDeviceDPL
6868
{
6969
updateTimeDependentParams(pc);
7070

71-
auto data = specs::getData(pc, "mid_filter_BC_in", EventType::Standard);
72-
auto inROFRecords = specs::getRofs(pc, "mid_filter_BC_in", EventType::Standard);
71+
auto data = specs::getDataEventType(pc, "mid_filter_BC_in", EventType::Standard);
72+
auto inROFRecords = specs::getRofsEventType(pc, "mid_filter_BC_in", EventType::Standard);
7373

7474
auto inMCContainer = mUseMC ? specs::getLabels(pc, "mid_filter_BC_in") : nullptr;
7575

@@ -100,7 +100,7 @@ class FilteringBCDeviceDPL
100100
of::DataProcessorSpec getFilteringBCSpec(bool useMC, std::string_view inDesc)
101101
{
102102

103-
auto inputSpecs = specs::buildInputSpecs("mid_filter_BC_in", inDesc, useMC);
103+
auto inputSpecs = specs::buildStandardInputSpecs("mid_filter_BC_in", inDesc, useMC);
104104
auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(false, // orbitResetTime
105105
false, // GRPECS=true
106106
true, // GRPLHCIF

Detectors/MUON/MID/Workflow/src/FilteringSpec.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ class FilteringDeviceDPL
9494
pc.inputs().get<std::vector<ColumnData>*>("mid_bad_channels");
9595
pc.inputs().get<std::vector<ColumnData>*>("mid_rejectlist");
9696

97-
auto data = specs::getData(pc, "mid_filter_in", EventType::Standard);
98-
auto inROFRecords = specs::getRofs(pc, "mid_filter_in", EventType::Standard);
97+
auto data = specs::getDataEventType(pc, "mid_filter_in", EventType::Standard);
98+
auto inROFRecords = specs::getRofsEventType(pc, "mid_filter_in", EventType::Standard);
9999

100100
std::unique_ptr<const o2::dataformats::MCTruthContainer<MCLabel>> inMCContainer = mUseMC ? specs::getLabels(pc, "mid_filter_in") : nullptr;
101101

@@ -143,7 +143,7 @@ class FilteringDeviceDPL
143143
of::DataProcessorSpec getFilteringSpec(bool useMC, std::string_view inDesc, std::string_view outDesc)
144144
{
145145

146-
auto inputSpecs = specs::buildInputSpecs("mid_filter_in", inDesc, useMC);
146+
auto inputSpecs = specs::buildStandardInputSpecs("mid_filter_in", inDesc, useMC);
147147
inputSpecs.emplace_back("mid_bad_channels", header::gDataOriginMID, "BAD_CHANNELS", 0, of::Lifetime::Condition, of::ccdbParamSpec("MID/Calib/BadChannels"));
148148
inputSpecs.emplace_back("mid_rejectlist", header::gDataOriginMID, "REJECTLIST", 0, of::Lifetime::Condition, of::ccdbParamSpec("MID/Calib/RejectList"));
149149

Detectors/MUON/MID/Workflow/src/MaskMakerSpec.cxx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,10 @@ class MaskMakerDeviceDPL
145145
framework::DataProcessorSpec getMaskMakerSpec(const FEEIdConfig& feeIdConfig, const CrateMasks& crateMasks)
146146
{
147147
std::vector<of::InputSpec> inputSpecs;
148-
inputSpecs.emplace_back("mid_data", of::ConcreteDataTypeMatcher(header::gDataOriginMID, "DATA"), of::Lifetime::Timeframe);
149-
inputSpecs.emplace_back("mid_data_rof", of::ConcreteDataTypeMatcher(header::gDataOriginMID, "DATAROF"), of::Lifetime::Timeframe);
148+
for (o2::header::DataHeader::SubSpecificationType subSpec = 1; subSpec < NEvTypes; ++subSpec) {
149+
inputSpecs.emplace_back("mid_data", o2::header::gDataOriginMID, "DATA", subSpec, of::Lifetime::Timeframe);
150+
inputSpecs.emplace_back("mid_data_rof", o2::header::gDataOriginMID, "DATAROF", subSpec, of::Lifetime::Timeframe);
151+
}
150152

151153
std::vector<of::OutputSpec> outputSpecs{
152154
of::OutputSpec{header::gDataOriginMID, "MASKS", 1},

Detectors/MUON/MID/Workflow/src/TimingSpec.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class TimingDeviceDPL
7171

7272
of::DataProcessorSpec getTimingSpec(int localToBC, std::string_view inRofDesc)
7373
{
74-
auto inputSpecs = specs::buildInputSpecs("mid_timing_in", "", inRofDesc, "", false);
74+
auto inputSpecs = specs::buildInputSpecs("mid_timing_in", "", inRofDesc);
7575
auto outputSpecs = specs::buildOutputSpecs("mid_timing_out", "TDATAROF");
7676

7777
return of::DataProcessorSpec{

Detectors/MUON/MID/Workflow/src/ZeroSuppressionSpec.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ class ZeroSuppressionDeviceDPL
4747

4848
void run(o2::framework::ProcessingContext& pc)
4949
{
50-
const auto patterns = specs::getData(pc, "mid_zs_in", EventType::Standard);
51-
const auto inROFRecords = specs::getRofs(pc, "mid_zs_in", EventType::Standard);
50+
const auto patterns = specs::getDataEventType(pc, "mid_zs_in", EventType::Standard);
51+
const auto inROFRecords = specs::getRofsEventType(pc, "mid_zs_in", EventType::Standard);
5252
const auto inMCContainer = mUseMC ? specs::getLabels(pc, "mid_zs_in") : nullptr;
5353

5454
o2::dataformats::MCTruthContainer<MCLabel> outMCContainer;
@@ -103,7 +103,7 @@ class ZeroSuppressionDeviceDPL
103103

104104
framework::DataProcessorSpec getZeroSuppressionSpec(bool useMC, std::string_view dataDesc)
105105
{
106-
auto inputSpecs = specs::buildInputSpecs("mid_zs_in", dataDesc, useMC);
106+
auto inputSpecs = specs::buildStandardInputSpecs("mid_zs_in", dataDesc, useMC);
107107
auto outputSpecs = specs::buildStandardOutputSpecs("mid_zs_out", "DATA", useMC);
108108

109109
return of::DataProcessorSpec{

0 commit comments

Comments
 (0)