diff --git a/Rec/GlobalPID/src/ChargedProtoParticleAddGlobalPID.cpp b/Rec/GlobalPID/src/ChargedProtoParticleAddGlobalPID.cpp index 461d30e3090c01be2feae6cabd77b371d223a18e..b9e89a68cbb1f3a130e663065d3fafecee4b6db8 100644 --- a/Rec/GlobalPID/src/ChargedProtoParticleAddGlobalPID.cpp +++ b/Rec/GlobalPID/src/ChargedProtoParticleAddGlobalPID.cpp @@ -10,6 +10,7 @@ \*****************************************************************************/ #include "Event/ProtoParticle.h" #include "GaudiAlg/GaudiTool.h" +#include "GaudiKernel/GaudiException.h" #include "GaudiKernel/IFileAccess.h" #include "GaudiKernel/ServiceHandle.h" #include "GlobalPID/ProbNNs.h" @@ -35,7 +36,13 @@ namespace LHCb::Rec::GlobalPID { return scc; }; - StatusCode operator()( ProtoParticles& protos, IGeometryInfo const& ) const override { + StatusCode operator()( ProtoParticles& protos, IGeometryInfo const&, + LHCb::GlobalChargedPIDs* pids ) const override { + if ( !pids ) + throw GaudiException( + "Use 'AddGlobalPID' tool only in algorithms that pass on a valid 'LHCb::GlobalChargedPIDs' container", + "AddGlobalPID", StatusCode::FAILURE ); + // select only charged tracks of a certain track type auto select = [&]( LHCb::ProtoParticle const* proto ) -> bool { return proto->track() && proto->track()->type() == m_tracktype; @@ -49,7 +56,8 @@ namespace LHCb::Rec::GlobalPID { } else { auto new_pid = std::make_unique(); new_pid->setProbNN( output[0] ); - proto->setGlobalChargedPID( new_pid.release() ); + proto->setGlobalChargedPID( new_pid.get() ); + pids->insert( new_pid.release() ); } }; diff --git a/Rec/GlobalReco/src/FunctionalChargedProtoParticleMaker.cpp b/Rec/GlobalReco/src/FunctionalChargedProtoParticleMaker.cpp index 0434c566e270f5685e5c316d500a2c0b86234544..4211ba8511b5df2fbc0fae3dd340361f829d14d2 100644 --- a/Rec/GlobalReco/src/FunctionalChargedProtoParticleMaker.cpp +++ b/Rec/GlobalReco/src/FunctionalChargedProtoParticleMaker.cpp @@ -81,11 +81,7 @@ public: ++m_count; } } - for ( const auto& addInfo : m_addInfo ) ( *addInfo )( protos, geometry ).ignore(); - // fill GlobalChargedPID object if made and transfer ownership - for ( LHCb::ProtoParticle* proto : protos ) { - if ( LHCb::GlobalChargedPID* pid = proto->globalChargedPID(); pid ) pids.insert( std::move( pid ) ); - } + for ( const auto& addInfo : m_addInfo ) ( *addInfo )( protos, geometry, &pids ).ignore(); return result; }