From 087ab6fdbdae75a2c8a45e9fbe15a3fd8f59ac7c Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Fri, 14 May 2021 22:08:13 +0800 Subject: [PATCH] WIP: add the package MagneticFieldMap. It is not implemented yet. --- Detector/CMakeLists.txt | 1 + Detector/MagneticFieldMap/CMakeLists.txt | 20 ++++++++++++ .../src/GenericBFieldMapBrBz.cpp | 17 ++++++++++ .../src/GenericBFieldMapBrBz.h | 31 +++++++++++++++++++ .../MagneticFieldMap/src/IFieldMapProvider.h | 25 +++++++++++++++ 5 files changed, 94 insertions(+) create mode 100644 Detector/MagneticFieldMap/CMakeLists.txt create mode 100644 Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.cpp create mode 100644 Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.h create mode 100644 Detector/MagneticFieldMap/src/IFieldMapProvider.h diff --git a/Detector/CMakeLists.txt b/Detector/CMakeLists.txt index 57e6f2ce..d628d7ab 100644 --- a/Detector/CMakeLists.txt +++ b/Detector/CMakeLists.txt @@ -7,3 +7,4 @@ add_subdirectory(DetInterface) add_subdirectory(DetSegmentation) add_subdirectory(GeomSvc) add_subdirectory(Identifier) +add_subdirectory(MagneticFieldMap) diff --git a/Detector/MagneticFieldMap/CMakeLists.txt b/Detector/MagneticFieldMap/CMakeLists.txt new file mode 100644 index 00000000..4d5e608e --- /dev/null +++ b/Detector/MagneticFieldMap/CMakeLists.txt @@ -0,0 +1,20 @@ +################################################################################# +##Package : MagneticFieldMap +################################################################################# + +gaudi_add_module(MagneticFieldMap + SOURCES src/GenericBFieldMapBrBz.cpp + LINK Gaudi::GaudiKernel + ${DD4hep_COMPONENT_LIBRARIES} + ${ROOT_LIBRARIES} +) + +set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) +message(STATUS "LIBRARY_OUTPUT_PATH -> ${LIBRARY_OUTPUT_PATH}") +dd4hep_generate_rootmap(MagneticFieldMap) + +install(TARGETS MagneticFieldMap + EXPORT CEPCSWTargets + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib + COMPONENT dev) diff --git a/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.cpp b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.cpp new file mode 100644 index 00000000..b4125d41 --- /dev/null +++ b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.cpp @@ -0,0 +1,17 @@ + +#include "GenericBFieldMapBrBz.h" + +GenericBFieldMapBrBz::GenericBFieldMapBrBz() + : m_provider(nullptr) { + +} + +void GenericBFieldMapBrBz::fieldComponents(const double* pos, double* field) { + double curfield[3] = {0.0, 0.0, 0.0}; + + field[0] += curfield[0]; + field[1] += curfield[1]; + field[1] += curfield[2]; + + return; +} diff --git a/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.h b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.h new file mode 100644 index 00000000..c8edf9a2 --- /dev/null +++ b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.h @@ -0,0 +1,31 @@ +#ifndef GenericBFieldMapBrBz_h +#define GenericBFieldMapBrBz_h + +/* + * GenericBFieldMapBrBz is an extension of Cartesian Field in DD4hep. + * - It enables the DD4hep to access the Magnetic Service from Gaudi. + * - It also enables the calculation of Br/Bz at position X. + * - It will get the map from an abstract class IFieldMapProvider. + * + * -- Tao Lin <lintao AT ihep.ac.cn> + */ + +#include <DD4hep/FieldTypes.h> + +#include "IFieldMapProvider.h" + + +class GenericBFieldMapBrBz: public dd4hep::CartesianField::Object { +public: + + GenericBFieldMapBrBz(); + + virtual void fieldComponents(const double* pos, double* field); + +private: + + IFieldMapProvider* m_provider; +}; + +#endif + diff --git a/Detector/MagneticFieldMap/src/IFieldMapProvider.h b/Detector/MagneticFieldMap/src/IFieldMapProvider.h new file mode 100644 index 00000000..e3eda83f --- /dev/null +++ b/Detector/MagneticFieldMap/src/IFieldMapProvider.h @@ -0,0 +1,25 @@ +#ifndef IFieldMapProvider_h +#define IFieldMapProvider_h + +/* + * IFieldMapProvider will provide the B-Field at a 2D grid (r-z). + * The provider will return the bin index for r/z. Then the GenericBFieldMapBrBz + * will use this bin index to get the values at (r0,z0), (r1,z0), (r0,z1), (r1,z1). + * The interpolation is not computated IFieldMapProvider. Please see GenericBFieldMapBrBz. + * + * -- Tao Lin <lintao AT ihep.ac.cn> + */ + +class IFieldMapProvider { + + // Meta data about the map + virtual int rBinIdx(double r) = 0; + virtual int zBinIdx(double z) = 0; + + // The Br and Bz + virtual void access(int rbin, int zbin, double& Br, double& Bz) = 0; + +}; + +#endif + -- GitLab