Skip to content

Commit 5438d07

Browse files
committed
introduce transformBase() function; fix Spawns setting output incorrectly tables
1 parent a7ba5a0 commit 5438d07

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

Framework/Core/include/Framework/AnalysisHelpers.h

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,18 @@ struct TableTransform {
229229
/// This helper struct allows you to declare extended tables which should be
230230
/// created by the task (as opposed to those pre-defined by data model)
231231
template <typename T>
232-
concept is_spawnable = soa::is_table<T> && soa::has_metadata<aod::MetadataTrait<T>>;
232+
concept is_spawnable = soa::is_table<T> && soa::has_metadata<aod::MetadataTrait<T>> && !soa::is_index_table<T>;
233233

234234
template <is_spawnable T>
235-
struct Spawns : TableTransform<typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata, T::ref> {
236-
using metadata = TableTransform<typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata, T::ref>::metadata;
235+
constexpr auto transformBase()
236+
{
237+
using metadata = typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata;
238+
return TableTransform<metadata, metadata::extension_table_t::ref>{};
239+
}
240+
241+
template <is_spawnable T>
242+
struct Spawns : decltype(transformBase<T>()) {
243+
using metadata = decltype(transformBase<T>())::metadata;
237244
using extension_t = typename metadata::extension_table_t;
238245
using base_table_t = typename metadata::base_table_t;
239246
using expression_pack_t = typename metadata::expression_pack_t;
@@ -393,9 +400,17 @@ struct IndexBuilder {
393400
};
394401

395402
/// This helper struct allows you to declare index tables to be created in a task
403+
404+
template <soa::is_index_table T>
405+
constexpr auto transformBase()
406+
{
407+
using metadata = typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata;
408+
return TableTransform<metadata, T::ref>{};
409+
}
410+
396411
template <soa::is_index_table T>
397-
struct Builds : TableTransform<typename aod::MetadataTrait<aod::Hash<T::ref.desc_hash>>::metadata, T::ref> {
398-
using metadata = TableTransform<typename aod::MetadataTrait<aod::Hash<T::ref.desc_hash>>::metadata, T::ref>::metadata;
412+
struct Builds : decltype(transformBase<T>()) {
413+
using metadata = decltype(transformBase<T>())::metadata;
399414
using IP = std::conditional_t<metadata::exclusive, IndexBuilder<Exclusive>, IndexBuilder<Sparse>>;
400415
using Key = metadata::Key;
401416
using H = typename T::first_t;

Framework/Core/include/Framework/AnalysisManagers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ static inline auto extractOriginalsVector(framework::pack<Os...>, ProcessingCont
390390
return std::vector{extractOriginalJoined<Os>(pc)...};
391391
}
392392

393-
template <typename T>
393+
template <soa::is_index_table T>
394394
struct OutputManager<Builds<T>> {
395395
static bool appendOutput(std::vector<OutputSpec>& outputs, Builds<T>& what, uint32_t)
396396
{

0 commit comments

Comments
 (0)