From ab83e32e784424b08de47370228ad6a75b7b39ff Mon Sep 17 00:00:00 2001 From: schaffer <R.D.Schaffer@cern.ch> Date: Sun, 24 May 2020 11:00:57 +0200 Subject: [PATCH] removing most of the remaining use of AtlasFieldSvc, mostly concerns the test for solenoidOn or toroidOn --- .../TRT_Digitization/CMakeLists.txt | 3 +- .../src/TRTDigitizationTool.cxx | 11 +- .../src/TRTDigitizationTool.h | 6 +- .../src/TRTProcessingOfStraw.cxx | 12 +- .../src/TRTProcessingOfStraw.h | 5 - .../share/jobOption_ConditionsOverrider.py | 6 - .../InDetLowBetaFinder/CMakeLists.txt | 8 +- .../InDetLowBetaFinder/LowBetaAlg.h | 7 +- .../InDetLowBetaFinder/src/LowBetaAlg.cxx | 18 ++- .../InDetTrackScoringTools/CMakeLists.txt | 8 +- .../InDetAmbiScoringTool.h | 11 +- .../InDetTrtTrackScoringTool.h | 10 +- .../src/InDetAmbiScoringTool.cxx | 28 ++-- .../src/InDetTrtTrackScoringTool.cxx | 30 ++-- .../InDetTrackSelectorTool/CMakeLists.txt | 3 +- .../InDetCosmicTrackSelectorTool.h | 11 +- .../InDetDetailedTrackSelectorTool.h | 10 +- .../src/InDetCosmicTrackSelectorTool.cxx | 24 +-- .../src/InDetDetailedTrackSelectorTool.cxx | 39 +++-- .../TRT_SegmentToTrackTool/CMakeLists.txt | 3 +- .../TRT_SegmentToTrackTool.h | 11 +- .../src/TRT_SegmentToTrackTool.cxx | 19 +-- .../MagFieldConditions/CMakeLists.txt | 1 - MagneticField/MagFieldElements/CMakeLists.txt | 1 - .../MuonTrackFinderTools/CMakeLists.txt | 8 +- .../src/MuonTrackCleaner.cxx | 23 ++- .../src/MuonTrackCleaner.h | 7 +- .../src/MuonTrackExtrapolationTool.cxx | 21 ++- .../src/MuonTrackExtrapolationTool.h | 7 +- .../MuonTrackSteeringTools/CMakeLists.txt | 8 +- .../src/MooCandidateMatchingTool.cxx | 16 +- .../src/MooCandidateMatchingTool.h | 8 +- .../src/MooTrackBuilder.cxx | 48 +++++- .../src/MooTrackBuilder.h | 7 +- .../python/SoftBtagCommon.py | 3 +- .../EventTag/EventTagRawAlgs/CMakeLists.txt | 8 +- .../src/RawInfoSummaryForTagWriter.cxx | 19 ++- .../src/RawInfoSummaryForTagWriter.h | 6 +- .../BTagging/BTagging/JetBTaggerAlg.h | 6 +- .../BTagging/BTagging/JetBTaggerTool.h | 6 +- .../BTagging/BTagging/JetBTaggingAlg.h | 6 +- .../JetTagAlgs/BTagging/CMakeLists.txt | 12 +- .../BTagging/python/BTagRun3Config.py | 13 +- .../JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx | 25 +-- .../BTagging/src/JetBTaggerTool.cxx | 39 +++-- .../BTagging/src/JetBTaggingAlg.cxx | 25 +-- .../MuidCaloScatteringTools/CMakeLists.txt | 8 +- .../MuidCaloTrackStateOnSurface.h | 7 +- .../src/MuidCaloTrackStateOnSurface.cxx | 28 ++-- .../MuidTrackBuilder/CMakeLists.txt | 8 +- .../CombinedMuonTrackBuilder.h | 6 +- .../src/CombinedMuonTrackBuilder.cxx | 145 +++++++++++++++--- .../MuonCombinedBaseTools/CMakeLists.txt | 8 +- .../src/MuonCombinedFitTagTool.cxx | 19 ++- .../src/MuonCombinedFitTagTool.h | 9 +- .../TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h | 4 +- .../TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h | 3 +- .../TrkExAlgs/src/ExtrapolatorTest.cxx | 7 - .../TrkExAlgs/src/RiddersAlgorithm.cxx | 9 -- .../TrkExSTEP_Propagator/CMakeLists.txt | 2 +- .../TrkMaterialProvider/CMakeLists.txt | 8 +- .../TrkMaterialProviderTool.h | 10 +- .../src/TrkMaterialProviderTool.cxx | 27 +++- 63 files changed, 581 insertions(+), 333 deletions(-) diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/CMakeLists.txt b/InnerDetector/InDetDigitization/TRT_Digitization/CMakeLists.txt index 4c6340a2822..5fe6725f6bc 100644 --- a/InnerDetector/InDetDigitization/TRT_Digitization/CMakeLists.txt +++ b/InnerDetector/InDetDigitization/TRT_Digitization/CMakeLists.txt @@ -29,7 +29,6 @@ atlas_depends_on_subdirs( PUBLIC InnerDetector/InDetRawEvent/InDetSimData InnerDetector/InDetSimEvent InnerDetector/InDetSimUtils/TRT_PAI_Process - MagneticField/MagFieldInterfaces Simulation/HitManagement MagneticField/MagFieldElements MagneticField/MagFieldConditions ) @@ -45,7 +44,7 @@ atlas_add_component( TRT_Digitization src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${HEPPDT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${HEPPDT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} GaudiKernel AthenaBaseComps AthenaKernel PileUpToolsLib AthenaPoolUtilities GeoModelUtilities GeoPrimitives Identifier EventInfo GeneratorObjects TRT_ConditionsData TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry TRT_ReadoutGeometry InDetRawData InDetSimData InDetSimEvent MagFieldInterfaces HitManagement MagFieldElements MagFieldConditions) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${HEPPDT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} GaudiKernel AthenaBaseComps AthenaKernel PileUpToolsLib AthenaPoolUtilities GeoModelUtilities GeoPrimitives Identifier EventInfo GeneratorObjects TRT_ConditionsData TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry TRT_ReadoutGeometry InDetRawData InDetSimData InDetSimEvent HitManagement MagFieldElements MagFieldConditions) # Install files from the package: atlas_install_python_modules( python/*.py ) diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.cxx b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.cxx index 5063ecfaf8e..3f8f6c5d3ab 100644 --- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.cxx +++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.cxx @@ -155,9 +155,6 @@ StatusCode TRTDigitizationTool::initialize() //Retrieve TRT_CalDbTool ATH_CHECK(m_calDbTool.retrieve()); - // Get the magnetic field service - ATH_CHECK(m_magneticfieldsvc.retrieve()); - m_minpileuptruthEkin = m_settings->pileUpSDOsMinEkin(); // Set SDO readout range @@ -186,7 +183,7 @@ StatusCode TRTDigitizationTool::initialize() } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ATH_CHECK( m_fieldCondObjInputKey.initialize() ); + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); ////////////////////////////////////////////////////////////////////////////////////////////////////////////// return StatusCode::SUCCESS; @@ -321,14 +318,12 @@ StatusCode TRTDigitizationTool::lateInitialize(const EventContext& ctx) { ITRT_SimDriftTimeTool *pTRTsimdrifttimetool = &(*m_TRTsimdrifttimetool); - MagField::IMagFieldSvc *pMagfieldsvc = &(*m_magneticfieldsvc); const ITRT_CalDbTool* calDbTool=m_calDbTool.get(); m_pProcessingOfStraw = new TRTProcessingOfStraw( m_settings, m_manager, TRTpaiToolXe, pTRTsimdrifttimetool, - pMagfieldsvc, m_pElectronicsProcessing, m_pNoise, m_pDigConditions, @@ -361,11 +356,11 @@ StatusCode TRTDigitizationTool::processStraws(const EventContext& ctx, if (m_settings->useMagneticFieldMap()) { // Get field cache object - SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx}; + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key()); + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); return StatusCode::FAILURE; } fieldCondObj->getInitializedCache (fieldCache); diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.h b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.h index d4f4f520a58..9ad824c3832 100644 --- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.h +++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.h @@ -27,7 +27,6 @@ #include "TRTDigit.h" // For magneticfield -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "StoreGate/ReadHandleKey.h" @@ -133,10 +132,9 @@ private: ServiceHandle<PileUpMergeSvc> m_mergeSvc{this, "MergeSvc", "PileUpMergeSvc", "Merge service"}; ServiceHandle<IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc", ""}; //!< Random number service ServiceHandle<ITRT_StrawNeighbourSvc> m_TRTStrawNeighbourSvc{this, "TRT_StrawNeighbourSvc", "TRT_StrawNeighbourSvc", ""}; - ServiceHandle < MagField::IMagFieldSvc > m_magneticfieldsvc{this, "MagFieldSvc", "AtlasFieldSvc", "MagFieldSvc used by TRTProcessingOfStraw"}; // Read handle for conditions object to get the field cache - SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", - "Name of the Magnetic Field conditions object key"}; + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", + "Name of the Magnetic Field conditions object key"}; Gaudi::Property<bool> m_onlyUseContainerName{this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}; SG::ReadHandleKey<TRTUncompressedHitCollection> m_hitsContainerKey{this, "DataObjectName", "TRTUncompressedHits", "Data Object Name"}; std::string m_dataObjectName{""}; diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.cxx b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.cxx index 0747a150eef..2a5154bc67f 100644 --- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.cxx +++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.cxx @@ -41,9 +41,6 @@ #include <cmath> #include <cstdlib> //Always include this when including cmath! -// For magneticfield -#include "MagFieldInterfaces/IMagFieldSvc.h" - // Logging #include "AthenaBaseComps/AthMsgStreamMacros.h" @@ -52,7 +49,6 @@ TRTProcessingOfStraw::TRTProcessingOfStraw(const TRTDigSettings* digset, const InDetDD::TRT_DetectorManager* detmgr, ITRT_PAITool* paitoolXe, ITRT_SimDriftTimeTool* simdrifttool, - MagField::IMagFieldSvc * magfieldsvc, TRTElectronicsProcessing * ep, TRTNoise * noise, TRTDigCondBase* digcond, @@ -76,7 +72,6 @@ TRTProcessingOfStraw::TRTProcessingOfStraw(const TRTDigSettings* digset, m_pDigConditions(digcond), m_pParticleTable(pdt), m_alreadywarnedagainstpdg0(false), - m_magneticfieldsvc(magfieldsvc), m_msg("TRTProcessingOfStraw"), m_id_helper(trt_id) @@ -609,11 +604,8 @@ void TRTProcessingOfStraw::ClustersToDeposits (MagField::AtlasFieldCache& fieldC globalPosition[1]=TRThitGlobalPos[1]*CLHEP::mm; globalPosition[2]=TRThitGlobalPos[2]*CLHEP::mm; - // MT Field cache is stored in cache - - // MT version uses cache, temporarily keep old version - if (fieldCache.useNewBfieldCache()) fieldCache.getField (globalPosition.data(), mField.data()); - else m_magneticfieldsvc->getField(&globalPosition, &mField); + // MT Field cache is stored in cache + fieldCache.getField (globalPosition.data(), mField.data()); map_x2 = mField.x()*mField.x(); // would be zero for a uniform field map_y2 = mField.y()*mField.y(); // would be zero for a uniform field diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.h b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.h index 9f860212f34..fd4702e8895 100644 --- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.h +++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.h @@ -39,8 +39,6 @@ class TRTUncompressedHit; class ITRT_PAITool; class ITRT_SimDriftTimeTool; -namespace MagField { class IMagFieldSvc; } - namespace InDetDD { class TRT_DetectorManager; } class TRTDigSettings; @@ -57,7 +55,6 @@ public: const InDetDD::TRT_DetectorManager*, ITRT_PAITool*, ITRT_SimDriftTimeTool*, - MagField::IMagFieldSvc * magfieldsvc, TRTElectronicsProcessing * ep, TRTNoise * noise, TRTDigCondBase* digcond, @@ -237,8 +234,6 @@ private: Amg::Vector3D getGlobalPosition( int hitID, const TimedHitPtr<TRTUncompressedHit> *theHit ); - //Magnetic field stuff - MagField::IMagFieldSvc* m_magneticfieldsvc; mutable Athena::MsgStreamMember m_msg; protected: diff --git a/InnerDetector/InDetExample/InDetAlignExample/share/jobOption_ConditionsOverrider.py b/InnerDetector/InDetExample/InDetAlignExample/share/jobOption_ConditionsOverrider.py index 83272832e54..46d17ae2b75 100644 --- a/InnerDetector/InDetExample/InDetAlignExample/share/jobOption_ConditionsOverrider.py +++ b/InnerDetector/InDetExample/InDetAlignExample/share/jobOption_ConditionsOverrider.py @@ -166,12 +166,6 @@ if loadInDetRec_Options["TRTCalibT0TagCos"]: if loadInDetRec_Options["TRTCalibRtTagCos"]: conddb.addOverride('/TRT/Calib/RT',loadInDetRec_Options["TRTCalibRtTagCos"]) -#Trying to fix the Database problem -if loadInDetRec_Options["globalTag"] == "OFLCOND-RUN12-SDR-14": - conddb.addOverride('/PIXEL/PixdEdx','PixdEdx_January2011_mc-000-00') - from AthenaCommon.CfgGetter import getService - getService("AtlasFieldSvc").UseDCS = False - doJiveXML=False if doJiveXML: ToolSvc.TrackRetriever.OtherTrackCollections =["CombinedInDetTracks", "CombinedInDetTracks_CTB"] diff --git a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/CMakeLists.txt b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/CMakeLists.txt index b86f1adf2ed..51a7228809b 100644 --- a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/CMakeLists.txt +++ b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/CMakeLists.txt @@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC Control/AthenaBaseComps GaudiKernel InnerDetector/InDetConditions/TRT_ConditionsServices - MagneticField/MagFieldInterfaces PRIVATE Control/StoreGate InnerDetector/InDetConditions/TRT_ConditionsData @@ -21,7 +20,10 @@ atlas_depends_on_subdirs( PUBLIC Tracking/TrkEvent/TrkParameters Event/xAOD/xAODTracking Tracking/TrkEvent/TrkRIO_OnTrack - Tracking/TrkEvent/TrkTrack ) + Tracking/TrkEvent/TrkTrack + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( ROOT COMPONENTS Minuit RIO Core Tree MathCore Hist pthread MathMore Minuit2 Matrix Physics HistPainter Rint ) @@ -31,7 +33,7 @@ atlas_add_component( InDetLowBetaFinder src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel TRT_ConditionsServicesLib MagFieldInterfaces StoreGateLib SGtests TRT_ConditionsData InDetIdentifier InDetLowBetaInfo InDetRIO_OnTrack TrkParameters xAODTracking TrkRIO_OnTrack TrkTrack ) + LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel TRT_ConditionsServicesLib StoreGateLib SGtests TRT_ConditionsData InDetIdentifier InDetLowBetaInfo InDetRIO_OnTrack TrkParameters xAODTracking TrkRIO_OnTrack TrkTrack MagFieldElements MagFieldConditions ) # Install files from the package: atlas_install_headers( InDetLowBetaFinder ) diff --git a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/InDetLowBetaFinder/LowBetaAlg.h b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/InDetLowBetaFinder/LowBetaAlg.h index 646454acfc8..15a424e1651 100644 --- a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/InDetLowBetaFinder/LowBetaAlg.h +++ b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/InDetLowBetaFinder/LowBetaAlg.h @@ -24,7 +24,9 @@ author Christopher.Marino <Christopher.Marino@cern.ch> #include "AthenaBaseComps/AthAlgorithm.h" #include "TRT_ConditionsServices/ITRT_CalDbTool.h" #include "GaudiKernel/ToolHandle.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// MagField cache +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" +#include "MagFieldElements/AtlasFieldCache.h" #include "xAODTracking/TrackParticleContainer.h" #include "InDetLowBetaInfo/InDetLowBetaContainer.h" #include "TrkTrack/TrackCollection.h" @@ -84,7 +86,8 @@ namespace InDet /** trying to get ahold of the TRT calib DB: */ ToolHandle<ITRT_CalDbTool> m_trtconddbTool; - ServiceHandle<MagField::IMagFieldSvc> m_fieldServiceHandle; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; private: // Functions/variables for using TrtToolsBetaLiklihood, see TrtToolsWrapper.cxx diff --git a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/src/LowBetaAlg.cxx b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/src/LowBetaAlg.cxx index 14a43596e32..bf4f0d3c9a2 100644 --- a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/src/LowBetaAlg.cxx +++ b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/src/LowBetaAlg.cxx @@ -43,7 +43,6 @@ namespace InDet m_trackParticleCollection("InDetTrackParticles"), m_InDetLowBetaOutputName("InDetLowBetaCandidates"), m_trtconddbTool("TRT_CalDbTool",this), - m_fieldServiceHandle("AtlasFieldSvc",name), m_TrtTool(0), m_TRTdEdxTool(), m_TrtToolsSuccess{}, @@ -58,7 +57,6 @@ namespace InDet declareProperty("CSMP_TimingOffset", m_TimingOffset); declareProperty("InDetLowBetaOutputName", m_InDetLowBetaOutputName); declareProperty("MC_flag", m_mcswitch); - declareProperty("AtlasFieldSvc", m_fieldServiceHandle, "Magnet Field used by this algorithm"); declareProperty("TRTCalDbTool", m_trtconddbTool); declareProperty("TRT_ToT_dEdx_Tool", m_TRTdEdxTool); @@ -66,7 +64,6 @@ namespace InDet // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * StatusCode LowBetaAlg::initialize(){ - ATH_CHECK( m_fieldServiceHandle.retrieve() ); ATH_CHECK(detStore()->retrieve(m_trtId, "TRT_ID")); m_TrtToolInitSuccess = !(initializeTrtToolBetaLiklihood().isFailure()); @@ -75,6 +72,9 @@ namespace InDet ATH_CHECK( m_trackParticleCollection.initialize() ); ATH_CHECK( m_UnslimmedTracksContainerName.initialize() ); ATH_CHECK( m_InDetLowBetaOutputName.initialize() ); + // Read handle for AtlasFieldCacheCondObj + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); + return StatusCode::SUCCESS; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -87,7 +87,17 @@ namespace InDet return StatusCode::FAILURE; } - if (m_fieldServiceHandle->solenoidOn()){//B field + EventContext ctx = Gaudi::Hive::currentContext(); + 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); + + if (fieldCache.solenoidOn()){//B field if (!m_trackParticleCollection.key().empty()){ diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt index 1152422aa3a..e67789668db 100644 --- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt @@ -19,13 +19,15 @@ atlas_depends_on_subdirs( PUBLIC InnerDetector/InDetDetDescr/InDetIdentifier InnerDetector/InDetRecEvent/InDetRIO_OnTrack InnerDetector/InDetRecTools/InDetRecToolInterfaces - MagneticField/MagFieldInterfaces Tracking/TrkEvent/TrkParameters Tracking/TrkEvent/TrkPseudoMeasurementOnTrack Tracking/TrkEvent/TrkTrack Tracking/TrkEvent/TrkTrackSummary Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkEvent/TrkCaloClusterROI ) + Tracking/TrkEvent/TrkCaloClusterROI + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) @@ -41,7 +43,7 @@ atlas_add_component( InDetTrackScoringTools src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkEventPrimitives TrkToolInterfaces GeoPrimitives InDetIdentifier InDetRIO_OnTrack InDetRecToolInterfaces MagFieldInterfaces TrkParameters TrkPseudoMeasurementOnTrack TrkTrack TrkTrackSummary TrkExInterfaces TrkCaloClusterROI) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkEventPrimitives TrkToolInterfaces GeoPrimitives InDetIdentifier InDetRIO_OnTrack InDetRecToolInterfaces TrkParameters TrkPseudoMeasurementOnTrack TrkTrack TrkTrackSummary TrkExInterfaces TrkCaloClusterROI MagFieldElements MagFieldConditions) # Install files from the package: atlas_install_headers( InDetTrackScoringTools ) diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetAmbiScoringTool.h b/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetAmbiScoringTool.h index a6bbacd6374..3534b80f36f 100755 --- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetAmbiScoringTool.h +++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetAmbiScoringTool.h @@ -20,6 +20,9 @@ #include "TrkParameters/TrackParameters.h" #include "AthenaKernel/CLASS_DEF.h" #include "AthenaKernel/IOVSvcDefs.h" +// MagField cache +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" +#include "MagFieldElements/AtlasFieldCache.h" #include <vector> #include <string> #include "BeamSpotConditionsData/BeamSpotData.h" @@ -32,10 +35,6 @@ namespace Trk { } -namespace MagField { - class IMagFieldSvc; -} - namespace InDet { class ITrtDriftCircleCutTool; @@ -85,7 +84,9 @@ class InDetAmbiScoringTool : virtual public Trk::ITrackScoringTool, SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }; ToolHandle<Trk::IExtrapolator> m_extrapolator; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; + + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; /** use the scoring tuned to Ambiguity processing or not */ diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetTrtTrackScoringTool.h b/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetTrtTrackScoringTool.h index 40a0c6b8624..3656ca2f99a 100755 --- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetTrtTrackScoringTool.h +++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetTrtTrackScoringTool.h @@ -12,6 +12,9 @@ #include "TrkEventPrimitives/TrackScore.h" #include "TrkToolInterfaces/ITrackScoringTool.h" #include "TrkToolInterfaces/ITrackSummaryTool.h" +// MagField cache +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" +#include "MagFieldElements/AtlasFieldCache.h" #include <vector> #include <string> @@ -20,9 +23,6 @@ namespace Trk { class TrackSummary; } -namespace MagField { - class IMagFieldSvc; -} class TRT_ID ; @@ -77,9 +77,9 @@ private: ToolHandle<Trk::ITrackSummaryTool> m_trkSummaryTool; /** Returns minimum number of expected TRT drift circles depending on eta. */ ToolHandle<ITrtDriftCircleCutTool> m_selectortool; - /** to query magnetic field configuration */ - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; /** cuts for selecting good tracks*/ int m_minTRTonTrk; //!< minimum number of TRT hits diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetAmbiScoringTool.cxx b/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetAmbiScoringTool.cxx index 2c605858527..2ae8ce75a52 100755 --- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetAmbiScoringTool.cxx +++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetAmbiScoringTool.cxx @@ -16,7 +16,6 @@ #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh" #include "TMath.h" #include <vector> -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "GeoPrimitives/GeoPrimitives.h" #include "TrkCaloClusterROI/CaloClusterROI.h" #include "TrkCaloClusterROI/CaloClusterROI_Collection.h" @@ -46,8 +45,7 @@ InDet::InDetAmbiScoringTool::InDetAmbiScoringTool(const std::string& t, m_trkSummaryTool("Trk::TrackSummaryTool", this), m_selectortool("InDet::InDetTrtDriftCircleCutTool", this), m_summaryTypeScore(Trk::numberOfTrackSummaryTypes), - m_extrapolator("Trk::Extrapolator", this), - m_magFieldSvc("AtlasFieldSvc",n) + m_extrapolator("Trk::Extrapolator", this) { declareInterface<Trk::ITrackScoringTool>(this); @@ -82,7 +80,6 @@ InDet::InDetAmbiScoringTool::InDetAmbiScoringTool(const std::string& t, declareProperty("Extrapolator", m_extrapolator); declareProperty("SummaryTool" , m_trkSummaryTool); declareProperty("DriftCircleCutTool",m_selectortool ); - declareProperty("MagFieldSvc", m_magFieldSvc); declareProperty("maxRPhiImpEM", m_maxRPhiImpEM = 50. ); declareProperty("doEmCaloSeed", m_useEmClusSeed = true ); @@ -154,20 +151,13 @@ StatusCode InDet::InDetAmbiScoringTool::initialize() ATH_CHECK(m_beamSpotKey.initialize()); - sc = m_magFieldSvc.retrieve(); - if (sc.isFailure()){ - msg(MSG::FATAL) << "Failed to retrieve " << m_magFieldSvc << endmsg; - return StatusCode::FAILURE; - } - else { - msg(MSG::DEBUG) << "Retrieved " << m_magFieldSvc << endmsg; - } - if (m_useAmbigFcn && m_useTRT_AmbigFcn) { msg(MSG::FATAL) << "Both on, normal ambi funciton and the one for back tracking, configuration problem, not recoverable" << endmsg; return StatusCode::FAILURE; } + // Read handle for AtlasFieldCacheCondObj + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); if (m_useAmbigFcn || m_useTRT_AmbigFcn) setupScoreModifiers(); @@ -310,7 +300,17 @@ Trk::TrackScore InDet::InDetAmbiScoringTool::simpleScore( const Trk::Track& trac const Trk::TrackParameters* input = track.trackParameters()->front(); // cuts on parameters - if (m_magFieldSvc->solenoidOn()) { + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("simpleScore: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return Trk::TrackScore(0); + } + MagField::AtlasFieldCache fieldCache; + fieldCondObj->getInitializedCache (fieldCache); + + if (fieldCache.solenoidOn()){ if (fabs(input->pT()) < m_minPt) { ATH_MSG_DEBUG ("Track pt < "<<m_minPt<<", reject it"); return Trk::TrackScore(0); diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetTrtTrackScoringTool.cxx b/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetTrtTrackScoringTool.cxx index 32efae3af46..7418d8c3df4 100755 --- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetTrtTrackScoringTool.cxx +++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetTrtTrackScoringTool.cxx @@ -14,7 +14,6 @@ #include "InDetIdentifier/TRT_ID.h" #include "TMath.h" #include <vector> -#include "MagFieldInterfaces/IMagFieldSvc.h" //--------------------------------------------------------------------------------------------------------------------- @@ -31,8 +30,7 @@ InDet::InDetTrtTrackScoringTool::InDetTrtTrackScoringTool(const std::string& t, m_maxTrtFittedRatio(-1), m_summaryTypeScore(Trk::numberOfTrackSummaryTypes), m_trkSummaryTool("Trk::TrackSummaryTool"), - m_selectortool("InDet::InDetTrtDriftCircleCutTool"), - m_magFieldSvc("AtlasFieldSvc",n) + m_selectortool("InDet::InDetTrtDriftCircleCutTool") { declareInterface<Trk::ITrackScoringTool>(this); @@ -50,7 +48,6 @@ InDet::InDetTrtTrackScoringTool::InDetTrtTrackScoringTool(const std::string& t, declareProperty("UseParameterization", m_parameterization = true); declareProperty("OldTransitionLogic" , m_oldLogic = false); declareProperty("minTRTPrecisionFraction", m_minTRTprecision = 0.5); - declareProperty("MagFieldSvc", m_magFieldSvc); m_summaryTypeScore[Trk::numberOfTRTHits] = 1; // 10 straws ~ 1 SCT m_summaryTypeScore[Trk::numberOfTRTHighThresholdHits] = 0; // addition for being TR @@ -87,15 +84,6 @@ StatusCode InDet::InDetTrtTrackScoringTool::initialize() msg(MSG::DEBUG) << "Retrieved tool " << m_selectortool << endmsg; } - sc = m_magFieldSvc.retrieve(); - if (sc.isFailure()){ - msg(MSG::FATAL) << "Failed to retrieve " << m_magFieldSvc << endmsg; - return StatusCode::FAILURE; - } - else { - msg(MSG::DEBUG) << "Retrieved " << m_magFieldSvc << endmsg; - } - sc = detStore()->retrieve(m_trtId, "TRT_ID"); if (sc.isFailure()){ msg(MSG::FATAL) << "Could not get TRT_ID helper !" << endmsg; @@ -104,6 +92,9 @@ StatusCode InDet::InDetTrtTrackScoringTool::initialize() if(m_useAmbigFcn) setupTRT_ScoreModifiers(); + // Read handle for AtlasFieldCacheCondObj + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); + return StatusCode::SUCCESS; } @@ -163,7 +154,18 @@ Trk::TrackScore InDet::InDetTrtTrackScoringTool::simpleScore( const Trk::Track& const Trk::TrackParameters* input = track.trackParameters()->front(); ///Reject track below the pT cut - if (m_magFieldSvc->solenoidOn()) { + + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("simpleScore: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return Trk::TrackScore(0); + } + MagField::AtlasFieldCache fieldCache; + fieldCondObj->getInitializedCache (fieldCache); + + if (fieldCache.solenoidOn()){//B field if(input->pT() < m_ptmin) { ATH_MSG_DEBUG( "Reject track below Pt cut !"); return Trk::TrackScore(0); diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt index 1545b9f81fd..52935ffe521 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt @@ -21,7 +21,6 @@ atlas_depends_on_subdirs( PUBLIC Event/EventPrimitives InnerDetector/InDetConditions/TRT_ConditionsServices InnerDetector/InDetRecEvent/InDetRIO_OnTrack - MagneticField/MagFieldInterfaces Tracking/TrkDetDescr/TrkSurfaces Tracking/TrkEvent/TrkParticleBase Tracking/TrkEvent/TrkRIO_OnTrack @@ -40,7 +39,7 @@ atlas_add_component( InDetTrackSelectorTool src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AthContainers GeoPrimitives EventPrimitives TRT_ConditionsServicesLib InDetRIO_OnTrack MagFieldInterfaces TrkSurfaces TrkParticleBase TrkRIO_OnTrack TrkTrack TrkTrackSummary VxVertex TrkExInterfaces ) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AthContainers GeoPrimitives EventPrimitives TRT_ConditionsServicesLib InDetRIO_OnTrack TrkSurfaces TrkParticleBase TrkRIO_OnTrack TrkTrack TrkTrackSummary VxVertex TrkExInterfaces ) # Install files from the package: atlas_install_headers( InDetTrackSelectorTool ) diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetCosmicTrackSelectorTool.h b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetCosmicTrackSelectorTool.h index 33b7281ebe3..cca93adf1f1 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetCosmicTrackSelectorTool.h +++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetCosmicTrackSelectorTool.h @@ -11,19 +11,18 @@ #include "TrkToolInterfaces/ITrackSelectorTool.h" #include "TrkEventPrimitives/ParticleHypothesis.h" #include "TrkParameters/TrackParameters.h" +// MagField cache +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" +#include "MagFieldElements/AtlasFieldCache.h" namespace Trk { - class IMagneticFieldTool; class ITrackSummaryTool; class Vertex; class TrackParticleBase; class Track; } -namespace MagField { - class IMagFieldSvc; -} namespace InDet { @@ -67,8 +66,8 @@ namespace InDet ToolHandle<Trk::ITrackSummaryTool> m_trackSumTool; bool m_trackSumToolAvailable; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; - + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; }; //end of class definitions diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetDetailedTrackSelectorTool.h b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetDetailedTrackSelectorTool.h index f2843391c79..1d6522b977a 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetDetailedTrackSelectorTool.h +++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetDetailedTrackSelectorTool.h @@ -13,6 +13,9 @@ #include "xAODTracking/TrackParticle.h" #include "xAODTracking/VertexFwd.h" #include "BeamSpotConditionsData/BeamSpotData.h" +// MagField cache +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" +#include "MagFieldElements/AtlasFieldCache.h" /** * @file InDetDetailedTrackSelectorTool.h @@ -30,13 +33,9 @@ */ -namespace MagField { - class IMagFieldSvc; -} namespace Trk { - class IMagneticFieldTool; class ITrackSummaryTool; class IExtrapolator; class Vertex; @@ -153,10 +152,11 @@ namespace InDet ToolHandle<Trk::ITrackSummaryTool> m_trackSumTool; //!< Track summary tool ToolHandle<Trk::IExtrapolator> m_extrapolator; //!< Extrapolator tool SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; ToolHandle<ITrtDriftCircleCutTool> m_trtDCTool; //!< Tool to get eta dependent cut on number of TRT hits ToolHandle< InDet::IInDetTestBLayerTool > m_inDetTestBLayerTool; //Tool to test if the track crosses a dead module on the b-layer + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; bool m_trackSumToolAvailable; diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetCosmicTrackSelectorTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetCosmicTrackSelectorTool.cxx index 49c81b0b256..4bc59141999 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetCosmicTrackSelectorTool.cxx +++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetCosmicTrackSelectorTool.cxx @@ -6,7 +6,6 @@ // forward declares #include "TrkToolInterfaces/ITrackSummaryTool.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "VxVertex/Vertex.h" #include "TrkTrack/Track.h" #include "TrkParticleBase/TrackParticleBase.h" @@ -24,8 +23,7 @@ namespace InDet //---------------------------------------------------------------------------- InDetCosmicTrackSelectorTool::InDetCosmicTrackSelectorTool(const std::string& t, const std::string& n, const IInterface* p) : AthAlgTool(t,n,p), - m_trackSumToolAvailable(false), - m_magFieldSvc("AtlasFieldSvc",n) + m_trackSumToolAvailable(false) { declareInterface<ITrackSelectorTool>(this); declareProperty("maxZ0", m_maxZ0 = 150.); @@ -38,7 +36,6 @@ namespace InDet declareProperty("numberOfSiliconHitsTop", m_numberOfSiHitsTop = -1); declareProperty("numberOfSiliconHitsBottom", m_numberOfSiHitsBottom = -1); declareProperty("TrackSummaryTool", m_trackSumTool); - declareProperty("MagFieldSvc", m_magFieldSvc); } //---------------------------------------------------------------------------- @@ -64,11 +61,8 @@ namespace InDet m_trackSumToolAvailable = true; } - if (m_magFieldSvc.retrieve().isFailure()) { - msg(MSG::FATAL) << "Failed to retrieve tool " << m_magFieldSvc << endmsg; - return StatusCode::FAILURE; - } - ATH_MSG_INFO("Retrieved tool "<<m_magFieldSvc); + // Read handle for AtlasFieldCacheCondObj + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); return StatusCode::SUCCESS; } @@ -236,7 +230,17 @@ namespace InDet } // only check pt if mag. field is on - if (m_magFieldSvc->solenoidOn()) { + EventContext ctx = Gaudi::Hive::currentContext(); + 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 false; + } + MagField::AtlasFieldCache fieldCache; + fieldCondObj->getInitializedCache (fieldCache); + + if (fieldCache.solenoidOn()){//B field if (trackParameters[Trk::qOverP] == 0.) { ATH_MSG_DEBUG("Track rejected because of qOverP == 0."); return false; diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx index 20e1028bac3..aa9374e1e9d 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx +++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx @@ -12,7 +12,6 @@ #include "TrkTrack/Track.h" #include "TrkTrackSummary/TrackSummary.h" #include "TrkParticleBase/TrackParticleBase.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "InDetRecToolInterfaces/ITrtDriftCircleCutTool.h" #include "InDetRecToolInterfaces/IInDetTestBLayerTool.h" @@ -39,7 +38,6 @@ namespace InDet : AthAlgTool(t,n,p) , m_trackSumTool("Trk::TrackSummaryTool", this) , m_extrapolator("Trk::Extrapolator", this) - , m_magFieldSvc("AtlasFieldSvc",n) , m_trtDCTool("InDet::InDetTrtDriftCircleCutTool", this) , m_inDetTestBLayerTool("", this) , m_trackSumToolAvailable(true) @@ -107,7 +105,6 @@ namespace InDet declareProperty("TrackSummaryTool" , m_trackSumTool); declareProperty("Extrapolator" , m_extrapolator); - declareProperty("MagFieldSvc", m_magFieldSvc); declareProperty("TrtDCCutTool" , m_trtDCTool); declareProperty("InDetTestBLayerTool", m_inDetTestBLayerTool); @@ -153,12 +150,10 @@ namespace InDet }else{ m_trtDCTool.disable(); } - ATH_CHECK(m_magFieldSvc.retrieve()); - if(m_inDetTestBLayerTool.empty()){ - ATH_MSG_INFO(" The BLayerTool not specified, turning off cut. "); - } else { - ATH_CHECK( m_inDetTestBLayerTool.retrieve()); - } + + // Read handle for AtlasFieldCacheCondObj + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); + ATH_MSG_INFO("Using cuts on the number of Silicon hits"); if(m_usePtDependentCuts) { //checking whether sizes of cuts and pt interval expressed in vectors match @@ -688,7 +683,18 @@ namespace InDet const AmgVector(5)& perigeeParms = track->parameters(); - if (m_magFieldSvc->solenoidOn()) { + // only check pt if mag. field is on + EventContext ctx = Gaudi::Hive::currentContext(); + 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 false; + } + MagField::AtlasFieldCache fieldCache; + fieldCondObj->getInitializedCache (fieldCache); + + if (fieldCache.solenoidOn()){//B field if (perigeeParms[Trk::qOverP] == 0.) { ATH_MSG_DEBUG("Track rejected because of qOverP == 0."); return false; @@ -1072,7 +1078,18 @@ namespace InDet { const AmgVector(5)& perigeeParms = myPerigee.parameters(); - if (m_magFieldSvc->solenoidOn()) { + // only check pt if mag. field is on + EventContext ctx = Gaudi::Hive::currentContext(); + 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 false; + } + MagField::AtlasFieldCache fieldCache; + fieldCondObj->getInitializedCache (fieldCache); + + if (fieldCache.solenoidOn()){//B field if (perigeeParms[Trk::qOverP] == 0.) { ATH_MSG_DEBUG("Track rejected because of perigee qOverP == 0."); return false; diff --git a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt index 0a359dbd9b2..996ce28a2b3 100644 --- a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt @@ -14,7 +14,6 @@ atlas_depends_on_subdirs( PUBLIC PRIVATE InnerDetector/InDetDetDescr/InDetIdentifier InnerDetector/InDetRecEvent/InDetRIO_OnTrack - MagneticField/MagFieldInterfaces Tracking/TrkEvent/TrkPseudoMeasurementOnTrack Tracking/TrkExtrapolation/TrkExInterfaces Tracking/TrkFitter/TrkFitterInterfaces @@ -28,7 +27,7 @@ atlas_depends_on_subdirs( PUBLIC atlas_add_component( TRT_SegmentToTrackTool src/*.cxx src/components/*.cxx - LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkEventPrimitives InDetIdentifier InDetRIO_OnTrack MagFieldInterfaces TrkPseudoMeasurementOnTrack TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces MagFieldElements MagFieldConditions) + LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkEventPrimitives InDetIdentifier InDetRIO_OnTrack TrkPseudoMeasurementOnTrack TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces MagFieldElements MagFieldConditions) # Install files from the package: atlas_install_headers( TRT_SegmentToTrackTool ) diff --git a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool.h b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool.h index 37374984bd1..3604bbafe59 100644 --- a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool.h +++ b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool.h @@ -53,12 +53,6 @@ namespace Trk { } -namespace MagField { - - class IMagFieldSvc; - -} - namespace InDet { //class TrackSegment; @@ -111,12 +105,11 @@ namespace InDet { {this, "TrackSummaryTool", "InDetTrackSummaryToolNoHoleSearch"}; ToolHandle<Trk::ITrackScoringTool> m_scoringTool ; //!< Track scoring tool - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc ; //!< Magnetic field service //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Read handle for conditions object to get the field cache - SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", - "Name of the Magnetic Field conditions object key"}; + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", + "Name of the Magnetic Field conditions object key"}; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx index 77d6dadc382..653fef22953 100644 --- a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx +++ b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx @@ -14,8 +14,6 @@ #include "TrkExInterfaces/IExtrapolator.h" //Scoring tool #include "TrkToolInterfaces/ITrackScoringTool.h" -//Magnetic field tool -#include "MagFieldInterfaces/IMagFieldSvc.h" using Amg::Vector3D; using CLHEP::mm; @@ -31,7 +29,6 @@ namespace InDet { m_fitterTool("Trk::KalmanFitter/InDetTrackFitter"), m_extrapolator ("Trk::Extrapolator/InDetExtrapolator"), m_scoringTool("Trk::TrackScoringTool/TrackScoringTool"), - m_magFieldSvc("AtlasFieldSvc", name), m_trtId(nullptr) { declareInterface<InDet::ITRT_SegmentToTrackTool>( this ); @@ -49,9 +46,6 @@ namespace InDet { declareProperty("RefitterTool" ,m_fitterTool ); //Track refit tool declareProperty("Extrapolator" ,m_extrapolator ); //Extrapolator tool declareProperty("ScoringTool" ,m_scoringTool ); //Track scoring tool - - declareProperty( "MagFieldSvc" ,m_magFieldSvc ); //Magnetic field tool - } TRT_SegmentToTrackTool::~TRT_SegmentToTrackTool() @@ -82,11 +76,9 @@ namespace InDet { // ATH_CHECK( m_scoringTool.retrieve() ); - ATH_CHECK( m_magFieldSvc.retrieve() ); - ATH_CHECK( detStore()->retrieve(m_trtId, "TRT_ID") ); //////////////////////////////////////////////////////////////////////////////// - ATH_CHECK( m_fieldCondObjInputKey.initialize()); + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize()); //////////////////////////////////////////////////////////////////////////////// // Get output print level @@ -462,17 +454,16 @@ namespace InDet { MagField::AtlasFieldCache fieldCache; // Get field cache object - SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx}; + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("segToTrack: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key()); + ATH_MSG_ERROR("segToTrack: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); return 0; } fieldCondObj->getInitializedCache (fieldCache); - // MT version uses cache, temporarily keep old version - if (fieldCache.useNewBfieldCache()) fieldCache.getField (Amg::Vector3D(.5*(pos1+pos2)).data(),field1.data()); - else m_magFieldSvc->getField(Amg::Vector3D(.5*(pos1+pos2)).data(),field1.data()); + // MT version uses cache + fieldCache.getField (Amg::Vector3D(.5*(pos1+pos2)).data(),field1.data()); field1 *= m_fieldUnitConversion; // field in Tesla diff --git a/MagneticField/MagFieldConditions/CMakeLists.txt b/MagneticField/MagFieldConditions/CMakeLists.txt index 1a0c270a9d2..70586fd0b15 100644 --- a/MagneticField/MagFieldConditions/CMakeLists.txt +++ b/MagneticField/MagFieldConditions/CMakeLists.txt @@ -8,7 +8,6 @@ atlas_subdir( MagFieldConditions ) # Declare the package's dependencies: atlas_depends_on_subdirs( PUBLIC Control/StoreGate - MagneticField/MagFieldInterfaces GaudiKernel PRIVATE MagneticField/MagFieldElements diff --git a/MagneticField/MagFieldElements/CMakeLists.txt b/MagneticField/MagFieldElements/CMakeLists.txt index 13dde183f9d..f556de2b9ab 100644 --- a/MagneticField/MagFieldElements/CMakeLists.txt +++ b/MagneticField/MagFieldElements/CMakeLists.txt @@ -8,7 +8,6 @@ atlas_subdir( MagFieldElements ) # Declare the package's dependencies: atlas_depends_on_subdirs( PUBLIC Control/AthenaBaseComps - MagneticField/MagFieldInterfaces Control/CxxUtils Event/EventPrimitives PRIVATE diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/CMakeLists.txt b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/CMakeLists.txt index 01a5c1ab2dd..4bf97963619 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/CMakeLists.txt +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/CMakeLists.txt @@ -16,7 +16,6 @@ atlas_depends_on_subdirs( PRIVATE DetectorDescription/RoiDescriptor Event/EventPrimitives GaudiKernel - MagneticField/MagFieldInterfaces MuonSpectrometer/MuonAlignment/MuonAlignError/MuonAlignErrorBase MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry MuonSpectrometer/MuonIdHelpers @@ -50,7 +49,10 @@ atlas_depends_on_subdirs( PRIVATE Tracking/TrkFitter/TrkFitterInterfaces Tracking/TrkTools/TrkToolInterfaces Tracking/TrkUtilityPackages/TrkDriftCircleMath - MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData ) + MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( Eigen ) @@ -61,5 +63,5 @@ atlas_add_component( MuonTrackFinderTools src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests GeoPrimitives IRegionSelector Identifier RoiDescriptor EventPrimitives GaudiKernel MagFieldInterfaces MuonAlignErrorBase MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonPrepRawData MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonStationIntersectSvcLib MuonSegmentMakerUtils TrkDetDescrInterfaces TrkDetElementBase TrkGeometry TrkSurfaces TrkVolumes TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkMeasurementBase TrkParameters TrkPseudoMeasurementOnTrack TrkRIO_OnTrack TrkRoad TrkTrack TrkSegment TrkTrackSummary TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces TrkDriftCircleMath MuonCondData ) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests GeoPrimitives IRegionSelector Identifier RoiDescriptor EventPrimitives GaudiKernel MuonAlignErrorBase MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonPrepRawData MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonStationIntersectSvcLib MuonSegmentMakerUtils TrkDetDescrInterfaces TrkDetElementBase TrkGeometry TrkSurfaces TrkVolumes TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkMeasurementBase TrkParameters TrkPseudoMeasurementOnTrack TrkRIO_OnTrack TrkRoad TrkTrack TrkSegment TrkTrackSummary TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces TrkDriftCircleMath MuonCondData MagFieldElements MagFieldConditions ) diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.cxx index 6d435c4271b..a7bd1a1de08 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.cxx @@ -56,7 +56,7 @@ namespace Muon { ATH_CHECK( m_mdtRotCreator.retrieve() ); ATH_CHECK( m_compRotCreator.retrieve() ); ATH_CHECK( m_measurementUpdator.retrieve() ); - ATH_CHECK( m_magFieldSvc.retrieve() ); + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); return StatusCode::SUCCESS; } @@ -883,7 +883,20 @@ namespace Muon { state.nIdHits = 0; state.nPseudoMeasurements = 0; state.nPhiConstraints = 0; - state.slFit = !m_magFieldSvc->toroidOn() || m_edmHelperSvc->isSLTrack( track ); + + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return; + } + fieldCondObj->getInitializedCache (fieldCache); + + state.slFit = !fieldCache.toroidOn() || m_edmHelperSvc->isSLTrack( track ); // loop over track and calculate residuals const DataVector<const Trk::TrackStateOnSurface>* states = track.trackStateOnSurfaces(); @@ -1319,7 +1332,7 @@ namespace Muon { } // update sl fit configuration if track has ID hits or vertex constraint - if( state.slFit && (state.hasVertexConstraint || state.nIdHits > 0 ) && m_magFieldSvc->solenoidOn() ) { + if( state.slFit && (state.hasVertexConstraint || state.nIdHits > 0 ) && fieldCache.solenoidOn() ) { state.slFit = false; } @@ -1327,9 +1340,9 @@ namespace Muon { if(state.hasVertexConstraint || state.nIdHits ) { if( state.hasVertexConstraint ) ATH_MSG_DEBUG(" Track has vertex contraint:"); if( state.nIdHits > 0 ) ATH_MSG_DEBUG(" Track has ID Hits: " << state.nIdHits); - if( m_magFieldSvc->solenoidOn() ) ATH_MSG_DEBUG(" Solenoid On"); + if( fieldCache.solenoidOn() ) ATH_MSG_DEBUG(" Solenoid On"); else ATH_MSG_DEBUG(" Solenoid Off"); - if( m_magFieldSvc->toroidOn() ) ATH_MSG_DEBUG(" Toroid On"); + if( fieldCache.toroidOn() ) ATH_MSG_DEBUG(" Toroid On"); else ATH_MSG_DEBUG(" Toroid Off"); if( state.slFit ) ATH_MSG_DEBUG(" Use SL fit"); else ATH_MSG_DEBUG(" Use curved fit"); diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.h index 86a81d42839..f06d4927d2c 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.h +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.h @@ -23,7 +23,8 @@ #include "TrkToolInterfaces/IResidualPullCalculator.h" #include "TrkToolInterfaces/IUpdator.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "TrkParameters/TrackParameters.h" #include <string> @@ -289,8 +290,10 @@ namespace Muon { "Handle to the service providing the IMuonEDMHelperSvc interface" }; ToolHandle<Muon::MuonEDMPrinterTool> m_printer {this, "Printer", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"}; ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc {this, "MagFieldSvc", "AtlasFieldSvc"}; ToolHandle<Trk::IExtrapolator> m_extrapolator {this, "Extrapolator", "Trk::Extrapolator/AtlasExtrapolator"}; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", + "Name of the Magnetic Field conditions object key"}; Gaudi::Property<bool> m_useMdtResiCut {this, "UseMdtResiCut", false}; Gaudi::Property<double> m_chi2Cut {this, "Chi2Cut", 100.}; diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.cxx index fca2de882fd..501920bf2cd 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.cxx @@ -32,12 +32,10 @@ namespace Muon { m_atlasExtrapolator("Trk::Extrapolator/AtlasExtrapolator"), m_muonExtrapolator("Trk::Extrapolator/MuonExtrapolator"), m_muonExtrapolator2("Trk::Extrapolator/MuonExtrapolator"), - m_magFieldSvc("AtlasFieldSvc",na), m_trackingGeometrySvc("TrackingGeometrySvc/AtlasTrackingGeometrySvc",na), m_printer("Muon::MuonEDMPrinterTool/MuonEDMPrinterTool") { declareInterface<IMuonTrackExtrapolationTool>(this); - declareProperty( "MagFieldSvc", m_magFieldSvc ); declareProperty( "TrackingGeometrySvc", m_trackingGeometrySvc); declareProperty( "MuonExtrapolator", m_muonExtrapolator); declareProperty( "MuonExtrapolator2", m_muonExtrapolator2); @@ -57,7 +55,7 @@ namespace Muon { if( !m_muonExtrapolator.empty() ) ATH_CHECK( m_muonExtrapolator.retrieve() ); if( !m_muonExtrapolator2.empty() ) ATH_CHECK( m_muonExtrapolator2.retrieve() ); ATH_CHECK( m_trackingGeometrySvc.retrieve() ); - ATH_CHECK( m_magFieldSvc.retrieve() ); + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); if( m_cosmics ) ATH_MSG_DEBUG("Running in cosmics mode" ); @@ -322,8 +320,21 @@ namespace Muon { if( m_muonExtrapolator.empty() ) return 0; // if straightline track and the field is on return 0 bool isSL = m_edmHelperSvc->isSLTrack(track); - if( m_magFieldSvc->toroidOn() && isSL ) { - return 0; + if( isSL ) { // check isSL first to limit access overhead + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + if( fieldCache.toroidOn() ) { + return 0; + } } const Trk::Perigee* pp = track.perigeeParameters(); diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.h index 70001a69b01..2c67bd9fddc 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.h +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.h @@ -17,7 +17,8 @@ #include "TrkDetDescrInterfaces/ITrackingGeometrySvc.h" #include "TrkExInterfaces/IExtrapolator.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "TrkParameters/TrackParameters.h" @@ -78,7 +79,9 @@ namespace Muon { ToolHandle<Trk::IExtrapolator> m_muonExtrapolator; ToolHandle<Trk::IExtrapolator> m_muonExtrapolator2; // Moved from MuonEDMHelperSvc, not sure if it should be private/separate from m_muonExtrapolator - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", + "Name of the Magnetic Field conditions object key"}; ServiceHandle<Trk::ITrackingGeometrySvc> m_trackingGeometrySvc; ServiceHandle<Muon::IMuonEDMHelperSvc> m_edmHelperSvc {this, "edmHelper", diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/CMakeLists.txt b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/CMakeLists.txt index b6027c22fc0..6c850c2f9b1 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/CMakeLists.txt +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/CMakeLists.txt @@ -14,7 +14,6 @@ atlas_depends_on_subdirs( PRIVATE DetectorDescription/Identifier Event/EventPrimitives GaudiKernel - MagneticField/MagFieldInterfaces MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry MuonSpectrometer/MuonIdHelpers MuonSpectrometer/MuonStationIndex @@ -41,7 +40,10 @@ atlas_depends_on_subdirs( PRIVATE Tracking/TrkExtrapolation/TrkExUtils Tracking/TrkFitter/TrkFitterInterfaces Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkUtilityPackages/TrkDriftCircleMath ) + Tracking/TrkUtilityPackages/TrkDriftCircleMath + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( Eigen ) @@ -51,7 +53,7 @@ atlas_add_component( MuonTrackSteeringTools src/*.cxx src/components/*.cxx INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel CxxUtils GeoPrimitives Identifier EventPrimitives GaudiKernel MagFieldInterfaces MuonReadoutGeometry MuonIdHelpersLib MuonStationIndexLib MuonCompetingRIOsOnTrack MuonPrepRawData MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils TrkDetDescrUtils TrkGeometry TrkSurfaces TrkEventPrimitives TrkMeasurementBase TrkParameters TrkPseudoMeasurementOnTrack TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkExUtils TrkFitterInterfaces TrkToolInterfaces TrkDriftCircleMath ) + LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel CxxUtils GeoPrimitives Identifier EventPrimitives GaudiKernel MuonReadoutGeometry MuonIdHelpersLib MuonStationIndexLib MuonCompetingRIOsOnTrack MuonPrepRawData MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils TrkDetDescrUtils TrkGeometry TrkSurfaces TrkEventPrimitives TrkMeasurementBase TrkParameters TrkPseudoMeasurementOnTrack TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkExUtils TrkFitterInterfaces TrkToolInterfaces TrkDriftCircleMath MagFieldElements MagFieldConditions ) # Install files from the package: atlas_install_joboptions( share/*.py ) diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx index 5b48ab2a9d7..869f98fd664 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx @@ -107,7 +107,7 @@ namespace Muon { ATH_CHECK( m_idHelperSvc.retrieve() ); ATH_CHECK( m_edmHelperSvc.retrieve() ); ATH_CHECK( m_printer.retrieve() ); - ATH_CHECK( m_magFieldSvc.retrieve() ); + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); ATH_CHECK( m_segmentMatchingTool.retrieve() ); ATH_CHECK( m_segmentMatchingToolTight.retrieve() ); ATH_CHECK( m_candidateTool.retrieve() ); @@ -723,6 +723,18 @@ namespace Muon { Identifier closestId; double closestIdDist = 1E9; bool trackHasPhi = true; + + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return; + } + fieldCondObj->getInitializedCache (fieldCache); // loop over TSOS const DataVector<const Trk::TrackStateOnSurface>* tsoses = entry1.track().trackStateOnSurfaces(); @@ -816,7 +828,7 @@ namespace Muon { msg(MSG::DEBUG) << endmsg; } - bool straightLineMatch = !m_magFieldSvc->toroidOn(); + bool straightLineMatch = !fieldCache.toroidOn(); if ( hasStereoAngle && !trackHasPhi && (straightLineMatch || entry1.hasMomentum() ) ) { // can not do any extrapolation (not reliable) info.reason = TrackSegmentMatchResult::StereoAngleWithoutPhi; diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h index b232d2bca00..8a0dc1ec89f 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h @@ -15,7 +15,8 @@ #include "CxxUtils/checker_macros.h" #include "EventPrimitives/EventPrimitives.h" #include "GeoPrimitives/GeoPrimitives.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "MuonRecToolInterfaces/IMuonTrackSegmentMatchingTool.h" #include "MuonIdHelpers/IMuonIdHelperSvc.h" #include "MuonRecHelperTools/IMuonEDMHelperSvc.h" @@ -186,8 +187,9 @@ namespace Muon { {this, "SegmentMatchingTool", "Muon::MuonSegmentMatchingTool/MuonSegmentMatchingTool"}; ToolHandle<IMuonSegmentMatchingTool> m_segmentMatchingToolTight {this, "SegmentMatchingToolTight", "Muon::MuonSegmentMatchingTool/MuonSegmentMatchingToolTight"}; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc - {this, "MagFieldSvc", "AtlasFieldSvc"}; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", + "Name of the Magnetic Field conditions object key"}; ToolHandle<MuPatCandidateTool> m_candidateTool {this, "MuPatCandidateTool", "Muon::MuPatCandidateTool/MuPatCandidateTool"}; diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx index 5dbec3416b8..ea83d424456 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx @@ -42,7 +42,7 @@ namespace Muon { ATH_CHECK( m_fitter.retrieve() ); ATH_CHECK( m_slFitter.retrieve() ); - ATH_CHECK(m_magFieldSvc.retrieve() ); + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); if( !m_errorOptimisationTool.empty() ) ATH_CHECK( m_errorOptimisationTool.retrieve() ); ATH_CHECK( m_candidateHandler.retrieve() ); ATH_CHECK( m_candidateMatchingTool.retrieve() ); @@ -74,7 +74,21 @@ namespace Muon { Trk::Track* MooTrackBuilder::refit( const Trk::Track& track ) const { - if( m_edmHelperSvc->isSLTrack(track) || !m_magFieldSvc->toroidOn() ) return m_slFitter->refit(track); + if( m_edmHelperSvc->isSLTrack(track)) { // check isSL first to limit access overhead + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + if( !fieldCache.toroidOn() ) return m_slFitter->refit(track); + } + // if not refit tool specified do a pure refit if( m_errorOptimisationTool.empty() ) return m_fitter->refit(track); @@ -341,8 +355,20 @@ namespace Muon { //ATH_MSG_INFO(" Performing fit" ); } - if( slFit || !m_magFieldSvc->toroidOn() ) return m_slFitter->fit(firstCandidate,secondCandidate,externalPhiHits); - else return m_fitter->fit(firstCandidate,secondCandidate,externalPhiHits); + EventContext ctx = Gaudi::Hive::currentContext(); + MagField::AtlasFieldCache fieldCache; + // Get field cache object + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + + if( slFit || !fieldCache.toroidOn() ) return m_slFitter->fit(firstCandidate,secondCandidate,externalPhiHits); + else return m_fitter->fit(firstCandidate,secondCandidate,externalPhiHits); } @@ -1013,7 +1039,19 @@ namespace Muon { } std::pair<Trk::Track*,Trk::Track*> MooTrackBuilder::splitTrack( const Trk::Track& track ) const { - return m_edmHelperSvc->isSLTrack(track) || !m_magFieldSvc->toroidOn() ? m_slFitter->splitTrack(track) : m_fitter->splitTrack(track); + EventContext ctx = Gaudi::Hive::currentContext(); + MagField::AtlasFieldCache fieldCache; + // Get field cache object + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + std::pair<Trk::Track*,Trk::Track*> emptyPair; + return emptyPair; + } + fieldCondObj->getInitializedCache (fieldCache); + return m_edmHelperSvc->isSLTrack(track) || !fieldCache.toroidOn() ? m_slFitter->splitTrack(track) : m_fitter->splitTrack(track); } std::vector<MuPatTrack*>* MooTrackBuilder::find( MuPatCandidateBase& candidate, const std::vector<MuPatSegment*>& segVec ) const { diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h index 072557066c7..fe5165bd708 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h +++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h @@ -25,7 +25,8 @@ #include "MuonRecToolInterfaces/IMdtDriftCircleOnTrackCreator.h" #include "TrkExInterfaces/IPropagator.h" #include "TrkToolInterfaces/IResidualPullCalculator.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "TrkToolInterfaces/IExtendedTrackSummaryTool.h" #include "TrkTrackSummary/MuonTrackSummary.h" @@ -280,7 +281,9 @@ namespace Muon { ToolHandle<IMuonErrorOptimisationTool> m_errorOptimisationTool {this, "ErrorOptimisationTool", ""}; ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool {this, "TrackSummaryTool", "MuonTrackSummaryTool"}; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc {this, "MagFieldSvc", "AtlasFieldSvc"}; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", + "Name of the Magnetic Field conditions object key"}; Trk::MagneticFieldProperties m_magFieldProperties {Trk::FullField}; //!< magnetic field properties Gaudi::Property<bool> m_doTimeOutChecks {this,"UseTimeOutGuard" , true }; //!< on/off time out check diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py index 91f7b6f471c..851ac74ec10 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py @@ -53,8 +53,7 @@ def applySoftBtagging(algname,sequence): from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter InclusiveVxFitterTool = Trk__TrkVKalVrtFitter(name = "InclusiveVxFitter", Extrapolator = ToolSvc.AtlasExtrapolator, - IterationNumber = 30, - AtlasMagFieldSvc = "AtlasFieldSvc" + IterationNumber = 30 ) ToolSvc += InclusiveVxFitterTool; diff --git a/PhysicsAnalysis/EventTag/EventTagRawAlgs/CMakeLists.txt b/PhysicsAnalysis/EventTag/EventTagRawAlgs/CMakeLists.txt index 04dfbddcbd7..f16ce190126 100644 --- a/PhysicsAnalysis/EventTag/EventTagRawAlgs/CMakeLists.txt +++ b/PhysicsAnalysis/EventTag/EventTagRawAlgs/CMakeLists.txt @@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC Control/AthenaBaseComps Control/AthenaKernel GaudiKernel - MagneticField/MagFieldInterfaces Tracking/TrkEvent/TrkSegment PRIVATE Calorimeter/CaloEvent @@ -25,7 +24,10 @@ atlas_depends_on_subdirs( PUBLIC TileCalorimeter/TileIdentifier Tracking/TrkEvent/TrkSpacePoint Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackSummary ) + Tracking/TrkEvent/TrkTrackSummary + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( CLHEP ) @@ -35,7 +37,7 @@ atlas_add_component( EventTagRawAlgs src/*.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel MagFieldInterfaces TrkSegment CaloEvent CommissionEvent StoreGateLib SGtests xAODCaloEvent InDetBCM_RawData InDetPrepRawData LArRecEvent TagEvent TileEvent TileIdentifier TrkSpacePoint TrkTrack TrkTrackSummary ) + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkSegment CaloEvent CommissionEvent StoreGateLib SGtests xAODCaloEvent InDetBCM_RawData InDetPrepRawData LArRecEvent TagEvent TileEvent TileIdentifier TrkSpacePoint TrkTrack TrkTrackSummary MagFieldElements MagFieldConditions ) # Install files from the package: atlas_install_joboptions( share/*.py ) diff --git a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx index ed61707fad9..d7e2d09bcab 100644 --- a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx +++ b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx @@ -22,8 +22,7 @@ RawInfoSummaryForTagWriter::RawInfoSummaryForTagWriter(const std::string& name, ISvcLocator* pSvcLocator) : - AthAlgorithm(name,pSvcLocator), - m_fieldServiceHandle("AtlasFieldSvc",name) + AthAlgorithm(name,pSvcLocator) { declareProperty("IDTrackKey",m_sgKeyIDtrack); declareProperty("CaloCellContKey", m_cellContKey="AllCalo"); @@ -38,7 +37,6 @@ RawInfoSummaryForTagWriter::RawInfoSummaryForTagWriter(const std::string& name, declareProperty("MBTSName",m_mbtsName="MBTSContainer"); declareProperty("MBTSCollTimeKey",m_MBTSCollTimeKey="MBTSCollisionTime"); declareProperty("MBTS_Threshold", m_mbts_threshold = 40.0/222.0 ); // Value in pC - declareProperty("MagFieldSvc" , m_fieldServiceHandle); declareProperty("OutputKey", m_RISFTKey="RawInfoSummaryForTag"); } @@ -63,7 +61,6 @@ StatusCode RawInfoSummaryForTagWriter::initialize() return StatusCode::FAILURE; } - ATH_CHECK(m_fieldServiceHandle.retrieve()); ATH_CHECK(m_sgKeyIDtrack.initialize()); ATH_CHECK(m_cellContKey.initialize()); if(m_doClusterSums) { @@ -82,6 +79,7 @@ StatusCode RawInfoSummaryForTagWriter::initialize() ATH_CHECK(m_trtPhaseName.initialize()); } ATH_CHECK(m_RISFTKey.initialize()); + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); return StatusCode::SUCCESS; } @@ -115,6 +113,17 @@ StatusCode RawInfoSummaryForTagWriter::execute() // input Track Collection int totNPixHits(0),totNSCTHits(0),totNTRTHits(0); + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return StatusCode::FAILURE; + } + fieldCondObj->getInitializedCache (fieldCache); SG::ReadHandle<TrackCollection> tracks{m_sgKeyIDtrack}; for (const Trk::Track* track : *tracks) { @@ -128,7 +137,7 @@ StatusCode RawInfoSummaryForTagWriter::execute() if (nSCTHits>0) totNSCTHits++; if (nTRTHits>0) totNTRTHits++; - if(m_fieldServiceHandle->solenoidOn()){ + if(fieldCache.solenoidOn()){ const Trk::Perigee* perigee = track->perigeeParameters(); if(!perigee) continue; if(perigee->parameters()[Trk::qOverP]!=0){ diff --git a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.h b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.h index 41f6d4cc74e..0b8ff99c636 100644 --- a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.h +++ b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.h @@ -17,7 +17,8 @@ Jamie Boyd 21 Jan 2008 (Jamie.Boyd@cern.ch) #include "GaudiKernel/ToolHandle.h" #include "AthenaKernel/IOVSvcDefs.h" #include "GaudiKernel/ServiceHandle.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include <string> #include <vector> @@ -85,7 +86,8 @@ class RawInfoSummaryForTagWriter : public AthAlgorithm //coral::AttributeListSpecification* m_attribListSpec; - ServiceHandle<MagField::IMagFieldSvc> m_fieldServiceHandle; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; }; #endif diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerAlg.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerAlg.h index b74d9fd3dac..61ee38e2292 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerAlg.h +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerAlg.h @@ -20,7 +20,8 @@ #include "BTagging/IBTagTrackAssociation.h" #include "BTagging/IBTagSecVertexing.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" namespace Analysis{ @@ -53,7 +54,8 @@ class JetBTaggerAlg: ToolHandle< IBTagTool > m_bTagTool; ToolHandle< IBTagTrackAssociation > m_BTagTrackAssocTool; ToolHandle< IBTagSecVertexing > m_bTagSecVtxTool; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; }; diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h index d7784fdfac7..293b5ccd12e 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h @@ -19,7 +19,8 @@ #include "StoreGate/WriteHandleKey.h" #include "StoreGate/WriteDecorHandleKey.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" namespace Analysis{ @@ -45,6 +46,8 @@ class JetBTaggerTool: private: SG::ReadHandleKey<xAOD::JetContainer > m_JetCollectionName { this, "JetCollectionName", "", "Input jet container"}; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; Gaudi::Property<SG::WriteDecorHandleKey<xAOD::JetContainer> >m_jetBTaggingLinkName{this,"JetContainerName","","Element link form jet to BTagging container"}; SG::WriteHandleKey<xAOD::BTaggingContainer> m_BTaggingCollectionName { this, "BTaggingCollectionName", "", "Output BTagging container"} ; @@ -54,7 +57,6 @@ class JetBTaggerTool: ToolHandle< IBTagTrackAssociation > m_BTagTrackAssocTool; ToolHandle< IBTagSecVertexing > m_bTagSecVtxTool; bool m_augment; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; }; diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggingAlg.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggingAlg.h index 64969d14122..061b1fd3fc5 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggingAlg.h +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggingAlg.h @@ -22,7 +22,8 @@ #include "BTagging/IBTagTool.h" #include "BTagging/IBTagLightSecVertexing.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" namespace Analysis{ class IJetFitterVariablesFactory; @@ -47,6 +48,8 @@ class JetBTaggingAlg: //SG::ReadHandleKey<xAOD::VertexContainer> m_VertexCollectionName {this, "vxPrimaryCollectionName", "", "Input primary vertex container"}; SG::ReadHandleKey<xAOD::VertexContainer> m_BTagSVCollectionName {this, "BTagSVCollectionName", "", "Input BTagging secondary vertex container"}; SG::ReadHandleKey<xAOD::BTagVertexContainer> m_BTagJFVtxCollectionName {this, "BTagJFVtxCollectionName", "", "Input BTagging Jet Fitter container"}; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; SG::WriteDecorHandleKey<xAOD::JetContainer> m_jetBTaggingLinkName {this, "BTaggingLinkName", "", "Element link from jet to BTagging container"}; SG::WriteHandleKey<xAOD::BTaggingContainer> m_BTaggingCollectionName {this, "BTaggingCollectionName", "", "Output BTagging container"}; SG::WriteDecorHandleKey<xAOD::BTaggingContainer> m_bTagJetDecorLinkName {this, "JetLinkName", "", "Element Link from BTagging to Jet container"}; @@ -55,7 +58,6 @@ class JetBTaggingAlg: ToolHandle< IBTagTool > m_bTagTool; ToolHandle< IBTagLightSecVertexing > m_bTagSecVtxTool; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; }; diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/CMakeLists.txt b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/CMakeLists.txt index e295aa97718..7b4db02be98 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/CMakeLists.txt +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/CMakeLists.txt @@ -12,7 +12,6 @@ atlas_depends_on_subdirs( PUBLIC Event/xAOD/xAODBTagging Event/xAOD/xAODJet GaudiKernel - MagneticField/MagFieldInterfaces Reconstruction/Jet/JetInterface Tracking/TrkEvent/VxVertex PRIVATE @@ -31,7 +30,10 @@ atlas_depends_on_subdirs( PUBLIC Reconstruction/Particle Tracking/TrkEvent/TrkLinks Tracking/TrkEvent/VxJetVertex - Tracking/TrkEvent/VxSecVertex ) + Tracking/TrkEvent/VxSecVertex + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( Eigen ) @@ -55,13 +57,13 @@ atlas_add_library( BTaggingLib src/HighLevelBTagAlg.cxx PUBLIC_HEADERS BTagging PRIVATE_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES AsgTools AthenaBaseComps xAODBTagging xAODJet GaudiKernel MagFieldInterfaces JetInterface VxVertex ParticleJetToolsLib JetTagToolsLib FlavorTagDiscriminants - PRIVATE_LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoPrimitives xAODBase xAODCore xAODMuon xAODTracking InDetRecToolInterfaces JetTagEvent JetTagInfo Particle TrkLinks VxJetVertex VxSecVertex ) + LINK_LIBRARIES AsgTools AthenaBaseComps xAODBTagging xAODJet GaudiKernel JetInterface VxVertex ParticleJetToolsLib JetTagToolsLib FlavorTagDiscriminants + PRIVATE_LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoPrimitives xAODBase xAODCore xAODMuon xAODTracking InDetRecToolInterfaces JetTagEvent JetTagInfo Particle TrkLinks VxJetVertex VxSecVertex MagFieldElements MagFieldConditions ) atlas_add_component( BTagging src/components/*.cxx INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AsgTools AthenaBaseComps xAODBTagging xAODJet GaudiKernel MagFieldInterfaces JetInterface VxVertex GeoPrimitives xAODBase xAODCore xAODMuon xAODTracking InDetRecToolInterfaces ParticleJetToolsLib JetTagEvent JetTagInfo JetTagToolsLib FlavorTagDiscriminants Particle TrkLinks VxJetVertex VxSecVertex BTaggingLib ) + LINK_LIBRARIES ${EIGEN_LIBRARIES} AsgTools AthenaBaseComps xAODBTagging xAODJet GaudiKernel JetInterface VxVertex GeoPrimitives xAODBase xAODCore xAODMuon xAODTracking InDetRecToolInterfaces ParticleJetToolsLib JetTagEvent JetTagInfo JetTagToolsLib FlavorTagDiscriminants Particle TrkLinks VxJetVertex VxSecVertex BTaggingLib ) # Install files from the package: atlas_install_python_modules( python/*.py ) diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagRun3Config.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagRun3Config.py index d68d164b1b7..0b044834715 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagRun3Config.py +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagRun3Config.py @@ -171,17 +171,12 @@ def BTagCfg(inputFlags,**kwargs): from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg result.merge(PixelGeometryCfg( inputFlags )) + # get standard config for magnetic field - map and cache + from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg + result.merge(MagneticFieldSvcCfg( inputFlags )) + from IOVDbSvc.IOVDbSvcConfig import addFolders, addFoldersSplitOnline - result.merge(addFolders(inputFlags,['/GLOBAL/BField/Maps <noover/>'],'GLOBAL_OFL')) - #result.merge(addFolders(inputFlags,['/GLOBAL/BField/Maps <noover/>'],'GLOBAL_ONL')) - #result.merge(addFolders(inputFlags,['/GLOBAL/TrackingGeo/LayerMaterialV2'],'GLOBAL_ONL')) - result.merge(addFolders(inputFlags,['/EXT/DCS/MAGNETS/SENSORDATA'],'DCS_OFL')) - MagField__AtlasFieldSvc=CompFactory.MagField.AtlasFieldSvc - kwargs.setdefault( "UseDCS", True ) - result.addService(MagField__AtlasFieldSvc("AtlasFieldSvc",**kwargs)) - del kwargs['UseDCS'] - #load folders needed for Run2 ID alignment result.merge(addFoldersSplitOnline(inputFlags,"INDET","/Indet/Onl/Align","/Indet/Align",className="AlignableTransformContainer")) result.merge(addFolders(inputFlags,['/TRT/Align'],'TRT_OFL')) diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx index 717f65cf2db..8aa94602b09 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx @@ -28,15 +28,13 @@ namespace Analysis { m_BTagLink(".btaggingLink"), m_bTagTool("Analysis::BTagTool",this), m_BTagTrackAssocTool("Analysis::BTagTrackAssociation",this), - m_bTagSecVtxTool("Analysis::BTagSecVertexing",this), - m_magFieldSvc("AtlasFieldSvc",n) + m_bTagSecVtxTool("Analysis::BTagSecVertexing",this) { declareProperty("JetCalibrationName", m_JetName); declareProperty("BTaggingLink", m_BTagLink); declareProperty("BTagTool", m_bTagTool); declareProperty("BTagTrackAssocTool", m_BTagTrackAssocTool); declareProperty("BTagSecVertexing", m_bTagSecVtxTool); - declareProperty("MagFieldSvc", m_magFieldSvc ); } JetBTaggerAlg::~JetBTaggerAlg() @@ -83,11 +81,8 @@ namespace Analysis { ATH_MSG_DEBUG("#BTAGVTX# Retrieved tool " << m_bTagSecVtxTool); } - /// retrieve the magnetic field service - if (m_magFieldSvc.retrieve().isFailure()){ - ATH_MSG_ERROR("Could not get " << m_magFieldSvc); - return StatusCode::FAILURE; - } + /// handle to the magnetic field cache + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); return StatusCode::SUCCESS; } @@ -120,7 +115,19 @@ namespace Analysis { ATH_CHECK( h_BTaggingCollectionName.record(std::make_unique<xAOD::BTaggingContainer>(), std::make_unique<xAOD::BTaggingAuxContainer>()) ); - if (!m_magFieldSvc->solenoidOn()) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return StatusCode::FAILURE; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (!fieldCache.solenoidOn()) { for (size_t jetIndex=0; jetIndex < h_JetCollectionName->size() ; ++jetIndex) { const xAOD::Jet * jet = h_JetCollectionName->at(jetIndex); ElementLink< xAOD::BTaggingContainer> linkBTagger; diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerTool.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerTool.cxx index 7e56b9a45c9..fceedffcb57 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerTool.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerTool.cxx @@ -34,15 +34,13 @@ namespace Analysis { m_bTagTool("Analysis::BTagTool",this), m_BTagTrackAssocTool("Analysis::BTagTrackAssociation", this), m_bTagSecVtxTool("Analysis::BTagSecVertexing", this), - m_augment(false), - m_magFieldSvc("AtlasFieldSvc",n) + m_augment(false) { declareProperty( "JetCalibrationName", m_JetName); declareProperty( "BTagTool", m_bTagTool); declareProperty( "BTagTrackAssocTool", m_BTagTrackAssocTool); declareProperty( "BTagSecVertexing", m_bTagSecVtxTool); declareProperty( "BTagAugmentation", m_augment, "switch to decide whether to merely extend the BTagging information as opposed to re-tagging from scratch"); - declareProperty("MagFieldSvc", m_magFieldSvc ); } JetBTaggerTool::~JetBTaggerTool() @@ -88,11 +86,8 @@ namespace Analysis { ATH_MSG_DEBUG("#BTAGVTX# Retrieved tool " << m_bTagSecVtxTool); } - /// retrieve the magnetic field service - if (m_magFieldSvc.retrieve().isFailure()){ - ATH_MSG_ERROR("Could not get " << m_magFieldSvc); - return StatusCode::FAILURE; - } + /// handle to the magnetic field cache + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); return StatusCode::SUCCESS; } @@ -125,7 +120,19 @@ namespace Analysis { ATH_CHECK( h_BTaggingCollectionName.record(std::make_unique<xAOD::BTaggingContainer>(), std::make_unique<xAOD::BTaggingAuxContainer>()) ); - if (!m_magFieldSvc->solenoidOn()) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return StatusCode::FAILURE; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (!fieldCache.solenoidOn()) { for (size_t jetIndex=0; jetIndex < h_JetCollectionName->size() ; ++jetIndex) { const xAOD::Jet * jet = h_JetCollectionName->at(jetIndex); ElementLink< xAOD::BTaggingContainer> linkBTagger; @@ -214,9 +221,21 @@ namespace Analysis { ATH_CHECK(sc); + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return StatusCode::FAILURE; + } + fieldCondObj->getInitializedCache (fieldCache); + xAOD::JetContainer::const_iterator itB = jets.begin(); xAOD::JetContainer::const_iterator itE = jets.end(); - if (m_magFieldSvc->solenoidOn()) { + if (fieldCache.solenoidOn()) { for (xAOD::JetContainer::const_iterator it = itB ; it != itE; ++it) { xAOD::BTagging * newBTagMT = new xAOD::BTagging(); h_BTaggingCollectionName->push_back(newBTagMT); diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggingAlg.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggingAlg.cxx index b381bcd2383..1b93075c87f 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggingAlg.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggingAlg.cxx @@ -29,13 +29,11 @@ namespace Analysis { AthAlgorithm(n,p), m_JetName(""), m_bTagTool("Analysis::BTagTool",this), - m_bTagSecVtxTool("Analysis::BTagSecVertexing",this), - m_magFieldSvc("AtlasFieldSvc",n) + m_bTagSecVtxTool("Analysis::BTagSecVertexing",this) { declareProperty("JetCalibrationName", m_JetName); declareProperty("BTagTool", m_bTagTool); declareProperty("BTagSecVertexing", m_bTagSecVtxTool); - declareProperty("MagFieldSvc", m_magFieldSvc ); } JetBTaggingAlg::~JetBTaggingAlg() @@ -79,11 +77,8 @@ namespace Analysis { ATH_MSG_DEBUG("#BTAGVTX# Retrieved tool " << m_bTagSecVtxTool); } - /// retrieve the magnetic field service - if (m_magFieldSvc.retrieve().isFailure()){ - ATH_MSG_ERROR("Could not get " << m_magFieldSvc); - return StatusCode::FAILURE; - } + /// handle to the magnetic field cache + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); if (m_jetParticleLinkNameList.size() == 0) { ATH_MSG_FATAL( "#BTAG# Please provide track to jet association list"); @@ -139,7 +134,19 @@ namespace Analysis { ATH_CHECK( h_BTaggingCollectionName.record(std::make_unique<xAOD::BTaggingContainer>(), std::make_unique<xAOD::BTaggingAuxContainer>()) ); - if (!m_magFieldSvc->solenoidOn()) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return StatusCode::FAILURE; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (!fieldCache.solenoidOn()) { for (size_t jetIndex=0; jetIndex < h_JetCollectionName->size() ; ++jetIndex) { const xAOD::Jet * jet = h_JetCollectionName->at(jetIndex); ElementLink< xAOD::BTaggingContainer> linkBTagger; diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/CMakeLists.txt b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/CMakeLists.txt index dee1b7f86d3..5600adf499b 100644 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/CMakeLists.txt +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/CMakeLists.txt @@ -9,7 +9,6 @@ atlas_subdir( MuidCaloScatteringTools ) atlas_depends_on_subdirs( PUBLIC Control/AthenaBaseComps GaudiKernel - MagneticField/MagFieldInterfaces Reconstruction/MuonIdentification/MuidInterfaces Tracking/TrkDetDescr/TrkDetDescrInterfaces Tracking/TrkDetDescr/TrkSurfaces @@ -22,7 +21,10 @@ atlas_depends_on_subdirs( PUBLIC Tracking/TrkDetDescr/TrkGeometry Tracking/TrkEvent/TrkMaterialOnTrack Tracking/TrkEvent/TrkTrack - Tracking/TrkExtrapolation/TrkExUtils ) + Tracking/TrkExtrapolation/TrkExUtils + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( Eigen ) @@ -34,7 +36,7 @@ atlas_add_component( MuidCaloScatteringTools src/MuidMaterialEffectsOnTrackProvider.cxx src/components/*.cxx INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps GaudiKernel MagFieldInterfaces MuidInterfaces TrkDetDescrInterfaces TrkSurfaces TrkParameters TrkExInterfaces GeoPrimitives MuidEvent muonEvent TrkGeometry TrkMaterialOnTrack TrkTrack TrkExUtils ) + LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps GaudiKernel MuidInterfaces TrkDetDescrInterfaces TrkSurfaces TrkParameters TrkExInterfaces GeoPrimitives MuidEvent muonEvent TrkGeometry TrkMaterialOnTrack TrkTrack TrkExUtils MagFieldElements MagFieldConditions ) # Install files from the package: atlas_install_headers( MuidCaloScatteringTools ) diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h index 65ad0b3e3d0..e5ba69501f5 100755 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h @@ -23,7 +23,8 @@ //<<<<<< INCLUDES >>>>>> #include "AthenaBaseComps/AthAlgTool.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "MuidInterfaces/IMuidCaloTrackStateOnSurface.h" #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/ToolHandle.h" @@ -90,9 +91,9 @@ private: ToolHandle<Rec::IMuidCaloEnergy> m_caloEnergyParam; ToolHandle<Rec::IMuidCaloMaterialParam> m_caloMaterialParam; Trk::MagneticFieldProperties* m_magFieldProperties; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvcHandle; - MagField::IMagFieldSvc* m_magFieldSvc; ToolHandle<Trk::IPropagator> m_propagator; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; // configurable cut-off values double m_minCaloRadius; diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx index c566ad669c0..1598e58278c 100755 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx @@ -47,8 +47,6 @@ MuidCaloTrackStateOnSurface::MuidCaloTrackStateOnSurface (const std::string& typ m_caloEnergyParam ("Rec::MuidCaloEnergyTool/MuidCaloEnergyToolParam", this), m_caloMaterialParam ("Rec::MuidCaloMaterialParam/MuidCaloMaterialParam", this), m_magFieldProperties (0), - m_magFieldSvcHandle ("MagField::AtlasFieldSvc/AtlasFieldSvc", name), - m_magFieldSvc (0), m_propagator ("Trk::IntersectorWrapper/IntersectorWrapper", this), m_minCaloRadius (0.4*Gaudi::Units::meter), m_minRemainingEnergy (0.5*Gaudi::Units::GeV), @@ -108,16 +106,8 @@ MuidCaloTrackStateOnSurface::initialize() { ATH_MSG_DEBUG( "Retrieved tool " << m_caloMaterialParam ); } - if (m_magFieldSvcHandle.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve service " << m_magFieldSvcHandle ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_DEBUG( "Retrieved service " << m_magFieldSvcHandle ); - m_magFieldSvc = &*m_magFieldSvcHandle; - } + /// handle to the magnetic field cache + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); if (m_propagator.retrieve().isFailure()) { ATH_MSG_FATAL( "Failed to retrieve tool " << m_propagator ); @@ -162,6 +152,18 @@ MuidCaloTrackStateOnSurface::caloTSOS(const Trk::TrackParameters& parameters) co const Trk::TrackParameters* middleParams = 0; const Trk::TrackParameters* outerParams = 0; + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + // track to calo surfaces - first decide in or outwards bool trackOutwards = true; if (dynamic_cast<const Trk::PerigeeSurface*>(¶meters.associatedSurface())) @@ -218,7 +220,7 @@ MuidCaloTrackStateOnSurface::caloTSOS(const Trk::TrackParameters& parameters) co double correctedEnergy = innerParams->momentum().mag() - energyDeposit; // fail potential loopers - if (m_magFieldSvc->toroidOn() + if (fieldCache.toroidOn() && correctedEnergy < m_minRemainingEnergy) { delete middleTS; diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/CMakeLists.txt b/Reconstruction/MuonIdentification/MuidTrackBuilder/CMakeLists.txt index 1b4cb2cabdc..9278bf88b0f 100644 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/CMakeLists.txt +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/CMakeLists.txt @@ -19,7 +19,6 @@ atlas_depends_on_subdirs( PUBLIC Control/AthenaKernel Event/EventPrimitives InnerDetector/InDetRecEvent/InDetRIO_OnTrack - MagneticField/MagFieldInterfaces MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry MuonSpectrometer/MuonIdHelpers MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonCompetingRIOsOnTrack @@ -41,7 +40,10 @@ atlas_depends_on_subdirs( PUBLIC Tracking/TrkExtrapolation/TrkExUtils Tracking/TrkFitter/TrkFitterInterfaces Tracking/TrkFitter/TrkiPatFitterUtils - Tracking/TrkTools/TrkToolInterfaces ) + Tracking/TrkTools/TrkToolInterfaces + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( CLHEP ) @@ -55,7 +57,7 @@ atlas_add_component( MuidTrackBuilder src/OutwardsCombinedMuonTrackBuilder.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AtlasDetDescr GaudiKernel MuidInterfaces TrkDetDescrInterfaces TrkGeometry TrkParameters TrkTrack InDetRIO_OnTrack MagFieldInterfaces MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonRecHelperToolsLib MuonRecToolInterfaces MuonCombinedToolInterfaces muonEvent TrkSurfaces TrkCompetingRIOsOnTrack TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkMeasurementBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex TrkExInterfaces TrkExUtils TrkFitterInterfaces TrkiPatFitterUtils TrkToolInterfaces ) + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AtlasDetDescr GaudiKernel MuidInterfaces TrkDetDescrInterfaces TrkGeometry TrkParameters TrkTrack InDetRIO_OnTrack MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonRecHelperToolsLib MuonRecToolInterfaces MuonCombinedToolInterfaces muonEvent TrkSurfaces TrkCompetingRIOsOnTrack TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkMeasurementBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex TrkExInterfaces TrkExUtils TrkFitterInterfaces TrkiPatFitterUtils TrkToolInterfaces MagFieldElements MagFieldConditions ) # Install files from the package: atlas_install_headers( MuidTrackBuilder ) diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h index 851385e9283..0b26f6412cb 100755 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h @@ -21,7 +21,8 @@ #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/ToolHandle.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "MuidInterfaces/ICombinedMuonTrackBuilder.h" #include "MuidInterfaces/IMuidCaloEnergy.h" #include "MuidInterfaces/IMuidCaloTrackStateOnSurface.h" @@ -217,7 +218,8 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; ServiceHandle<Trk::ITrackingGeometrySvc> m_trackingGeometrySvc; // init with callback ServiceHandle<Trk::ITrackingVolumesSvc> m_trackingVolumesSvc; diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx index 4d5d4ef9cef..ae40978920f 100755 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx @@ -75,7 +75,6 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons m_trackQuery("Rec::MuonTrackQuery/MuonTrackQuery", this), m_trackSummary("Trk::TrackSummaryTool/MuidTrackSummaryTool", this), m_materialUpdator("Trk::TrkMaterialProviderTool/TrkMaterialProviderTool", this), - m_magFieldSvc("AtlasFieldSvc", name), m_trackingGeometrySvc("TrackingGeometrySvc/AtlasTrackingGeometrySvc", name), m_trackingVolumesSvc("TrackingVolumesSvc/TrackingVolumesSvc", name), m_magFieldProperties(Trk::FullField), @@ -171,8 +170,6 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons declareProperty("IDMS_xySigma", m_IDMS_xySigma); declareProperty("IDMS_rzSigma", m_IDMS_rzSigma); - declareProperty("MagFieldSvc", m_magFieldSvc); - // deprecated declareProperty("IndetSlimming", m_indetSlimming); declareProperty("InputSlimming", m_inputSlimming); @@ -294,8 +291,9 @@ CombinedMuonTrackBuilder::initialize() ATH_MSG_DEBUG("Retrieved tool " << m_idHelperSvc); ATH_CHECK(m_intersector.retrieve()); ATH_MSG_DEBUG("Retrieved tool " << m_intersector); - ATH_CHECK(m_magFieldSvc.retrieve()); - ATH_MSG_DEBUG("Retrieved service " << m_magFieldSvc); + /// handle to the magnetic field cache + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); + ATH_MSG_DEBUG("Setup handle for key " << m_fieldCacheCondObjInputKey); if (!m_materialAllocator.empty()) { ATH_CHECK(m_materialAllocator.retrieve()); @@ -440,7 +438,19 @@ CombinedMuonTrackBuilder::combinedFit(const Trk::Track& indetTrack, const Trk::T // match extrapolated indet track to inner calorimeter scattering surface // provided momentum defined (solenoid on) - if (surface && m_magFieldSvc->solenoidOn() && !m_updateWithCaloTG) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (surface && fieldCache.solenoidOn() && !m_updateWithCaloTG) { const Trk::TrackStateOnSurface* innerTSOS = 0; if (m_useCaloTG) { @@ -486,7 +496,7 @@ CombinedMuonTrackBuilder::combinedFit(const Trk::Track& indetTrack, const Trk::T Trk::Track* muonTrack = 0; - if (!m_magFieldSvc->toroidOn()) { + if (!fieldCache.toroidOn()) { ATH_MSG_VERBOSE(" SL MS track: Calling createMuonTrack from " << __func__ << " at line " << __LINE__); muonTrack = createMuonTrack( indetTrack, indetTrack.perigeeParameters(), 0, extrapolatedTrack.trackStateOnSurfaces()->begin(), @@ -788,10 +798,22 @@ CombinedMuonTrackBuilder::indetExtension(const Trk::Track& indetTrack, // fail when solenoid off and toroid on (as extrapolation from ID is not the correct strategy) ToolHandle<Trk::IPropagator> propagator = m_propagatorSL; - if (m_magFieldSvc->toroidOn()) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (fieldCache.toroidOn()) { // fail when solenoid off and toroid on - as extrapolation from ID is not the correct strategy // for material effects, fit starting value etc - if (!m_magFieldSvc->solenoidOn()) { + if (!fieldCache.solenoidOn()) { ATH_MSG_VERBOSE("indetExtension: method switched off when solenoid 'off' / toroid 'on'"); return 0; } @@ -941,8 +963,20 @@ Trk::Track* CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack, const Trk::Vertex* inputVertex, float bs_x, float bs_y, float bs_z) const { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + // no SA fit with vertex constraint for Toroid off data - if (m_trackQuery->isLineFit(inputSpectrometerTrack) && !m_magFieldSvc->toroidOn()) { + if (m_trackQuery->isLineFit(inputSpectrometerTrack) && !fieldCache.toroidOn()) { return 0; } @@ -1108,7 +1142,7 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack if (vertex) { // vertex association only makes sense for magnet-on tracks with measured curvature - if (!m_magFieldSvc->toroidOn() || m_trackQuery->isLineFit(spectrometerTrack) || errorP > m_largeMomentumError) { + if (!fieldCache.toroidOn() || m_trackQuery->isLineFit(spectrometerTrack) || errorP > m_largeMomentumError) { ATH_MSG_VERBOSE("standaloneFit: vertex fit not attempted as curvature badly measured"); ATH_MSG_VERBOSE(" SA::failed (6)"); @@ -1200,7 +1234,7 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack // FIXME: missing prefit case for excessive spectrometer eloss WARNING // spot from line starting approx from vertex?? if (inCSCregion || m_trackQuery->numberPseudoMeasurements(spectrometerTrack) - || (m_magFieldSvc->toroidOn() + || (fieldCache.toroidOn() && (badlyDeterminedCurvature || errorPhi > m_largePhiError || measuredPerigee->momentum().mag() < m_lowMomentum))) { @@ -1381,7 +1415,7 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack particleHypothesis = Trk::muon; bool returnAfterCleaner = false; - if (!m_magFieldSvc->toroidOn()) returnAfterCleaner = true; + if (!fieldCache.toroidOn()) returnAfterCleaner = true; ATH_MSG_VERBOSE("Calling createExtrapolatedTrack from " << __func__ << " at line " << __LINE__); Trk::Track* extrapolated = @@ -1670,7 +1704,19 @@ CombinedMuonTrackBuilder::standaloneRefit(const Trk::Track& combinedTrack, float countAEOTs(&combinedTrack, " in standalone Refit input combinedTrack "); - if (!m_magFieldSvc->toroidOn()) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (!fieldCache.toroidOn()) { // no standalone refit for Toroid off return 0; } @@ -2216,7 +2262,19 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& track, const Trk::RunOutlierRemo bool isCombined = m_trackQuery->isCombined(track); // select straightLine fitter when magnets downstream of leading measurement are off ToolHandle<Trk::ITrackFitter> fitter = m_fitter; - if (!m_magFieldSvc->toroidOn() && !(isCombined && m_magFieldSvc->solenoidOn())) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (!fieldCache.toroidOn() && !(isCombined && fieldCache.solenoidOn())) { fitter = m_fitterSL; ATH_MSG_VERBOSE(" fit (track refit method): select SL fitter "); @@ -2399,8 +2457,20 @@ CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const T } // select straightLine fitter when magnets downstream of leading measurement are off + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + ToolHandle<Trk::ITrackFitter> fitter = m_fitter; - if (!m_magFieldSvc->toroidOn() || std::abs(perigeeStartValue.position().z()) > m_zECToroid) { + if (!fieldCache.toroidOn() || std::abs(perigeeStartValue.position().z()) > m_zECToroid) { fitter = m_fitterSL; ATH_MSG_VERBOSE(" fit (track refit method): select SL fitter "); @@ -2521,7 +2591,19 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, const Trk::Track& ex // select straightLine fitter when solenoid and toroid are off ToolHandle<Trk::ITrackFitter> fitter = m_fitter; - if (!m_magFieldSvc->toroidOn() && !m_magFieldSvc->solenoidOn()) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (!fieldCache.toroidOn() && !fieldCache.solenoidOn()) { fitter = m_fitterSL; ATH_MSG_VERBOSE(" fit (combined muon fit method): select SL fitter "); @@ -3161,7 +3243,19 @@ CombinedMuonTrackBuilder::createExtrapolatedTrack(const Trk::Track& sp // if association OK, create perigee surface and back-track to it if (caloAssociated) { - if (m_magFieldSvc->toroidOn()) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + + if (fieldCache.toroidOn()) { const Trk::TrackParameters* oldParameters = caloTSOS->front()->trackParameters(); if (oldParameters && !oldParameters->covariance()) { @@ -3906,7 +4000,18 @@ CombinedMuonTrackBuilder::extrapolatedParameters(bool& badlyDeterminedCurvature, bool curvatureOK = false; ToolHandle<Trk::IPropagator> propagator = m_propagator; - if (!m_magFieldSvc->toroidOn()) { + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + if (!fieldCache.toroidOn()) { curvatureOK = true; propagator = m_propagatorSL; } else if (std::abs(parameters->position().z()) < m_zECToroid @@ -3993,7 +4098,7 @@ CombinedMuonTrackBuilder::extrapolatedParameters(bool& badlyDeterminedCurvature, } // large impact: set phi to be projective (note iteration) - if (std::abs(perigee->parameters()[Trk::d0]) < m_largeImpact || !m_magFieldSvc->toroidOn()) { + if (std::abs(perigee->parameters()[Trk::d0]) < m_largeImpact || !fieldCache.toroidOn()) { if (correctedParameters == parameters) { ATH_MSG_WARNING( "deleting parameters pointer that could be used further down in execution, setting it to zero!"); diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt index b71f6720cf8..3a3cae1250c 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt +++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt @@ -23,7 +23,6 @@ atlas_depends_on_subdirs( PUBLIC Event/xAOD/xAODTracking Event/xAOD/xAODTruth GaudiKernel - MagneticField/MagFieldInterfaces MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry MuonSpectrometer/MuonIdHelpers MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonCompetingRIOsOnTrack @@ -56,7 +55,10 @@ atlas_depends_on_subdirs( PUBLIC Tracking/TrkEvent/TrkTrackSummary Tracking/TrkExtrapolation/TrkExInterfaces Tracking/TrkTools/TrkToolInterfaces - Generators/AtlasHepMC ) + Generators/AtlasHepMC + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( CLHEP ) @@ -67,5 +69,5 @@ atlas_add_component( MuonCombinedBaseTools src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib CaloEvent AthLinks AthenaBaseComps Identifier EventPrimitives FourMomUtils xAODCaloEvent xAODEventInfo xAODMuon xAODTracking xAODTruth GaudiKernel MagFieldInterfaces MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils MuonSelectorToolsLib ICaloTrkMuIdTools MuidInterfaces MuonCombinedEvent MuonCombinedToolInterfaces muonEvent MuidEvent ParticleTruth RecoToolInterfaces TrackToCaloLib TrkGeometry TrkSurfaces TrkCaloExtension TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkParameters TrkParametersIdentificationHelpers TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkToolInterfaces BeamSpotConditionsData ) + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib CaloEvent AthLinks AthenaBaseComps Identifier EventPrimitives FourMomUtils xAODCaloEvent xAODEventInfo xAODMuon xAODTracking xAODTruth GaudiKernel MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils MuonSelectorToolsLib ICaloTrkMuIdTools MuidInterfaces MuonCombinedEvent MuonCombinedToolInterfaces muonEvent MuidEvent ParticleTruth RecoToolInterfaces TrackToCaloLib TrkGeometry TrkSurfaces TrkCaloExtension TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkParameters TrkParametersIdentificationHelpers TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkToolInterfaces BeamSpotConditionsData MagFieldElements MagFieldConditions ) diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.cxx index 5480cc257ec..164476a1b0f 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.cxx @@ -39,7 +39,6 @@ #include "Identifier/Identifier.h" #include "TrkEventUtils/IdentifierExtractor.h" #include "TrkMaterialOnTrack/ScatteringAngles.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "xAODTracking/Vertex.h" namespace MuonCombined { @@ -57,7 +56,6 @@ namespace MuonCombined { m_muonRecovery(""), m_matchQuality("Rec::MuonMatchQuality/MuonMatchQuality", this), m_trackScoringTool("Muon::MuonTrackScoringTool/MuonTrackScoringTool"), - m_magFieldSvc("AtlasFieldSvc",name), m_DetID(0) { declareInterface<IMuonCombinedTagTool>(this); @@ -74,7 +72,6 @@ namespace MuonCombined { declareProperty("MomentumBalanceCut", m_momentumBalanceCut = 6.0); declareProperty("IndetPullCut", m_indetPullCut = 6.0); declareProperty("MatchChiSquaredCut", m_matchChiSquaredCut = 30.0); - declareProperty("MagFieldSvc", m_magFieldSvc); } MuonCombinedFitTagTool::~MuonCombinedFitTagTool() @@ -94,7 +91,8 @@ namespace MuonCombined { if(! m_muonRecovery.empty() ) ATH_CHECK(m_muonRecovery.retrieve()); ATH_CHECK(m_matchQuality.retrieve()); ATH_CHECK(m_trackScoringTool.retrieve()); - ATH_CHECK(m_magFieldSvc.retrieve()); + /// handle to the magnetic field cache + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); if (detStore()->retrieve(m_DetID, "AtlasID").isFailure()) { ATH_MSG_ERROR ("Could not get AtlasDetectorID helper" ); @@ -385,7 +383,18 @@ namespace MuonCombined { bool dorefit = true; // no SA refit for Toroid off - if (!m_magFieldSvc->toroidOn()) dorefit = false; + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return 0; + } + fieldCondObj->getInitializedCache (fieldCache); + if (!fieldCache.toroidOn()) dorefit = false; float bs_x = 0.; float bs_y = 0.; diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.h b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.h index b0c05ec4e0e..d299d68f194 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.h +++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.h @@ -15,6 +15,8 @@ #include "TrkParameters/TrackParameters.h" #include "TrkSegment/SegmentCollection.h" #include "xAODTracking/VertexContainer.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include <vector> //<<<<<< CLASS DECLARATIONS >>>>>> @@ -36,10 +38,6 @@ namespace Muon class MuonEDMPrinterTool; } -namespace MagField { - class IMagFieldSvc; -} - namespace MuonCombined { class InDetCandidate; class MuonCandidate; @@ -94,7 +92,8 @@ namespace MuonCombined { ToolHandle<Rec::IMuidMuonRecovery> m_muonRecovery; ToolHandle<Rec::IMuonMatchQuality> m_matchQuality; ToolHandle<Trk::ITrackScoringTool> m_trackScoringTool; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; const AtlasDetectorID *m_DetID; SG::ReadHandleKey<xAOD::VertexContainer> m_vertexKey { this, "VertexContainer", "PrimaryVertices", "primary vertex container" }; diff --git a/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h b/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h index 1c5346eada7..3d2683309a4 100755 --- a/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h +++ b/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h @@ -17,7 +17,6 @@ #include "GaudiKernel/ToolHandle.h" #include <string> #include <vector> -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "TrkParameters/TrackParameters.h" namespace Trk @@ -67,8 +66,7 @@ namespace Trk /** The Extrapolator to be retrieved */ ToolHandle<IExtrapolator> m_extrapolator; ToolHandle<IPropagator> m_propagator; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; //!< helper tool to get the magnetic field - MagneticFieldProperties* m_magFieldProperties; //!< magnetic field properties + MagneticFieldProperties* m_magFieldProperties; //!< magnetic field properties /** Random Number setup */ Rndm::Numbers* m_gaussDist; diff --git a/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h b/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h index 6098c4353d5..0f374f1deeb 100755 --- a/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h +++ b/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h @@ -14,7 +14,7 @@ #include "GaudiKernel/ToolHandle.h" #include "GaudiKernel/IRndmGenSvc.h" #include "GaudiKernel/RndmGenerators.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +#include "GeoPrimitives/GeoPrimitives.h" #include <string> class AtlasDetectorID; @@ -65,7 +65,6 @@ namespace Trk /** member variables for algorithm properties: */ ToolHandle<IPropagator> m_propagator; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; bool m_useCustomField; bool m_useAlignedSurfaces; double m_fieldValue; diff --git a/Tracking/TrkExtrapolation/TrkExAlgs/src/ExtrapolatorTest.cxx b/Tracking/TrkExtrapolation/TrkExAlgs/src/ExtrapolatorTest.cxx index 4af2d977a61..3fead037c07 100755 --- a/Tracking/TrkExtrapolation/TrkExAlgs/src/ExtrapolatorTest.cxx +++ b/Tracking/TrkExtrapolation/TrkExAlgs/src/ExtrapolatorTest.cxx @@ -14,7 +14,6 @@ #include "TrkSurfaces/DiscSurface.h" #include "TrkEventPrimitives/ParticleHypothesis.h" #include "EventPrimitives/EventPrimitives.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "TrkGeometry/MagneticFieldProperties.h" #include "GaudiKernel/SystemOfUnits.h" // std @@ -27,7 +26,6 @@ Trk::ExtrapolatorTest::ExtrapolatorTest(const std::string& name, ISvcLocator* pS AthAlgorithm(name,pSvcLocator), m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"), m_propagator("Trk::RungeKuttaPropagator/RungeKuttaPropagator"), - m_magFieldSvc("AtlasFieldSvc",name), m_magFieldProperties(0), m_gaussDist(0), m_flatDist(0), @@ -48,7 +46,6 @@ Trk::ExtrapolatorTest::ExtrapolatorTest(const std::string& name, ISvcLocator* pS // used algorithms and alg tools declareProperty("Extrapolator", m_extrapolator); declareProperty("Propagator", m_propagator); - declareProperty("MagFieldSvc", m_magFieldSvc ); // algorithm steering declareProperty("StartPerigeeSigmaD0" , m_sigmaD0); @@ -109,10 +106,6 @@ StatusCode Trk::ExtrapolatorTest::initialize() return StatusCode::FAILURE; } - if (m_magFieldSvc.retrieve().isFailure()) { - msg(MSG::FATAL) << "Could not retrieve Tool " << m_magFieldSvc << ". Exiting."<<endmsg; - return StatusCode::FAILURE; - } m_magFieldProperties = new Trk::MagneticFieldProperties(); if (m_referenceSurfaceRadius.size() == m_referenceSurfaceHalflength.size()) { diff --git a/Tracking/TrkExtrapolation/TrkExAlgs/src/RiddersAlgorithm.cxx b/Tracking/TrkExtrapolation/TrkExAlgs/src/RiddersAlgorithm.cxx index be538cca3bd..d72940c3b7d 100755 --- a/Tracking/TrkExtrapolation/TrkExAlgs/src/RiddersAlgorithm.cxx +++ b/Tracking/TrkExtrapolation/TrkExAlgs/src/RiddersAlgorithm.cxx @@ -10,7 +10,6 @@ // Trk stuff #include "TrkExInterfaces/IPropagator.h" #include "TrkExUtils/TransportJacobian.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "TrkGeometry/MagneticFieldProperties.h" #include "TrkSurfaces/PlaneSurface.h" #include "TrkSurfaces/CylinderSurface.h" @@ -27,7 +26,6 @@ Trk::RiddersAlgorithm::RiddersAlgorithm(const std::string& name, ISvcLocator* pS : AthAlgorithm(name,pSvcLocator), m_propagator("Trk::RungeKuttaPropagator/RungeKuttaPropagator"), - m_magFieldSvc("AtlasFieldSvc",name), m_useCustomField(true), m_useAlignedSurfaces(true), m_fieldValue(2.*Gaudi::Units::tesla), @@ -91,7 +89,6 @@ Trk::RiddersAlgorithm::RiddersAlgorithm(const std::string& name, ISvcLocator* pS declareProperty("Propagator" , m_propagator); - declareProperty("MagFieldSvc" , m_magFieldSvc); declareProperty("CustomFieldValue" , m_fieldValue); declareProperty("UseCustomMagneticField" , m_useCustomField); declareProperty("UseAlignedSurfaces" , m_useAlignedSurfaces); @@ -143,12 +140,6 @@ StatusCode Trk::RiddersAlgorithm::initialize() return StatusCode::FAILURE; } - // Get the Magnetic Field Tool if needed - if (!m_useCustomField && m_magFieldSvc.retrieve().isFailure()) { - ATH_MSG_FATAL( "Could not retrieve Tool " << m_magFieldSvc << ". Exiting." ); - return StatusCode::FAILURE; - } - // Prepare the magnetic field properties if (!m_useCustomField) m_magFieldProperties = new Trk::MagneticFieldProperties(); diff --git a/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/CMakeLists.txt b/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/CMakeLists.txt index ec07ecae876..8f582373da5 100644 --- a/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/CMakeLists.txt +++ b/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/CMakeLists.txt @@ -35,7 +35,7 @@ atlas_add_component( TrkExSTEP_Propagator src/*.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives EventPrimitives MagFieldInterfaces TrkGeometry TrkEventPrimitives TrkMaterialOnTrack TrkParameters TrkExInterfaces TrkExUtils GaudiKernel TrkDetDescrUtils TrkSurfaces TrkTrack MagFieldElements MagFieldConditions ) + LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives EventPrimitives TrkGeometry TrkEventPrimitives TrkMaterialOnTrack TrkParameters TrkExInterfaces TrkExUtils GaudiKernel TrkDetDescrUtils TrkSurfaces TrkTrack MagFieldElements MagFieldConditions ) # Install files from the package: atlas_install_headers( TrkExSTEP_Propagator ) diff --git a/Tracking/TrkTools/TrkMaterialProvider/CMakeLists.txt b/Tracking/TrkTools/TrkMaterialProvider/CMakeLists.txt index e322885cd6b..922d47f5cf9 100644 --- a/Tracking/TrkTools/TrkMaterialProvider/CMakeLists.txt +++ b/Tracking/TrkTools/TrkMaterialProvider/CMakeLists.txt @@ -20,13 +20,15 @@ atlas_depends_on_subdirs( PUBLIC DetectorDescription/Identifier Event/EventPrimitives GaudiKernel - MagneticField/MagFieldInterfaces Reconstruction/MuonIdentification/MuidEvent Reconstruction/MuonIdentification/MuidInterfaces Reconstruction/MuonIdentification/muonEvent Reconstruction/RecoTools/RecoToolInterfaces Tracking/TrkEvent/TrkEventUtils - Tracking/TrkEvent/TrkMaterialOnTrack ) + Tracking/TrkEvent/TrkMaterialOnTrack + MagneticField/MagFieldElements + MagneticField/MagFieldConditions + ) # External dependencies: find_package( CLHEP ) @@ -36,7 +38,7 @@ atlas_add_component( TrkMaterialProvider src/TrkMaterialProviderTool.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps TrkDetDescrInterfaces TrkGeometry TrkSurfaces TrkParameters TrkTrack TrkExInterfaces TrkToolInterfaces AtlasDetDescr Identifier EventPrimitives GaudiKernel MagFieldInterfaces MuidEvent MuidInterfaces muonEvent RecoToolInterfaces TrkEventUtils TrkMaterialOnTrack ) + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps TrkDetDescrInterfaces TrkGeometry TrkSurfaces TrkParameters TrkTrack TrkExInterfaces TrkToolInterfaces AtlasDetDescr Identifier EventPrimitives GaudiKernel MuidEvent MuidInterfaces muonEvent RecoToolInterfaces TrkEventUtils TrkMaterialOnTrack MagFieldElements MagFieldConditions ) # Install files from the package: atlas_install_headers( TrkMaterialProvider ) diff --git a/Tracking/TrkTools/TrkMaterialProvider/TrkMaterialProvider/TrkMaterialProviderTool.h b/Tracking/TrkTools/TrkMaterialProvider/TrkMaterialProvider/TrkMaterialProviderTool.h index 3d504d695ac..636a4cc0938 100644 --- a/Tracking/TrkTools/TrkMaterialProvider/TrkMaterialProvider/TrkMaterialProviderTool.h +++ b/Tracking/TrkTools/TrkMaterialProvider/TrkMaterialProvider/TrkMaterialProviderTool.h @@ -29,13 +29,11 @@ #include "TrkExInterfaces/IMultipleScatteringUpdator.h" #include "TrkGeometry/TrackingVolume.h" #include "TrkGeometry/MagneticFieldProperties.h" +// For magneticfield +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "RecoToolInterfaces/IMuonCaloEnergyTool.h" -namespace MagField { - class IMagFieldSvc; -} - namespace Trk { class Surface; } @@ -194,7 +192,9 @@ namespace Trk{ const Trk::Volume* m_calorimeterVolume; const Trk::Volume* m_indetVolume; - ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc; + // Read handle for conditions object to get the field cache + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", + "Name of the Magnetic Field conditions object key"}; bool m_applyTGScaling; bool m_repositionTSOS; diff --git a/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx b/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx index b66cb97b6bd..0c04dd1d630 100644 --- a/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx +++ b/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx @@ -15,7 +15,6 @@ #include "AtlasDetDescr/AtlasDetectorID.h" #include "Identifier/Identifier.h" #include "TrkEventUtils/IdentifierExtractor.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "muonEvent/CaloEnergy.h" @@ -50,7 +49,6 @@ Trk::TrkMaterialProviderTool::TrkMaterialProviderTool(const std::string& t, cons m_DetID(nullptr), m_calorimeterVolume(nullptr), m_indetVolume(nullptr), - m_magFieldSvc ("AtlasFieldSvc",n), m_maxNTracksIso(2), m_paramPtCut(15.0*Gaudi::Units::GeV), m_useCaloEnergyMeasurement(true), @@ -68,7 +66,6 @@ Trk::TrkMaterialProviderTool::TrkMaterialProviderTool(const std::string& t, cons declareProperty("CaloMeasTool", m_caloMeasTool); declareProperty("CaloParamTool", m_caloParamTool); declareProperty("TrackIsolationTool", m_trackIsolationTool); - declareProperty("MagFieldSvc", m_magFieldSvc); declareProperty("MaxNTracksIso", m_maxNTracksIso); declareProperty("ParamPtCut", m_paramPtCut); declareProperty("UseCaloEnergyMeasurement", m_useCaloEnergyMeasurement); @@ -110,7 +107,8 @@ Trk::TrkMaterialProviderTool::initialize() m_trackIsolationTool.disable(); } - ATH_CHECK(m_magFieldSvc.retrieve()); + /// handle to the magnetic field cache + ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); // need an Atlas id-helper to identify sub-detectors, take the one from detStore if (detStore()->retrieve(m_DetID, "AtlasID").isFailure()) { @@ -475,13 +473,26 @@ void Trk::TrkMaterialProviderTool::getCaloMEOT(const Trk::Track& idTrack, const ATH_MSG_WARNING("Unable to find first MS TSOS with Track Parameters!"); #endif + MagField::AtlasFieldCache fieldCache; + // Get field cache object + EventContext ctx = Gaudi::Hive::currentContext(); + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + + if (fieldCondObj == nullptr) { + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return; + } + fieldCondObj->getInitializedCache (fieldCache); + + double Eloss = 0.; double X0ScaleMS = 0.; double ElossScaleMS = 0.; // get calorimeter TSOS from TG DataVector<const Trk::TrackStateOnSurface>* caloTSOS = this->getCaloTSOS (*(*lastIDwP)->trackParameters(), // idTrack, - m_magFieldSvc->toroidOn() ? msTrack : idTrack, + fieldCache.toroidOn() ? msTrack : idTrack, (*firstMSnotPerigee)->surface(), Trk::alongMomentum, Trk::muon, @@ -491,10 +502,10 @@ void Trk::TrkMaterialProviderTool::getCaloMEOT(const Trk::Track& idTrack, const true); if(!caloTSOS || caloTSOS->size()!=3) { - if((!m_magFieldSvc->toroidOn()&&fabs(idTrack.perigeeParameters()->parameters()[Trk::qOverP])*4000.<1)|| (m_magFieldSvc->toroidOn()&&msTrack.perigeeParameters()->parameters()[Trk::qOverP]!=1/100000.&&msTrack.perigeeParameters()->parameters()[Trk::qOverP]!=0)) { + if((!fieldCache.toroidOn()&&fabs(idTrack.perigeeParameters()->parameters()[Trk::qOverP])*4000.<1)|| (fieldCache.toroidOn()&&msTrack.perigeeParameters()->parameters()[Trk::qOverP]!=1/100000.&&msTrack.perigeeParameters()->parameters()[Trk::qOverP]!=0)) { // Warnings only for high momentum ID tracks and MS tracks that have measured curvature (Straight track has pq= 100000) - if(!m_magFieldSvc->toroidOn()) ATH_MSG_WARNING(" Toroid off q*momentum of ID track " << 1./idTrack.perigeeParameters()->parameters()[Trk::qOverP]); - if(m_magFieldSvc->toroidOn()) ATH_MSG_WARNING(" Toroid on q*momentum of MS track " << 1./msTrack.perigeeParameters()->parameters()[Trk::qOverP]); + if(!fieldCache.toroidOn()) ATH_MSG_WARNING(" Toroid off q*momentum of ID track " << 1./idTrack.perigeeParameters()->parameters()[Trk::qOverP]); + if(fieldCache.toroidOn()) ATH_MSG_WARNING(" Toroid on q*momentum of MS track " << 1./msTrack.perigeeParameters()->parameters()[Trk::qOverP]); ATH_MSG_WARNING("Unable to retrieve Calorimeter TSOS from extrapolateM+aggregation (null or !=3)"); if(!caloTSOS) { ATH_MSG_WARNING(" Zero Calorimeter TSOS from extrapolateM+aggregation"); -- GitLab