diff --git a/Sim/Fitting/FitObjective.cpp b/Sim/Fitting/FitObjective.cpp index 8de498271eec2448d86dadc8b99a3cf0c3c1460a..f65ac12fde5b3b53c620b9b413b6d379648f902d 100644 --- a/Sim/Fitting/FitObjective.cpp +++ b/Sim/Fitting/FitObjective.cpp @@ -216,14 +216,14 @@ SimulationResult FitObjective::uncertaintyData(size_t i_item) const //! Returns relative difference between simulation and experimental data //! in the form of SimulationResult. -std::vector<double> FitObjective::relativeDifference(size_t i_item) const +SimulationResult FitObjective::relativeDifference(size_t i_item) const { return dataPair(i_item).relativeDifference(); } //! Returns absolute value of difference between simulation and experimental data //! in the form of SimulationResult. -std::vector<double> FitObjective::absoluteDifference(size_t i_item) const +SimulationResult FitObjective::absoluteDifference(size_t i_item) const { return dataPair(i_item).absoluteDifference(); } diff --git a/Sim/Fitting/FitObjective.h b/Sim/Fitting/FitObjective.h index 0d8eac05d33565373ac42820582fdd85f0c5715d..b0027ee427403df72d88d08bc16db04bd0c3a8b6 100644 --- a/Sim/Fitting/FitObjective.h +++ b/Sim/Fitting/FitObjective.h @@ -76,8 +76,8 @@ public: SimulationResult simulationResult(size_t i_item = 0) const; SimulationResult experimentalData(size_t i_item = 0) const; SimulationResult uncertaintyData(size_t i_item = 0) const; - std::vector<double> relativeDifference(size_t i_item = 0) const; - std::vector<double> absoluteDifference(size_t i_item = 0) const; + SimulationResult relativeDifference(size_t i_item = 0) const; + SimulationResult absoluteDifference(size_t i_item = 0) const; std::vector<double> experimental_array() const; std::vector<double> simulation_array() const; diff --git a/Sim/Fitting/SimDataPair.cpp b/Sim/Fitting/SimDataPair.cpp index 304018b82bda60317f8d08b17ad36bc5e91ffcad..a7f941b6f01e4f9c87c9507c102591efd6897bcd 100644 --- a/Sim/Fitting/SimDataPair.cpp +++ b/Sim/Fitting/SimDataPair.cpp @@ -193,7 +193,7 @@ std::vector<double> SimDataPair::user_weights_array() const //! Returns relative difference between simulation and experimental data. -std::vector<double> SimDataPair::relativeDifference() const +SimulationResult SimDataPair::relativeDifference() const { size_t N = m_sim_data->size(); if (!N) @@ -201,14 +201,16 @@ std::vector<double> SimDataPair::relativeDifference() const if (!m_exp_data || m_exp_data->size() != N) throw std::runtime_error("Different data shapes => won't compute relative difference"); - std::vector<double> result(N, 0.); + std::vector<double> data(N, 0.); for (size_t i = 0; i < N; ++i) - result[i] = Numeric::relativeDifference(result[i], (*m_exp_data)[i]); + data[i] = Numeric::relativeDifference((*m_sim_data)[i], (*m_exp_data)[i]); - return result; + const Frame* f = m_sim_data->frame().clone(); + Datafield df(f, data); + return {df, f}; } -std::vector<double> SimDataPair::absoluteDifference() const +SimulationResult SimDataPair::absoluteDifference() const { size_t N = m_sim_data->size(); if (!N) @@ -216,11 +218,13 @@ std::vector<double> SimDataPair::absoluteDifference() const if (!m_exp_data || m_exp_data->size() != N) throw std::runtime_error("Different data shapes => won't compute absolute difference"); - std::vector<double> result(N, 0.); + std::vector<double> data(N, 0.); for (size_t i = 0; i < N; ++i) - result[i] = std::abs(result[i] - (*m_exp_data)[i]); + data[i] = std::abs((*m_sim_data)[i] - (*m_exp_data)[i]); - return result; + const Frame* f = m_sim_data->frame().clone(); + Datafield df(f, data); + return {df, f}; } void SimDataPair::validate() const diff --git a/Sim/Fitting/SimDataPair.h b/Sim/Fitting/SimDataPair.h index 166fa93bc7154088a9514652ad9acd3ee873aef6..26afefe108a8dc799737e8334ae4b590c0231510 100644 --- a/Sim/Fitting/SimDataPair.h +++ b/Sim/Fitting/SimDataPair.h @@ -56,11 +56,11 @@ public: //! Returns the relative difference between simulated //! and experimental data cut to the ROI area - std::vector<double> relativeDifference() const; + SimulationResult relativeDifference() const; //! Returns the absolute difference between simulated //! and experimental data cut to the ROI area - std::vector<double> absoluteDifference() const; + SimulationResult absoluteDifference() const; //! Returns the flattened simulated intensities cut to the ROI area std::vector<double> simulation_array() const; diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py index 0ed39a6320fb8947cc0463446fa154abdde7ec7f..a0c979ac9d807c3a7a02389dc7962e3999df259d 100644 --- a/auto/Wrap/libBornAgainSim.py +++ b/auto/Wrap/libBornAgainSim.py @@ -2364,11 +2364,11 @@ class FitObjective(object): return _libBornAgainSim.FitObjective_uncertaintyData_cpp(self, i_item) def relativeDifference(self, i_item=0): - r"""relativeDifference(FitObjective self, size_t i_item=0) -> vdouble1d_t""" + r"""relativeDifference(FitObjective self, size_t i_item=0) -> SimulationResult""" return _libBornAgainSim.FitObjective_relativeDifference(self, i_item) def absoluteDifference(self, i_item=0): - r"""absoluteDifference(FitObjective self, size_t i_item=0) -> vdouble1d_t""" + r"""absoluteDifference(FitObjective self, size_t i_item=0) -> SimulationResult""" return _libBornAgainSim.FitObjective_absoluteDifference(self, i_item) def experimental_array(self): diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp index 3bc782622b103b6733f0819bb2471920f16d233d..cea4dcd4ab94845eb2d590bc46377bd514324100 100644 --- a/auto/Wrap/libBornAgainSim_wrap.cpp +++ b/auto/Wrap/libBornAgainSim_wrap.cpp @@ -31168,7 +31168,7 @@ SWIGINTERN PyObject *_wrap_FitObjective_relativeDifference__SWIG_0(PyObject *sel int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; - std::vector< double,std::allocator< double > > result; + SimulationResult result; if ((nobjs < 2) || (nobjs > 2)) SWIG_fail; res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FitObjective, 0 | 0 ); @@ -31182,7 +31182,7 @@ SWIGINTERN PyObject *_wrap_FitObjective_relativeDifference__SWIG_0(PyObject *sel } arg2 = static_cast< size_t >(val2); result = ((FitObjective const *)arg1)->relativeDifference(arg2); - resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result)); + resultobj = SWIG_NewPointerObj((new SimulationResult(result)), SWIGTYPE_p_SimulationResult, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; @@ -31194,7 +31194,7 @@ SWIGINTERN PyObject *_wrap_FitObjective_relativeDifference__SWIG_1(PyObject *sel FitObjective *arg1 = (FitObjective *) 0 ; void *argp1 = 0 ; int res1 = 0 ; - std::vector< double,std::allocator< double > > result; + SimulationResult result; if ((nobjs < 1) || (nobjs > 1)) SWIG_fail; res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FitObjective, 0 | 0 ); @@ -31203,7 +31203,7 @@ SWIGINTERN PyObject *_wrap_FitObjective_relativeDifference__SWIG_1(PyObject *sel } arg1 = reinterpret_cast< FitObjective * >(argp1); result = ((FitObjective const *)arg1)->relativeDifference(); - resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result)); + resultobj = SWIG_NewPointerObj((new SimulationResult(result)), SWIGTYPE_p_SimulationResult, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; @@ -31260,7 +31260,7 @@ SWIGINTERN PyObject *_wrap_FitObjective_absoluteDifference__SWIG_0(PyObject *sel int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; - std::vector< double,std::allocator< double > > result; + SimulationResult result; if ((nobjs < 2) || (nobjs > 2)) SWIG_fail; res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FitObjective, 0 | 0 ); @@ -31274,7 +31274,7 @@ SWIGINTERN PyObject *_wrap_FitObjective_absoluteDifference__SWIG_0(PyObject *sel } arg2 = static_cast< size_t >(val2); result = ((FitObjective const *)arg1)->absoluteDifference(arg2); - resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result)); + resultobj = SWIG_NewPointerObj((new SimulationResult(result)), SWIGTYPE_p_SimulationResult, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; @@ -31286,7 +31286,7 @@ SWIGINTERN PyObject *_wrap_FitObjective_absoluteDifference__SWIG_1(PyObject *sel FitObjective *arg1 = (FitObjective *) 0 ; void *argp1 = 0 ; int res1 = 0 ; - std::vector< double,std::allocator< double > > result; + SimulationResult result; if ((nobjs < 1) || (nobjs > 1)) SWIG_fail; res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FitObjective, 0 | 0 ); @@ -31295,7 +31295,7 @@ SWIGINTERN PyObject *_wrap_FitObjective_absoluteDifference__SWIG_1(PyObject *sel } arg1 = reinterpret_cast< FitObjective * >(argp1); result = ((FitObjective const *)arg1)->absoluteDifference(); - resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result)); + resultobj = SWIG_NewPointerObj((new SimulationResult(result)), SWIGTYPE_p_SimulationResult, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; @@ -36262,8 +36262,8 @@ static PyMethodDef SwigMethods[] = { { "FitObjective_simulationResult", _wrap_FitObjective_simulationResult, METH_VARARGS, "FitObjective_simulationResult(FitObjective self, size_t i_item=0) -> SimulationResult"}, { "FitObjective_experimentalData", _wrap_FitObjective_experimentalData, METH_VARARGS, "FitObjective_experimentalData(FitObjective self, size_t i_item=0) -> SimulationResult"}, { "FitObjective_uncertaintyData_cpp", _wrap_FitObjective_uncertaintyData_cpp, METH_VARARGS, "FitObjective_uncertaintyData_cpp(FitObjective self, size_t i_item=0) -> SimulationResult"}, - { "FitObjective_relativeDifference", _wrap_FitObjective_relativeDifference, METH_VARARGS, "FitObjective_relativeDifference(FitObjective self, size_t i_item=0) -> vdouble1d_t"}, - { "FitObjective_absoluteDifference", _wrap_FitObjective_absoluteDifference, METH_VARARGS, "FitObjective_absoluteDifference(FitObjective self, size_t i_item=0) -> vdouble1d_t"}, + { "FitObjective_relativeDifference", _wrap_FitObjective_relativeDifference, METH_VARARGS, "FitObjective_relativeDifference(FitObjective self, size_t i_item=0) -> SimulationResult"}, + { "FitObjective_absoluteDifference", _wrap_FitObjective_absoluteDifference, METH_VARARGS, "FitObjective_absoluteDifference(FitObjective self, size_t i_item=0) -> SimulationResult"}, { "FitObjective_experimental_array", _wrap_FitObjective_experimental_array, METH_O, "FitObjective_experimental_array(FitObjective self) -> vdouble1d_t"}, { "FitObjective_simulation_array", _wrap_FitObjective_simulation_array, METH_O, "FitObjective_simulation_array(FitObjective self) -> vdouble1d_t"}, { "FitObjective_uncertainties_cpp", _wrap_FitObjective_uncertainties_cpp, METH_O, "FitObjective_uncertainties_cpp(FitObjective self) -> vdouble1d_t"},