From 9563bc5c8475d22a895a4ec08ff31e55612a2dbc Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Tue, 12 May 2020 21:22:08 +0200 Subject: [PATCH 1/2] DPL Analysis: Fix for grouping with a joined iterator --- Analysis/Tutorials/src/associatedExample.cxx | 36 ++++++++++++++++--- .../Core/include/Framework/AnalysisTask.h | 10 ++++-- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Analysis/Tutorials/src/associatedExample.cxx b/Analysis/Tutorials/src/associatedExample.cxx index 1219a56b55526..c767456c7a042 100644 --- a/Analysis/Tutorials/src/associatedExample.cxx +++ b/Analysis/Tutorials/src/associatedExample.cxx @@ -23,6 +23,14 @@ DECLARE_SOA_TABLE(EtaPhi, "AOD", "ETAPHI", etaphi::Eta, etaphi::Phi); DECLARE_SOA_TABLE(EtaPhiPt, "AOD", "ETAPHIPT", etaphi::Eta, etaphi::Phi, etaphi::Pt); + +namespace collision +{ +DECLARE_SOA_COLUMN(Mult, mult, int32_t); +} // namespace collision + +DECLARE_SOA_TABLE(CollisionsExtra, "AOD", "COLEXTRA", + collision::Mult); } // namespace o2::aod using namespace o2; @@ -48,11 +56,20 @@ struct ATask { } }; +struct MTask { + Produces colextra; + + void process(aod::Collision const& collision, aod::Tracks const& tracks) + { + colextra(tracks.size()); + } +}; + struct BTask { void process(aod::Collision const& collision, soa::Join const& extTracks) { - // LOG(INFO) << "TF: " << collision.timeframeID() << std::endl; - LOG(INFO) << "Rows: " << extTracks.asArrowTable()->num_rows() << std::endl; + LOGF(INFO, "ID: %d", collision.globalIndex()); + LOGF(INFO, "Tracks: %d", extTracks.size()); for (auto& track : extTracks) { LOGF(INFO, "(%f, %f) - (%f, %f)", track.eta(), track.phi(), track.etas(), track.phis()); } @@ -62,8 +79,15 @@ struct BTask { struct CTask { void process(aod::Collision const& collision, soa::Concat const& concatenated) { - // LOG(INFO) << "TF: " << collision.timeframeID() << std::endl; - LOG(INFO) << "Rows: " << concatenated.asArrowTable()->num_rows() << std::endl; + LOGF(INFO, "ID: %d", collision.globalIndex()); + LOGF(INFO, "Tracks: %d", concatenated.size()); + } +}; + +struct TTask { + void process(soa::Join::iterator const& col, aod::Tracks const& tracks) + { + LOGF(INFO, "ID: %d; %d == %d", col.globalIndex(), col.mult(), tracks.size()); } }; @@ -72,5 +96,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const&) return WorkflowSpec{ adaptAnalysisTask("produce-etaphi"), adaptAnalysisTask("consume-etaphi"), - adaptAnalysisTask("consume-etaphi-twice")}; + adaptAnalysisTask("consume-etaphi-twice"), + adaptAnalysisTask("produce-mult"), + adaptAnalysisTask("consume-mult")}; } diff --git a/Framework/Core/include/Framework/AnalysisTask.h b/Framework/Core/include/Framework/AnalysisTask.h index 3a010da149b2e..c9242631f08a7 100644 --- a/Framework/Core/include/Framework/AnalysisTask.h +++ b/Framework/Core/include/Framework/AnalysisTask.h @@ -489,7 +489,13 @@ struct AnalysisDataProcessorBuilder { constexpr bool isIndexTo() { if constexpr (soa::is_type_with_binding_v) { - return std::is_same_v; + if constexpr (soa::is_type_with_originals_v>) { + using TT = typename framework::pack_element_t<0, typename std::decay_t::originals>; + return std::is_same_v; + } else { + using TT = std::decay_t; + return std::is_same_v; + } } return false; } @@ -601,7 +607,7 @@ struct AnalysisDataProcessorBuilder { static_assert(((soa::is_soa_iterator_t>::value == false) && ...), "Associated arguments of process() should not be iterators"); auto associatedTables = AnalysisDataProcessorBuilder::bindAssociatedTables(inputs, &C::process, infos); - if constexpr (soa::is_soa_iterator_t::value) { + if constexpr (soa::is_soa_iterator_t>::value) { // grouping case (groupingTable.bindExternalIndices(&std::get>(associatedTables)), ...); auto slicer = GroupSlicer(groupingTable, associatedTables); From c7cb7ac941b8be8067ca1c9b14b214183d2b1849 Mon Sep 17 00:00:00 2001 From: Anton Alkin Date: Tue, 12 May 2020 21:27:06 +0200 Subject: [PATCH 2/2] Minor fix --- Framework/Core/include/Framework/AnalysisTask.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Framework/Core/include/Framework/AnalysisTask.h b/Framework/Core/include/Framework/AnalysisTask.h index c9242631f08a7..07abe4857b6a6 100644 --- a/Framework/Core/include/Framework/AnalysisTask.h +++ b/Framework/Core/include/Framework/AnalysisTask.h @@ -490,7 +490,7 @@ struct AnalysisDataProcessorBuilder { { if constexpr (soa::is_type_with_binding_v) { if constexpr (soa::is_type_with_originals_v>) { - using TT = typename framework::pack_element_t<0, typename std::decay_t::originals>; + using TT = typename framework::pack_element_t<0, typename std::decay_t::originals>; return std::is_same_v; } else { using TT = std::decay_t;