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

Public Member Functions

 SimulationResult ()=default
 
 SimulationResult (const OutputData< double > &data, const IUnitConverter &unit_converter)
 
 SimulationResult (const SimulationResult &other)
 
 SimulationResult (SimulationResult &&other)
 
SimulationResultoperator= (const SimulationResult &other)
 
SimulationResultoperator= (SimulationResult &&other)
 
std::unique_ptr< OutputData< double > > data (Axes::Units units=Axes::Units::DEFAULT) const
 
Histogram2Dhistogram2d (Axes::Units units=Axes::Units::DEFAULT) const
 
std::vector< AxisInfoaxisInfo (Axes::Units units=Axes::Units::DEFAULT) const
 
const IUnitConverterconverter () const
 
double & operator[] (size_t i)
 
const double & operator[] (size_t i) const
 
size_t size () const
 
bool empty () const
 
PyObjectarray (Axes::Units units=Axes::Units::DEFAULT) const
 
std::vector< double > axis (Axes::Units units=Axes::Units::DEFAULT) const
 
std::vector< double > axis (size_t i_axis, Axes::Units units=Axes::Units::DEFAULT) const
 

Private Member Functions

void checkDimensions () const
 

Private Attributes

std::unique_ptr< OutputData< double > > mP_data
 
std::unique_ptr< IUnitConvertermP_unit_converter
 

Detailed Description

Wrapper around OutputData<double> that also provides unit conversions.

Definition at line 40 of file SimulationResult.h.

Constructor & Destructor Documentation

◆ SimulationResult() [1/4]

SimulationResult::SimulationResult ( )
default

◆ SimulationResult() [2/4]

SimulationResult::SimulationResult ( const OutputData< double > &  data,
const IUnitConverter unit_converter 
)

Definition at line 18 of file SimulationResult.cpp.

20  : mP_data(data.clone()), mP_unit_converter(unit_converter.clone())
21 {
23 }
virtual IUnitConverter * clone() const =0
std::unique_ptr< OutputData< double > > mP_data
void checkDimensions() const
std::unique_ptr< IUnitConverter > mP_unit_converter
std::unique_ptr< OutputData< double > > data(Axes::Units units=Axes::Units::DEFAULT) const

References checkDimensions().

Here is the call graph for this function:

◆ SimulationResult() [3/4]

SimulationResult::SimulationResult ( const SimulationResult other)

Definition at line 25 of file SimulationResult.cpp.

26 {
27  if (!other.mP_data || !other.mP_unit_converter)
28  throw std::runtime_error("Error in SimulationResult(const SimulationResult& other): "
29  "not initialized");
30  mP_data.reset(other.mP_data->clone());
31  mP_unit_converter.reset(other.mP_unit_converter->clone());
32 }

References mP_data, and mP_unit_converter.

◆ SimulationResult() [4/4]

SimulationResult::SimulationResult ( SimulationResult &&  other)

Definition at line 34 of file SimulationResult.cpp.

35  : mP_data(std::move(other.mP_data)), mP_unit_converter(std::move(other.mP_unit_converter))
36 {
37 }

Member Function Documentation

◆ operator=() [1/2]

SimulationResult & SimulationResult::operator= ( const SimulationResult other)

Definition at line 39 of file SimulationResult.cpp.

40 {
41  if (!other.mP_data || !other.mP_unit_converter)
42  throw std::runtime_error("Error in SimulationResult(const SimulationResult& other): "
43  "not initialized");
44 
45  mP_data.reset(other.mP_data->clone());
46  mP_unit_converter.reset(other.mP_unit_converter->clone());
47  return *this;
48 }

References mP_data, and mP_unit_converter.

◆ operator=() [2/2]

SimulationResult & SimulationResult::operator= ( SimulationResult &&  other)

Definition at line 50 of file SimulationResult.cpp.

51 {
52  mP_data.reset(other.mP_data.release());
53  mP_unit_converter.reset(other.mP_unit_converter.release());
54  return *this;
55 }

References mP_data, and mP_unit_converter.

◆ data()

std::unique_ptr< OutputData< double > > SimulationResult::data ( Axes::Units  units = Axes::Units::DEFAULT) const

Definition at line 57 of file SimulationResult.cpp.

58 {
59  if (!mP_data)
60  throw std::runtime_error(
61  "Error in SimulationResult::data:Attempt to access non-initialized data");
62  return mP_unit_converter->createConvertedData(*mP_data, units);
63 }

References mP_data, and mP_unit_converter.

Referenced by RQ4Metric::compute(), SimDataPair::experimental_array(), histogram2d(), SimDataPair::simulation_array(), SimDataPair::uncertainties_array(), SimDataPair::user_weights_array(), and IntensityDataIOFactory::writeSimulationResult().

◆ histogram2d()

Histogram2D * SimulationResult::histogram2d ( Axes::Units  units = Axes::Units::DEFAULT) const

Definition at line 65 of file SimulationResult.cpp.

66 {
67  if (mP_data->getRank() != 2 || mP_unit_converter->dimension() != 2)
68  throw std::runtime_error("Error in SimulationResult::histogram2d: "
69  "dimension of data is not 2. Please use axis(), array() and "
70  "data() functions for 1D data.");
71  auto P_data = data(units);
72  return new Histogram2D(*P_data);
73 }
Two dimensional histogram.
Definition: Histogram2D.h:25

References data(), mP_data, and mP_unit_converter.

Here is the call graph for this function:

◆ axisInfo()

std::vector< AxisInfo > SimulationResult::axisInfo ( Axes::Units  units = Axes::Units::DEFAULT) const

Provide AxisInfo for each axis and the given units.

Definition at line 75 of file SimulationResult.cpp.

76 {
77  if (!mP_unit_converter)
78  return {};
79  std::vector<AxisInfo> result;
80  auto dim = mP_unit_converter->dimension();
81  for (size_t i = 0; i < dim; ++i) {
82  AxisInfo info = {mP_unit_converter->axisName(i, units),
83  mP_unit_converter->calculateMin(i, units),
84  mP_unit_converter->calculateMax(i, units)};
85  result.push_back(info);
86  }
87  return result;
88 }
Information about an axis in specific units.

References mP_unit_converter.

◆ converter()

const IUnitConverter & SimulationResult::converter ( ) const

Returns underlying unit converter.

Definition at line 90 of file SimulationResult.cpp.

91 {
92  if (!mP_unit_converter)
93  throw std::runtime_error(
94  "Error in SimulationResult::converter: unit converter was not initialized");
95  return *mP_unit_converter;
96 }

References mP_unit_converter.

Referenced by SimDataPair::initResultArrays().

◆ operator[]() [1/2]

double & SimulationResult::operator[] ( size_t  i)

Data element access.

Definition at line 98 of file SimulationResult.cpp.

99 {
100  if (mP_data)
101  return (*mP_data)[i];
102  throw std::runtime_error("Error in SimulationResult::operator[]: "
103  "no data initialized");
104 }

References mP_data.

◆ operator[]() [2/2]

const double & SimulationResult::operator[] ( size_t  i) const

Definition at line 106 of file SimulationResult.cpp.

107 {
108  if (mP_data)
109  return (*mP_data)[i];
110  throw std::runtime_error("Error in SimulationResult::operator[]: "
111  "no data initialized");
112 }

References mP_data.

◆ size()

size_t SimulationResult::size ( ) const

Definition at line 114 of file SimulationResult.cpp.

115 {
116  return mP_data ? mP_data->getAllocatedSize() : 0;
117 }

References mP_data.

Referenced by SimDataPair::absoluteDifference(), empty(), SimDataPair::initResultArrays(), SimDataPair::relativeDifference(), and IntensityDataFunctions::RelativeDifference().

◆ empty()

bool SimulationResult::empty ( ) const
inline

Definition at line 72 of file SimulationResult.h.

72 { return size() == 0; }
size_t size() const

References size().

Referenced by SimDataPair::experimental_array(), SimDataPair::experimentalData(), IntensityDataFunctions::RelativeDifference(), SimDataPair::simulation_array(), SimDataPair::simulationResult(), SimDataPair::uncertainties(), SimDataPair::uncertainties_array(), SimDataPair::user_weights_array(), and SimDataPair::userWeights().

Here is the call graph for this function:

◆ array()

PyObject * SimulationResult::array ( Axes::Units  units = Axes::Units::DEFAULT) const

returns intensity data as Python numpy array

Definition at line 120 of file SimulationResult.cpp.

121 {
122  if (!mP_data || !mP_unit_converter)
123  throw std::runtime_error(
124  "Error in SimulationResult::array: attempt to access non-initialized data");
125  return mP_unit_converter->createConvertedData(*mP_data, units)->getArray();
126 }

References mP_data, and mP_unit_converter.

◆ axis() [1/2]

std::vector< double > SimulationResult::axis ( Axes::Units  units = Axes::Units::DEFAULT) const

Definition at line 129 of file SimulationResult.cpp.

130 {
131  return axis(0, units);
132 }
std::vector< double > axis(Axes::Units units=Axes::Units::DEFAULT) const

Referenced by axis().

◆ axis() [2/2]

std::vector< double > SimulationResult::axis ( size_t  i_axis,
Axes::Units  units = Axes::Units::DEFAULT 
) const

Returns axis coordinates as a numpy array.

With no parameters given returns coordinates of x-axis in default units.

Definition at line 134 of file SimulationResult.cpp.

135 {
136  if (i_axis >= mP_unit_converter->dimension())
137  throw std::runtime_error(
138  "Error in SimulationResult::axis: no axis corresponds to passed index.");
139  auto axis = mP_unit_converter->createConvertedAxis(i_axis, units);
140  return axis->getBinCenters();
141 }

References axis(), and mP_unit_converter.

Here is the call graph for this function:

◆ checkDimensions()

void SimulationResult::checkDimensions ( ) const
private

Definition at line 143 of file SimulationResult.cpp.

144 {
145  if (mP_data->getRank() != mP_unit_converter->dimension())
146  throw std::runtime_error("Error in SimulationResults::checkDimensions(): "
147  "dimensions of data and unit converter don't match");
148 }

References mP_data, and mP_unit_converter.

Referenced by SimulationResult().

Member Data Documentation

◆ mP_data

std::unique_ptr<OutputData<double> > SimulationResult::mP_data
private

◆ mP_unit_converter

std::unique_ptr<IUnitConverter> SimulationResult::mP_unit_converter
private

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