Skip to content

Commit 5cc33d3

Browse files
committed
detect tfnsource rather than the converter
1 parent cfb2c3a commit 5cc33d3

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

Framework/Core/src/ArrowSupport.cxx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -680,8 +680,12 @@ o2::framework::ServiceSpec ArrowSupport::arrowBackendSpec()
680680
workflow.erase(reader);
681681
} else {
682682
// load reader algorithm before deployment
683-
auto mctracks2aod = std::find_if(workflow.begin(), workflow.end(), [](auto const& x) { return x.name == "mctracks-to-aod"; });
684-
if (mctracks2aod == workflow.end()) { // add normal reader algorithm only if no on-the-fly generator is injected
683+
auto tfnsource = std::ranges::find_if(workflow, [](DataProcessorSpec const& spec) {
684+
return !spec.name.starts_with("internal-dpl-aod-reader") && std::ranges::any_of(spec.outputs, [](OutputSpec const& output) {
685+
return DataSpecUtils::match(output, "TFN", "TFNumber", 0);
686+
});
687+
});
688+
if (tfnsource == workflow.end()) { // add normal reader algorithm only if no on-the-fly generator is injected
685689
reader->algorithm = CommonDataProcessors::wrapWithTimesliceConsumption(PluginManager::loadAlgorithmFromPlugin("O2FrameworkAnalysisSupport", "ROOTFileReader", ctx));
686690
} // otherwise the algorithm was set in injectServiceDevices
687691
}

Framework/Core/src/WorkflowHelpers.cxx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -411,13 +411,17 @@ void WorkflowHelpers::injectServiceDevices(WorkflowSpec& workflow, ConfigContext
411411

412412
// add the reader
413413
if (aodReader.outputs.empty() == false) {
414-
auto mctracks2aod = std::ranges::find_if(workflow, [](auto const& x) { return x.name == "mctracks-to-aod"; });
415-
if (mctracks2aod == workflow.end()) {
414+
auto tfnsource = std::ranges::find_if(workflow, [](DataProcessorSpec const& spec) {
415+
return std::ranges::any_of(spec.outputs, [](OutputSpec const& output) {
416+
return DataSpecUtils::match(output, "TFN", "TFNumber", 0);
417+
});
418+
});
419+
if (tfnsource == workflow.end()) {
416420
// add normal reader
417421
aodReader.outputs.emplace_back(OutputSpec{"TFN", "TFNumber"});
418422
aodReader.outputs.emplace_back(OutputSpec{"TFF", "TFFilename"});
419423
} else {
420-
// AODs are being injected on-the-fly, add error-handler reader
424+
// AODs are being injected the tfnsource is the entry point, add error-handler reader
421425
aodReader.algorithm = AlgorithmSpec{
422426
adaptStateful(
423427
[](DeviceSpec const& spec) {
@@ -700,6 +704,11 @@ void WorkflowHelpers::injectAODWriter(WorkflowSpec& workflow, ConfigContext cons
700704
return DataSpecUtils::partialMatch(spec, o2::header::DataOrigin("TFN"));
701705
});
702706
dec.isDangling[std::distance(dec.outputsInputs.begin(), it)] = false;
707+
708+
it = std::find_if(dec.outputsInputs.begin(), dec.outputsInputs.end(), [](InputSpec const& spec) -> bool {
709+
return DataSpecUtils::partialMatch(spec, o2::header::DataOrigin("TFF"));
710+
});
711+
dec.isDangling[std::distance(dec.outputsInputs.begin(), it)] = false;
703712
}
704713
}
705714

0 commit comments

Comments
 (0)