diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt index d56baf5538c9fc5fb8322b147cd1b72969676572..6886eb20050b85fea13affea1efb93de3bf01491 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/CMakeLists.txt @@ -12,6 +12,7 @@ atlas_depends_on_subdirs( PUBLIC GaudiKernel InnerDetector/InDetRecTools/InDetRecToolInterfaces PRIVATE + Control/AthenaKernel Tools/PathResolver DetectorDescription/GeoPrimitives PhysicsAnalysis/AnalysisCommon/AnalysisUtils @@ -47,7 +48,7 @@ atlas_add_component( InDetVKalVxInJetTool INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking PathResolver GaudiKernel InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils - TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver ) + TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver ) # Install files from the package: atlas_install_headers( InDetVKalVxInJetTool ) @@ -56,10 +57,10 @@ atlas_install_joboptions( share/*.txt ) #This test is temporarily commented in order not to slow down magnetic field migration to condition data. #Will be restored later -#atlas_add_test( InDetTrkInJetType_test -# SOURCES test/InDetTrkInJetType_test.cxx -# INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} -# LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking PathResolver GaudiKernel -# InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils -# TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver -# LOG_IGNORE_PATTERN "Booking|AtlasFieldSvc|weight file|create data set info" ) +atlas_add_test( InDetTrkInJetType_test + SOURCES test/InDetTrkInJetType_test.cxx + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking PathResolver GaudiKernel + InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils + TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver AthenaKernel + LOG_IGNORE_PATTERN "Booking|ClassIDSvc|weight file|create data set info" ) diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/share/InDetTrkInJetType_test.ref b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/share/InDetTrkInJetType_test.ref index 024f5fe341b7ba3ba3d0d0526b54f81524e4198b..1a1168732ccb2551d5cc58581f578293dd904bcb 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/share/InDetTrkInJetType_test.ref +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/share/InDetTrkInJetType_test.ref @@ -13,28 +13,22 @@ ApplicationMgr SUCCESS running on karma on Fri Jul 26 11:39:59 2019 ==================================================================================================================================== ApplicationMgr INFO Application Manager Configured successfully -AtlasFieldSvc INFO initialize() ... -AtlasFieldSvc INFO Currents are set-up by jobOptions - delaying map initialization until BeginRun incident happens -AtlasFieldSvc INFO Added listener to BeginRun incident -AtlasFieldSvc INFO initialize() successful +ClassIDSvc INFO getRegistryEntries: read 1912 CLIDRegistry entries for module ALL EventLoopMgr WARNING Unable to locate service "EventSelector" EventLoopMgr WARNING No events will be processed from external input. -HistogramPersis...WARNING Histograms saving not required. ApplicationMgr INFO Application Manager Initialized successfully ApplicationMgr Ready -AtlasFieldSvc INFO handling incidents ... -AtlasFieldSvc INFO importCurrents() ... -AtlasFieldSvc INFO Initializing the field map (solenoidCurrent=7730 toroidCurrent=20400) -AtlasFieldSvc INFO reading the map from /home/sss/nobackup/atlas/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root -AtlasFieldSvc INFO Initialized the field map from /home/sss/nobackup/atlas/ReleaseData/v20/MagneticFieldMaps/bfieldmap_7730_20400_14m.root -AtlasFieldSvc INFO Currents imported and map initialized -AtlasFieldSvc INFO BeginRun incident handled -AtlasFieldSvc INFO incidents handled successfully - : Booking "BDTG" of type "BDT" from /home/sss/nobackup/atlas/GroupData/InDetVKalVxInJetTool/TrackClassif_3cl.v02.xml. - : Reading weight file: /home/sss/nobackup/atlas/GroupData/InDetVKalVxInJetTool/TrackClassif_3cl.v02.xml +InDetVKalVxInJetTool/InDetTrkInJetType_test initGaudi +InDetVKalVxInJetTool/InDetTrkInJetType_test record +create data set info Default + : Booking "BDTG" of type "BDT" from /cvmfs/atlas.cern.ch/repo/sw/database/GroupData/InDetVKalVxInJetTool/TrackClassif_3cl.v02.xml. + : Reading weight file: /cvmfs/atlas.cern.ch/repo/sw/database/GroupData/InDetVKalVxInJetTool/TrackClassif_3cl.v02.xml <HEADER> DataSetInfo : [Default] : Added class "Signal" <HEADER> DataSetInfo : [Default] : Added class "Fragment" <HEADER> DataSetInfo : [Default] : Added class "Garbage" : Booked classifier "BDTG" of type: "BDT" +ClassIDSvc INFO getRegistryEntries: read 4267 CLIDRegistry entries for module ALL ToolSvc.InDet::... INFO TrkVKalVrtFitter initialize() successful +InDetVKalVxInJetTool/InDetTrkInJetType_test retrieve tool test1 +test1 is OK diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/share/InDetVKalVxInJetTool_tests.txt b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/share/InDetVKalVxInJetTool_tests.txt index ce532aaa3b830d9f4a755d386296875e63b20929..5abb41f84bf467f0fe8fa374fde3d4b12126e28c 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/share/InDetVKalVxInJetTool_tests.txt +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/share/InDetVKalVxInJetTool_tests.txt @@ -1,3 +1 @@ -ApplicationMgr.ExtSvc={"MagField::AtlasFieldSvc/AtlasFieldSvc"}; -AtlasFieldSvc.UseDCS=false; -AtlasFieldSvc.UseMapsFromCool=false; +ApplicationMgr.ExtSvc += { "StoreGateSvc/ConditionStore", "CondSvc" }; diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/test/InDetTrkInJetType_test.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/test/InDetTrkInJetType_test.cxx index 3ce5a83cf99e13a03bf53abae91c6d2c5fadf537..fec643bcd22eae65fe8cdb1484087b89e3183987 100644 --- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/test/InDetTrkInJetType_test.cxx +++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/test/InDetTrkInJetType_test.cxx @@ -13,7 +13,7 @@ #include "InDetVKalVxInJetTool/InDetTrkInJetType.h" #include "xAODTracking/Vertex.h" #include "xAODTracking/TrackParticle.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "EventPrimitives/EventPrimitivesHelpers.h" #include "TestTools/initGaudi.h" #include "TestTools/FLOATassert.h" @@ -22,6 +22,7 @@ #include "GaudiKernel/Incident.h" #include "GaudiKernel/IIncidentListener.h" #include "GaudiKernel/SystemOfUnits.h" +#include "AthenaKernel/DummyRCUSvc.h" #include "TInterpreter.h" #include <iostream> #include <cassert> @@ -102,6 +103,26 @@ void test1 (InDet::IInDetTrkInJetType& tool) assert( Athena_test::isEqual (out[0], 0.0946472, 1e-5) ); assert( Athena_test::isEqual (out[1], 0.479743, 1e-5) ); assert( Athena_test::isEqual (out[2], 0.42561, 1e-5) ); + + std::cout << "test1 is OK\n"; +} + +EventIDBase timestamp (int t) +{ + return EventIDBase (EventIDBase::UNDEFNUM, // run + EventIDBase::UNDEFEVT, // event + t); +} + + +EventIDBase runlbn (int run, + int lbn) +{ + return EventIDBase (run, // run + EventIDBase::UNDEFEVT, // event + EventIDBase::UNDEFNUM, // timestamp + 0, // ns offset + lbn); } @@ -110,14 +131,40 @@ int main() std::cout << "InDetVKalVxInJetTool/InDetTrkInJetType_test\n"; CxxUtils::ubsan_suppress ([]() { TInterpreter::Instance(); }); ISvcLocator* svcloc = nullptr; - Athena_test::initGaudi ("InDetVKalVxInJetTool/InDetVKalVxInJetTool_tests.txt", svcloc); + if (!Athena_test::initGaudi("InDetVKalVxInJetTool/InDetVKalVxInJetTool_tests.txt", svcloc)) { + return 1; + } + + + std::cout << "InDetVKalVxInJetTool/InDetTrkInJetType_test initGaudi \n"; + + + EventContext ctx; + ctx.setExtension (Atlas::ExtendedEventContext()); + EventIDBase eid (1, 0, 0, 0, 20); + ctx.setEventID (eid); + + Gaudi::Hive::setCurrentContext(ctx); + + Athena_test::DummyRCUSvc rcu; + DataObjID id ("fieldCondObj"); + auto cc = std::make_unique<CondCont<AtlasFieldCacheCondObj> > (rcu, id); + const EventIDRange range (runlbn (1, 10), runlbn (1, 100)); + assert( cc->insert (range, std::make_unique<AtlasFieldCacheCondObj>(), ctx).isSuccess() ); + + ServiceHandle<StoreGateSvc> conditionStore ("ConditionStore", "test"); + assert( conditionStore->record (std::move (cc), "fieldCondObj") ); + + + std::cout << "InDetVKalVxInJetTool/InDetTrkInJetType_test record \n"; - ServiceHandle<MagField::IMagFieldSvc> field ("MagField::AtlasFieldSvc/AtlasFieldSvc", "test"); - Incident inc_br ("test", IncidentType::BeginRun); - dynamic_cast<IIncidentListener*>(&*field)->handle (inc_br); ToolHandle<InDet::IInDetTrkInJetType> tool ("InDet::InDetTrkInJetType"); assert( tool.retrieve().isSuccess() ); + + + std::cout << "InDetVKalVxInJetTool/InDetTrkInJetType_test retrieve tool \n"; + test1 (*tool); diff --git a/MagneticField/MagFieldConditions/MagFieldConditions/AtlasFieldCacheCondObj.h b/MagneticField/MagFieldConditions/MagFieldConditions/AtlasFieldCacheCondObj.h index 0c9238116fadda7693ec4e4c1dea2a6ef8d34c05..74bb2636e4f066175c9fa8cefa2f00cb895524d6 100644 --- a/MagneticField/MagFieldConditions/MagFieldConditions/AtlasFieldCacheCondObj.h +++ b/MagneticField/MagFieldConditions/MagFieldConditions/AtlasFieldCacheCondObj.h @@ -23,9 +23,6 @@ public: ~AtlasFieldCacheCondObj(); - /// Temporary flag for switching between 'old' and 'new' magField usage - bool useNewBfieldCache() { return m_useNewBfieldCache; } - /** get B field cache for evaluation as a function of 2-d (solenoid) or 3-d (toroid) position. Resets cache to an initialized state */ inline void getInitializedCache (MagField::AtlasFieldCache& cache) const; @@ -38,12 +35,9 @@ public: /** set values for field scale and service to be able to build the cache **/ bool initialize(double solFieldScale, double torFieldScale, - const MagField::AtlasFieldMap* fieldMap, - bool useNewBfieldCache); + const MagField::AtlasFieldMap* fieldMap); private: - /// Temporary flag for switching between 'old' and 'new' magField usage - bool m_useNewBfieldCache{false}; double m_solFieldScale{1}; double m_torFieldScale{1}; const MagField::AtlasFieldMap* m_fieldMap{nullptr}; @@ -56,7 +50,7 @@ AtlasFieldCacheCondObj::getInitializedCache (MagField::AtlasFieldCache& cache) c { // setup with field scale and magnetic field service for first access to field */ - cache = MagField::AtlasFieldCache(m_solFieldScale, m_torFieldScale, m_fieldMap, m_useNewBfieldCache); + cache = MagField::AtlasFieldCache(m_solFieldScale, m_torFieldScale, m_fieldMap); } diff --git a/MagneticField/MagFieldConditions/src/AtlasFieldCacheCondObj.cxx b/MagneticField/MagFieldConditions/src/AtlasFieldCacheCondObj.cxx index 4423ac75c0ee2f2ad1a9eb9f06ec3f019727debf..d78140314c8c22c45900b9879d5adb1a5c12d1fd 100644 --- a/MagneticField/MagFieldConditions/src/AtlasFieldCacheCondObj.cxx +++ b/MagneticField/MagFieldConditions/src/AtlasFieldCacheCondObj.cxx @@ -12,11 +12,9 @@ AtlasFieldCacheCondObj::~AtlasFieldCacheCondObj() {} bool AtlasFieldCacheCondObj::initialize(double solFieldScale, double torFieldScale, - const MagField::AtlasFieldMap* fieldMap, - bool useNewBfieldCache) + const MagField::AtlasFieldMap* fieldMap) { // temporary flag - m_useNewBfieldCache = useNewBfieldCache; m_solFieldScale = solFieldScale; m_torFieldScale = torFieldScale; m_fieldMap = fieldMap; diff --git a/MagneticField/MagFieldElements/MagFieldElements/AtlasFieldCache.h b/MagneticField/MagFieldElements/MagFieldElements/AtlasFieldCache.h index f9b6f414cfa7db58edaa5f2d70960cf426ffa359..9a04eee74f3f9a97682100b2288a88810ac32f87 100644 --- a/MagneticField/MagFieldElements/MagFieldElements/AtlasFieldCache.h +++ b/MagneticField/MagFieldElements/MagFieldElements/AtlasFieldCache.h @@ -35,7 +35,6 @@ namespace MagField { * @author R.D.Schaffer -at- cern.ch */ class AtlasFieldCache -// : public ::AthMessaging { public: AtlasFieldCache(); @@ -43,13 +42,12 @@ public: // first access to field */ AtlasFieldCache(double solFieldScale, double torFieldScale, - const AtlasFieldMap* fieldMap, - bool useNewBfieldCache); + const AtlasFieldMap* fieldMap); AtlasFieldCache& operator=(AtlasFieldCache&& other) = default; ~AtlasFieldCache() = default; /// Temporary flag for switching between 'old' and 'new' magField usage - bool useNewBfieldCache() { return m_useNewBfieldCache; } + bool useNewBfieldCache() { return true; } /** get B field value at given position */ /** xyz[3] is in mm, bxyz[3] is in kT */ @@ -62,11 +60,8 @@ public: double* ATH_RESTRICT deriv = nullptr); /** status of the magnets */ - bool solenoidOn() const - { - return m_fieldMap ? m_fieldMap->solenoidOn() : false; - } - bool toroidOn() const { return m_fieldMap ? m_fieldMap->toroidOn() : false; } + bool solenoidOn() const; + bool toroidOn() const; private: AtlasFieldCache(const AtlasFieldCache& other) = delete; @@ -76,9 +71,6 @@ private: bool fillFieldCache(double z, double r, double phi); bool fillFieldCacheZR(double z, double r); - /// Temporary flag for switching between 'old' and 'new' magField usage - bool m_useNewBfieldCache{ false }; - /// magnetic field scales from currents double m_solScale{ 1 }; double m_torScale{ 1 }; diff --git a/MagneticField/MagFieldElements/MagFieldElements/AtlasFieldCache.icc b/MagneticField/MagFieldElements/MagFieldElements/AtlasFieldCache.icc index 4cce8882902607861072dcce1e2e6d0469c7db5d..1ee7397d5c8ebd297fda5e7778ca81bc54b0ac71 100644 --- a/MagneticField/MagFieldElements/MagFieldElements/AtlasFieldCache.icc +++ b/MagneticField/MagFieldElements/MagFieldElements/AtlasFieldCache.icc @@ -53,6 +53,16 @@ MagField::AtlasFieldCache::getField(const double* ATH_RESTRICT xyz, double* ATH_RESTRICT bxyz, double* ATH_RESTRICT deriv) { + // Allow for the case of no map for testing + if ( m_fieldMap == nullptr ) { + // constant ATLAS magnetic field if no map has been set - for testing + constexpr double TEST_BFIELD = 1.997; + bxyz[0] = bxyz[1] = 0; + bxyz[2] = TEST_BFIELD; + if (deriv) for (int i = 0; i < 9; i++) deriv[i] = 0.; + return; + } + const double& x(xyz[0]); const double& y(xyz[1]); const double& z(xyz[2]); @@ -94,6 +104,17 @@ MagField::AtlasFieldCache::getFieldZR(const double* ATH_RESTRICT xyz, double* ATH_RESTRICT bxyz, double* ATH_RESTRICT deriv) { + + // Allow for the case of no map for testing + if ( m_fieldMap == nullptr ) { + // constant ATLAS magnetic field if no map has been set - for testing + constexpr double TEST_BFIELD = 1.997; + bxyz[0] = bxyz[1] = 0; + bxyz[2] = TEST_BFIELD; + if (deriv) for (int i = 0; i < 9; i++) deriv[i] = 0.; + return; + } + const double& x(xyz[0]); const double& y(xyz[1]); const double& z(xyz[2]); @@ -117,3 +138,12 @@ MagField::AtlasFieldCache::getFieldZR(const double* ATH_RESTRICT xyz, } +inline bool +MagField::AtlasFieldCache::solenoidOn() const { + return m_fieldMap ? m_fieldMap->solenoidOn() : false; +} + +inline bool +MagField::AtlasFieldCache::toroidOn() const { + return m_fieldMap ? m_fieldMap->toroidOn() : false; +} diff --git a/MagneticField/MagFieldElements/src/AtlasFieldCache.cxx b/MagneticField/MagFieldElements/src/AtlasFieldCache.cxx index e8ad866929354a8fa28344e36885437dab393758..d21ffee4b7fe0920c77fb48e4e92d80f979f0d4d 100644 --- a/MagneticField/MagFieldElements/src/AtlasFieldCache.cxx +++ b/MagneticField/MagFieldElements/src/AtlasFieldCache.cxx @@ -16,20 +16,18 @@ MagField::AtlasFieldCache::AtlasFieldCache() {} MagField::AtlasFieldCache::AtlasFieldCache(double solFieldScale, double torFieldScale, - const AtlasFieldMap* fieldMap, - bool useNewBfieldCache) - : // temporary flag - m_useNewBfieldCache(useNewBfieldCache) - , m_solScale(solFieldScale) - , m_torScale(torFieldScale) - , - // Get solenoid zone id from field service - m_solZoneId(fieldMap->solenoidZoneId()) - , - // set field service - m_fieldMap(fieldMap) + const AtlasFieldMap* fieldMap) + : + m_solScale(solFieldScale), + m_torScale(torFieldScale), + // set field service + m_fieldMap(fieldMap) { - // save ZR bfield - m_meshZR = m_fieldMap->getBFieldMesh(); + if (m_fieldMap) { + // save ZR bfield + m_meshZR = m_fieldMap->getBFieldMesh() ; + // Get solenoid zone id from field service + m_solZoneId = fieldMap->solenoidZoneId(); + } } diff --git a/MagneticField/MagFieldServices/CMakeLists.txt b/MagneticField/MagFieldServices/CMakeLists.txt index cbcc972cab216cd83ee575ed1592cc03a2e8db58..150469e9ac3411d89c1bcece54f825d6d1e24b0e 100644 --- a/MagneticField/MagFieldServices/CMakeLists.txt +++ b/MagneticField/MagFieldServices/CMakeLists.txt @@ -16,7 +16,9 @@ atlas_depends_on_subdirs( PUBLIC Control/StoreGate Database/AthenaPOOL/AthenaPoolUtilities GaudiKernel - Tools/PathResolver ) + Tools/PathResolver + Event/EventInfo + ) # External dependencies: find_package( CLHEP ) @@ -28,7 +30,8 @@ atlas_add_component( MagFieldServices src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} MagFieldElements MagFieldConditions CxxUtils - AthenaBaseComps MagFieldInterfaces StoreGateLib SGtests AthenaPoolUtilities GaudiKernel PathResolver ) + AthenaBaseComps MagFieldInterfaces StoreGateLib SGtests AthenaPoolUtilities GaudiKernel PathResolver + EventInfo ) # Install files from the package: atlas_install_headers( MagFieldServices ) diff --git a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldCacheCondAlg.h b/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldCacheCondAlg.h index 399c7bacd1c36e7282a8af10a6ed86cf03be106d..c1426976d4076c9abbd189f09d04aad80d99ecf6 100644 --- a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldCacheCondAlg.h +++ b/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldCacheCondAlg.h @@ -52,10 +52,6 @@ namespace MagField { StatusCode updateCurrentFromParameters(Cache& cache) const; void scaleField(Cache& cache, const MagField::AtlasFieldMap* fieldMap) const; - /// Temporary flag for switching between 'old' and 'new' magField usage - Gaudi::Property<bool> m_useNewBfieldCache {this, - "UseNewBfieldCache", true, "Temporary flag for switching between 'old' and 'new' magField usage. Default = true"}; - // threshold below which currents are considered zero Gaudi::Property<double> m_soleMinCurrent {this, "SoleMinCurrent", 1.0, "Minimum solenoid current (A) for which solenoid is considered ON"}; diff --git a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldMapCondAlg.h b/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldMapCondAlg.h index 4a43b19701ef4a6730accf31dff773f9871625ba..c87ece15d97f8a0bae48129ca3c5ba2d357459c9 100644 --- a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldMapCondAlg.h +++ b/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldMapCondAlg.h @@ -16,6 +16,7 @@ #include "StoreGate/WriteCondHandleKey.h" #include "AthenaPoolUtilities/CondAttrListCollection.h" #include "GaudiKernel/ICondSvc.h" +#include "EventInfo/TagInfo.h" // #include "MagFieldInterfaces/IMTMagFieldSvc.h" @@ -93,6 +94,10 @@ namespace MagField { ServiceHandle<ICondSvc> m_condSvc { this, "CondSvc", "CondSvc", "conditions service" }; + // TagInfo object - used to get currents via TagInfoMgr + SG::ReadHandleKey<TagInfo> m_tagInfoKey {this, + "TagInfo", "DetectorStore+ProcessingTags", "tag info key"}; + }; } diff --git a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py index 220484c6576bd2ac60d4891673f3cfa66e700932..0544ed4a3f25ee84beb45b51567b9855aa25214b 100644 --- a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py +++ b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py @@ -60,7 +60,6 @@ def MagneticFieldSvcCfg(flags, **kwargs): afcArgs.update( LockMapCurrents = True ) else: afcArgs.update( UseDCS = True ) - afcArgs.update( UseNewBfieldCache = True ) if 'UseDCS' in kwargs: afcArgs['UseDCS'] = kwargs['UseDCS'] mag_field_cache_cond_alg = CompFactory.MagField.AtlasFieldCacheCondAlg(**afcArgs) diff --git a/MagneticField/MagFieldServices/python/MagFieldServicesSetup.py b/MagneticField/MagFieldServices/python/MagFieldServicesSetup.py index e327b148f6203a3f876959e634fa414f10cd7789..dc86e0845f832dc0eb2688b22b0c0446d06213ca 100644 --- a/MagneticField/MagFieldServices/python/MagFieldServicesSetup.py +++ b/MagneticField/MagFieldServices/python/MagFieldServicesSetup.py @@ -34,8 +34,6 @@ def AtlasFieldCacheCondAlg(name="AtlasFieldCacheCondAlg",**kwargs): kwargs.setdefault( "LockMapCurrents", True ) else: kwargs.setdefault( "UseDCS", True ) - kwargs.setdefault( "UseNewBfieldCache", True ) - # kwargs.setdefault( "UseNewBfieldCache", False ) # kwargs.setdefault( "UseDCS", False ) # kwargs.setdefault( "UseSoleCurrent", 12000 ) # kwargs.setdefault( "UseToroCurrent", 20400 ) diff --git a/MagneticField/MagFieldServices/src/AtlasFieldCacheCondAlg.cxx b/MagneticField/MagFieldServices/src/AtlasFieldCacheCondAlg.cxx index 3ce18abed0e1515aaedb9c4fd714d8ffad984549..c14001187c99a9552b5e1fd08e464a4eef97d3b9 100644 --- a/MagneticField/MagFieldServices/src/AtlasFieldCacheCondAlg.cxx +++ b/MagneticField/MagFieldServices/src/AtlasFieldCacheCondAlg.cxx @@ -118,8 +118,7 @@ MagField::AtlasFieldCacheCondAlg::execute(const EventContext& ctx) const { // initialize cond obj with current scale factors and the field svc (needed to setup cache) if (!fieldCondObj->initialize(cache.m_solScaleFactor, cache.m_torScaleFactor, - fieldMap, - m_useNewBfieldCache)) { + fieldMap)) { ATH_MSG_ERROR("execute: Could not initialize conditions field object with solenoid/toroid currents " << cache.m_solScaleFactor << "," << cache.m_torScaleFactor); return StatusCode::FAILURE; @@ -136,7 +135,6 @@ MagField::AtlasFieldCacheCondAlg::execute(const EventContext& ctx) const { ATH_MSG_INFO ( "execute: initialized AtlasFieldCacheCondObj and cache with SFs - sol/tor " << cache.m_solScaleFactor << "/" << cache.m_torScaleFactor ); ATH_MSG_INFO ( "execute: solenoid zone id " << fieldMap->solenoidZoneId()); - ATH_MSG_INFO ( "execute: useNewBfieldCache " << m_useNewBfieldCache); return StatusCode::SUCCESS; } diff --git a/MagneticField/MagFieldServices/src/AtlasFieldMapCondAlg.cxx b/MagneticField/MagFieldServices/src/AtlasFieldMapCondAlg.cxx index c12cd47f0c88a6299d5d00c554de6dd91d0e64ff..56fc691ae50152e10706f55c765506774594b913 100644 --- a/MagneticField/MagFieldServices/src/AtlasFieldMapCondAlg.cxx +++ b/MagneticField/MagFieldServices/src/AtlasFieldMapCondAlg.cxx @@ -21,6 +21,9 @@ // PathResolver #include "PathResolver/PathResolver.h" +// TagInfo for special case of turning off toroid or solenoid +#include "EventInfo/TagInfo.h" + // ROOT #include "TFile.h" #include "TTree.h" @@ -42,6 +45,9 @@ MagField::AtlasFieldMapCondAlg::initialize() { // Read Handle for the map ATH_CHECK( m_mapsInputKey.initialize() ); + // Read Handle for tagInfo + ATH_CHECK( m_tagInfoKey.initialize() ); + // Output handle for the field map ATH_CHECK( m_mapCondObjOutputKey.initialize() ); @@ -192,12 +198,44 @@ MagField::AtlasFieldMapCondAlg::updateFieldMap(const EventContext& ctx, Cache& c const EventIDBase::number_type UNDEFNUM = EventIDBase::UNDEFNUM; const EventIDBase::event_number_t UNDEFEVT = EventIDBase::UNDEFEVT; EventIDRange rangeW (EventIDBase (0, UNDEFEVT, UNDEFNUM, 0, 0), - EventIDBase (UNDEFNUM-1, UNDEFEVT, UNDEFNUM, 0, 0)); + EventIDBase (UNDEFNUM-1, UNDEFEVT, UNDEFNUM, UNDEFNUM, 0)); cache.m_mapCondObjOutputRange = rangeW; ATH_MSG_INFO("updateFieldMap: useMapsFromCOOL == false, using default range " << rangeW); } - + // We allow to set currents via the TagInfoMgr which adds tags to the TagInfo object - only allowed for offline + + if (m_useMapsFromCOOL) { + + // TagInfo object - used to get currents via TagInfoMgr + SG::ReadHandle<TagInfo> tagInfoH{m_tagInfoKey, ctx}; + if (tagInfoH.isValid()) { + ATH_MSG_INFO("updateFieldMap: tagInfoH " << tagInfoH.fullKey() << " is valid. "); + int i = 0; + bool resetCurrentsFromTagInfo = false; + for ( auto tag : tagInfoH->getTags() ) { + ATH_MSG_DEBUG("updateFieldMap: i, tags: " << i << " " << tag.first << " " << tag.second); + ++i; + if (tag.first == "MapSoleCurrent") { + cache.m_mapSoleCurrent = std::stof(tag.second); + resetCurrentsFromTagInfo = true; + ATH_MSG_INFO("updateFieldMap: found MapSoleCurrent in TagInfo, setting the solenoid current " << cache.m_mapSoleCurrent); + } + else + if (tag.first == "MapToroCurrent") { + cache.m_mapToroCurrent = std::stof(tag.second); + resetCurrentsFromTagInfo = true; + ATH_MSG_INFO("updateFieldMap: found MapToroCurrent in TagInfo, setting the toroid current " << cache.m_mapToroCurrent); + } + } + if (resetCurrentsFromTagInfo) ATH_MSG_INFO("updateFieldMap: reset currents from TagInfo"); + else ATH_MSG_INFO("updateFieldMap: DID NOT reset currents from TagInfo"); + } + else { + ATH_MSG_INFO("updateFieldMap: tagInfoH " << tagInfoH.fullKey() << " is NOT valid. "); + } + } + // Select map file according to the value of the currents which indicate which map is 'on' // determine the map to load