From 490721d2a5828ca6b9e7cfe932c1e1be45c166e8 Mon Sep 17 00:00:00 2001
From: Frank Winklmeier <fwinkl@cern>
Date: Thu, 6 Aug 2020 10:19:33 +0200
Subject: [PATCH] MagFieldUtils: Add field reader test algorithm

Add a test algorithm to read/print the magnetic field conditions object.
---
 MagneticField/MagFieldUtils/CMakeLists.txt    |  4 +--
 .../MagFieldUtils/src/MagFieldCondReader.cxx  | 33 +++++++++++++++++++
 .../MagFieldUtils/src/MagFieldCondReader.h    | 31 +++++++++++++++++
 .../src/components/MagFieldUtils_entries.cxx  |  3 +-
 4 files changed, 67 insertions(+), 4 deletions(-)
 create mode 100644 MagneticField/MagFieldUtils/src/MagFieldCondReader.cxx
 create mode 100644 MagneticField/MagFieldUtils/src/MagFieldCondReader.h

diff --git a/MagneticField/MagFieldUtils/CMakeLists.txt b/MagneticField/MagFieldUtils/CMakeLists.txt
index 433f9eda168..54ac61d2513 100644
--- a/MagneticField/MagFieldUtils/CMakeLists.txt
+++ b/MagneticField/MagFieldUtils/CMakeLists.txt
@@ -14,9 +14,7 @@ atlas_add_component( MagFieldUtils
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps GaudiKernel MagFieldInterfaces )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} AthenaBaseComps GaudiKernel MagFieldConditions MagFieldInterfaces )
 
 # Install files from the package:
-atlas_install_headers( MagFieldUtils )
 atlas_install_joboptions( share/*.py )
-
diff --git a/MagneticField/MagFieldUtils/src/MagFieldCondReader.cxx b/MagneticField/MagFieldUtils/src/MagFieldCondReader.cxx
new file mode 100644
index 00000000000..e90b199f13c
--- /dev/null
+++ b/MagneticField/MagFieldUtils/src/MagFieldCondReader.cxx
@@ -0,0 +1,33 @@
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "MagFieldCondReader.h"
+
+MagField::CondReader::CondReader(const std::string& name, ISvcLocator* pSvcLocator) :
+  AthReentrantAlgorithm(name, pSvcLocator)
+{}
+
+StatusCode MagField::CondReader::initialize()
+{
+  ATH_CHECK(m_fieldCacheKey.initialize());
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode MagField::CondReader::execute(const EventContext& ctx) const
+{
+  SG::ReadCondHandle<AtlasFieldCacheCondObj> rh{m_fieldCacheKey, ctx};
+  const AtlasFieldCacheCondObj* fieldCondObj{*rh};
+  if (fieldCondObj == nullptr) {
+    ATH_MSG_ERROR("Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheKey.key());
+    return StatusCode::FAILURE;
+  }
+
+  MagField::AtlasFieldCache fieldCache;
+  fieldCondObj->getInitializedCache(fieldCache);
+
+  ATH_MSG_INFO("Field status: solenoid=" << fieldCache.solenoidOn() << ", toroids=" << fieldCache.toroidOn());
+
+  return StatusCode::SUCCESS;
+}
diff --git a/MagneticField/MagFieldUtils/src/MagFieldCondReader.h b/MagneticField/MagFieldUtils/src/MagFieldCondReader.h
new file mode 100644
index 00000000000..96fbf4046fa
--- /dev/null
+++ b/MagneticField/MagFieldUtils/src/MagFieldCondReader.h
@@ -0,0 +1,31 @@
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef MAGFIELDUTILS_MAGFIELDCONDREADER_H
+#define MAGFIELDUTILS_MAGFIELDCONDREADER_H
+
+#include "AthenaBaseComps/AthReentrantAlgorithm.h"
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
+#include "StoreGate/ReadHandleKey.h"
+
+namespace MagField {
+
+  /**
+   * Testing algorithm to read magnetic field
+   */
+  class CondReader : public AthReentrantAlgorithm {
+
+  public:
+    CondReader(const std::string& name, ISvcLocator* pSvcLocator);
+    StatusCode initialize() override;
+    StatusCode execute(const EventContext& ctx) const override;
+
+  private:
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheKey{
+        this, "AtlasFieldCacheCondObj", "fieldCondObj", "Magnetic Field conditions object key"};
+  };
+
+} // namespace MagField
+
+#endif
diff --git a/MagneticField/MagFieldUtils/src/components/MagFieldUtils_entries.cxx b/MagneticField/MagFieldUtils/src/components/MagFieldUtils_entries.cxx
index f0d04aae274..ae4d9b8978c 100644
--- a/MagneticField/MagFieldUtils/src/components/MagFieldUtils_entries.cxx
+++ b/MagneticField/MagFieldUtils/src/components/MagFieldUtils_entries.cxx
@@ -1,8 +1,9 @@
 #include "MagFieldUtils/MagFieldTestbedAlg.h"
 #include "MagFieldUtils/SolenoidTest.h"
 #include "MagFieldUtils/IdentityManipulator.h"
+#include "../MagFieldCondReader.h"
 
 DECLARE_COMPONENT( MagField::MagFieldTestbedAlg )
 DECLARE_COMPONENT( MagField::SolenoidTest )
 DECLARE_COMPONENT( MagField::IdentityManipulator )
-
+DECLARE_COMPONENT( MagField::CondReader )
-- 
GitLab