diff --git a/Trigger/TrigAlgorithms/TrigmuComb/CMakeLists.txt b/Trigger/TrigAlgorithms/TrigmuComb/CMakeLists.txt index fbd9987f92e48df15dd4f89fc055d83cd6a020ad..3502c0015953b7db3f02c761340280cc4069453a 100644 --- a/Trigger/TrigAlgorithms/TrigmuComb/CMakeLists.txt +++ b/Trigger/TrigAlgorithms/TrigmuComb/CMakeLists.txt @@ -7,7 +7,7 @@ atlas_subdir( TrigmuComb ) atlas_add_component( TrigmuComb src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps AthenaKernel AthenaMonitoringKernelLib CxxUtils GaudiKernel MagFieldInterfaces PathResolver StoreGateLib TrigConfHLTData TrigInDetEvent TrigInterfacesLib TrigMuonEvent TrigT1Interfaces TrigTimeAlgsLib TrkExInterfaces xAODTracking xAODTrigMuon ) + LINK_LIBRARIES AthenaBaseComps AthenaKernel AthenaMonitoringKernelLib CxxUtils GaudiKernel MagFieldInterfaces PathResolver StoreGateLib TrigConfHLTData TrigInDetEvent TrigInterfacesLib TrigMuonEvent TrigT1Interfaces TrigTimeAlgsLib TrkExInterfaces xAODTracking xAODTrigMuon MagFieldElements MagFieldConditions ) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Trigger/TrigAlgorithms/TrigmuComb/src/muComb.cxx b/Trigger/TrigAlgorithms/TrigmuComb/src/muComb.cxx index d3554b5c6db16e734b49476952976f0df3c99844..9a318f94f2c81c4875d1afb1496b6c848c466fc7 100755 --- a/Trigger/TrigAlgorithms/TrigmuComb/src/muComb.cxx +++ b/Trigger/TrigAlgorithms/TrigmuComb/src/muComb.cxx @@ -35,6 +35,8 @@ #include "TrigInDetEvent/TrigInDetTrackCollection.h" #include "GaudiKernel/SystemOfUnits.h" +#include "GaudiKernel/ThreadLocalContext.h" + ATLAS_NO_CHECK_FILE_THREAD_SAFETY; // legacy trigger code @@ -42,7 +44,6 @@ muComb::muComb(const std::string& name, ISvcLocator* pSvcLocator): HLT::FexAlgo(name, pSvcLocator), m_pStoreGate(NULL), m_backExtrapolatorG4("Trk::Extrapolator/AtlasExtrapolator"), - m_MagFieldSvc(0), m_pTimerService(0) { @@ -187,12 +188,14 @@ HLT::ErrorCode muComb::hltInitialize() } if (m_useAthenaFieldService) { - if (!m_MagFieldSvc) service("AtlasFieldSvc", m_MagFieldSvc, /*createIf=*/ false).ignore(); - if (m_MagFieldSvc) { - ATH_MSG_INFO("Retrieved AtlasFieldSvc "); - } else { - ATH_MSG_ERROR("Could not retrieve AtlasFieldSvc"); + // Read handle for AtlasFieldCacheCondObj + StatusCode sc = m_fieldCacheCondObjInputKey.initialize(); + + if (sc.isFailure()) { + ATH_MSG_ERROR("Error initalizing AtlasFieldCacheCondObj"); return HLT::ErrorCode(HLT::Action::ABORT_JOB, HLT::Reason::BAD_JOB_SETUP); + } else { + ATH_MSG_INFO("AtlasFieldCacheCondObj initialized "); } } @@ -638,6 +641,8 @@ HLT::ErrorCode muComb::hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE) { + EventContext ctx = Gaudi::Hive::currentContext(); + // init monitoring variables m_ptMS = -9999.; m_etaMS = -9999.; @@ -664,10 +669,17 @@ HLT::ErrorCode muComb::hltExecute(const HLT::TriggerElement* inputTE, bool toroidOn = !m_assumeToroidOff; bool solenoidOn = !m_assumeSolenoidOff; if (m_useAthenaFieldService) { - if (m_MagFieldSvc) { - toroidOn = m_MagFieldSvc->toroidOn() && !m_assumeToroidOff; - solenoidOn = m_MagFieldSvc->solenoidOn() && !m_assumeSolenoidOff; - } + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::BAD_JOB_SETUP); + } + MagField::AtlasFieldCache fieldCache; + fieldCondObj->getInitializedCache (fieldCache); + + toroidOn = fieldCache.toroidOn() && !m_assumeToroidOff; + solenoidOn = fieldCache.solenoidOn() && !m_assumeSolenoidOff; } ATH_MSG_DEBUG("=========== Magnetic Field Status ========== "); ATH_MSG_DEBUG(" B Fields read from AthenaFieldService: " << (m_useAthenaFieldService ? "TRUE" : "FALSE")); @@ -718,7 +730,7 @@ HLT::ErrorCode muComb::hltExecute(const HLT::TriggerElement* inputTE, useL1 = true; } else { ATH_MSG_ERROR(" L2StandAloneMuonContainer not found --> ABORT"); - return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::MISSING_FEATURE); + return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::MISSING_FEATURE); } } xAOD::L2StandAloneMuonContainer* muonColl = const_cast<xAOD::L2StandAloneMuonContainer*>(const_muonColl); diff --git a/Trigger/TrigAlgorithms/TrigmuComb/src/muComb.h b/Trigger/TrigAlgorithms/TrigmuComb/src/muComb.h index 2dd7d3f9c4dab2102ff4ab6ba16b79b52f1ec8a2..d62a7d516dae8ef7a6206839bbeb1ffacf316898 100755 --- a/Trigger/TrigAlgorithms/TrigmuComb/src/muComb.h +++ b/Trigger/TrigAlgorithms/TrigmuComb/src/muComb.h @@ -23,12 +23,15 @@ #include "TrigTimeAlgs/TrigTimerSvc.h" //#include "ByteStreamCnvSvcBase/ROBDataProviderSvc.h" #include "TrkExInterfaces/IExtrapolator.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +//#include "MagFieldInterfaces/IMagFieldSvc.h" + +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "xAODTrigMuon/L2CombinedMuonContainer.h" #include "xAODTracking/TrackParticle.h" #include "CxxUtils/checker_macros.h" + ATLAS_NO_CHECK_FILE_THREAD_SAFETY; // legacy trigger code /** Main LVL2 Algorithm. Sided by a xAOD::L2StandaloneMuon, match the muon spectrometer track with an ID track, and produces a xAOD::L2CombinedMuon. */ @@ -62,7 +65,9 @@ class muComb : public HLT::FexAlgo ToolHandle<Trk::IExtrapolator> m_backExtrapolatorG4; /** Handle to the Magnetic field service */ - MagField::IMagFieldSvc* m_MagFieldSvc; + //MagField::IMagFieldSvc* m_MagFieldSvc; + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; + /** Pointer to Timer Service */ ITrigTimerSvc* m_pTimerService; diff --git a/Trigger/TrigAlgorithms/TrigmuComb/src/muCombMT.cxx b/Trigger/TrigAlgorithms/TrigmuComb/src/muCombMT.cxx index 07424d65b7c6072ea342a2214fb7691e5deac06c..db0bf90648a07643ee70ab14fe13cccefabf6379 100644 --- a/Trigger/TrigAlgorithms/TrigmuComb/src/muCombMT.cxx +++ b/Trigger/TrigAlgorithms/TrigmuComb/src/muCombMT.cxx @@ -25,11 +25,12 @@ #include "xAODTracking/TrackParticleContainer.h" #include "AthenaMonitoringKernel/Monitored.h" +#include "GaudiKernel/ThreadLocalContext.h" + class ISvcLocator; muCombMT::muCombMT(const std::string& name, ISvcLocator* pSvcLocator): - AthAlgorithm(name, pSvcLocator), - m_MagFieldSvc(0) + AthAlgorithm(name, pSvcLocator) { } @@ -38,13 +39,7 @@ StatusCode muCombMT::initialize() ATH_MSG_DEBUG("Initialization:"); //Filed service - if (!m_MagFieldSvc) service("AtlasFieldSvc", m_MagFieldSvc, /*createIf=*/ false).ignore(); - if (m_MagFieldSvc) { - ATH_MSG_DEBUG( "Retrieved AtlasFieldSvc" ); - } else { - ATH_MSG_ERROR( "Could not retrieve AtlasFieldSvc --> Abort" ); - return StatusCode::FAILURE; - } + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); if (!m_monTool.empty()) { ATH_MSG_DEBUG("Retrieving monTool"); @@ -512,10 +507,18 @@ StatusCode muCombMT::execute() //Magnetic field status bool toroidOn = !m_assumeToroidOff; bool solenoidOn = !m_assumeSolenoidOff; - if (m_MagFieldSvc) { - toroidOn = m_MagFieldSvc->toroidOn() && !m_assumeToroidOff; - solenoidOn = m_MagFieldSvc->solenoidOn() && !m_assumeSolenoidOff; + + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return StatusCode::FAILURE; } + MagField::AtlasFieldCache fieldCache; + fieldCondObj->getInitializedCache (fieldCache); + + toroidOn = fieldCache.toroidOn() && !m_assumeToroidOff; + solenoidOn = fieldCache.solenoidOn() && !m_assumeSolenoidOff; ATH_MSG_DEBUG( "=========== Magnetic Field Status ========== " ); ATH_MSG_DEBUG( " Assuming Toroid OFF is: " << (m_assumeToroidOff ? "TRUE" : "FALSE") ); ATH_MSG_DEBUG( " Assuming Solenoid OFF is: " << (m_assumeSolenoidOff ? "TRUE" : "FALSE") ); diff --git a/Trigger/TrigAlgorithms/TrigmuComb/src/muCombMT.h b/Trigger/TrigAlgorithms/TrigmuComb/src/muCombMT.h index 05707f2b82b0bcccf0028b21115492e5a4f4d1ed..b14f1e01fe5894afc8224429276c96d638e64dfa 100644 --- a/Trigger/TrigAlgorithms/TrigmuComb/src/muCombMT.h +++ b/Trigger/TrigAlgorithms/TrigmuComb/src/muCombMT.h @@ -33,7 +33,7 @@ #include "StoreGate/WriteHandleKey.h" #include "TrkExInterfaces/IExtrapolator.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +//#include "MagFieldInterfaces/IMagFieldSvc.h" #include "xAODTrigMuon/L2CombinedMuonContainer.h" #include "xAODTracking/TrackParticleContainer.h" @@ -43,6 +43,7 @@ //#include "TrigT1Interfaces/RecMuonRoI.h" #include "AthenaMonitoringKernel/GenericMonitoringTool.h" +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" /** Main LVL2 Algorithm. Sided by a xAOD::L2StandaloneMuon, match the muon spectrometer track with an ID track, and produces a xAOD::L2CombinedMuon. */ class muCombMT : public AthAlgorithm @@ -89,7 +90,8 @@ class muCombMT : public AthAlgorithm /** Handle to the Magnetic field service */ //ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; //!< helper tool to get the magnetic field - MagField::IMagFieldSvc* m_MagFieldSvc; + //MagField::IMagFieldSvc* m_MagFieldSvc; + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; int drptMatch(double, double, double,