diff --git a/Device/Beam/Beam.cpp b/Device/Beam/Beam.cpp index 8e0dd8c84ee6ec046f5f19bb02cf205c126af5e7..3c617c21df94062a77a0728e48f122b282d5917e 100644 --- a/Device/Beam/Beam.cpp +++ b/Device/Beam/Beam.cpp @@ -39,9 +39,9 @@ Beam::Beam(double intensity, double wavelength, const Direction& direction) setName("Beam"); RealLimits::nonnegative().check("Intensity", m_intensity); - checkLimits("Wavelength", m_wavelength, wavelengthLimits); - checkLimits("InclinationAngle", m_alpha, m_alphaLimits); - checkLimits("AzimuthalAngle", m_phi, phiLimits); + wavelengthLimits.check("Wavelength", m_wavelength); + m_alphaLimits.check("InclinationAngle", m_alpha); + phiLimits.check("AzimuthalAngle", m_phi); } Beam Beam::horizontalBeam() @@ -117,19 +117,19 @@ const IFootprintFactor* Beam::footprintFactor() const void Beam::setInclinationAngleGuarded(double value) { - checkLimits("inclination angle", value, m_alphaLimits); + m_alphaLimits.check("inclination angle", value); m_alpha = value; } void Beam::setAzimuthalAngleGuarded(double value) { - checkLimits("azimuthal angle", value, phiLimits); + phiLimits.check("azimuthal angle", value); m_phi = value; } void Beam::setWavelengthGuarded(double value) { - checkLimits("wavelength", value, wavelengthLimits); + wavelengthLimits.check("wavelength", value); m_wavelength = value; } diff --git a/Fit/Param/RealLimits.cpp b/Fit/Param/RealLimits.cpp index 8fb19309119657ab8ce4b96a77a29cbd1789c77e..1beeed1ebf487ef406808ca69c69b5e5901a7ea9 100644 --- a/Fit/Param/RealLimits.cpp +++ b/Fit/Param/RealLimits.cpp @@ -158,7 +158,7 @@ std::string RealLimits::toString() const return result.str(); } -void RealLimits::check(const std::string& name, const double value) +void RealLimits::check(const std::string& name, const double value) const { if (!isInRange(value)) { std::ostringstream message; diff --git a/Fit/Param/RealLimits.h b/Fit/Param/RealLimits.h index a30ae9aeee1da40cce1a024f69799912eafaea7d..674ae5bc8694ae42db9415237e7ee6bb728565d8 100644 --- a/Fit/Param/RealLimits.h +++ b/Fit/Param/RealLimits.h @@ -81,7 +81,8 @@ public: std::string toString() const; - void check(const std::string& name, const double value); + //! Throws if value is outside limits. Parameter 'name' is for exception message. + void check(const std::string& name, const double value) const; //! Prints class friend std::ostream& operator<<(std::ostream& ostr, const RealLimits& m) diff --git a/Param/Base/IParametric.cpp b/Param/Base/IParametric.cpp index c72e7abf63dba8c7ac25976c48319bf6900b4af7..ead7233baad2c7836cfc20518e4a0c428c07d883 100644 --- a/Param/Base/IParametric.cpp +++ b/Param/Base/IParametric.cpp @@ -13,23 +13,7 @@ // ************************************************************************************************ #include "Param/Base/IParametric.h" -#include "Base/Utils/StringUtils.h" -#include "Fit/Param/RealLimits.h" -#include <iostream> -#include <sstream> -#include <stdexcept> IParametric::IParametric(const std::string& name) : m_name{name} {} IParametric::~IParametric() = default; - -void IParametric::checkLimits(const std::string& name, const double value, - const RealLimits& limits) const -{ - if (!limits.isInRange(value)) { - std::ostringstream message; - message << "Cannot initialize parameter " << name << " with value " << value - << ": out of bounds [" << limits << "]\n"; - throw std::runtime_error(message.str()); - } -} diff --git a/Param/Base/IParametric.h b/Param/Base/IParametric.h index 13199c813b9b6855a95e2aeef6b2296fab014377..9a2287cf50c0673ab11667bf4a0c8ea70b93ff34 100644 --- a/Param/Base/IParametric.h +++ b/Param/Base/IParametric.h @@ -41,11 +41,6 @@ public: protected: void setName(const std::string& name) { m_name = name; } - //! Check a certain value against limits. - //! Throws if not within the limits. - //! Name is only for exception message. - void checkLimits(const std::string& name, const double value, const RealLimits& limits) const; - private: std::string m_name; }; diff --git a/Param/Node/INode.cpp b/Param/Node/INode.cpp index b5fddb01c6b8e7e35cc77d917a039735dccce37c..3fed878f4fe6b0d5ecd4bd2e23fe06300fb56518 100644 --- a/Param/Node/INode.cpp +++ b/Param/Node/INode.cpp @@ -42,7 +42,7 @@ INode::INode(const NodeMeta& meta, const std::vector<double>& PValues) : m_P(PVa } else { limits = RealLimits::limited(pm.vMin, pm.vMax); } - checkLimits(pm.name, m_P[i], limits); + limits.check(pm.name, m_P[i]); } } diff --git a/Tests/Unit/Param/IParameterizedTest.cpp b/Tests/Unit/Param/IParameterizedTest.cpp index a8c3e93d560584949d22a2619e8fdbdea6c32b42..23a9e3149757a95402c960d5657ed55170c88db8 100644 --- a/Tests/Unit/Param/IParameterizedTest.cpp +++ b/Tests/Unit/Param/IParameterizedTest.cpp @@ -1,5 +1,4 @@ #include "Fit/Param/RealLimits.h" -#include "Param/Base/IParametric.h" #include "Tests/GTestWrapper/google_test.h" #include <stdexcept> @@ -7,8 +6,8 @@ class IParametricTest : public ::testing::Test {}; TEST_F(IParametricTest, checkLimits) { - // this checks only the function if IParametricTest::checkLimits() in principle. More - // tests regarding RealLimits shall be done in dedicated RealLimits unit tests + // this checks only the function if RealLimits.check() works in principle. + // More tests regarding RealLimits should be done in dedicated RealLimits unit tests. EXPECT_NO_THROW(RealLimits::nonnegative().check("A", 0)); EXPECT_THROW(RealLimits::positive().check("A", 0), std::runtime_error); } diff --git a/auto/Wrap/doxygenFit.i b/auto/Wrap/doxygenFit.i index aa28b58963e410b59f30a256a552efaf559fe791..c4289fa332428d7a0154099b30166fb6ec9e94fe 100644 --- a/auto/Wrap/doxygenFit.i +++ b/auto/Wrap/doxygenFit.i @@ -11326,7 +11326,9 @@ returns true if proposed value is in limits range %feature("docstring") RealLimits::toString "std::string RealLimits::toString() const "; -%feature("docstring") RealLimits::check "void RealLimits::check(const std::string &name, const double value) +%feature("docstring") RealLimits::check "void RealLimits::check(const std::string &name, const double value) const + +Throws if value is outside limits. Parameter 'name' is for exception message. "; %feature("docstring") RealLimits::isLimitless "bool RealLimits::isLimitless() const diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py index 33191aabc94582f0effe24279af499383e8b01fb..2317f20169b320e571b40c64d7701d2e4dfd7f2b 100644 --- a/auto/Wrap/libBornAgainFit.py +++ b/auto/Wrap/libBornAgainFit.py @@ -1860,7 +1860,9 @@ class RealLimits(object): def check(self, name, value): r""" check(RealLimits self, std::string const & name, double const value) - void RealLimits::check(const std::string &name, const double value) + void RealLimits::check(const std::string &name, const double value) const + + Throws if value is outside limits. Parameter 'name' is for exception message. """ return _libBornAgainFit.RealLimits_check(self, name, value) diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp index 6e6989d8dbf7f956e6da99b7d420f82b8db31c43..0d283083b1449e19d3bcd2205fec4efc88c3ca40 100644 --- a/auto/Wrap/libBornAgainFit_wrap.cpp +++ b/auto/Wrap/libBornAgainFit_wrap.cpp @@ -24216,7 +24216,7 @@ SWIGINTERN PyObject *_wrap_RealLimits_check(PyObject *SWIGUNUSEDPARM(self), PyOb if (!SWIG_Python_UnpackTuple(args, "RealLimits_check", 3, 3, swig_obj)) SWIG_fail; res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_RealLimits, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_check" "', argument " "1"" of type '" "RealLimits *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_check" "', argument " "1"" of type '" "RealLimits const *""'"); } arg1 = reinterpret_cast< RealLimits * >(argp1); { @@ -24235,7 +24235,7 @@ SWIGINTERN PyObject *_wrap_RealLimits_check(PyObject *SWIGUNUSEDPARM(self), PyOb SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "RealLimits_check" "', argument " "3"" of type '" "double""'"); } arg3 = static_cast< double >(val3); - (arg1)->check((std::string const &)*arg2,arg3); + ((RealLimits const *)arg1)->check((std::string const &)*arg2,arg3); resultobj = SWIG_Py_Void(); if (SWIG_IsNewObj(res2)) delete arg2; return resultobj; @@ -28462,7 +28462,9 @@ static PyMethodDef SwigMethods[] = { ""}, { "RealLimits_check", _wrap_RealLimits_check, METH_VARARGS, "\n" "RealLimits_check(RealLimits self, std::string const & name, double const value)\n" - "void RealLimits::check(const std::string &name, const double value)\n" + "void RealLimits::check(const std::string &name, const double value) const\n" + "\n" + "Throws if value is outside limits. Parameter 'name' is for exception message. \n" "\n" ""}, { "RealLimits___eq__", _wrap_RealLimits___eq__, METH_VARARGS, "RealLimits___eq__(RealLimits self, RealLimits other) -> bool"},