From 82dcf7a842d6edea1a5d27a0e7b406513cbb5021 Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Fri, 14 May 2021 23:24:30 +0800 Subject: [PATCH] WIP: provider is an attribute and source is a tag. --- .../src/GenericBFieldMapBrBz.cpp | 11 ++++++++++ .../src/GenericBFieldMapBrBz.h | 4 ++++ .../src/GenericBFieldMapBrBzFactory.cpp | 22 +++++++++++++++---- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.cpp b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.cpp index f69a94c2..fe268217 100644 --- a/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.cpp +++ b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.cpp @@ -16,3 +16,14 @@ void GenericBFieldMapBrBz::fieldComponents(const double* pos, double* field) { return; } + +void GenericBFieldMapBrBz::init_provider(const std::string& provider) { + if (provider == "file") { + std::cout << "Initialize provider with file. " << std::endl; + } else if (provider == "db") { + std::cout << "Initialize provider with file. " << std::endl; + } else { + std::string error_msg = "[ERROR] GenericBFieldMapBrBz: Unknown provider: " + provider; + throw std::runtime_error(error_msg); + } +} diff --git a/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.h b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.h index c8edf9a2..3b1711f5 100644 --- a/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.h +++ b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBz.h @@ -22,6 +22,10 @@ public: virtual void fieldComponents(const double* pos, double* field); +public: + // following are interfaces to configure this field map + void init_provider(const std::string& provider); + private: IFieldMapProvider* m_provider; diff --git a/Detector/MagneticFieldMap/src/GenericBFieldMapBrBzFactory.cpp b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBzFactory.cpp index 41bd439f..b738332c 100644 --- a/Detector/MagneticFieldMap/src/GenericBFieldMapBrBzFactory.cpp +++ b/Detector/MagneticFieldMap/src/GenericBFieldMapBrBzFactory.cpp @@ -2,11 +2,13 @@ * In this file, the xml is parsed and the GenericBFieldMapBrBz object is created and configured. * * The properties for the GenericBFieldMapBrBz - * - provider + * - provider (attribute) * - [file, db] - * - source - * - file path for the 'file' mode. - * - DB ... for the 'db' mode. + * - source (tag) + * - the attributes include: + * - url + * - file path for the 'file' mode. + * - DB instance ... for the 'db' mode. * - rhoMin, rhoMax, zMin, zMax * * -- Tao Lin <lintao AT ihep.ac.cn> @@ -41,10 +43,22 @@ static dd4hep::Ref_t create_GenericBFieldMapBrBz(dd4hep::Detector& , throw std::runtime_error(error_msg); } + std::string provider = xmlParameter.attr<std::string>(_Unicode(provider)); + + // - source + bool hasSource = xmlParameter.hasChild(_Unicode(source)); + if (!hasSource) { + std::string error_msg = "[ERROR] GenericBFieldMapBrBz: Must specify the 'source' tag. "; + throw std::runtime_error(error_msg); + + } + // 2. create the CartesianField dd4hep::CartesianField obj; GenericBFieldMapBrBz* ptr = new GenericBFieldMapBrBz(); + ptr->init_provider(provider); + obj.assign(ptr, xmlParameter.nameStr(), xmlParameter.typeStr()); return obj; -- GitLab