diff --git a/Base/Axis/Frame.cpp b/Base/Axis/Frame.cpp index 42fcd01187e4992049c9bb378cb14ef64f0b4a1f..a0be8e6bc83fc715fe0b86faf3ffaa3f0433634a 100644 --- a/Base/Axis/Frame.cpp +++ b/Base/Axis/Frame.cpp @@ -27,7 +27,12 @@ Frame::Frame(const std::vector<IAxis*>& axes) const IAxis& Frame::axis(size_t k_axis) const { - return *m_axes.at(k_axis); + return *m_axes[k_axis]; +} + +size_t Frame::projectedSize(size_t k_axis) const +{ + return m_axes[k_axis]->size(); } double Frame::projectedCoord(size_t i_flat, size_t k_axis) const diff --git a/Base/Axis/Frame.h b/Base/Axis/Frame.h index 6e92e93c5e2544d10a297efb494cd3f4ec42c5a9..9c8a0f45253e15f3280291b73e2ce6b072364b55 100644 --- a/Base/Axis/Frame.h +++ b/Base/Axis/Frame.h @@ -36,6 +36,9 @@ public: //! Returns total number of bins. size_t size() const { return m_size; } + //! Returns number of bins along axis. + size_t projectedSize(size_t k_axis) const; + //! Returns axis with given serial number const IAxis& axis(size_t k_axis) const; diff --git a/Device/Histo/Histogram2D.cpp b/Device/Histo/Histogram2D.cpp index 2e8eacdecd7b3c71857edd947939a8a9dd72329c..b97c52da08a8fa1e902848bf2a52e92fe2b025cf 100644 --- a/Device/Histo/Histogram2D.cpp +++ b/Device/Histo/Histogram2D.cpp @@ -100,15 +100,8 @@ void Histogram2D::addContent(const std::vector<std::vector<double>>& data) auto shape = DataUtils::Array::getShape(data); const size_t nrows = shape.first; const size_t ncols = shape.second; - - if (nrows != m_data->axis(1).size() || ncols != m_data->axis(0).size()) { - std::ostringstream ostr; - ostr << "Histogram2D::addContent() -> Shape of input array [" << nrows << ", " << ncols - << "] doesn't mach histogram axes. " - << "X-axis size: " << m_data->axis(0).size() - << "Y-axis size: " << m_data->axis(1).size(); - throw std::runtime_error(ostr.str()); - } + ASSERT(ncols == m_frame->projectedSize(0)); + ASSERT(nrows == m_frame->projectedSize(1)); for (size_t row = 0; row < nrows; ++row) { for (size_t col = 0; col < ncols; ++col) { diff --git a/auto/Wrap/doxygenBase.i b/auto/Wrap/doxygenBase.i index 99025d8ab3419a4ad828fb1225cf70c789ef3ed9..04711bb51f916ded5cd7ec5d706ac6d2a6366fe7 100644 --- a/auto/Wrap/doxygenBase.i +++ b/auto/Wrap/doxygenBase.i @@ -364,6 +364,11 @@ Returns number of dimensions. Returns total number of bins. "; +%feature("docstring") Frame::projectedSize "size_t Frame::projectedSize(size_t k_axis) const + +Returns number of bins along axis. +"; + %feature("docstring") Frame::axis "const IAxis & Frame::axis(size_t k_axis) const Returns axis with given serial number. diff --git a/auto/Wrap/libBornAgainBase.py b/auto/Wrap/libBornAgainBase.py index e4b392593b6b3d3a4349ad9598db23a2f6767b1e..35577951fd526a8929345884f75b254c94b0256e 100644 --- a/auto/Wrap/libBornAgainBase.py +++ b/auto/Wrap/libBornAgainBase.py @@ -2793,6 +2793,16 @@ class Frame(object): """ return _libBornAgainBase.Frame_size(self) + def projectedSize(self, k_axis): + r""" + projectedSize(Frame self, size_t k_axis) -> size_t + size_t Frame::projectedSize(size_t k_axis) const + + Returns number of bins along axis. + + """ + return _libBornAgainBase.Frame_projectedSize(self, k_axis) + def axis(self, k_axis): r""" axis(Frame self, size_t k_axis) -> IAxis diff --git a/auto/Wrap/libBornAgainBase_wrap.cpp b/auto/Wrap/libBornAgainBase_wrap.cpp index 7dfce8e9590207dc7f2a2bcbdfbf8d13262ba99c..fc77dc4abca7de7363d7c9b1f0c37491dae6e805 100644 --- a/auto/Wrap/libBornAgainBase_wrap.cpp +++ b/auto/Wrap/libBornAgainBase_wrap.cpp @@ -27345,6 +27345,36 @@ fail: } +SWIGINTERN PyObject *_wrap_Frame_projectedSize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + Frame *arg1 = (Frame *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject *swig_obj[2] ; + size_t result; + + if (!SWIG_Python_UnpackTuple(args, "Frame_projectedSize", 2, 2, swig_obj)) SWIG_fail; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Frame, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Frame_projectedSize" "', argument " "1"" of type '" "Frame const *""'"); + } + arg1 = reinterpret_cast< Frame * >(argp1); + ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Frame_projectedSize" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = static_cast< size_t >(val2); + result = ((Frame const *)arg1)->projectedSize(arg2); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_Frame_axis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; Frame *arg1 = (Frame *) 0 ; @@ -30219,6 +30249,13 @@ static PyMethodDef SwigMethods[] = { "Returns total number of bins. \n" "\n" ""}, + { "Frame_projectedSize", _wrap_Frame_projectedSize, METH_VARARGS, "\n" + "Frame_projectedSize(Frame self, size_t k_axis) -> size_t\n" + "size_t Frame::projectedSize(size_t k_axis) const\n" + "\n" + "Returns number of bins along axis. \n" + "\n" + ""}, { "Frame_axis", _wrap_Frame_axis, METH_VARARGS, "\n" "Frame_axis(Frame self, size_t k_axis) -> IAxis\n" "const IAxis & Frame::axis(size_t k_axis) const\n"