diff --git a/Framework/Core/include/Framework/AnalysisManagers.h b/Framework/Core/include/Framework/AnalysisManagers.h index 40e36c62da6dc..49a5fff5a5255 100644 --- a/Framework/Core/include/Framework/AnalysisManagers.h +++ b/Framework/Core/include/Framework/AnalysisManagers.h @@ -39,17 +39,16 @@ struct GroupedCombinationManager { } }; -template -struct GroupedCombinationManager, As...>> { - template - static void setGroupedCombination(GroupedCombinationsGenerator, As...>& comb, TH& hashes, TG& grouping, std::tuple& associated) +template +struct GroupedCombinationManager, As...>> { + template + static void setGroupedCombination(GroupedCombinationsGenerator, As...>& comb, TG& grouping, std::tuple& associated) { static_assert(sizeof...(T2s) > 0, "There must be associated tables in process() for a correct pair"); - static_assert(!soa::is_soa_iterator_t>::value, "Only full tables can be in process(), no grouping"); - if constexpr (std::is_same_v && std::is_same_v) { + if constexpr (std::is_same_v) { // Take respective unique associated tables for grouping auto associatedTuple = std::tuple(std::get(associated)...); - comb.setTables(hashes, grouping, associatedTuple); + comb.setTables(grouping, associatedTuple); } } }; diff --git a/Framework/Core/include/Framework/AnalysisTask.h b/Framework/Core/include/Framework/AnalysisTask.h index 8ab06cdb34435..31c7a4ab7f3ff 100644 --- a/Framework/Core/include/Framework/AnalysisTask.h +++ b/Framework/Core/include/Framework/AnalysisTask.h @@ -316,10 +316,8 @@ struct AnalysisDataProcessorBuilder { associatedTables); // GroupedCombinations bound separately, as they should be set once for all associated tables - auto hashes = std::get<0>(associatedTables); - auto realAssociated = tuple_tail(associatedTables); - homogeneous_apply_refs([&groupingTable, &hashes, &realAssociated](auto& t) { - GroupedCombinationManager>::setGroupedCombination(t, hashes, groupingTable, realAssociated); + homogeneous_apply_refs([&groupingTable, &associatedTables](auto& t) { + GroupedCombinationManager>::setGroupedCombination(t, groupingTable, associatedTables); return true; }, task); diff --git a/Framework/Core/include/Framework/GroupedCombinations.h b/Framework/Core/include/Framework/GroupedCombinations.h index 77bc11bc364bd..9ae76fc34ad5b 100644 --- a/Framework/Core/include/Framework/GroupedCombinations.h +++ b/Framework/Core/include/Framework/GroupedCombinations.h @@ -13,6 +13,7 @@ #define FRAMEWORK_GROUPEDCOMBINATIONS_H #include "Framework/ASoAHelpers.h" +#include "Framework/BinningPolicy.h" #include "Framework/GroupSlicer.h" #include "Framework/Pack.h" #include @@ -52,14 +53,13 @@ auto functionToTuple(R (C::*f)(Args...), C& obj, Args... args) return functionToTupleImpl(f, obj, args..., std::make_index_sequence()); } -template +template struct GroupedCombinationsGenerator { }; -template -struct GroupedCombinationsGenerator, As...> { - using joinIterator = typename soa::Join::table_t::iterator; - using GroupedIteratorType = pack_to_tuple_t, pack>>; +template +struct GroupedCombinationsGenerator, As...> { + using GroupedIteratorType = pack_to_tuple_t, pack>>; struct GroupedIterator : public GroupingPolicy { public: @@ -69,9 +69,9 @@ struct GroupedCombinationsGenerator, As... using iterator_category = std::forward_iterator_tag; GroupedIterator(const GroupingPolicy& groupingPolicy) : GroupingPolicy(groupingPolicy) {} - GroupedIterator(const GroupingPolicy& groupingPolicy, const H& hashes, const G& grouping, const std::shared_ptr>&& slicer_ptr) : GroupingPolicy(groupingPolicy), mSlicer{std::move(slicer_ptr)}, mGrouping{std::make_shared(std::vector{grouping.asArrowTable()})} + GroupedIterator(const GroupingPolicy& groupingPolicy, const G& grouping, const std::shared_ptr>&& slicer_ptr) : GroupingPolicy(groupingPolicy), mSlicer{std::move(slicer_ptr)}, mGrouping{std::make_shared(std::vector{grouping.asArrowTable()})} { - GroupingPolicy::setTables(join(hashes, grouping), join(hashes, grouping)); + setMultipleGroupingTables(grouping); if (!this->mIsEnd) { setCurrentGroupedCombination(); } @@ -81,11 +81,11 @@ struct GroupedCombinationsGenerator, As... GroupedIterator& operator=(GroupedIterator const&) = default; ~GroupedIterator() = default; - void setTables(const H& hashes, const G& grouping, std::shared_ptr> slicer_ptr) + void setTables(const G& grouping, std::shared_ptr> slicer_ptr) { mGrouping = std::make_shared(std::vector{grouping.asArrowTable()}); mSlicer = slicer_ptr; - setMultipleGroupingTables(join(hashes, grouping)); + setMultipleGroupingTables(grouping); if (!this->mIsEnd) { setCurrentGroupedCombination(); } @@ -226,21 +226,21 @@ struct GroupedCombinationsGenerator, As... return iterator(mEnd); } - GroupedCombinationsGenerator(const char* category, int catNeighbours, const T1& outsider) : mBegin(GroupingPolicy(category, catNeighbours, outsider)), mEnd(GroupingPolicy(category, catNeighbours, outsider)), mCategory(category), mCatNeighbours(catNeighbours), mOutsider(outsider) {} - GroupedCombinationsGenerator(const char* category, int catNeighbours, const T1& outsider, H& hashes, G& grouping, std::tuple& associated) : GroupedCombinationsGenerator(category, catNeighbours, outsider) + GroupedCombinationsGenerator(const BP& binningPolicy, int catNeighbours, const T1& outsider) : mBegin(GroupingPolicy(binningPolicy, catNeighbours, outsider)), mEnd(GroupingPolicy(binningPolicy, catNeighbours, outsider)) {} + GroupedCombinationsGenerator(const BP& binningPolicy, int catNeighbours, const T1& outsider, G& grouping, std::tuple& associated) : GroupedCombinationsGenerator(binningPolicy, catNeighbours, outsider) { - setTables(hashes, grouping, associated); + setTables(grouping, associated); } GroupedCombinationsGenerator(GroupedCombinationsGenerator const&) = default; GroupedCombinationsGenerator& operator=(GroupedCombinationsGenerator const&) = default; ~GroupedCombinationsGenerator() = default; - void setTables(H& hashes, G& grouping, std::tuple& associated) + void setTables(G& grouping, std::tuple& associated) { if (mSlicer == nullptr) { mSlicer = std::make_shared>(grouping, associated); - mBegin.setTables(hashes, grouping, mSlicer); - mEnd.setTables(hashes, grouping, mSlicer); + mBegin.setTables(grouping, mSlicer); + mEnd.setTables(grouping, mSlicer); mEnd.moveToEnd(); } } @@ -248,26 +248,21 @@ struct GroupedCombinationsGenerator, As... private: iterator mBegin; iterator mEnd; - const char* mCategory; - const int mCatNeighbours; - const T1 mOutsider; std::shared_ptr> mSlicer = nullptr; }; // Aliases for 2-particle correlations // 'Pair' and 'Triple' can be used for same kind pair/triple, too, just specify the same type twice -template -using joinedCollisions = typename soa::Join::table_t; -template , joinedCollisions>> -using Pair = GroupedCombinationsGenerator>, A1, A2>; -template , joinedCollisions>> -using SameKindPair = GroupedCombinationsGenerator, A, A>; +template > +using Pair = GroupedCombinationsGenerator>, A1, A2>; +template > +using SameKindPair = GroupedCombinationsGenerator, A, A>; // Aliases for 3-particle correlations -template , joinedCollisions, joinedCollisions>> -using Triple = GroupedCombinationsGenerator>, A1, A2, A3>; -template , joinedCollisions, joinedCollisions>> -using SameKindTriple = GroupedCombinationsGenerator, A, A, A>; +template > +using Triple = GroupedCombinationsGenerator>, A1, A2, A3>; +template > +using SameKindTriple = GroupedCombinationsGenerator, A, A, A>; } // namespace o2::framework #endif // FRAMEWORK_GROUPEDCOMBINATIONS_H_