BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SimDataPair Class Reference

Holds pair of simulation/experimental data to fit. More...

Collaboration diagram for SimDataPair:
[legend]

Public Member Functions

 SimDataPair (SimDataPair &&other)
 
 SimDataPair (simulation_builder_t builder, const OutputData< double > &data, std::unique_ptr< OutputData< double >> uncertainties, double user_weight=1.0)
 
 SimDataPair (simulation_builder_t builder, const OutputData< double > &data, std::unique_ptr< OutputData< double >> uncertainties, std::unique_ptr< OutputData< double >> user_weights)
 
 ~SimDataPair ()
 
SimulationResult absoluteDifference () const
 Returns the absolute difference between simulated and experimental data cut to the ROI area. More...
 
bool containsUncertainties () const
 
std::vector< double > experimental_array () const
 Returns the flattened experimental data cut to the ROI area. More...
 
SimulationResult experimentalData () const
 Returns the experimental data cut to the ROI area. More...
 
size_t numberOfFitElements () const
 Returns the number of elements in the fit area. More...
 
SimulationResult relativeDifference () const
 Returns the relative difference between simulated and experimental data cut to the ROI area. More...
 
void runSimulation (const mumufit::Parameters &params)
 
std::vector< double > simulation_array () const
 Returns the flattened simulated intensities cut to the ROI area. More...
 
SimulationResult simulationResult () const
 Returns the result of last computed simulation. More...
 
SimulationResult uncertainties () const
 Returns the data uncertainties cut to the ROI area If no uncertainties present, returns zero-filled SimulationResult. More...
 
std::vector< double > uncertainties_array () const
 Returns the flattened experimental uncertainties cut to the ROI area. More...
 
std::vector< double > user_weights_array () const
 Returns a flat array of user weights cut to the ROI area. More...
 
SimulationResult userWeights () const
 Returns the user uncertainties cut to the ROI area. More...
 

Private Member Functions

void initResultArrays ()
 
void validate () const
 

Private Attributes

SimulationResult m_exp_data
 Experimental data cut to the ROI. Masked areas are nullified. More...
 
std::unique_ptr< OutputData< double > > m_raw_data
 Raw experimental data as obtained from the user. More...
 
std::unique_ptr< OutputData< double > > m_raw_uncertainties
 Data uncertainties as provided by the user. More...
 
std::unique_ptr< OutputData< double > > m_raw_user_weights
 User-defined weights. More...
 
SimulationResult m_sim_data
 Current simulation results. Masked areas are nullified. More...
 
std::unique_ptr< ISimulationm_simulation
 Current simulation for given set of parameters. More...
 
simulation_builder_t m_simulation_builder
 ISimulation builder from the user to construct simulation for given set of parameters. More...
 
SimulationResult m_uncertainties
 Weights from experimental data uncertainties. Masked areas are nullified. More...
 
SimulationResult m_user_weights
 Manually defined (user) weights. Masked areas are nullified. More...
 

Detailed Description

Holds pair of simulation/experimental data to fit.

Definition at line 30 of file SimDataPair.h.

Constructor & Destructor Documentation

◆ SimDataPair() [1/3]

SimDataPair::SimDataPair ( simulation_builder_t  builder,
const OutputData< double > &  data,
std::unique_ptr< OutputData< double >>  uncertainties,
double  user_weight = 1.0 
)

Definition at line 38 of file SimDataPair.cpp.

40  : m_simulation_builder(builder)
41  , m_raw_data(data.clone())
43 {
44  m_raw_user_weights = initUserWeights(*m_raw_data, user_weight);
45  validate();
46 }
OutputData * clone() const
Definition: OutputData.h:259
std::unique_ptr< OutputData< double > > m_raw_user_weights
User-defined weights.
Definition: SimDataPair.h:109
SimulationResult uncertainties() const
Returns the data uncertainties cut to the ROI area If no uncertainties present, returns zero-filled S...
void validate() const
std::unique_ptr< OutputData< double > > m_raw_data
Raw experimental data as obtained from the user.
Definition: SimDataPair.h:105
std::unique_ptr< OutputData< double > > m_raw_uncertainties
Data uncertainties as provided by the user.
Definition: SimDataPair.h:107
simulation_builder_t m_simulation_builder
ISimulation builder from the user to construct simulation for given set of parameters.
Definition: SimDataPair.h:90

References m_raw_data, m_raw_user_weights, and validate().

Here is the call graph for this function:

◆ SimDataPair() [2/3]

SimDataPair::SimDataPair ( simulation_builder_t  builder,
const OutputData< double > &  data,
std::unique_ptr< OutputData< double >>  uncertainties,
std::unique_ptr< OutputData< double >>  user_weights 
)

Definition at line 48 of file SimDataPair.cpp.

51  : m_simulation_builder(builder)
52  , m_raw_data(data.clone())
54  , m_raw_user_weights(std::move(user_weights))
55 {
56  if (!m_raw_user_weights)
57  m_raw_user_weights = initUserWeights(*m_raw_data, 1.0);
58  validate();
59 }

References m_raw_data, m_raw_user_weights, and validate().

Here is the call graph for this function:

◆ SimDataPair() [3/3]

SimDataPair::SimDataPair ( SimDataPair &&  other)

Definition at line 61 of file SimDataPair.cpp.

62  : m_simulation_builder(std::move(other.m_simulation_builder))
63  , m_simulation(std::move(other.m_simulation))
64  , m_sim_data(std::move(other.m_sim_data))
65  , m_exp_data(std::move(other.m_exp_data))
66  , m_uncertainties(std::move(other.m_uncertainties))
67  , m_user_weights(std::move(other.m_user_weights))
68  , m_raw_data(std::move(other.m_raw_data))
69  , m_raw_uncertainties(std::move(other.m_raw_uncertainties))
70  , m_raw_user_weights(std::move(other.m_raw_user_weights))
71 {
72  validate();
73 }
SimulationResult m_sim_data
Current simulation results. Masked areas are nullified.
Definition: SimDataPair.h:96
std::unique_ptr< ISimulation > m_simulation
Current simulation for given set of parameters.
Definition: SimDataPair.h:93
SimulationResult m_uncertainties
Weights from experimental data uncertainties. Masked areas are nullified.
Definition: SimDataPair.h:100
SimulationResult m_exp_data
Experimental data cut to the ROI. Masked areas are nullified.
Definition: SimDataPair.h:98
SimulationResult m_user_weights
Manually defined (user) weights. Masked areas are nullified.
Definition: SimDataPair.h:102

References validate().

Here is the call graph for this function:

◆ ~SimDataPair()

SimDataPair::~SimDataPair ( )
default

Member Function Documentation

◆ absoluteDifference()

SimulationResult SimDataPair::absoluteDifference ( ) const

Returns the absolute difference between simulated and experimental data cut to the ROI area.

Definition at line 139 of file SimDataPair.cpp.

140 {
141  if (m_sim_data.size() == 0 || m_exp_data.size() == 0)
142  throwInitializationException("absoluteDifference");
143 
144  SimulationResult result = m_sim_data;
145  for (size_t i = 0, size = result.size(); i < size; ++i)
146  result[i] = Numeric::GetAbsoluteDifference(result[i], m_exp_data[i]);
147 
148  return result;
149 }
Wrapper around OutputData<double> that also provides unit conversions.
size_t size() const
double GetAbsoluteDifference(double a, double b)
Returns the absolute value of the difference between a and b.
Definition: Numeric.cpp:23

References Numeric::GetAbsoluteDifference(), m_exp_data, m_sim_data, and SimulationResult::size().

Referenced by FitObjective::absoluteDifference().

Here is the call graph for this function:

◆ containsUncertainties()

bool SimDataPair::containsUncertainties ( ) const

◆ experimental_array()

std::vector< double > SimDataPair::experimental_array ( ) const

Returns the flattened experimental data cut to the ROI area.

Definition at line 151 of file SimDataPair.cpp.

152 {
153  if (m_exp_data.empty())
154  throwInitializationException("experimental_array");
155  return m_exp_data.data()->getRawDataVector();
156 }
bool empty() const
std::unique_ptr< OutputData< double > > data(Axes::Units units=Axes::Units::DEFAULT) const

References SimulationResult::data(), SimulationResult::empty(), and m_exp_data.

Referenced by ObjectiveMetric::compute(), and FitObjective::experimental_array().

Here is the call graph for this function:

◆ experimentalData()

SimulationResult SimDataPair::experimentalData ( ) const

Returns the experimental data cut to the ROI area.

Definition at line 103 of file SimDataPair.cpp.

104 {
105  if (m_exp_data.empty())
106  throwInitializationException("experimentalData");
107  return m_exp_data;
108 }

References SimulationResult::empty(), and m_exp_data.

Referenced by RQ4Metric::compute(), and FitObjective::experimentalData().

Here is the call graph for this function:

◆ initResultArrays()

void SimDataPair::initResultArrays ( )
private

Definition at line 179 of file SimDataPair.cpp.

180 {
181  if (m_exp_data.size() != 0 && m_uncertainties.size() != 0 && m_user_weights.size() != 0)
182  return;
183 
184  if (!m_simulation || m_sim_data.size() == 0)
185  throwInitializationException("initResultArrays");
186 
187  m_exp_data = m_simulation->convertData(*m_raw_data, true);
188 
189  if (containsUncertainties()) {
190  m_uncertainties = m_simulation->convertData(*m_raw_uncertainties, true);
191  } else {
192  const IUnitConverter& converter = m_sim_data.converter();
193  std::unique_ptr<OutputData<double>> dummy_array =
194  UnitConverterUtils::createOutputData(converter, converter.defaultUnits());
195  m_uncertainties = SimulationResult(*dummy_array, converter);
196  }
197 
198  m_user_weights = m_simulation->convertData(*m_raw_user_weights, true);
199 }
Interface to provide axis translations to different units for simulation output.
virtual Axes::Units defaultUnits() const =0
bool containsUncertainties() const
Definition: SimDataPair.cpp:86
const IUnitConverter & converter() const
Returns underlying unit converter.
std::unique_ptr< OutputData< double > > createOutputData(const IUnitConverter &converter, Axes::Units units)
Returns zero-valued output data array in specified units.

References containsUncertainties(), SimulationResult::converter(), UnitConverterUtils::createOutputData(), IUnitConverter::defaultUnits(), m_exp_data, m_raw_data, m_raw_uncertainties, m_raw_user_weights, m_sim_data, m_simulation, m_uncertainties, m_user_weights, and SimulationResult::size().

Referenced by runSimulation().

Here is the call graph for this function:

◆ numberOfFitElements()

size_t SimDataPair::numberOfFitElements ( ) const

Returns the number of elements in the fit area.

Definition at line 91 of file SimDataPair.cpp.

92 {
93  return m_simulation ? m_simulation->intensityMapSize() : 0;
94 }

References m_simulation.

◆ relativeDifference()

SimulationResult SimDataPair::relativeDifference ( ) const

Returns the relative difference between simulated and experimental data cut to the ROI area.

Returns relative difference between simulation and experimental data.

Definition at line 127 of file SimDataPair.cpp.

128 {
129  if (m_sim_data.size() == 0 || m_exp_data.size() == 0)
130  throwInitializationException("relativeDifference");
131 
132  SimulationResult result = m_sim_data;
133  for (size_t i = 0, size = result.size(); i < size; ++i)
134  result[i] = Numeric::GetRelativeDifference(result[i], m_exp_data[i]);
135 
136  return result;
137 }
double GetRelativeDifference(double a, double b)
Returns the safe relative difference, which is 2(|a-b|)/(|a|+|b|) except in special cases.
Definition: Numeric.cpp:29

References Numeric::GetRelativeDifference(), m_exp_data, m_sim_data, and SimulationResult::size().

Referenced by FitObjective::relativeDifference().

Here is the call graph for this function:

◆ runSimulation()

void SimDataPair::runSimulation ( const mumufit::Parameters params)

Definition at line 77 of file SimDataPair.cpp.

78 {
80  m_simulation->runSimulation();
81  m_sim_data = m_simulation->result();
82 
84 }
void initResultArrays()

References initResultArrays(), m_sim_data, m_simulation, and m_simulation_builder.

Here is the call graph for this function:

◆ simulation_array()

std::vector< double > SimDataPair::simulation_array ( ) const

Returns the flattened simulated intensities cut to the ROI area.

Definition at line 158 of file SimDataPair.cpp.

159 {
160  if (m_sim_data.empty())
161  throwInitializationException("simulation_array");
162  return m_sim_data.data()->getRawDataVector();
163 }

References SimulationResult::data(), SimulationResult::empty(), and m_sim_data.

Referenced by ObjectiveMetric::compute(), and FitObjective::simulation_array().

Here is the call graph for this function:

◆ simulationResult()

SimulationResult SimDataPair::simulationResult ( ) const

Returns the result of last computed simulation.

Definition at line 96 of file SimDataPair.cpp.

97 {
98  if (m_sim_data.empty())
99  throwInitializationException("simulationResult");
100  return m_sim_data;
101 }

References SimulationResult::empty(), and m_sim_data.

Referenced by RQ4Metric::compute(), FitObjective::simulationResult(), and GUIFitObserver::update().

Here is the call graph for this function:

◆ uncertainties()

SimulationResult SimDataPair::uncertainties ( ) const

Returns the data uncertainties cut to the ROI area If no uncertainties present, returns zero-filled SimulationResult.

Definition at line 110 of file SimDataPair.cpp.

111 {
112  if (m_uncertainties.empty())
113  throwInitializationException("uncertainties");
114  return m_uncertainties;
115 }

References SimulationResult::empty(), and m_uncertainties.

Referenced by FitObjective::uncertaintyData().

Here is the call graph for this function:

◆ uncertainties_array()

std::vector< double > SimDataPair::uncertainties_array ( ) const

Returns the flattened experimental uncertainties cut to the ROI area.

If no uncertainties are available, returns a zero-filled array sized to the ROI area.

Definition at line 165 of file SimDataPair.cpp.

166 {
167  if (m_uncertainties.empty())
168  throwInitializationException("uncertainties_array");
169  return m_uncertainties.data()->getRawDataVector();
170 }

References SimulationResult::data(), SimulationResult::empty(), and m_uncertainties.

Referenced by ObjectiveMetric::compute(), and FitObjective::uncertainties().

Here is the call graph for this function:

◆ user_weights_array()

std::vector< double > SimDataPair::user_weights_array ( ) const

Returns a flat array of user weights cut to the ROI area.

Definition at line 172 of file SimDataPair.cpp.

173 {
174  if (m_user_weights.empty())
175  throwInitializationException("user_weights_array");
176  return m_user_weights.data()->getRawDataVector();
177 }

References SimulationResult::data(), SimulationResult::empty(), and m_user_weights.

Referenced by ObjectiveMetric::compute(), RQ4Metric::compute(), and FitObjective::weights_array().

Here is the call graph for this function:

◆ userWeights()

SimulationResult SimDataPair::userWeights ( ) const

Returns the user uncertainties cut to the ROI area.

Definition at line 118 of file SimDataPair.cpp.

119 {
120  if (m_user_weights.empty())
121  throwInitializationException("userWeights");
122  return m_user_weights;
123 }

References SimulationResult::empty(), and m_user_weights.

Here is the call graph for this function:

◆ validate()

void SimDataPair::validate ( ) const
private

Definition at line 201 of file SimDataPair.cpp.

202 {
204  throw std::runtime_error("Error in SimDataPair: simulation builder is empty");
205 
206  if (!m_raw_data)
207  throw std::runtime_error("Error in SimDataPair: passed experimental data array is empty");
208 
209  if (m_raw_uncertainties && !m_raw_uncertainties->hasSameShape(*m_raw_data))
210  throw std::runtime_error(
211  "Error in SimDataPair: experimental data and uncertainties have different shape.");
212 
213  if (!m_raw_user_weights || !m_raw_user_weights->hasSameShape(*m_raw_data))
214  throw std::runtime_error(
215  "Error in SimDataPair: user weights are not initialized or have invalid shape");
216 }

References m_raw_data, m_raw_uncertainties, m_raw_user_weights, and m_simulation_builder.

Referenced by SimDataPair().

Member Data Documentation

◆ m_exp_data

SimulationResult SimDataPair::m_exp_data
private

Experimental data cut to the ROI. Masked areas are nullified.

Definition at line 98 of file SimDataPair.h.

Referenced by absoluteDifference(), experimental_array(), experimentalData(), initResultArrays(), and relativeDifference().

◆ m_raw_data

std::unique_ptr<OutputData<double> > SimDataPair::m_raw_data
private

Raw experimental data as obtained from the user.

Definition at line 105 of file SimDataPair.h.

Referenced by SimDataPair(), initResultArrays(), and validate().

◆ m_raw_uncertainties

std::unique_ptr<OutputData<double> > SimDataPair::m_raw_uncertainties
private

Data uncertainties as provided by the user.

Definition at line 107 of file SimDataPair.h.

Referenced by containsUncertainties(), initResultArrays(), and validate().

◆ m_raw_user_weights

std::unique_ptr<OutputData<double> > SimDataPair::m_raw_user_weights
private

User-defined weights.

Definition at line 109 of file SimDataPair.h.

Referenced by SimDataPair(), initResultArrays(), and validate().

◆ m_sim_data

SimulationResult SimDataPair::m_sim_data
private

Current simulation results. Masked areas are nullified.

Definition at line 96 of file SimDataPair.h.

Referenced by absoluteDifference(), initResultArrays(), relativeDifference(), runSimulation(), simulation_array(), and simulationResult().

◆ m_simulation

std::unique_ptr<ISimulation> SimDataPair::m_simulation
private

Current simulation for given set of parameters.

Definition at line 93 of file SimDataPair.h.

Referenced by initResultArrays(), numberOfFitElements(), and runSimulation().

◆ m_simulation_builder

simulation_builder_t SimDataPair::m_simulation_builder
private

ISimulation builder from the user to construct simulation for given set of parameters.

Definition at line 90 of file SimDataPair.h.

Referenced by runSimulation(), and validate().

◆ m_uncertainties

SimulationResult SimDataPair::m_uncertainties
private

Weights from experimental data uncertainties. Masked areas are nullified.

Definition at line 100 of file SimDataPair.h.

Referenced by initResultArrays(), uncertainties(), and uncertainties_array().

◆ m_user_weights

SimulationResult SimDataPair::m_user_weights
private

Manually defined (user) weights. Masked areas are nullified.

Definition at line 102 of file SimDataPair.h.

Referenced by initResultArrays(), user_weights_array(), and userWeights().


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