@@ -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