Skip to content

Commit 75b9849

Browse files
committed
Add all barrel tracking configurables to AOD metadata
Add all barrel tracking configurables to AOD metadata: write them as ConfigParam_<device>_<configname>.json files from every device (1st lane only in pipelined) Also, send them as META/<PROCNAME>/0 sporadic DPL output only once for the direct collection by the metadata writer (when it will be supported by the DPL).
1 parent a5773ac commit 75b9849

16 files changed

Lines changed: 204 additions & 31 deletions

File tree

Detectors/GlobalTrackingWorkflow/include/GlobalTrackingWorkflow/StrangenessTrackingSpec.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class StrangenessTrackerSpec : public framework::Task
5050

5151
private:
5252
void updateTimeDependentParams(framework::ProcessingContext& pc);
53+
void storeConfigs(framework::ProcessingContext& pc);
5354

5455
bool mUseMC = false;
5556
TStopwatch mTimer;

Detectors/GlobalTrackingWorkflow/src/CosmicsMatchingSpec.cxx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@
1111

1212
/// @file CosmicsMatchingSpec.cxx
1313

14+
#include <TMap.h>
15+
#include <TObjString.h>
1416
#include <vector>
1517
#include <string>
1618
#include "TStopwatch.h"
1719
#include "GlobalTracking/MatchCosmics.h"
20+
#include "GlobalTracking/MatchCosmicsParams.h"
1821
#include "DataFormatsITSMFT/TopologyDictionary.h"
1922
#include "DataFormatsTPC/Constants.h"
2023
#include "ReconstructionDataFormats/GlobalTrackID.h"
2124
#include "Framework/ConfigParamRegistry.h"
25+
#include "Framework/DeviceSpec.h"
2226
#include "GlobalTrackingWorkflow/CosmicsMatchingSpec.h"
2327
#include "ReconstructionDataFormats/GlobalTrackAccessor.h"
2428
#include "ReconstructionDataFormats/GlobalTrackID.h"
@@ -71,6 +75,7 @@ class CosmicsMatchingSpec : public Task
7175

7276
private:
7377
void updateTimeDependentParams(ProcessingContext& pc);
78+
void storeConfigs(ProcessingContext& pc);
7479
std::shared_ptr<DataRequest> mDataRequest;
7580
std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
7681
o2::tpc::VDriftHelper mTPCVDriftHelper{};
@@ -98,7 +103,7 @@ void CosmicsMatchingSpec::run(ProcessingContext& pc)
98103
RecoContainer recoData;
99104
recoData.collectData(pc, *mDataRequest.get());
100105
updateTimeDependentParams(pc); // Make sure this is called after recoData.collectData, which may load some conditions
101-
106+
storeConfigs(pc);
102107
mMatching.process(recoData);
103108
pc.outputs().snapshot(Output{"GLO", "COSMICTRC", 0}, mMatching.getCosmicTracks());
104109
if (mUseMC) {
@@ -107,6 +112,22 @@ void CosmicsMatchingSpec::run(ProcessingContext& pc)
107112
mTimer.Stop();
108113
}
109114

115+
void CosmicsMatchingSpec::storeConfigs(ProcessingContext& pc)
116+
{
117+
static bool first = true;
118+
if (first) {
119+
first = false;
120+
if (pc.services().get<const o2::framework::DeviceSpec>().inputTimesliceId == 0) {
121+
const auto& conf = MatchCosmicsParams::Instance();
122+
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, conf.getName()), conf.getName());
123+
TMap md;
124+
md.SetOwnerKeyValue();
125+
md.Add(new TObjString(conf.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(conf.getName()).c_str()));
126+
pc.outputs().snapshot(Output{"META", "COSMICMATCHER", 0}, md);
127+
}
128+
}
129+
}
130+
110131
void CosmicsMatchingSpec::updateTimeDependentParams(ProcessingContext& pc)
111132
{
112133
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
@@ -193,6 +214,8 @@ DataProcessorSpec getCosmicsMatchingSpec(GTrackID::mask_t src, bool usePV, bool
193214
o2::tpc::VDriftHelper::requestCCDBInputs(dataRequest->inputs);
194215
dataRequest->inputs.emplace_back("corrMap", o2::header::gDataOriginTPC, "TPCCORRMAP", 0, Lifetime::Timeframe);
195216

217+
outputs.emplace_back("META", "COSMICMATCHER", 0, Lifetime::Sporadic);
218+
196219
return DataProcessorSpec{
197220
"cosmics-matcher",
198221
dataRequest->inputs,

Detectors/GlobalTrackingWorkflow/src/PrimaryVertexingSpec.cxx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@
1111

1212
/// @file PrimaryVertexingSpec.cxx
1313

14+
#include <TMap.h>
15+
#include <TObjString.h>
1416
#include <vector>
1517
#include <TStopwatch.h>
1618
#include "DataFormatsGlobalTracking/RecoContainer.h"
1719
#include "DataFormatsGlobalTracking/RecoContainerCreateTracksVariadic.h"
1820
#include "DataFormatsITSMFT/TrkClusRef.h"
1921
#include "DataFormatsCalibration/MeanVertexObject.h"
22+
#include "DataFormatsCalibration/MeanVertexBiasParam.h"
2023
#include "ReconstructionDataFormats/TrackTPCITS.h"
2124
#include "ReconstructionDataFormats/GlobalTrackID.h"
2225
#include "DetectorsBase/Propagator.h"
@@ -59,6 +62,7 @@ class PrimaryVertexingSpec : public Task
5962

6063
private:
6164
void updateTimeDependentParams(ProcessingContext& pc);
65+
void storeConfigs(ProcessingContext& pc);
6266
std::shared_ptr<DataRequest> mDataRequest;
6367
std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
6468
o2::vertexing::PVertexer mVertexer;
@@ -98,7 +102,7 @@ void PrimaryVertexingSpec::run(ProcessingContext& pc)
98102
o2::globaltracking::RecoContainer recoData;
99103
recoData.collectData(pc, *mDataRequest.get()); // select tracks of needed type, with minimal cuts, the real selected will be done in the vertexer
100104
updateTimeDependentParams(pc); // Make sure this is called after recoData.collectData, which may load some conditions
101-
105+
storeConfigs(pc);
102106
std::vector<TrackWithTimeStamp> tracks;
103107
std::vector<o2::MCCompLabel> tracksMCInfo;
104108
std::vector<o2d::GlobalTrackID> gids;
@@ -180,6 +184,8 @@ void PrimaryVertexingSpec::run(ProcessingContext& pc)
180184
vertices[iv].setFlags(PVertex::UPCMode);
181185
}
182186
}
187+
} else {
188+
storeConfigs(pc);
183189
}
184190

185191
pc.outputs().snapshot(Output{"GLO", "PVTX", 0}, vertices);
@@ -197,12 +203,23 @@ void PrimaryVertexingSpec::run(ProcessingContext& pc)
197203
mVertexer.getTimeReAttach().CpuTime(), mVertexer.getTotTrials(), mVertexer.getNTZClusters(), mVertexer.getMaxTrialsPerCluster(),
198204
mVertexer.getLongestClusterTimeMS(), mVertexer.getLongestClusterMult(), mVertexer.getNIniFound(),
199205
mVertexer.getNKilledBCValid(), mVertexer.getNKilledIntCand(), mVertexer.getNKilledDebris(), mVertexer.getNKilledQuality(), mVertexer.getNKilledITSOnly());
206+
}
200207

208+
void PrimaryVertexingSpec::storeConfigs(ProcessingContext& pc)
209+
{
201210
static bool first = true;
202211
if (first) {
203212
first = false;
213+
const auto& confPV = PVertexerParams::Instance();
214+
const auto& confMV = o2::dataformats::MeanVertexBiasParam::Instance();
204215
if (pc.services().get<const o2::framework::DeviceSpec>().inputTimesliceId == 0) {
205-
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, PVertexerParams::Instance().getName()), PVertexerParams::Instance().getName());
216+
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, confPV.getName()), confPV.getName());
217+
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, confMV.getName()), confMV.getName());
218+
TMap md;
219+
md.SetOwnerKeyValue();
220+
md.Add(new TObjString(confPV.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(confPV.getName()).c_str()));
221+
md.Add(new TObjString(confMV.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(confMV.getName()).c_str()));
222+
pc.outputs().snapshot(Output{"META", "PVERTEXER", 0}, md);
206223
}
207224
}
208225
}
@@ -289,6 +306,8 @@ DataProcessorSpec getPrimaryVertexingSpec(GTrackID::mask_t src, bool skip, bool
289306
true);
290307
dataRequest->inputs.emplace_back("meanvtx", "GLO", "MEANVERTEX", 0, Lifetime::Condition, ccdbParamSpec("GLO/Calib/MeanVertex", {}, 1));
291308

309+
outputs.emplace_back("META", "PVERTEXER", 0, Lifetime::Sporadic);
310+
292311
return DataProcessorSpec{
293312
"primary-vertexing",
294313
dataRequest->inputs,

Detectors/GlobalTrackingWorkflow/src/SecondaryVertexingSpec.cxx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
/// @file SecondaryVertexingSpec.cxx
1313

14+
#include <TMap.h>
15+
#include <TObjString.h>
1416
#include <vector>
1517
#include "DataFormatsCalibration/MeanVertexObject.h"
1618
#include "Framework/CCDBParamSpec.h"
@@ -65,6 +67,7 @@ class SecondaryVertexingSpec : public Task
6567
void finaliseCCDB(ConcreteDataMatcher& matcher, void* obj) final;
6668

6769
private:
70+
void storeConfigs(ProcessingContext& pc);
6871
void updateTimeDependentParams(ProcessingContext& pc);
6972
std::shared_ptr<DataRequest> mDataRequest;
7073
std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
@@ -110,7 +113,7 @@ void SecondaryVertexingSpec::run(ProcessingContext& pc)
110113
o2::globaltracking::RecoContainer recoData;
111114
recoData.collectData(pc, *mDataRequest.get());
112115
updateTimeDependentParams(pc);
113-
116+
storeConfigs(pc);
114117
mVertexer.process(recoData, pc);
115118

116119
mTimer.Stop();
@@ -119,15 +122,25 @@ void SecondaryVertexingSpec::run(ProcessingContext& pc)
119122
mVertexer.getNV0s(), calls[0] - fitCalls[0], mVertexer.getNCascades(), calls[1] - fitCalls[1], mVertexer.getN3Bodies(), calls[2] - fitCalls[2], mVertexer.getNStrangeTracks(),
120123
mTimer.CpuTime() - timeCPU0, mTimer.RealTime() - timeReal0);
121124
fitCalls = calls;
125+
}
122126

127+
void SecondaryVertexingSpec::storeConfigs(ProcessingContext& pc)
128+
{
123129
static bool first = true;
124130
if (first) {
125131
first = false;
126132
if (pc.services().get<const o2::framework::DeviceSpec>().inputTimesliceId == 0) {
127-
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, SVertexerParams::Instance().getName()), SVertexerParams::Instance().getName());
133+
const auto& confSV = SVertexerParams::Instance();
134+
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, confSV.getName()), confSV.getName());
135+
TMap md;
136+
md.SetOwnerKeyValue();
137+
md.Add(new TObjString(confSV.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(confSV.getName()).c_str()));
128138
if (mEnableStrangenessTracking) {
129-
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, o2::strangeness_tracking::StrangenessTrackingParamConfig::Instance().getName()), o2::strangeness_tracking::StrangenessTrackingParamConfig::Instance().getName());
139+
const auto& confST = o2::strangeness_tracking::StrangenessTrackingParamConfig::Instance();
140+
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, confST.getName()), confST.getName());
141+
md.Add(new TObjString(confST.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(confST.getName()).c_str()));
130142
}
143+
pc.outputs().snapshot(Output{"META", "SVERTEXER", 0}, md);
131144
}
132145
}
133146
}
@@ -298,6 +311,7 @@ DataProcessorSpec getSecondaryVertexingSpec(GTrackID::mask_t src, bool enableCas
298311
LOG(info) << "Strangeness tracker will use MC";
299312
}
300313
}
314+
outputs.emplace_back("META", "SVERTEXER", 0, Lifetime::Sporadic);
301315

302316
return DataProcessorSpec{
303317
"secondary-vertexing",

Detectors/GlobalTrackingWorkflow/src/StrangenessTrackingSpec.cxx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
/// \file StrangenessTrackingSpec.cxx
1212
/// \brief
1313

14+
#include <TMap.h>
15+
#include <TObjString.h>
1416
#include "TGeoGlobalMagField.h"
1517
#include "Framework/ConfigParamRegistry.h"
1618
#include "Field/MagneticField.h"
@@ -20,6 +22,7 @@
2022
#include "ITSWorkflow/TrackerSpec.h"
2123
#include "ITSWorkflow/TrackReaderSpec.h"
2224
#include "Framework/CCDBParamSpec.h"
25+
#include "Framework/DeviceSpec.h"
2326
#include "DataFormatsParameters/GRPObject.h"
2427

2528
#include "DataFormatsITSMFT/ROFRecord.h"
@@ -68,7 +71,7 @@ void StrangenessTrackerSpec::run(framework::ProcessingContext& pc)
6871
o2::globaltracking::RecoContainer recoData;
6972
recoData.collectData(pc, *mDataRequest.get());
7073
updateTimeDependentParams(pc);
71-
74+
storeConfigs(pc);
7275
auto geom = o2::its::GeometryTGeo::Instance();
7376
mTracker.loadData(recoData);
7477
mTracker.prepareITStracks();
@@ -83,6 +86,22 @@ void StrangenessTrackerSpec::run(framework::ProcessingContext& pc)
8386
mTimer.Stop();
8487
}
8588

89+
void StrangenessTrackerSpec::storeConfigs(framework::ProcessingContext& pc)
90+
{
91+
static bool first = true;
92+
if (first) {
93+
first = false;
94+
if (pc.services().get<const o2::framework::DeviceSpec>().inputTimesliceId == 0) {
95+
const auto& conf = StrangenessTrackingParamConfig::Instance();
96+
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, conf.getName()), conf.getName());
97+
TMap md;
98+
md.SetOwnerKeyValue();
99+
md.Add(new TObjString(conf.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(conf.getName()).c_str()));
100+
pc.outputs().snapshot(Output{"META", "STRTRACKER", 0}, md);
101+
}
102+
}
103+
}
104+
86105
///_______________________________________
87106
void StrangenessTrackerSpec::updateTimeDependentParams(ProcessingContext& pc)
88107
{
@@ -162,6 +181,7 @@ DataProcessorSpec getStrangenessTrackerSpec(o2::dataformats::GlobalTrackID::mask
162181
outputs.emplace_back("GLO", "STRANGETRACKS_MC", 0, Lifetime::Timeframe);
163182
LOG(info) << "Strangeness tracker will use MC";
164183
}
184+
outputs.emplace_back("META", "STRTRACKER", 0, Lifetime::Sporadic);
165185

166186
return DataProcessorSpec{
167187
"strangeness-tracker",

Detectors/GlobalTrackingWorkflow/src/TOFMatcherSpec.cxx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
#include <vector>
1515
#include <string>
16+
#include <TMap.h>
17+
#include <TObjString.h>
1618
#include "TStopwatch.h"
1719
#include "Framework/ConfigParamRegistry.h"
1820
#include "DetectorsBase/GeometryManager.h"
@@ -68,6 +70,7 @@ class TOFMatcherSpec : public Task
6870

6971
private:
7072
void updateTimeDependentParams(ProcessingContext& pc);
73+
void storeConfigs(ProcessingContext& pc);
7174
std::shared_ptr<DataRequest> mDataRequest;
7275
std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
7376
o2::tpc::VDriftHelper mTPCVDriftHelper{};
@@ -141,6 +144,7 @@ void TOFMatcherSpec::run(ProcessingContext& pc)
141144
RecoContainer recoData;
142145
recoData.collectData(pc, *mDataRequest.get());
143146
updateTimeDependentParams(pc);
147+
storeConfigs(pc);
144148
auto creationTime = pc.services().get<o2::framework::TimingInfo>().creation;
145149

146150
LOG(debug) << "isTrackSourceLoaded: TPC -> " << recoData.isTrackSourceLoaded(o2::dataformats::GlobalTrackID::Source::TPC);
@@ -214,15 +218,23 @@ void TOFMatcherSpec::run(ProcessingContext& pc)
214218
pc.outputs().snapshot(Output{o2::header::gDataOriginTOF, "MATCHABLES_17", 0}, mMatcher.getMatchedTracksPair(17));
215219
}
216220

221+
mTimer.Stop();
222+
}
223+
224+
void TOFMatcherSpec::storeConfigs(ProcessingContext& pc)
225+
{
217226
static bool first = true;
218227
if (first) {
219228
first = false;
220229
if (pc.services().get<const o2::framework::DeviceSpec>().inputTimesliceId == 0) {
221-
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, MatchTOFParams::Instance().getName()), MatchTOFParams::Instance().getName());
230+
const auto& conf = MatchTOFParams::Instance();
231+
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, conf.getName()), conf.getName());
232+
TMap md;
233+
md.SetOwnerKeyValue();
234+
md.Add(new TObjString(conf.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(conf.getName()).c_str()));
235+
pc.outputs().snapshot(Output{"META", "TOFMATCHER", 0}, md);
222236
}
223237
}
224-
225-
mTimer.Stop();
226238
}
227239

228240
void TOFMatcherSpec::endOfStream(EndOfStreamContext& ec)
@@ -309,6 +321,7 @@ DataProcessorSpec getTOFMatcherSpec(GID::mask_t src, bool useMC, bool useFIT, bo
309321
outputs.emplace_back(o2::header::gDataOriginTOF, "MATCHABLES_16", 0, Lifetime::Timeframe);
310322
outputs.emplace_back(o2::header::gDataOriginTOF, "MATCHABLES_17", 0, Lifetime::Timeframe);
311323
}
324+
outputs.emplace_back("META", "TOFMATCHER", 0, Lifetime::Sporadic);
312325

313326
return DataProcessorSpec{
314327
"tof-matcher",

Detectors/GlobalTrackingWorkflow/src/TPCITSMatchingSpec.cxx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
/// @file TPCITSMatchingSpec.cxx
1313

1414
#include <vector>
15-
15+
#include <TMap.h>
16+
#include <TObjString.h>
1617
#include "GlobalTracking/MatchTPCITS.h"
1718
#include "GlobalTracking/MatchTPCITSParams.h"
1819
#include "DataFormatsITSMFT/TopologyDictionary.h"
@@ -80,6 +81,7 @@ class TPCITSMatchingDPL : public Task
8081

8182
private:
8283
void updateTimeDependentParams(ProcessingContext& pc);
84+
void storeConfigs(ProcessingContext& pc);
8385
std::shared_ptr<DataRequest> mDataRequest;
8486
std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
8587
o2::tpc::VDriftHelper mTPCVDriftHelper{};
@@ -112,6 +114,7 @@ void TPCITSMatchingDPL::run(ProcessingContext& pc)
112114
RecoContainer recoData;
113115
recoData.collectData(pc, *mDataRequest.get());
114116
updateTimeDependentParams(pc); // Make sure this is called after recoData.collectData, which may load some conditions
117+
storeConfigs(pc);
115118

116119
static pmr::vector<o2::MCCompLabel> dummyMCLab, dummyMCLabAB;
117120
static pmr::vector<o2::dataformats::Triplet<float, float, float>> dummyCalib;
@@ -125,15 +128,23 @@ void TPCITSMatchingDPL::run(ProcessingContext& pc)
125128

126129
mMatching.run(recoData, matchedTracks, ABTrackletRefs, ABTrackletClusterIDs, matchLabels, ABTrackletLabels, calib);
127130

131+
mTimer.Stop();
132+
}
133+
134+
void TPCITSMatchingDPL::storeConfigs(ProcessingContext& pc)
135+
{
128136
static bool first = true;
129137
if (first) {
130138
first = false;
139+
const auto& conf = MatchTPCITSParams::Instance();
131140
if (pc.services().get<const o2::framework::DeviceSpec>().inputTimesliceId == 0) {
132-
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, MatchTPCITSParams::Instance().getName()), MatchTPCITSParams::Instance().getName());
141+
o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get<const o2::framework::DeviceSpec>().name, conf.getName()), conf.getName());
142+
TMap md;
143+
md.SetOwnerKeyValue();
144+
md.Add(new TObjString(conf.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(conf.getName()).c_str()));
145+
pc.outputs().snapshot(Output{"META", "TPCITSMATCHER", 0}, md);
133146
}
134147
}
135-
136-
mTimer.Stop();
137148
}
138149

139150
void TPCITSMatchingDPL::endOfStream(EndOfStreamContext& ec)
@@ -295,6 +306,9 @@ DataProcessorSpec getTPCITSMatchingSpec(GTrackID::mask_t src, bool useFT0, bool
295306
if (requestCTPLumi) {
296307
dataRequest->inputs.emplace_back("lumiCTP", o2::header::gDataOriginCTP, "LUMICTP", 0, Lifetime::Timeframe);
297308
}
309+
310+
outputs.emplace_back("META", "TPCITSMATCHER", 0, Lifetime::Sporadic);
311+
298312
return DataProcessorSpec{
299313
"itstpc-track-matcher",
300314
dataRequest->inputs,

0 commit comments

Comments
 (0)