Skip to content
Snippets Groups Projects
Commit e1680758 authored by Van Herck, Walter's avatar Van Herck, Walter
Browse files

Provide absolute value of difference in FitObjective

parent 3b45b820
No related branches found
No related tags found
No related merge requests found
...@@ -126,6 +126,11 @@ SimulationResult FitObjective::relativeDifference(size_t i_item) const ...@@ -126,6 +126,11 @@ SimulationResult FitObjective::relativeDifference(size_t i_item) const
return m_fit_objects[check_index(i_item)]->relativeDifference(); return m_fit_objects[check_index(i_item)]->relativeDifference();
} }
SimulationResult FitObjective::absoluteDifference(size_t i_item) const
{
return m_fit_objects[check_index(i_item)]->absoluteDifference();
}
void FitObjective::initPrint(int every_nth) void FitObjective::initPrint(int every_nth)
{ {
m_fit_status->initPrint(every_nth); m_fit_status->initPrint(every_nth);
......
...@@ -82,6 +82,10 @@ public: ...@@ -82,6 +82,10 @@ public:
//! @param i_item: the index of fit pair //! @param i_item: the index of fit pair
SimulationResult relativeDifference(size_t i_item = 0) const; SimulationResult relativeDifference(size_t i_item = 0) const;
//! Returns absolute value of difference between simulation and experimental data.
//! @param i_item: the index of fit pair
SimulationResult absoluteDifference(size_t i_item = 0) const;
//! Initializes printing to standard output during the fitting. //! Initializes printing to standard output during the fitting.
//! @param every_nth: Print every n'th iteration. //! @param every_nth: Print every n'th iteration.
void initPrint(int every_nth); void initPrint(int every_nth);
......
...@@ -87,6 +87,20 @@ SimulationResult SimDataPair::relativeDifference() const ...@@ -87,6 +87,20 @@ SimulationResult SimDataPair::relativeDifference() const
return SimulationResult(*roi_data, *converter); return SimulationResult(*roi_data, *converter);
} }
SimulationResult SimDataPair::absoluteDifference() const
{
auto converter = UnitConverterUtils::createConverter(*m_simulation);
auto roi_data = UnitConverterUtils::createOutputData(*converter.get(), converter->defaultUnits());
auto detector = m_simulation->getInstrument().getDetector();
detector->iterate([&](IDetector::const_iterator it){
const size_t index = it.roiIndex();
(*roi_data)[index] = std::abs(m_simulation_result[index] - m_experimental_data[index]);
});
return SimulationResult(*roi_data, *converter);
}
SimDataPair::~SimDataPair() = default; SimDataPair::~SimDataPair() = default;
void SimDataPair::runSimulation(const Fit::Parameters& params) void SimDataPair::runSimulation(const Fit::Parameters& params)
......
...@@ -41,6 +41,8 @@ public: ...@@ -41,6 +41,8 @@ public:
SimulationResult relativeDifference() const; SimulationResult relativeDifference() const;
SimulationResult absoluteDifference() const;
void runSimulation(const Fit::Parameters& params); void runSimulation(const Fit::Parameters& params);
std::vector<double> experimental_array() const; std::vector<double> experimental_array() const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment