@@ -418,6 +418,7 @@ constexpr auto tableRef2InputSpec(header::DataOrigin newOrigin = header::DataOri
418418 std::ranges::transform (sources, sources.begin (), [originStr = newOrigin.as <std::string>()](framework::ConfigParamSpec& source){
419419 return replaceOrigin (source, originStr);
420420 });
421+ metadata.push_back (framework::ConfigParamSpec{" aod-origin-replaced" , framework::VariantType::Bool, true , {" \"\" " }});
421422 }
422423 metadata.insert (metadata.end (), sources.begin (), sources.end ());
423424 auto ccdbURLs = getCCDBMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash >>::metadata>();
@@ -440,7 +441,7 @@ constexpr auto tableRef2InputSpec(header::DataOrigin newOrigin = header::DataOri
440441}
441442
442443template <TableRef R>
443- constexpr auto tableRef2OutputSpec ()
444+ constexpr auto tableRef2OutputSpec (header::DataOrigin newOrigin = header::DataOrigin{ " AOD " } )
444445{
445446 std::vector<framework::ConfigParamSpec> metadata;
446447 using md = typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash >>::metadata;
@@ -453,7 +454,7 @@ constexpr auto tableRef2OutputSpec()
453454 }
454455 return framework::OutputSpec{
455456 framework::OutputLabel{o2::aod::label<R>()},
456- o2::aod::origin<R>(),
457+ ((R. origin_hash == " AOD " _h) && (newOrigin != header::DataOrigin{ " AOD " })) ? newOrigin : o2::aod::origin<R>(),
457458 o2::aod::description (o2::aod::signature<R>()),
458459 R.version ,
459460 framework::Lifetime::Timeframe,
@@ -497,6 +498,10 @@ struct WritingCursor {
497498 using persistent_table_t = decltype ([]() { if constexpr (soa::is_iterator<T>) { return typename T::parent_t {nullptr }; } else { return T{nullptr }; } }());
498499 using cursor_t = decltype (std::declval<TableBuilder>().cursor<persistent_table_t >());
499500 OutputSpec outputSpec{soa::tableRef2OutputSpec<persistent_table_t ::ref>()};
501+ OutputSpec updateOutputSpec (header::DataOrigin const & newOrigin)
502+ {
503+ outputSpec = soa::tableRef2OutputSpec<persistent_table_t ::ref>(newOrigin);
504+ }
500505
501506 template <typename ... Ts>
502507 void operator ()(Ts&&... args)
@@ -623,10 +628,21 @@ template <soa::is_metadata M, soa::TableRef Ref>
623628struct TableTransform {
624629 using metadata = M;
625630 constexpr static auto sources = M::template generateSources<o2::aod::Hash<Ref.origin_hash>>();
626- std::vector<InputSpec> requiredInputs = []<size_t ... Is>(std::index_sequence<Is...>){
627- return std::vector{soa::tableRef2InputSpec<sources[Is]>()...};
628- }(std::make_index_sequence<sources.size()>());
629- OutputSpec outputSpec = soa::tableRef2OutputSpec<Ref>();
631+
632+ OutputSpec outputSpec = updateOutputSpec();
633+ static OutputSpec updateOutputSpec (header::DataOrigin const & newOrigin = header::DataOrigin{" AOD" })
634+ {
635+ return soa::tableRef2OutputSpec<Ref>(newOrigin);
636+ }
637+
638+ std::vector<InputSpec> requiredInputs = getRequiredInputs();
639+ static std::vector<InputSpec> getRequiredInputs (header::DataOrigin const & newOrigin = header::DataOrigin{" AOD" })
640+ {
641+ return [&newOrigin]<size_t ... Is>(std::index_sequence<Is...>){
642+ return std::vector{soa::tableRef2InputSpec<sources[Is]>(newOrigin)...};
643+ }(std::make_index_sequence<sources.size ()>());
644+ }
645+
630646};
631647
632648// / This helper struct allows you to declare extended tables which should be
0 commit comments