@@ -458,13 +458,17 @@ void WorkflowHelpers::injectServiceDevices(WorkflowSpec& workflow, ConfigContext
458458
459459 // add the reader
460460 if (aodReader.outputs .empty () == false ) {
461- auto mctracks2aod = std::ranges::find_if (workflow, [](auto const & x) { return x.name == " mctracks-to-aod" ; });
462- if (mctracks2aod == workflow.end ()) {
461+ auto tfnsource = std::ranges::find_if (workflow, [](DataProcessorSpec const & spec) {
462+ return std::ranges::any_of (spec.outputs , [](OutputSpec const & output) {
463+ return DataSpecUtils::match (output, " TFN" , " TFNumber" , 0 );
464+ });
465+ });
466+ if (tfnsource == workflow.end ()) {
463467 // add normal reader
464468 aodReader.outputs .emplace_back (OutputSpec{" TFN" , " TFNumber" });
465469 aodReader.outputs .emplace_back (OutputSpec{" TFF" , " TFFilename" });
466470 } else {
467- // AODs are being injected on- the-fly , add error-handler reader
471+ // AODs are being injected the tfnsource is the entry point , add error-handler reader
468472 aodReader.algorithm = AlgorithmSpec{
469473 adaptStateful (
470474 [](DeviceSpec const & spec) {
@@ -742,6 +746,11 @@ void WorkflowHelpers::injectAODWriter(WorkflowSpec& workflow, ConfigContext cons
742746 return DataSpecUtils::partialMatch (spec, o2::header::DataOrigin (" TFN" ));
743747 });
744748 dec.isDangling [std::distance (dec.outputsInputs .begin (), it)] = false ;
749+
750+ it = std::find_if (dec.outputsInputs .begin (), dec.outputsInputs .end (), [](InputSpec const & spec) -> bool {
751+ return DataSpecUtils::partialMatch (spec, o2::header::DataOrigin (" TFF" ));
752+ });
753+ dec.isDangling [std::distance (dec.outputsInputs .begin (), it)] = false ;
745754 }
746755}
747756
0 commit comments