31 [[noreturn]]
void throwInitializationException(std::string method)
34 ss <<
"Error in SimDataPair::" << method <<
": Trying access non-initialized data\n";
35 throw std::runtime_error(ss.str());
38 std::unique_ptr<Datafield> initUserWeights(
const Datafield& shape,
double value)
41 result->setAllTo(value);
50 for (
size_t i = 0; i < detector.
rank(); ++i)
64 auto roi_data = std::make_unique<Datafield>(coordSystem->
defaultAxes());
66 if (roi_data->hasSameSizes(data)) {
71 }
else if (haveSameSizes(simulation.
detector(), data)) {
78 throw std::runtime_error(
79 "FitObject::init_dataset: Detector and experimental data have different shape");
91 std::unique_ptr<Datafield>&& raw_stdv,
double user_weight)
92 : m_simulation_builder(std::move(builder))
93 , m_raw_data(raw_data.clone())
94 , m_raw_uncertainties(std::move(raw_stdv))
101 std::unique_ptr<Datafield>&& raw_stdv,
102 std::unique_ptr<Datafield>&& user_weights)
103 : m_simulation_builder(std::move(builder))
104 , m_raw_data(raw_data.clone())
105 , m_raw_uncertainties(std::move(raw_stdv))
106 , m_raw_user_weights(std::move(user_weights))
114 : m_simulation_builder(std::move(other.m_simulation_builder))
115 , m_sim_data(std::move(other.m_sim_data))
116 , m_exp_data(std::move(other.m_exp_data))
117 , m_uncertainties(std::move(other.m_uncertainties))
118 , m_user_weights(std::move(other.m_user_weights))
119 , m_raw_data(std::move(other.m_raw_data))
120 , m_raw_uncertainties(std::move(other.m_raw_uncertainties))
121 , m_raw_user_weights(std::move(other.m_raw_user_weights))
138 throwInitializationException(
"initResultArrays");
140 auto*
const sim2d =
dynamic_cast<ISimulation2D*
>(simulation.get());
154 auto dummy_array = std::make_unique<Datafield>(converter.
defaultAxes());
167 throwInitializationException(
"simulationResult");
174 throwInitializationException(
"experimentalData");
181 throwInitializationException(
"uncertainties");
189 throwInitializationException(
"userWeights");
198 throwInitializationException(
"relativeDifference");
201 for (
size_t i = 0, size = result.
size(); i < size; ++i)
210 throwInitializationException(
"absoluteDifference");
213 for (
size_t i = 0, size = result.
size(); i < size; ++i)
222 throwInitializationException(
"experimental_array");
229 throwInitializationException(
"simulation_array");
236 throwInitializationException(
"uncertainties_array");
243 throwInitializationException(
"user_weights_array");
250 throw std::runtime_error(
"Error in SimDataPair: simulation builder is empty");
253 throw std::runtime_error(
"Error in SimDataPair: passed experimental data array is empty");
256 throw std::runtime_error(
257 "Error in SimDataPair: experimental data and uncertainties have different shape.");
260 throw std::runtime_error(
261 "Error in SimDataPair: user weights are not initialized or have invalid shape");
Defines the macro ASSERT.
#define ASSERT(condition)
Defines CoordSystem1D class and derived classes.
Defines interface CoordSystem2D and its subclasses.
Defines namespace DataUtils.
Defines and implements templated class Datafield.
std::function< std::unique_ptr< ISimulation >(const mumufit::Parameters &)> simulation_builder_t
Defines and implements templated class Frame.
Defines common detector interface.
Defines interface ISimulation2D.
Declares interface ISpecularScan.
Defines constants and "almost equal" in namespace Numeric.
Defines class SimDataPair.
Stores radiation power per bin.
const IAxis & axis(size_t k) const
std::vector< double > flatVector() const
Returns copy of raw data vector.
const Frame & frame() const
std::vector< IAxis * > cloned_axes() const
Returns cloned axes.
virtual size_t size() const =0
Returns the number of bins.
Interface to provide axis translations to different units for simulation output.
std::vector< IAxis * > defaultAxes() const
Abstract detector interface.
void iterateOverNonMaskedPoints(std::function< void(const_iterator)> func) const
Iterate over all non-masked points within "region of interest". If no region of interest is explicitl...
const IAxis & axis(size_t index) const
One axis of the complete detector. Any region of interest is not taken into account.
size_t rank() const
Returns number of defined axes.
Abstract base class of simulations that generate 2D patterns.
virtual ICoordSystem * createCoordSystem() const =0
Holds pair of simulation/experimental data to fit.
SimulationResult userWeights() const
Returns the user uncertainties cut to the ROI area.
SimulationResult m_sim_data
Current simulation results. Masked areas are nullified.
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. If no uncertainties are availab...
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.
bool containsUncertainties() const
std::unique_ptr< Datafield > m_raw_data
Raw experimental data as obtained from the user.
std::unique_ptr< Datafield > m_raw_uncertainties
Data uncertainties as provided by the user.
SimDataPair(simulation_builder_t builder, const Datafield &raw_data, std::unique_ptr< Datafield > &&raw_stdv, double user_weight=1.0)
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.
std::unique_ptr< Datafield > m_raw_user_weights
User-defined weights.
SimulationResult m_uncertainties
Weights from experimental data uncertainties. Masked areas are nullified.
SimulationResult m_exp_data
Experimental data cut to the ROI. Masked areas are nullified.
SimulationResult m_user_weights
Manually defined (user) weights. Masked areas are nullified.
void execSimulation(const mumufit::Parameters ¶ms)
simulation_builder_t m_simulation_builder
ISimulation builder from the user to construct simulation for given set of parameters.
An iterator for SimulationArea.
size_t detectorIndex() const
Wrapper around Datafield that also provides unit conversions.
const ICoordSystem & converter() const
Returns underlying unit converter.
Datafield * datafield(Coords units=Coords::UNDEFINED) const
A collection of fit parameters.
double relativeDifference(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.