Skip to content

Commit 8a68b29

Browse files
committed
DPL Analysis: fix for iterator not setting the originals correctly
1 parent 7eaa964 commit 8a68b29

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1728,7 +1728,8 @@ class Table
17281728
using columns_t = typename Parent::columns_t;
17291729
using external_index_columns_t = typename Parent::external_index_columns_t;
17301730
using bindings_pack_t = decltype([]<typename... C>(framework::pack<C...>) -> framework::pack<typename C::binding_t...> {}(external_index_columns_t{}));
1731-
static constexpr const std::array<TableRef, sizeof...(T)> originals{T::ref...};
1731+
// static constexpr const std::array<TableRef, sizeof...(T)> originals{T::ref...};
1732+
static constexpr auto originals = Parent::originals;
17321733
using policy_t = IP;
17331734
using parent_t = Parent;
17341735

@@ -1741,7 +1742,7 @@ class Table
17411742

17421743
template <typename P, typename... Os>
17431744
TableIteratorBase& operator=(TableIteratorBase<IP, P, Os...> other)
1744-
requires(P::ref::signature == Parent::ref::signature)
1745+
requires(P::ref.desc_hash == Parent::ref.desc_hash)
17451746
{
17461747
static_cast<base_iterator<IP>&>(*this) = static_cast<base_iterator<IP>>(other);
17471748
return *this;
@@ -1762,16 +1763,16 @@ class Table
17621763
return *this;
17631764
}
17641765

1765-
template <typename P, typename... Os>
1766-
TableIteratorBase(TableIteratorBase<IP, P, Os...> const& other)
1767-
requires(P::ref::signature == Parent::ref::signature)
1766+
template <typename P, typename O1, typename... Os>
1767+
TableIteratorBase(TableIteratorBase<IP, P, O1, Os...> const& other)
1768+
requires(P::ref.desc_hash == Parent::ref.desc_hash)
17681769
{
17691770
*this = other;
17701771
}
17711772

1772-
template <typename P, typename... Os>
1773-
TableIteratorBase(TableIteratorBase<IP, P, Os...>&& other) noexcept
1774-
requires(P::ref::signature == Parent::ref::signature)
1773+
template <typename P, typename O1, typename... Os>
1774+
TableIteratorBase(TableIteratorBase<IP, P, O1, Os...>&& other) noexcept
1775+
requires(P::ref.desc_hash == Parent::ref.desc_hash)
17751776
{
17761777
*this = other;
17771778
}
@@ -2503,7 +2504,7 @@ consteval auto getIndexTargets()
25032504
for (auto const& i : *mColumnIterator) { \
25042505
auto pos = mBinding.get<T>()->isInSelectedRows(i); \
25052506
if (pos > 0) { \
2506-
result.push_back(mBinding.get<T>()->iteratorAt(pos)); \
2507+
result.emplace_back(mBinding.get<T>()->iteratorAt(pos)); \
25072508
} \
25082509
} \
25092510
return result; \
@@ -3471,9 +3472,10 @@ template <typename T>
34713472
class Filtered : public FilteredBase<T>
34723473
{
34733474
public:
3474-
using base_t = T;
3475+
using base_t = FilteredBase<T>;
34753476
using self_t = Filtered<T>;
3476-
using table_t = typename FilteredBase<T>::table_t;
3477+
using table_t = typename T::table_t;
3478+
using columns_t = typename T::columns_t;
34773479

34783480
using iterator = T::template iterator_template_o<FilteredIndexPolicy, self_t>;
34793481
using unfiltered_iterator = T::template iterator_template_o<DefaultIndexPolicy, self_t>;
@@ -3633,9 +3635,10 @@ class Filtered<Filtered<T>> : public FilteredBase<typename T::table_t>
36333635
using self_t = Filtered<Filtered<T>>;
36343636
using base_t = T;
36353637
using table_t = typename FilteredBase<typename T::table_t>::table_t;
3638+
using columns_t = typename T::columns_t;
36363639

3637-
using iterator = FilteredBase<typename T::table_t>::iterator;
3638-
using unfiltered_iterator = FilteredBase<typename T::table_t>::unfiltered_iterator;
3640+
using iterator = typename T::template iterator_template_o<FilteredIndexPolicy, self_t> ;//FilteredBase<typename T::table_t>::iterator;
3641+
using unfiltered_iterator = typename T::template iterator_template_o<DefaultIndexPolicy, self_t> ;//FilteredBase<typename T::table_t>::unfiltered_iterator;
36393642
using const_iterator = iterator;
36403643

36413644
iterator begin()

Framework/Core/test/test_GroupSlicer.cxx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
// or submit itself to any jurisdiction.
1111

1212
#include "Framework/ASoA.h"
13+
#include "Framework/AnalysisDataModel.h"
1314
#include "Framework/TableBuilder.h"
1415
#include "Framework/GroupSlicer.h"
1516
#include "Framework/ArrowTableSlicingCache.h"
1617
#include <arrow/util/config.h>
18+
#include <iostream>
1719

1820
#include <catch_amalgamated.hpp>
1921

@@ -85,6 +87,13 @@ DECLARE_SOA_COLUMN(Lst, lst, std::vector<double>);
8587
DECLARE_SOA_TABLE(EventExtra, "AOD", "EVTSXTRA", test::Arr, test::Boo, test::Lst);
8688

8789
} // namespace o2::aod
90+
TEST_CASE("RelatedByIndex")
91+
{
92+
using Trks = soa::Join<aod::Tracks, aod::TracksExtra>;
93+
CHECK(soa::relatedByIndex<aod::Collision, Trks>() == true);
94+
CHECK(soa::relatedByIndex<aod::Collision, aod::Tracks>() == true);
95+
}
96+
8897
TEST_CASE("GroupSlicerOneAssociated")
8998
{
9099
TableBuilder builderE;

0 commit comments

Comments
 (0)