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