From d05a1d19afc09b6801dbff49beee5aa375777348 Mon Sep 17 00:00:00 2001
From: Robert Johannes Langenberg <robert.langenberg@cern.ch>
Date: Fri, 15 Nov 2013 08:52:36 +0100
Subject: [PATCH] IMagFieldSvc.h fixing unsafe type conversion
 (MagFieldInterfaces-00-01-13)

---
 .../MagFieldInterfaces/IMagFieldSvc.h         | 75 +++++++++++++++++++
 .../MagFieldInterfaces/cmt/requirements       | 22 ++++++
 2 files changed, 97 insertions(+)
 create mode 100644 MagneticField/MagFieldInterfaces/MagFieldInterfaces/IMagFieldSvc.h
 create mode 100644 MagneticField/MagFieldInterfaces/cmt/requirements

diff --git a/MagneticField/MagFieldInterfaces/MagFieldInterfaces/IMagFieldSvc.h b/MagneticField/MagFieldInterfaces/MagFieldInterfaces/IMagFieldSvc.h
new file mode 100644
index 000000000000..40baec8ec642
--- /dev/null
+++ b/MagneticField/MagFieldInterfaces/MagFieldInterfaces/IMagFieldSvc.h
@@ -0,0 +1,75 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// IMagFieldSvc.h, (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+#ifndef MAGFIELDINTERFACES_IMAGFIELDSVC_H
+#define MAGFIELDINTERFACES_IMAGFIELDSVC_H
+
+#include <cmath>
+#include <iostream>
+
+// Framework includes
+#include "GaudiKernel/IInterface.h"
+
+// Amg classes
+#include "GeoPrimitives/GeoPrimitives.h"
+
+/** Declaration of the interface ID ( interface id, major version, minor version) */
+static const InterfaceID IID_IMagFieldSvc("IMagFieldSvc", 1, 0);
+
+namespace MagField {
+
+/** @ class IMagFieldSvc
+ 
+ @ author Elmar.Ritsch -at- cern.ch
+ */
+    class IMagFieldSvc: virtual public IInterface {
+
+    ///////////////////////////////////////////////////////////////////
+    // Public methods:
+    ///////////////////////////////////////////////////////////////////
+    public:
+        /** constructor */
+        IMagFieldSvc() : m_solenoidCurrent(0.0), m_toroidCurrent(0.0) {;}
+
+        /** Retrieve interface ID */
+        static const InterfaceID& interfaceID() {
+            return IID_IMagFieldSvc;
+        }
+
+        /** get B field value at given position */
+        /** xyz[3] is in mm, bxyz[3] is in kT */
+        /** if deriv[9] is given, field derivatives are returned in kT/mm */
+        virtual void getField(const double *xyz, double *bxyz, double *deriv = 0) = 0;
+
+        /** a getField() wrapper for Amg classes */
+        void getField(const Amg::Vector3D *xyz, Amg::Vector3D *bxyz, Amg::RotationMatrix3D *deriv = 0) {
+          getField( xyz->data(), bxyz->data(), deriv->data() );
+        }
+
+        /** get B field value on the z-r plane at given position */
+        /** works only inside the solenoid; otherwise calls getField() above */
+        /** xyz[3] is in mm, bxyz[3] is in kT */
+        /** if deriv[9] is given, field derivatives are returned in kT/mm */
+        virtual void getFieldZR(const double *xyz, double *bxyz, double *deriv = 0) = 0;
+
+        /** status of the magnets */
+        bool solenoidOn() { return solenoidCurrent() > 0.0; }
+        bool toroidOn()   { return toroidCurrent()   > 0.0; }
+        float solenoidCurrent() { return m_solenoidCurrent; }
+        float toroidCurrent()   { return m_toroidCurrent;   }
+
+    protected:
+        void setSolenoidCurrent(float current) { m_solenoidCurrent = current; }
+        void setToroidCurrent  (float current) { m_toroidCurrent   = current; }
+
+    private:
+        float m_solenoidCurrent; // solenoid current in ampere
+        float m_toroidCurrent;   // toroid current in ampere
+    };
+}
+
+#endif //> !MAGFIELDINTERFACES_IMAGFIELDSVC_H
diff --git a/MagneticField/MagFieldInterfaces/cmt/requirements b/MagneticField/MagFieldInterfaces/cmt/requirements
new file mode 100644
index 000000000000..f8e29f779970
--- /dev/null
+++ b/MagneticField/MagFieldInterfaces/cmt/requirements
@@ -0,0 +1,22 @@
+package MagFieldInterfaces
+author <elmar.ritsch@cern.ch>
+
+manager Niels van Eldik <niels.van.eldik@cern.ch>
+manager Robert Langenberg <robert.johannes.langenberg@cern.ch>
+manager Masahiro Morii <masahiro_morii@harvard.edu>
+manager Elmar Ritsch <elmar.ritsch@cern.ch>
+
+#################################################################
+# public use statements
+#################################################################
+public
+use AtlasPolicy                 AtlasPolicy-*
+use GaudiInterface              GaudiInterface-*              External
+use GeoPrimitives               GeoPrimitives-*               DetectorDescription
+
+#################################################################
+# private use statements
+#################################################################
+private
+
+end_private
-- 
GitLab