Skip to content

Commit 40f81e8

Browse files
committed
DPL Analysis: remove special origins and From<> version for auto-generated tables (extended, index and timestamped)
1 parent 1688f9c commit 40f81e8

File tree

12 files changed

+259
-178
lines changed

12 files changed

+259
-178
lines changed

Framework/AnalysisSupport/src/AODWriterHelpers.cxx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#include "Framework/TableConsumer.h"
2222
#include "Framework/DataOutputDirector.h"
2323
#include "Framework/TableTreeHelpers.h"
24-
#include "Framework/Monitoring.h"
2524
#include "Framework/Signpost.h"
2625

2726
#include <Monitoring/Monitoring.h>
@@ -32,8 +31,6 @@
3231
#include <TMap.h>
3332
#include <TObjString.h>
3433
#include <arrow/table.h>
35-
#include <chrono>
36-
#include <ios>
3734

3835
O2_DECLARE_DYNAMIC_LOG(histogram_registry);
3936

@@ -157,7 +154,7 @@ AlgorithmSpec AODWriterHelpers::getOutputTTreeWriter(ConfigContext const& ctx)
157154
}
158155

159156
// skip non-AOD refs
160-
if (!DataSpecUtils::partialMatch(*ref.spec, writableAODOrigins)) {
157+
if (!DataSpecUtils::partialMatch(*ref.spec, AODOrigins)) {
161158
continue;
162159
}
163160
startTime = DataRefUtils::getHeader<DataProcessingHeader*>(ref)->startTime;

Framework/Core/include/Framework/ASoA.h

Lines changed: 151 additions & 111 deletions
Large diffs are not rendered by default.

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ DECLARE_SOA_TABLE(BCFlags, "AOD", "BCFLAG", //! flag for tagging UPCs, joinable
5151
bc::Flags);
5252

5353
using BCs = BCs_001; // current version
54+
template <aod::is_origin_hash O>
55+
using BCsFrom = BCs_001From<O>;
5456
using BC = BCs::iterator;
5557

5658
namespace timestamp
@@ -66,7 +68,7 @@ using BCsWithTimestamps = soa::Join<aod::BCs, aod::Timestamps>;
6668

6769
namespace soa
6870
{
69-
extern template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::BCs, aod::Timestamps>;
71+
extern template struct Join<aod::BCs, aod::Timestamps>;
7072
}
7173
namespace aod
7274
{
@@ -514,7 +516,7 @@ DECLARE_SOA_TABLE_FULL(StoredTracksIU, "Tracks_IU", "AOD", "TRACK_IU", //! On di
514516
track::Sign<track::Signed1Pt>,
515517
o2::soa::Marker<2>);
516518

517-
DECLARE_SOA_EXTENDED_TABLE(TracksIU, StoredTracksIU, "EXTRACK_IU", 0, //! Track parameters at inner most update (e.g. ITS) as it comes from the tracking
519+
DECLARE_SOA_EXTENDED_TABLE_NG(TracksIU, StoredTracksIU, "EXTRACK_IU", 0, //! Track parameters at inner most update (e.g. ITS) as it comes from the tracking
518520
aod::track::Pt,
519521
aod::track::P,
520522
aod::track::Eta,
@@ -680,9 +682,9 @@ using Run2TrackExtra = Run2TrackExtras::iterator;
680682
} // namespace aod
681683
namespace soa
682684
{
683-
extern template struct soa::JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Tracks, aod::TracksExtra>;
684-
extern template struct soa::JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Tracks, aod::TracksCov, aod::TracksExtra>;
685-
extern template struct soa::JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::TracksExtension, aod::StoredTracks>;
685+
extern template struct soa::Join<aod::Tracks, aod::TracksExtra>;
686+
extern template struct soa::Join<aod::Tracks, aod::TracksCov, aod::TracksExtra>;
687+
extern template struct soa::Join<aod::TracksExtension, aod::StoredTracks>;
686688
} // namespace soa
687689
namespace aod
688690
{
@@ -926,6 +928,8 @@ using MFTTracks = MFTTracks_001;
926928
using StoredMFTTracks = StoredMFTTracks_001;
927929

928930
using MFTTrack = MFTTracks::iterator;
931+
template <aod::is_origin_hash O>
932+
using MFTTracksFrom = MFTTracks_001From<O>;
929933

930934
namespace fwdtrack // Index to MFTtrack column must be defined after table definition.
931935
{
@@ -1005,7 +1009,7 @@ using MFTTrackCovFwd = MFTTracksCov::iterator;
10051009
} // namespace aod
10061010
namespace soa
10071011
{
1008-
extern template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::FwdTracks, aod::FwdTracksCov>;
1012+
extern template struct Join<aod::FwdTracks, aod::FwdTracksCov>;
10091013
}
10101014
namespace aod
10111015
{
@@ -2026,6 +2030,8 @@ DECLARE_SOA_EXTENDED_TABLE(McParticles_001, StoredMcParticles_001, "EXMCPARTICLE
20262030
using StoredMcParticles = StoredMcParticles_001;
20272031
using McParticles = McParticles_001;
20282032
using McParticle = McParticles::iterator;
2033+
template <aod::is_origin_hash O>
2034+
using McParticlesFrom = McParticles_001From<O>;
20292035
} // namespace aod
20302036
namespace soa
20312037
{
@@ -2191,11 +2197,11 @@ DECLARE_SOA_INDEX_COLUMN(FDD, fdd); //!
21912197
// First entry: Collision
21922198
#define INDEX_LIST_RUN2 indices::CollisionId, indices::ZdcId, indices::BCId, indices::FT0Id, indices::FV0AId, indices::FV0CId, indices::FDDId
21932199
DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(Run2MatchedExclusive, BCs, "MA_RN2_EX", INDEX_LIST_RUN2); //!
2194-
DECLARE_SOA_INDEX_TABLE(Run2MatchedSparse, BCs, "MA_RN2_SP", INDEX_LIST_RUN2); //!
2200+
DECLARE_SOA_INDEX_TABLE(Run2MatchedSparse, BCs_001, "MA_RN2_SP", INDEX_LIST_RUN2); //!
21952201

21962202
#define INDEX_LIST_RUN3 indices::CollisionId, indices::ZdcId, indices::BCId, indices::FT0Id, indices::FV0AId, indices::FDDId
21972203
DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(Run3MatchedExclusive, BCs, "MA_RN3_EX", INDEX_LIST_RUN3); //!
2198-
DECLARE_SOA_INDEX_TABLE(Run3MatchedSparse, BCs, "MA_RN3_SP", INDEX_LIST_RUN3); //!
2204+
DECLARE_SOA_INDEX_TABLE(Run3MatchedSparse, BCs_001, "MA_RN3_SP", INDEX_LIST_RUN3); //!
21992205

22002206
// First entry: BC
22012207
DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(MatchedBCCollisionsExclusive, BCs, "MA_BCCOL_EX", //!
@@ -2225,8 +2231,8 @@ DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracksIU, aod::McTrackLabels);
22252231
DECLARE_EQUIVALENT_FOR_INDEX(aod::Collisions, aod::McCollisionLabels);
22262232
// Joins with collisions (only for sparse ones)
22272233
// NOTE: index table needs to be always last argument
2228-
extern template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Collisions, aod::Run2MatchedSparse>;
2229-
extern template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Collisions, aod::Run3MatchedSparse>;
2234+
extern template struct Join<aod::Collisions, aod::Run2MatchedSparse>;
2235+
extern template struct Join<aod::Collisions, aod::Run3MatchedSparse>;
22302236
} // namespace soa
22312237
namespace aod
22322238
{

Framework/Core/include/Framework/AnalysisHelpers.h

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ auto makeEmptyTable(const char* name)
7979
}
8080

8181
template <soa::TableRef R>
82+
requires(soa::not_void<typename aod::MetadataTrait<aod::Hash<R.desc_hash>>::metadata>)
8283
auto makeEmptyTable()
8384
{
8485
auto schema = std::make_shared<arrow::Schema>(soa::createFieldsFromColumns(typename aod::MetadataTrait<aod::Hash<R.desc_hash>>::metadata::persistent_columns_t{}));
@@ -93,6 +94,7 @@ auto makeEmptyTable(const char* name, framework::pack<Cs...> p)
9394
}
9495

9596
template <aod::is_aod_hash D>
97+
requires(soa::not_void<typename aod::MetadataTrait<D>::metadata>)
9698
auto makeEmptyTable(const char* name)
9799
{
98100
auto schema = std::make_shared<arrow::Schema>(soa::createFieldsFromColumns(typename aod::MetadataTrait<D>::metadata::persistent_columns_t{}));
@@ -216,6 +218,26 @@ inline constexpr auto getSourceSchemas()
216218
}.template operator()<T::sources.size(), T::sources>();
217219
}
218220

221+
template <soa::with_sources_generator T, aod::is_origin_hash O = o2::aod::Hash<"AOD"_h>>
222+
inline constexpr auto getSources()
223+
{
224+
return []<size_t N, std::array<soa::TableRef, N> refs>() {
225+
return []<size_t... Is>(std::index_sequence<Is...>) {
226+
return std::vector{soa::tableRef2ConfigParamSpec<refs[Is]>()...};
227+
}(std::make_index_sequence<N>());
228+
}.template operator()<T::N, T::template generateSources<O>()>();
229+
}
230+
231+
template <soa::with_sources_generator T, aod::is_origin_hash O = o2::aod::Hash<"AOD"_h>>
232+
inline constexpr auto getSourceSchemas()
233+
{
234+
return []<size_t N, std::array<soa::TableRef, N> refs>() {
235+
return []<size_t... Is>(std::index_sequence<Is...>) {
236+
return std::vector{soa::tableRef2Schema<refs[Is]>()...};
237+
}(std::make_index_sequence<N>());
238+
}.template operator()<T::N, T::template generateSources<O>()>();
239+
}
240+
219241
template <soa::with_ccdb_urls T>
220242
inline constexpr auto getCCDBUrls()
221243
{
@@ -257,7 +279,7 @@ inline constexpr auto getIndexMapping()
257279
using indices = T::index_pack_t;
258280
using Key = T::Key;
259281
[&idx]<size_t... Is>(std::index_sequence<Is...>) mutable {
260-
constexpr auto refs = T::sources;
282+
constexpr auto refs = T::generateSources();
261283
([&idx]<TableRef ref, typename C>() mutable {
262284
constexpr auto pos = o2::aod::MetadataTrait<o2::aod::Hash<ref.desc_hash>>::metadata::template getIndexPosToKey<Key>();
263285
if constexpr (pos == -1) {
@@ -272,6 +294,26 @@ inline constexpr auto getIndexMapping()
272294
return idx;
273295
}
274296

297+
template <soa::with_sources_generator T, aod::is_origin_hash O = o2::aod::Hash<"AOD"_h>>
298+
constexpr auto getInputMetadata() -> std::vector<framework::ConfigParamSpec>
299+
{
300+
std::vector<framework::ConfigParamSpec> inputMetadata;
301+
302+
auto inputSources = getSources<T, O>();
303+
std::sort(inputSources.begin(), inputSources.end(), [](framework::ConfigParamSpec const& a, framework::ConfigParamSpec const& b) { return a.name < b.name; });
304+
auto last = std::unique(inputSources.begin(), inputSources.end(), [](framework::ConfigParamSpec const& a, framework::ConfigParamSpec const& b) { return a.name == b.name; });
305+
inputSources.erase(last, inputSources.end());
306+
inputMetadata.insert(inputMetadata.end(), inputSources.begin(), inputSources.end());
307+
308+
auto inputSchemas = getSourceSchemas<T, O>();
309+
std::sort(inputSchemas.begin(), inputSchemas.end(), [](framework::ConfigParamSpec const& a, framework::ConfigParamSpec const& b) { return a.name < b.name; });
310+
last = std::unique(inputSchemas.begin(), inputSchemas.end(), [](framework::ConfigParamSpec const& a, framework::ConfigParamSpec const& b) { return a.name == b.name; });
311+
inputSchemas.erase(last, inputSchemas.end());
312+
inputMetadata.insert(inputMetadata.end(), inputSchemas.begin(), inputSchemas.end());
313+
314+
return inputMetadata;
315+
}
316+
275317
template <soa::with_sources T>
276318
constexpr auto getInputMetadata() -> std::vector<framework::ConfigParamSpec>
277319
{
@@ -293,7 +335,7 @@ constexpr auto getInputMetadata() -> std::vector<framework::ConfigParamSpec>
293335
}
294336

295337
template <typename T>
296-
requires(!soa::with_sources<T>)
338+
requires(!(soa::with_sources<T> || soa::with_sources_generator<T>))
297339
constexpr auto getInputMetadata() -> std::vector<framework::ConfigParamSpec>
298340
{
299341
return {};
@@ -358,7 +400,12 @@ template <TableRef R>
358400
constexpr auto tableRef2InputSpec()
359401
{
360402
std::vector<framework::ConfigParamSpec> metadata;
361-
auto sources = getInputMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash>>::metadata>();
403+
std::vector<framework::ConfigParamSpec> sources;
404+
if constexpr (soa::with_sources<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash>>::metadata>) {
405+
sources = getInputMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash>>::metadata>();
406+
} else if constexpr(soa::with_sources_generator<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash>>::metadata>) {
407+
sources = getInputMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash>>::metadata, o2::aod::Hash<R.origin_hash>>();
408+
}
362409
metadata.insert(metadata.end(), sources.begin(), sources.end());
363410
auto ccdbURLs = getCCDBMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash>>::metadata>();
364411
metadata.insert(metadata.end(), ccdbURLs.begin(), ccdbURLs.end());
@@ -555,7 +602,7 @@ concept is_produces_group = std::derived_from<T, ProducesGroup>;
555602
template <soa::is_metadata M, soa::TableRef Ref>
556603
struct TableTransform {
557604
using metadata = M;
558-
constexpr static auto sources = M::sources;
605+
constexpr static auto sources = M::template generateSources<o2::aod::Hash<Ref.origin_hash>>();
559606

560607
template <soa::TableRef R>
561608
static auto base_spec()
@@ -589,23 +636,23 @@ struct TableTransform {
589636
/// This helper struct allows you to declare extended tables which should be
590637
/// created by the task (as opposed to those pre-defined by data model)
591638
template <typename T>
592-
concept is_spawnable = soa::has_metadata<aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>> && soa::has_extension<typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata>;
639+
concept is_spawnable = soa::has_metadata<aod::MetadataTrait<o2::aod::Hash<T::originals[T::originals.size() - 1].desc_hash>>> && soa::has_extension<typename aod::MetadataTrait<o2::aod::Hash<T::originals[T::originals.size() - 1].desc_hash>>::metadata>;
593640

594641
template <typename T>
595-
concept is_dynamically_spawnable = soa::has_metadata<aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>> && soa::has_configurable_extension<typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata>;
642+
concept is_dynamically_spawnable = soa::has_metadata<aod::MetadataTrait<o2::aod::Hash<T::originals[T::originals.size() - 1].desc_hash>>> && soa::has_configurable_extension<typename aod::MetadataTrait<o2::aod::Hash<T::originals[T::originals.size() - 1].desc_hash>>::metadata>;
596643

597644
template <is_spawnable T>
598645
constexpr auto transformBase()
599646
{
600-
using metadata = typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata;
601-
return TableTransform<metadata, metadata::extension_table_t::ref>{};
647+
using metadata = typename aod::MetadataTrait<o2::aod::Hash<T::originals[T::originals.size() - 1].desc_hash>>::metadata;
648+
return TableTransform<metadata, metadata::template extension_table_t_from<o2::aod::Hash<T::originals[T::originals.size() - 1].origin_hash>>::ref>{};
602649
}
603650

604651
template <is_spawnable T>
605652
struct Spawns : decltype(transformBase<T>()) {
606653
using spawnable_t = T;
607654
using metadata = decltype(transformBase<T>())::metadata;
608-
using extension_t = typename metadata::extension_table_t;
655+
using extension_t = typename metadata::template extension_table_t_from<o2::aod::Hash<T::originals[T::originals.size() - 1].origin_hash>>;
609656
using expression_pack_t = typename metadata::expression_pack_t;
610657
static constexpr size_t N = framework::pack_size(expression_pack_t{});
611658

@@ -655,7 +702,7 @@ struct Defines : decltype(transformBase<T>()) {
655702
static constexpr bool delayed = DELAYED;
656703
using spawnable_t = T;
657704
using metadata = decltype(transformBase<T>())::metadata;
658-
using extension_t = typename metadata::extension_table_t;
705+
using extension_t = typename metadata::template extension_table_t_from<o2::aod::Hash<T::originals[T::originals.size() - 1].origin_hash>>;
659706
using placeholders_pack_t = typename metadata::placeholders_pack_t;
660707
static constexpr size_t N = framework::pack_size(placeholders_pack_t{});
661708

Framework/Core/include/Framework/AnalysisManagers.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,10 +275,10 @@ bool prepareOutput(ProcessingContext& context, T& producesGroup)
275275
template <is_spawns T>
276276
bool prepareOutput(ProcessingContext& context, T& spawns)
277277
{
278-
using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t::ref.desc_hash>>::metadata;
279-
auto originalTable = soa::ArrowHelpers::joinTables(extractOriginals<metadata::sources.size(), metadata::sources>(context), std::span{metadata::base_table_t::originalLabels});
278+
using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t::originals[T::spawnable_t::originals.size() - 1].desc_hash>>::metadata;
279+
auto originalTable = soa::ArrowHelpers::joinTables(extractOriginals<metadata::N, metadata::template generateSources<o2::aod::Hash<T::spawnable_t::originals[T::spawnable_t::originals.size() - 1].origin_hash>>()>(context), std::span{metadata::base_table_t::originalLabels});
280280
if (originalTable->num_rows() == 0) {
281-
originalTable = makeEmptyTable<metadata::base_table_t::ref>();
281+
originalTable = makeEmptyTable("EMPTY", typename metadata::base_table_t::persistent_columns_t{});
282282
}
283283
using D = o2::aod::Hash<metadata::extension_table_t::ref.desc_hash>;
284284

@@ -295,17 +295,17 @@ template <is_builds T>
295295
bool prepareOutput(ProcessingContext& context, T& builds)
296296
{
297297
using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::buildable_t::ref.desc_hash>>::metadata;
298-
return builds.build(extractOriginals<metadata::sources.size(), metadata::sources>(context));
298+
return builds.build(extractOriginals<metadata::N, metadata::template generateSources<o2::aod::Hash<T::buildable_t::ref.origin_hash>>()>(context));
299299
}
300300

301301
template <is_defines T>
302302
bool prepareOutput(ProcessingContext& context, T& defines)
303303
requires(T::delayed == false)
304304
{
305-
using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t::ref.desc_hash>>::metadata;
306-
auto originalTable = soa::ArrowHelpers::joinTables(extractOriginals<metadata::sources.size(), metadata::sources>(context), std::span{metadata::base_table_t::originalLabels});
305+
using metadata = o2::aod::MetadataTrait<o2::aod::Hash<T::spawnable_t::originals[T::spawnable_t::originals.size() - 1].desc_hash>>::metadata;
306+
auto originalTable = soa::ArrowHelpers::joinTables(extractOriginals<metadata::N, metadata::template generateSources<o2::aod::Hash<T::spawnable_t::originals[T::spawnable_t::originals.size() - 1].origin_hash>>()>(context), std::span{metadata::base_table_t::originalLabels});
307307
if (originalTable->num_rows() == 0) {
308-
originalTable = makeEmptyTable<metadata::base_table_t::ref>();
308+
originalTable = makeEmptyTable("EMPTY", typename metadata::base_table_t::persistent_columns_t{});
309309
}
310310
if (defines.inputSchema == nullptr) {
311311
defines.inputSchema = originalTable->schema();

Framework/Core/include/Framework/AnalysisSupportHelpers.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121
namespace o2::framework
2222
{
2323
static constexpr std::array<header::DataOrigin, 4> AODOrigins{header::DataOrigin{"AOD"}, header::DataOrigin{"AOD1"}, header::DataOrigin{"AOD2"}, header::DataOrigin{"EMB"}};
24-
static constexpr std::array<header::DataOrigin, 6> extendedAODOrigins{header::DataOrigin{"AOD"}, header::DataOrigin{"AOD1"}, header::DataOrigin{"AOD2"}, header::DataOrigin{"DYN"}, header::DataOrigin{"AMD"}, header::DataOrigin{"EMB"}};
25-
static constexpr std::array<header::DataOrigin, 4> writableAODOrigins{header::DataOrigin{"AOD"}, header::DataOrigin{"AOD1"}, header::DataOrigin{"AOD2"}, header::DataOrigin{"DYN"}};
24+
// static constexpr std::array<header::DataOrigin, 6> extendedAODOrigins{header::DataOrigin{"AOD"}, header::DataOrigin{"AOD1"}, header::DataOrigin{"AOD2"}, header::DataOrigin{"EMB"}};
25+
// static constexpr std::array<header::DataOrigin, 4> writableAODOrigins{header::DataOrigin{"AOD"}, header::DataOrigin{"AOD1"}, header::DataOrigin{"AOD2"}, header::DataOrigin{"EMB"}};
2626

2727
class DataOutputDirector;
28-
class ConfigContext;
28+
struct ConfigContext;
2929

3030
// Helper class to be moved in the AnalysisSupport plugin at some point
3131
struct AnalysisSupportHelpers {

Framework/Core/src/AnalysisDataModel.cxx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212

1313
namespace o2::soa
1414
{
15-
template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::BCs, aod::Timestamps>;
16-
template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Tracks, aod::TracksExtra>;
17-
template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Tracks, aod::TracksCov, aod::TracksExtra>;
18-
template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::FwdTracks, aod::FwdTracksCov>;
19-
template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Collisions, aod::Run2MatchedSparse>;
20-
template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Collisions, aod::Run3MatchedSparse>;
15+
template struct Join<aod::BCs, aod::Timestamps>;
16+
template struct Join<aod::Tracks, aod::TracksExtra>;
17+
template struct Join<aod::Tracks, aod::TracksCov, aod::TracksExtra>;
18+
template struct Join<aod::FwdTracks, aod::FwdTracksCov>;
19+
template struct Join<aod::Collisions, aod::Run2MatchedSparse>;
20+
template struct Join<aod::Collisions, aod::Run3MatchedSparse>;
2121

22-
template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::TracksExtension, aod::StoredTracks>;
22+
template struct Join<aod::TracksExtension, aod::StoredTracks>;
2323
} // namespace o2::soa

Framework/Core/src/AnalysisSupportHelpers.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ std::shared_ptr<DataOutputDirector> AnalysisSupportHelpers::getDataOutputDirecto
102102
// use the dangling outputs
103103
std::vector<InputSpec> danglingOutputs;
104104
for (auto ii = 0u; ii < OutputsInputs.size(); ii++) {
105-
if (DataSpecUtils::partialMatch(OutputsInputs[ii], writableAODOrigins) && isDangling[ii]) {
105+
if (DataSpecUtils::partialMatch(OutputsInputs[ii], AODOrigins) && isDangling[ii]) {
106106
danglingOutputs.emplace_back(OutputsInputs[ii]);
107107
}
108108
}

0 commit comments

Comments
 (0)