23 [[noreturn]] 
void throwInitializationException(std::string method)
 
   26     ss << 
"Error in SimDataPair::" << method << 
": Trying access non-initialized data\n";
 
   27     throw std::runtime_error(ss.str());
 
   30 std::unique_ptr<OutputData<double>> initUserWeights(
const OutputData<double>& shape, 
double value)
 
   32     auto result = std::make_unique<OutputData<double>>();
 
   33     result->copyShapeFrom(shape);
 
   34     result->setAllTo(value);
 
   41     : m_simulation_builder(builder), m_raw_data(data.clone()),
 
   42       m_raw_uncertainties(std::move(uncertainties))
 
   44     m_raw_user_weights = initUserWeights(*m_raw_data, user_weight);
 
   51     : m_simulation_builder(builder), m_raw_data(data.clone()),
 
   52       m_raw_uncertainties(std::move(uncertainties)), m_raw_user_weights(std::move(user_weights))
 
   54     if (!m_raw_user_weights)
 
   55         m_raw_user_weights = initUserWeights(*m_raw_data, 1.0);
 
   60     : m_simulation_builder(std::move(other.m_simulation_builder)),
 
   61       m_simulation(std::move(other.m_simulation)), m_sim_data(std::move(other.m_sim_data)),
 
   62       m_exp_data(std::move(other.m_exp_data)), m_uncertainties(std::move(other.m_uncertainties)),
 
   63       m_user_weights(std::move(other.m_user_weights)), m_raw_data(std::move(other.m_raw_data)),
 
   64       m_raw_uncertainties(std::move(other.m_raw_uncertainties)),
 
   65       m_raw_user_weights(std::move(other.m_raw_user_weights))
 
   70 SimDataPair::~SimDataPair() = 
default;
 
   74     m_simulation = m_simulation_builder(params);
 
   75     m_simulation->runSimulation();
 
   76     m_sim_data = m_simulation->result();
 
   81 bool SimDataPair::containsUncertainties()
 const 
   83     return static_cast<bool>(m_raw_uncertainties);
 
   88     return m_simulation ? m_simulation->intensityMapSize() : 0;
 
   93     if (m_sim_data.empty())
 
   94         throwInitializationException(
"simulationResult");
 
  100     if (m_exp_data.empty())
 
  101         throwInitializationException(
"experimentalData");
 
  107     if (m_uncertainties.empty())
 
  108         throwInitializationException(
"uncertainties");
 
  109     return m_uncertainties;
 
  115     if (m_user_weights.empty())
 
  116         throwInitializationException(
"userWeights");
 
  117     return m_user_weights;
 
  124     if (m_sim_data.size() == 0 || m_exp_data.size() == 0)
 
  125         throwInitializationException(
"relativeDifference");
 
  128     for (
size_t i = 0, size = result.size(); i < size; ++i)
 
  136     if (m_sim_data.size() == 0 || m_exp_data.size() == 0)
 
  137         throwInitializationException(
"absoluteDifference");
 
  140     for (
size_t i = 0, size = result.size(); i < size; ++i)
 
  148     if (m_exp_data.empty())
 
  149         throwInitializationException(
"experimental_array");
 
  150     return m_exp_data.data()->getRawDataVector();
 
  155     if (m_sim_data.empty())
 
  156         throwInitializationException(
"simulation_array");
 
  157     return m_sim_data.data()->getRawDataVector();
 
  162     if (m_uncertainties.empty())
 
  163         throwInitializationException(
"uncertainties_array");
 
  164     return m_uncertainties.data()->getRawDataVector();
 
  169     if (m_user_weights.empty())
 
  170         throwInitializationException(
"user_weights_array");
 
  171     return m_user_weights.data()->getRawDataVector();
 
  174 void SimDataPair::initResultArrays()
 
  176     if (m_exp_data.size() != 0 && m_uncertainties.size() != 0 && m_user_weights.size() != 0)
 
  179     if (!m_simulation || m_sim_data.size() == 0)
 
  180         throwInitializationException(
"initResultArrays");
 
  182     m_exp_data = m_simulation->convertData(*m_raw_data, 
true);
 
  184     if (containsUncertainties()) {
 
  185         m_uncertainties = m_simulation->convertData(*m_raw_uncertainties, 
true);
 
  188         std::unique_ptr<OutputData<double>> dummy_array =
 
  193     m_user_weights = m_simulation->convertData(*m_raw_user_weights, 
true);
 
  196 void SimDataPair::validate()
 const 
  198     if (!m_simulation_builder)
 
  199         throw std::runtime_error(
"Error in SimDataPair: simulation builder is empty");
 
  202         throw std::runtime_error(
"Error in SimDataPair: passed experimental data array is empty");
 
  204     if (m_raw_uncertainties && !m_raw_uncertainties->hasSameShape(*m_raw_data))
 
  205         throw std::runtime_error(
 
  206             "Error in SimDataPair: experimental data and uncertainties have different shape.");
 
  208     if (!m_raw_user_weights || !m_raw_user_weights->hasSameShape(*m_raw_data))
 
  209         throw std::runtime_error(
 
  210             "Error in SimDataPair: user weights are not initialized or have invalid shape");
 
Defines class IntensityDataFunctions.
 
Defines constants and "almost equal" in namespace Numeric.
 
Defines class SimDataPair.
 
Defines class Simulation.
 
Declares utilities for unit converters.
 
A collection of fit parameters.
 
Interface to provide axis translations to different units for simulation output.
 
Holds pair of simulation/experimental data to fit.
 
SimulationResult userWeights() const
Returns the user uncertainties cut to the ROI area.
 
std::vector< double > experimental_array() const
Returns the flattened experimental data cut to the ROI area.
 
SimulationResult absoluteDifference() const
Returns the absolute difference between simulated and experimental data cut to the ROI area.
 
std::vector< double > user_weights_array() const
Returns a flat array of user weights cut to the ROI area.
 
std::vector< double > uncertainties_array() const
Returns the flattened experimental uncertainties cut to the ROI area.
 
std::vector< double > simulation_array() const
Returns the flattened simulated intensities cut to the ROI area.
 
SimulationResult uncertainties() const
Returns the data uncertainties cut to the ROI area If no uncertainties present, returns zero-filled S...
 
SimulationResult experimentalData() const
Returns the experimental data cut to the ROI area.
 
size_t numberOfFitElements() const
Returns the number of elements in the fit area.
 
SimulationResult relativeDifference() const
Returns the relative difference between simulated and experimental data cut to the ROI area.
 
SimulationResult simulationResult() const
Returns the result of last computed simulation.
 
Wrapper around OutputData<double> that also provides unit conversions.
 
const IUnitConverter & converter() const
Returns underlying unit converter.
 
double GetRelativeDifference(double a, double b)
Returns the safe relative difference, which is 2(|a-b|)/(|a|+|b|) except in special cases.
 
double GetAbsoluteDifference(double a, double b)
Returns the absolute value of the difference between a and b.
 
std::unique_ptr< OutputData< double > > createOutputData(const IUnitConverter &converter, Axes::Units units)
Returns zero-valued output data array in specified units.