Skip to content

Commit b60b80c

Browse files
committed
Assign a collection id when putting collections to the TES
1 parent 10c8dd5 commit b60b80c

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

k4FWCore/include/k4FWCore/FunctionalUtils.h

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <GaudiKernel/GaudiException.h>
3030

3131
#include "podio/CollectionBase.h"
32+
#include <podio/CollectionIDTable.h>
3233

3334
#include "k4FWCore/DataWrapper.h"
3435

@@ -208,6 +209,21 @@ namespace details {
208209
}
209210
}
210211

212+
inline auto getCollectionID(const std::string& name) {
213+
podio::CollectionIDTable tbl;
214+
return tbl.add(name);
215+
}
216+
217+
void putCollectionSetID(std::unique_ptr<podio::CollectionBase> coll,
218+
const DataObjectWriteHandle<std::unique_ptr<podio::CollectionBase>>& handle, auto thisClass) {
219+
podio::CollectionIDTable tbl;
220+
coll->setID(getCollectionID(handle.objKey()));
221+
thisClass->verbose() << fmt::format("Assigning collection id {:0>8x} to collection '{}'", coll->getID(),
222+
handle.objKey())
223+
<< endmsg;
224+
Gaudi::Functional::details::put(handle, std::move(coll));
225+
}
226+
211227
template <size_t Index, typename... Out, typename... Handles>
212228
void putVectorOutputs(std::tuple<Handles...>&& handles, const auto& m_outputs, auto thisClass) {
213229
if constexpr (Index < sizeof...(Handles)) {
@@ -221,12 +237,12 @@ namespace details {
221237
throw GaudiException(thisClass->name(), msg, StatusCode::FAILURE);
222238
}
223239
for (auto& val : std::get<Index>(handles)) {
224-
Gaudi::Functional::details::put(std::get<Index>(m_outputs)[i], convertToUniquePtr(std::move(val)));
240+
putCollectionSetID(convertToUniquePtr(std::move(val)), std::get<Index>(m_outputs)[i], thisClass);
225241
i++;
226242
}
227243
} else {
228-
Gaudi::Functional::details::put(std::get<Index>(m_outputs)[0],
229-
convertToUniquePtr(std::move(std::get<Index>(handles))));
244+
putCollectionSetID(convertToUniquePtr(std::move(std::get<Index>(handles))), std::get<Index>(m_outputs)[0],
245+
thisClass);
230246
}
231247

232248
// Recursive call for the next index

k4FWCore/include/k4FWCore/Transformer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ namespace details {
116116
std::tuple<Out> tmp = filter_evtcontext_tt<In...>::apply(*this, ctx, this->m_inputs);
117117
putVectorOutputs<0, Out>(std::move(tmp), m_outputs, this);
118118
} else {
119-
Gaudi::Functional::details::put(
120-
std::get<0>(this->m_outputs)[0],
121-
convertToUniquePtr(std::move(filter_evtcontext_tt<In...>::apply(*this, ctx, this->m_inputs))));
119+
putCollectionSetID(
120+
convertToUniquePtr(std::move(filter_evtcontext_tt<In...>::apply(*this, ctx, this->m_inputs))),
121+
std::get<0>(this->m_outputs)[0], this);
122122
}
123123
return Gaudi::Functional::FilterDecision::PASSED;
124124
} catch (GaudiException& e) {

0 commit comments

Comments
 (0)