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
0 commit comments