From c624e7eae8ebc292b1a74e077faadd5506d88215 Mon Sep 17 00:00:00 2001 From: Dave Casper <dcasper@localhost.localdomain> Date: Wed, 20 May 2020 23:13:54 -0700 Subject: [PATCH] Adapt to breaking changes in ATLAS conditions code --- .../src/FaserSCT_ReadCalibChipGainCondAlg.cxx | 8 ++- .../FaserSCT_ReadCalibChipNoiseCondAlg.cxx | 8 ++- .../src/FillFromStringUtility.h | 63 +++++++++++++++++++ .../src/FaserSCT_ReadCalibChipDataTool.cxx | 4 +- 4 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FillFromStringUtility.h diff --git a/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FaserSCT_ReadCalibChipGainCondAlg.cxx b/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FaserSCT_ReadCalibChipGainCondAlg.cxx index fa7e0868..4d5bf3dc 100644 --- a/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FaserSCT_ReadCalibChipGainCondAlg.cxx +++ b/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FaserSCT_ReadCalibChipGainCondAlg.cxx @@ -4,17 +4,19 @@ #include "FaserSCT_ReadCalibChipGainCondAlg.h" +#include "FillFromStringUtility.h" + #include "Identifier/IdentifierHash.h" #include "TrackerIdentifier/FaserSCT_ID.h" #include "FaserSCT_ConditionsData/FaserSCT_ConditionsParameters.h" -#include "SCT_ConditionsTools/SCT_ReadCalibChipUtilities.h" +#include "SCT_ConditionsTools/SCT_ReadCalibChipDefs.h" #include "GaudiKernel/EventIDRange.h" #include <memory> using namespace FaserSCT_ConditionsData; -using namespace SCT_ReadCalibChipUtilities; +using namespace SCT_ReadCalibChipDefs; FaserSCT_ReadCalibChipGainCondAlg::FaserSCT_ReadCalibChipGainCondAlg(const std::string& name, ISvcLocator* pSvcLocator) : ::AthReentrantAlgorithm(name, pSvcLocator) @@ -122,6 +124,6 @@ FaserSCT_ReadCalibChipGainCondAlg::insertNptGainFolderData(FaserSCT_ModuleGainCa for (int i{0}; i!=N_NPTGAIN; ++i) { FaserSCT_ModuleCalibParameter& datavec{theseCalibData[i]}; const std::string &dbData{((folderData)[nPtGainDbParameterNames[i]]).data<std::string>()}; - fillFromString(dbData, datavec); + fillArrayFromString(dbData, datavec); } } diff --git a/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FaserSCT_ReadCalibChipNoiseCondAlg.cxx b/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FaserSCT_ReadCalibChipNoiseCondAlg.cxx index bd2e3603..99475092 100644 --- a/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FaserSCT_ReadCalibChipNoiseCondAlg.cxx +++ b/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FaserSCT_ReadCalibChipNoiseCondAlg.cxx @@ -4,10 +4,12 @@ #include "FaserSCT_ReadCalibChipNoiseCondAlg.h" +#include "FillFromStringUtility.h" + #include "Identifier/IdentifierHash.h" #include "TrackerIdentifier/FaserSCT_ID.h" #include "FaserSCT_ConditionsData/FaserSCT_ConditionsParameters.h" -#include "SCT_ConditionsTools/SCT_ReadCalibChipUtilities.h" +#include "SCT_ConditionsTools/SCT_ReadCalibChipDefs.h" #include "GaudiKernel/EventIDRange.h" @@ -15,7 +17,7 @@ #include <memory> using namespace FaserSCT_ConditionsData; -using namespace SCT_ReadCalibChipUtilities; +using namespace SCT_ReadCalibChipDefs; FaserSCT_ReadCalibChipNoiseCondAlg::FaserSCT_ReadCalibChipNoiseCondAlg(const std::string& name, ISvcLocator* pSvcLocator) : ::AthReentrantAlgorithm(name, pSvcLocator) @@ -123,6 +125,6 @@ FaserSCT_ReadCalibChipNoiseCondAlg::insertNoiseOccFolderData(FaserSCT_ModuleNois for (int i{0}; i!=N_NOISEOCC; ++i) { FaserSCT_ModuleCalibParameter& datavec{theseCalibData[i]}; std::string dbData{((folderData)[noiseOccDbParameterNames[i]]).data<std::string>()}; - fillFromString(dbData, datavec); + fillArrayFromString(dbData, datavec); } } diff --git a/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FillFromStringUtility.h b/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FillFromStringUtility.h new file mode 100644 index 00000000..6e445fcc --- /dev/null +++ b/Tracker/TrackerConditions/FaserSCT_ConditionsAlgorithms/src/FillFromStringUtility.h @@ -0,0 +1,63 @@ +// -*- C++ -*- + +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef FillFromStringUtility_h +#define FillFromStringUtility_h + +// Include STL stuff +#include <limits> +#include <string> + +// Include boost stuff +#include "boost/tokenizer.hpp" +#include "boost/lexical_cast.hpp" + +namespace { + template <typename C> + bool fillArrayFromString(const std::string& source, C& userContainer) { + if (source.empty()) return false; + typedef typename C::value_type V_t; + V_t errVal{std::numeric_limits<V_t>::has_quiet_NaN ? (std::numeric_limits<V_t>::quiet_NaN()) : 0}; + boost::char_separator<char> sep{" "}; + typedef boost::tokenizer<boost::char_separator<char> > Tokenizer; + Tokenizer tok{source, sep}; + bool noNan{true}; + const Tokenizer::iterator end{tok.end()}; + int j{0}; + for (Tokenizer::iterator i{tok.begin()}; i!=end; ++i) { + try { + userContainer[j]=boost::lexical_cast<V_t>(*i); + } catch (const boost::bad_lexical_cast&) { + userContainer[j]=errVal; + noNan=false; + } + ++j; + } + return noNan; + } + template <typename C> + bool fillEmptyVectorFromString(const std::string& source, C& userContainer) { + if (source.empty()) return false; + typedef typename C::value_type V_t; + V_t errVal{std::numeric_limits<V_t>::has_quiet_NaN ? (std::numeric_limits<V_t>::quiet_NaN()) : 0}; + boost::char_separator<char> sep{" "}; + typedef boost::tokenizer<boost::char_separator<char> > Tokenizer; + Tokenizer tok{source, sep}; + bool noNan{true}; + const Tokenizer::iterator end{tok.end()}; + for (Tokenizer::iterator i{tok.begin()}; i!=end; ++i) { + try { + userContainer.push_back(boost::lexical_cast<V_t>(*i)); + } catch (const boost::bad_lexical_cast&) { + userContainer.push_back(errVal); + noNan=false; + } + } + return noNan; + } +} // end of anonymous namespace + +#endif // FillFromStringUtility_h diff --git a/Tracker/TrackerConditions/FaserSCT_ConditionsTools/src/FaserSCT_ReadCalibChipDataTool.cxx b/Tracker/TrackerConditions/FaserSCT_ConditionsTools/src/FaserSCT_ReadCalibChipDataTool.cxx index e880dd82..0479bdeb 100644 --- a/Tracker/TrackerConditions/FaserSCT_ConditionsTools/src/FaserSCT_ReadCalibChipDataTool.cxx +++ b/Tracker/TrackerConditions/FaserSCT_ConditionsTools/src/FaserSCT_ReadCalibChipDataTool.cxx @@ -14,10 +14,10 @@ #include "FaserSCT_ConditionsData/FaserSCT_ModuleCalibParameter.h" #include "FaserSCT_ConditionsData/FaserSCT_ModuleGainCalibData.h" #include "FaserSCT_ConditionsData/FaserSCT_ModuleNoiseCalibData.h" -#include "SCT_ConditionsTools/SCT_ReadCalibChipUtilities.h" +#include "SCT_ConditionsTools/SCT_ReadCalibChipDefs.h" using namespace FaserSCT_ConditionsData; -using namespace SCT_ReadCalibChipUtilities; +using namespace SCT_ReadCalibChipDefs; //---------------------------------------------------------------------- FaserSCT_ReadCalibChipDataTool::FaserSCT_ReadCalibChipDataTool (const std::string& type, const std::string& name, const IInterface* parent) : -- GitLab