@@ -41,6 +41,17 @@ static inline auto extractOriginals(ProcessingContext& pc)
4141 return {pc.inputs ().get <TableConsumer>(o2::aod::matcher<refs[Is]>())->asArrowTable ()...};
4242 }(std::make_index_sequence<refs.size ()>());
4343}
44+
45+ template <std::ranges::input_range R>
46+ static auto extractTablesFromRecord (InputRecord& record, R matchers)
47+ {
48+ std::vector<std::shared_ptr<arrow::Table>> tables;
49+ std::ranges::transform (matchers, std::back_inserter (tables), [&record](auto const & m) {
50+ return record.get <TableConsumer>(m)->asArrowTable ();
51+ });
52+ return tables;
53+ }
54+
4455} // namespace
4556
4657namespace analysis_task_parsers
@@ -222,7 +233,7 @@ template <typename T>
222233 requires (is_spawns<T> || is_builds<T> || is_defines<T>)
223234bool appendOutput (std::vector<OutputSpec>& outputs, T& entity, uint32_t )
224235{
225- outputs.emplace_back (entity.spec () );
236+ outputs.emplace_back (entity.outputSpec );
226237 return true ;
227238}
228239
@@ -277,7 +288,7 @@ template <is_spawns T>
277288bool prepareOutput (ProcessingContext& context, T& spawns)
278289{
279290 using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t ::originals[T::spawnable_t ::originals.size () - 1 ].desc_hash >>::metadata;
280- auto originalTable = soa::ArrowHelpers::joinTables (extractOriginals<metadata::N, metadata:: template generateSources<o2::aod::Hash<T:: spawnable_t ::originals[T:: spawnable_t ::originals. size () - 1 ]. origin_hash >>()>(context), std::span{metadata:: base_table_t ::originalLabels} );
291+ auto originalTable = soa::ArrowHelpers::joinTables ( framework::extractTablesFromRecord (context. inputs (), spawns. requiredInputs | std::views::transform ([]( auto const & input){ return DataSpecUtils::asConcreteDataMatcher (input); }) ) );
281292 if (originalTable->num_rows () == 0 ) {
282293 originalTable = makeEmptyTable (" EMPTY" , typename metadata::base_table_t ::persistent_columns_t {});
283294 }
@@ -296,15 +307,15 @@ template <is_builds T>
296307bool prepareOutput (ProcessingContext& context, T& builds)
297308{
298309 using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::buildable_t ::ref.desc_hash >>::metadata;
299- return builds.build (extractOriginals<metadata::N, metadata:: template generateSources<o2::aod::Hash<T:: buildable_t ::ref. origin_hash >>()>(context ));
310+ return builds.build (framework::extractTablesFromRecord (context. inputs (), builds. requiredInputs | std::views::transform ([]( auto const & input){ return DataSpecUtils::asConcreteDataMatcher (input); }) ));
300311}
301312
302313template <is_defines T>
303314bool prepareOutput (ProcessingContext& context, T& defines)
304315 requires(T::delayed == false )
305316{
306317 using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t ::originals[T::spawnable_t ::originals.size () - 1 ].desc_hash >>::metadata;
307- auto originalTable = soa::ArrowHelpers::joinTables (extractOriginals<metadata::N, metadata:: template generateSources<o2::aod::Hash<T:: spawnable_t ::originals[T:: spawnable_t ::originals. size () - 1 ]. origin_hash >>()>(context), std::span{metadata:: base_table_t ::originalLabels} );
318+ auto originalTable = soa::ArrowHelpers::joinTables ( framework::extractTablesFromRecord (context. inputs (), defines. requiredInputs | std::views::transform ([]( auto const & input){ return DataSpecUtils::asConcreteDataMatcher (input); }) ) );
308319 if (originalTable->num_rows () == 0 ) {
309320 originalTable = makeEmptyTable (" EMPTY" , typename metadata::base_table_t ::persistent_columns_t {});
310321 }
@@ -336,7 +347,7 @@ bool prepareDelayedOutput(ProcessingContext& context, T& defines)
336347 defines.recompile ();
337348 }
338349 using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t ::ref.desc_hash >>::metadata;
339- auto originalTable = soa::ArrowHelpers::joinTables (extractOriginals<metadata::sources. size (), metadata::sources> (context), std::span{metadata:: base_table_t ::originalLabels} );
350+ auto originalTable = soa::ArrowHelpers::joinTables ( framework::extractTablesFromRecord (context. inputs ( ), defines. requiredInputs | std::views::transform ([]( auto const & input){ return DataSpecUtils::asConcreteDataMatcher (input); }) ) );
340351 if (originalTable->num_rows () == 0 ) {
341352 originalTable = makeEmptyTable<metadata::base_table_t ::ref>();
342353 }
0 commit comments