diff --git a/Device/Resolution/ResolutionFunction2DGaussian.cpp b/Device/Resolution/ResolutionFunction2DGaussian.cpp index 043f389e31951f64cc9cc613291a168ef3158e47..b0c7108e55730414e73e1c8289c0c42b8fc01ce7 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 b410f9cf98223589cf7dd20a78de2ef48c35a214..92361afb1fc5e2d94a5697186ecefa6b7a20bee5 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 5c9f973c2617673e5de3ad2c0358aacc68abe706..fd6a5a40be93118ab5aab9d5debc93f9113796e8 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 c582f62f71104e3b6fc072541820c91c4fb24fb2..10a84add508c3af7bc0245cc3bffdac83ed39547 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 ff4bb1884a2d2f96332f4aec88cc4e1a420e7a6a..6a9e054c4e40f3d6673444a4fca42a3413b2c921 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},