From 59c07e98aacc70a0e949f2b8292aad56387249c9 Mon Sep 17 00:00:00 2001 From: Joachim Wuttke <j.wuttke@fz-juelich.de> Date: Sat, 3 Sep 2022 08:43:37 +0200 Subject: [PATCH] ResolutionFunction2DGaussian using validate --- .../ResolutionFunction2DGaussian.cpp | 17 +++++++++-- .../Resolution/ResolutionFunction2DGaussian.h | 2 ++ auto/Wrap/doxygenDevice.i | 3 ++ auto/Wrap/libBornAgainDevice.py | 8 ++++++ auto/Wrap/libBornAgainDevice_wrap.cpp | 28 +++++++++++++++++++ 5 files changed, 55 insertions(+), 3 deletions(-) diff --git a/Device/Resolution/ResolutionFunction2DGaussian.cpp b/Device/Resolution/ResolutionFunction2DGaussian.cpp index 043f389e319..b0c7108e557 100644 --- a/Device/Resolution/ResolutionFunction2DGaussian.cpp +++ b/Device/Resolution/ResolutionFunction2DGaussian.cpp @@ -14,18 +14,29 @@ #include "Device/Resolution/ResolutionFunction2DGaussian.h" #include "Base/Math/Functions.h" -#include "Fit/Param/RealLimits.h" +#include "Base/Util/Assert.h" ResolutionFunction2DGaussian::ResolutionFunction2DGaussian(double sigma_x, double sigma_y) : m_sigma_x(sigma_x) , m_sigma_y(sigma_y) { - RealLimits::nonnegative().check("SigmaX", m_sigma_x); - RealLimits::nonnegative().check("SigmaY", m_sigma_y); + validateOrThrow(); } double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const { + ASSERT(m_validated); return Math::IntegratedGaussian(x, 0.0, m_sigma_x) * Math::IntegratedGaussian(y, 0.0, m_sigma_y); } + +std::string ResolutionFunction2DGaussian::validate() const +{ + std::vector<std::string> errs; + requestGt0(errs, m_sigma_x, "sigma_x"); + requestGt0(errs, m_sigma_y, "sigma_y"); + if (!errs.empty()) + return jointError(errs); + m_validated = true; + return ""; +} diff --git a/Device/Resolution/ResolutionFunction2DGaussian.h b/Device/Resolution/ResolutionFunction2DGaussian.h index b410f9cf982..92361afb1fc 100644 --- a/Device/Resolution/ResolutionFunction2DGaussian.h +++ b/Device/Resolution/ResolutionFunction2DGaussian.h @@ -39,6 +39,8 @@ public: double sigmaX() const { return m_sigma_x; } double sigmaY() const { return m_sigma_y; } + std::string validate() const override; + private: ResolutionFunction2DGaussian& operator=(const ResolutionFunction2DGaussian&); diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i index 5c9f973c261..fd6a5a40be9 100644 --- a/auto/Wrap/doxygenDevice.i +++ b/auto/Wrap/doxygenDevice.i @@ -1581,6 +1581,9 @@ ResolutionFunction2DGaussian::sigmaX"; %feature("docstring") ResolutionFunction2DGaussian::sigmaY "double ResolutionFunction2DGaussian::sigmaY() const ResolutionFunction2DGaussian::sigmaY"; +%feature("docstring") ResolutionFunction2DGaussian::validate "std::string ResolutionFunction2DGaussian::validate() const override +ResolutionFunction2DGaussian::validate"; + // File: structIDetector_1_1RoiOfAxis.xml diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py index c582f62f711..10a84add508 100644 --- a/auto/Wrap/libBornAgainDevice.py +++ b/auto/Wrap/libBornAgainDevice.py @@ -3342,6 +3342,14 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D): ResolutionFunction2DGaussian::sigmaY """ return _libBornAgainDevice.ResolutionFunction2DGaussian_sigmaY(self) + + def validate(self): + r""" + validate(ResolutionFunction2DGaussian self) -> std::string + std::string ResolutionFunction2DGaussian::validate() const override + ResolutionFunction2DGaussian::validate + """ + return _libBornAgainDevice.ResolutionFunction2DGaussian_validate(self) __swig_destroy__ = _libBornAgainDevice.delete_ResolutionFunction2DGaussian # Register ResolutionFunction2DGaussian in _libBornAgainDevice: diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp index ff4bb1884a2..6a9e054c4e4 100644 --- a/auto/Wrap/libBornAgainDevice_wrap.cpp +++ b/auto/Wrap/libBornAgainDevice_wrap.cpp @@ -32747,6 +32747,29 @@ fail: } +SWIGINTERN PyObject *_wrap_ResolutionFunction2DGaussian_validate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + ResolutionFunction2DGaussian *arg1 = (ResolutionFunction2DGaussian *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject *swig_obj[1] ; + std::string result; + + if (!args) SWIG_fail; + swig_obj[0] = args; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ResolutionFunction2DGaussian, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ResolutionFunction2DGaussian_validate" "', argument " "1"" of type '" "ResolutionFunction2DGaussian const *""'"); + } + arg1 = reinterpret_cast< ResolutionFunction2DGaussian * >(argp1); + result = ((ResolutionFunction2DGaussian const *)arg1)->validate(); + resultobj = SWIG_From_std_string(static_cast< std::string >(result)); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_delete_ResolutionFunction2DGaussian(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; ResolutionFunction2DGaussian *arg1 = (ResolutionFunction2DGaussian *) 0 ; @@ -38917,6 +38940,11 @@ static PyMethodDef SwigMethods[] = { "double ResolutionFunction2DGaussian::sigmaY() const\n" "ResolutionFunction2DGaussian::sigmaY\n" ""}, + { "ResolutionFunction2DGaussian_validate", _wrap_ResolutionFunction2DGaussian_validate, METH_O, "\n" + "ResolutionFunction2DGaussian_validate(ResolutionFunction2DGaussian self) -> std::string\n" + "std::string ResolutionFunction2DGaussian::validate() const override\n" + "ResolutionFunction2DGaussian::validate\n" + ""}, { "delete_ResolutionFunction2DGaussian", _wrap_delete_ResolutionFunction2DGaussian, METH_O, "delete_ResolutionFunction2DGaussian(ResolutionFunction2DGaussian self)"}, { "ResolutionFunction2DGaussian_swigregister", ResolutionFunction2DGaussian_swigregister, METH_O, NULL}, { "ResolutionFunction2DGaussian_swiginit", ResolutionFunction2DGaussian_swiginit, METH_VARARGS, NULL}, -- GitLab