BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ChiModuleWrapper Class Reference
Inheritance diagram for ChiModuleWrapper:
Collaboration diagram for ChiModuleWrapper:

Public Member Functions

 ChiModuleWrapper (std::unique_ptr< IChiSquaredModule > module)
 
double compute (const std::vector< SimDataPair > &fit_objects, size_t n_pars) const override
 

Private Attributes

std::unique_ptr< IChiSquaredModulem_module
 

Detailed Description

Metric wrapper for back-compaptibility with old scripts.

Definition at line 32 of file FitObjective.cpp.

Constructor & Destructor Documentation

◆ ChiModuleWrapper()

ChiModuleWrapper::ChiModuleWrapper ( std::unique_ptr< IChiSquaredModule module)
explicit

Definition at line 321 of file FitObjective.cpp.

322  : IMetricWrapper(), m_module(std::move(module))
323 {
324  if (!m_module)
325  throw std::runtime_error("Error in ChiModuleWrapper: empty chi square module passed");
326 }
std::unique_ptr< IChiSquaredModule > m_module

References m_module.

Member Function Documentation

◆ compute()

double ChiModuleWrapper::compute ( const std::vector< SimDataPair > &  fit_objects,
size_t  n_pars 
) const
overridevirtual

Implements IMetricWrapper.

Definition at line 328 of file FitObjective.cpp.

329 {
330  size_t n_points = 0;
331  double result = 0.0;
332  for (auto& obj : fit_objects) {
333  const auto sim_array = obj.simulation_array();
334  const auto exp_array = obj.experimental_array();
335  const auto weights = obj.user_weights_array();
336  const size_t n_elements = sim_array.size();
337  for (size_t i = 0; i < n_elements; ++i) {
338  double value = m_module->residual(sim_array[i], exp_array[i], weights[i]);
339  result += value * value;
340  }
341  n_points += n_elements;
342  }
343 
344  int fnorm = static_cast<int>(n_points) - static_cast<int>(n_pars);
345  if (fnorm <= 0)
346  throw std::runtime_error("Error in ChiModuleWrapper: Normalization shall be positive");
347 
348  return result / fnorm;
349 }

References m_module.

Member Data Documentation

◆ m_module

std::unique_ptr<IChiSquaredModule> ChiModuleWrapper::m_module
private

Definition at line 39 of file FitObjective.cpp.

Referenced by ChiModuleWrapper(), and compute().


The documentation for this class was generated from the following file: