From e770b2b8b0018e0f9a03df2d9b18e6ab325b6fd4 Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Tue, 25 Jan 2022 09:48:30 +0100 Subject: [PATCH] DPL Analysis: add template to declare index binding equivalence --- Framework/Core/include/Framework/ASoA.h | 31 ++++++++++++++++--- .../include/Framework/AnalysisDataModel.h | 5 +++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Framework/Core/include/Framework/ASoA.h b/Framework/Core/include/Framework/ASoA.h index bee91a96c9af0..e8c18fc938586 100644 --- a/Framework/Core/include/Framework/ASoA.h +++ b/Framework/Core/include/Framework/ASoA.h @@ -1382,11 +1382,28 @@ using JoinBase = decltype(join(std::declval()...)); template using ConcatBase = decltype(concat(std::declval(), std::declval())); -template -constexpr auto is_binding_compatible_v() +template +struct EquivalentIndex { + constexpr static bool value = false; +}; + +template +constexpr bool is_index_equivalent_v = EquivalentIndex::value; + +template +constexpr bool are_bindings_compatible_v(framework::pack&&) +{ + if constexpr (is_type_with_originals_v) { + return (are_bindings_compatible_v(originals_pack_t{}) || ...); + } else { + return ((std::is_same_v || is_index_equivalent_v) || ...); + } +} + +template +constexpr bool is_binding_compatible_v() { - return framework::pack_size( - framework::intersected_pack_t, originals_pack_t>{}) > 0; + return are_bindings_compatible_v(originals_pack_t{}); } } // namespace o2::soa @@ -1397,6 +1414,12 @@ constexpr auto is_binding_compatible_v() using metadata = std::void_t; \ } +#define DECLARE_EQUIVALENT_FOR_INDEX(_Base_, _Equiv_) \ + template <> \ + struct o2::soa::EquivalentIndex<_Base_, _Equiv_> { \ + constexpr static bool value = true; \ + } + #define DECLARE_SOA_COLUMN_FULL(_Name_, _Getter_, _Type_, _Label_) \ struct _Name_ : o2::soa::Column<_Type_, _Name_> { \ static constexpr const char* mLabel = _Label_; \ diff --git a/Framework/Core/include/Framework/AnalysisDataModel.h b/Framework/Core/include/Framework/AnalysisDataModel.h index d3b140ead20a8..c8435dbfe5a29 100644 --- a/Framework/Core/include/Framework/AnalysisDataModel.h +++ b/Framework/Core/include/Framework/AnalysisDataModel.h @@ -970,5 +970,10 @@ using CollisionMatchedRun3Sparse = soa::Join::ite } // namespace aod +namespace soa +{ +DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredMcParticles_000, aod::StoredMcParticles_001); +} + } // namespace o2 #endif // O2_FRAMEWORK_ANALYSISDATAMODEL_H_