diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.cxx b/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.cxx index 65ec06910bceb6dc63464649ca662855cd4f2475..e3f838a4d70cc15d263a02a455c871956969f22e 100644 --- a/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.cxx +++ b/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.cxx @@ -35,6 +35,16 @@ StatusCode HLTEDMCreator::initHandles( const HandlesGroup<T>& handles ) { return StatusCode::SUCCESS; } +template<typename T> +StatusCode HLTEDMCreator::initAuxKey( const std::vector<SG::VarHandleKey*>& keys ) { + // Register Aux keys for all handles to avoid hash collisions (ATR-26386). + for (const SG::VarHandleKey* k : keys) { + SG::WriteHandleKey<T> auxkey(k->key()+"Aux."); + ATH_CHECK( auxkey.initialize() ); + } + return StatusCode::SUCCESS; +} + StatusCode HLTEDMCreator::initialize() { @@ -69,55 +79,56 @@ StatusCode HLTEDMCreator::initialize() #define INIT(__TYPE) \ ATH_CHECK( initHandles( HandlesGroup<__TYPE>( m_##__TYPE, m_##__TYPE##InViews, m_##__TYPE##Views ) ) ); -#define INIT_XAOD(__TYPE) \ - ATH_CHECK( initHandles( HandlesGroup<xAOD::__TYPE>( m_##__TYPE, m_##__TYPE##InViews, m_##__TYPE##Views ) ) ); +#define INIT_XAOD(__TYPE, __STORE_TYPE) \ + ATH_CHECK( initHandles( HandlesGroup<xAOD::__TYPE>( m_##__TYPE, m_##__TYPE##InViews, m_##__TYPE##Views ) ) ); \ + ATH_CHECK( initAuxKey<xAOD::__STORE_TYPE>( m_##__TYPE.keys() ) ); INIT( TrigRoiDescriptorCollection ); - INIT_XAOD( TrigCompositeContainer ); + INIT_XAOD( TrigCompositeContainer, TrigCompositeAuxContainer ); - INIT_XAOD( TrigEMClusterContainer ); - INIT_XAOD( TrigCaloClusterContainer ); - INIT_XAOD( TrigRingerRingsContainer ); - INIT_XAOD( TrigElectronContainer ); - INIT_XAOD( ElectronContainer ); - INIT_XAOD( PhotonContainer ); - INIT_XAOD( TrigPhotonContainer ); - INIT_XAOD( TrackParticleContainer ); - INIT_XAOD( TrigMissingETContainer ); - - INIT_XAOD( L2StandAloneMuonContainer ); - INIT_XAOD( L2CombinedMuonContainer ); - INIT_XAOD( L2IsoMuonContainer ); - INIT_XAOD( MuonContainer ); - INIT_XAOD( TauJetContainer ); - INIT_XAOD( TauTrackContainer ); - INIT_XAOD( JetContainer ); - INIT_XAOD( VertexContainer ); - INIT_XAOD( TrigBphysContainer ); - INIT_XAOD( BTaggingContainer ); - INIT_XAOD( BTagVertexContainer ); - INIT_XAOD( CaloClusterContainer ); - INIT_XAOD( TrigT2MbtsBitsContainer ); - INIT_XAOD( HIEventShapeContainer ); - INIT_XAOD( TrigRNNOutputContainer ); - INIT_XAOD( AFPSiHitsClusterContainer ); - INIT_XAOD( AFPTrackContainer ); - INIT_XAOD( AFPToFTrackContainer ); - INIT_XAOD( AFPProtonContainer ); - INIT_XAOD( AFPVertexContainer ); + INIT_XAOD( TrigEMClusterContainer, TrigEMClusterAuxContainer ); + INIT_XAOD( TrigCaloClusterContainer, TrigCaloClusterAuxContainer ); + INIT_XAOD( TrigRingerRingsContainer, TrigRingerRingsAuxContainer ); + INIT_XAOD( TrigElectronContainer, TrigElectronAuxContainer ); + INIT_XAOD( ElectronContainer, ElectronAuxContainer ); + INIT_XAOD( PhotonContainer, PhotonAuxContainer ); + INIT_XAOD( TrigPhotonContainer, TrigPhotonAuxContainer ); + INIT_XAOD( TrackParticleContainer, TrackParticleAuxContainer ); + INIT_XAOD( TrigMissingETContainer, TrigMissingETAuxContainer ); + + INIT_XAOD( L2StandAloneMuonContainer, L2StandAloneMuonAuxContainer ); + INIT_XAOD( L2CombinedMuonContainer, L2CombinedMuonAuxContainer ); + INIT_XAOD( L2IsoMuonContainer, L2IsoMuonAuxContainer ); + INIT_XAOD( MuonContainer, MuonAuxContainer ); + INIT_XAOD( TauJetContainer, TauJetAuxContainer ); + INIT_XAOD( TauTrackContainer, TauTrackAuxContainer ); + INIT_XAOD( JetContainer, JetAuxContainer ); + INIT_XAOD( VertexContainer, VertexAuxContainer ); + INIT_XAOD( TrigBphysContainer, TrigBphysAuxContainer ); + INIT_XAOD( BTaggingContainer, BTaggingAuxContainer ); + INIT_XAOD( BTagVertexContainer, BTagVertexAuxContainer ); + INIT_XAOD( CaloClusterContainer, CaloClusterTrigAuxContainer ); // NOTE: Difference in interface and aux + INIT_XAOD( TrigT2MbtsBitsContainer, TrigT2MbtsBitsAuxContainer ); + INIT_XAOD( HIEventShapeContainer, HIEventShapeAuxContainer ); + INIT_XAOD( TrigRNNOutputContainer, TrigRNNOutputAuxContainer ); + INIT_XAOD( AFPSiHitsClusterContainer, AFPSiHitsClusterAuxContainer ); + INIT_XAOD( AFPTrackContainer, AFPTrackAuxContainer ); + INIT_XAOD( AFPToFTrackContainer, AFPToFTrackAuxContainer ); + INIT_XAOD( AFPProtonContainer, AFPProtonAuxContainer ); + INIT_XAOD( AFPVertexContainer, AFPVertexAuxContainer ); // Phase-I L1 RoIs EDM - INIT_XAOD( eFexEMRoIContainer ); - INIT_XAOD( eFexTauRoIContainer ); - INIT_XAOD( jFexTauRoIContainer ); - INIT_XAOD( jFexFwdElRoIContainer ); - INIT_XAOD( jFexSRJetRoIContainer ); - INIT_XAOD( jFexLRJetRoIContainer ); - INIT_XAOD( jFexMETRoIContainer ); - INIT_XAOD( jFexSumETRoIContainer ); - INIT_XAOD( gFexJetRoIContainer ); - INIT_XAOD( gFexGlobalRoIContainer ); - INIT_XAOD( MuonRoIContainer ); + INIT_XAOD( eFexEMRoIContainer, eFexEMRoIAuxContainer ); + INIT_XAOD( eFexTauRoIContainer, eFexTauRoIAuxContainer ); + INIT_XAOD( jFexTauRoIContainer, jFexTauRoIAuxContainer ); + INIT_XAOD( jFexFwdElRoIContainer, jFexFwdElRoIAuxContainer ); + INIT_XAOD( jFexSRJetRoIContainer, jFexSRJetRoIAuxContainer ); + INIT_XAOD( jFexLRJetRoIContainer, jFexLRJetRoIAuxContainer ); + INIT_XAOD( jFexMETRoIContainer, jFexMETRoIAuxContainer ); + INIT_XAOD( jFexSumETRoIContainer, jFexSumETRoIAuxContainer ); + INIT_XAOD( gFexJetRoIContainer, gFexJetRoIAuxContainer ); + INIT_XAOD( gFexGlobalRoIContainer, gFexGlobalRoIAuxContainer); + INIT_XAOD( MuonRoIContainer, MuonRoIAuxContainer ); #undef INIT #undef INIT_XAOD diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.h b/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.h index eaa7ddd83b70e1fa813896d88024bf853740df31..687b0a20b54e4b9d4cdd5a2c0ec07b18b4d4fa47 100644 --- a/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.h +++ b/Trigger/TrigSteer/TrigOutputHandling/src/HLTEDMCreator.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #ifndef TRIGOUTPUTHANDLING_HLTEDMCREATOR_H #define TRIGOUTPUTHANDLING_HLTEDMCREATOR_H 1 @@ -252,6 +252,14 @@ class HLTEDMCreator: public extends<AthAlgTool, IHLTOutputTool> { template<typename T> StatusCode initHandles( const HandlesGroup<T>& handles ); + /** + * Register AuxStore keys for the given keys + * + * This is required to avoid hash collisions (ATR-26386). + */ + template<typename T> + StatusCode initAuxKey( const std::vector<SG::VarHandleKey*>& keys ); + template<typename T> struct ConstHandlesGroup { ConstHandlesGroup(const SG::WriteHandleKeyArray<T>& out_,