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

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

Public Member Functions

 SimulationResult ()=default
 
 SimulationResult (const OutputData< double > &data, const IUnitConverter &unit_converter)
 
 SimulationResult (const SimulationResult &other)
 
 SimulationResult (SimulationResult &&other)
 
PyObjectarray (Axes::Units units=Axes::Units::DEFAULT) const
 returns intensity data as Python numpy array More...
 
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
 Returns axis coordinates as a numpy array. More...
 
std::vector< AxisInfoaxisInfo (Axes::Units units=Axes::Units::DEFAULT) const
 Provide AxisInfo for each axis and the given units. More...
 
const IUnitConverterconverter () const
 Returns underlying unit converter. More...
 
std::unique_ptr< OutputData< double > > data (Axes::Units units=Axes::Units::DEFAULT) const
 
bool empty () const
 
Histogram2Dhistogram2d (Axes::Units units=Axes::Units::DEFAULT) const
 
double max () const
 
SimulationResultoperator= (const SimulationResult &other)
 
SimulationResultoperator= (SimulationResult &&other)
 
double & operator[] (size_t i)
 Data element access. More...
 
const double & operator[] (size_t i) const
 
size_t size () const
 

Private Member Functions

void checkDimensions () const
 

Private Attributes

std::unique_ptr< OutputData< double > > m_data
 
std::unique_ptr< IUnitConverterm_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  : m_data(data.clone()), m_unit_converter(unit_converter.clone())
21 {
23 }
virtual IUnitConverter * clone() const =0
std::unique_ptr< IUnitConverter > m_unit_converter
void checkDimensions() const
std::unique_ptr< OutputData< double > > m_data
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.m_data || !other.m_unit_converter)
28  throw std::runtime_error("Error in SimulationResult(const SimulationResult& other): "
29  "not initialized");
30  m_data.reset(other.m_data->clone());
31  m_unit_converter.reset(other.m_unit_converter->clone());
32 }

References m_data, and m_unit_converter.

◆ SimulationResult() [4/4]

SimulationResult::SimulationResult ( SimulationResult &&  other)

Definition at line 34 of file SimulationResult.cpp.

35  : m_data(std::move(other.m_data)), m_unit_converter(std::move(other.m_unit_converter))
36 {
37 }

Member Function Documentation

◆ array()

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

returns intensity data as Python numpy array

Definition at line 124 of file SimulationResult.cpp.

125 {
126  if (!m_data || !m_unit_converter)
127  throw std::runtime_error(
128  "Error in SimulationResult::array: attempt to access non-initialized data");
129  return m_unit_converter->createConvertedData(*m_data, units)->getArray();
130 }

References m_data, and m_unit_converter.

◆ axis() [1/2]

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

Definition at line 133 of file SimulationResult.cpp.

134 {
135  return axis(0, units);
136 }
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 138 of file SimulationResult.cpp.

139 {
140  if (i_axis >= m_unit_converter->dimension())
141  throw std::runtime_error(
142  "Error in SimulationResult::axis: no axis corresponds to passed index.");
143  auto axis = m_unit_converter->createConvertedAxis(i_axis, units);
144  return axis->binCenters();
145 }

References axis(), and m_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 (!m_unit_converter)
78  return {};
79  std::vector<AxisInfo> result;
80  auto dim = m_unit_converter->dimension();
81  for (size_t i = 0; i < dim; ++i) {
82  AxisInfo info = {m_unit_converter->axisName(i, units),
83  m_unit_converter->calculateMin(i, units),
84  m_unit_converter->calculateMax(i, units)};
85  result.push_back(info);
86  }
87  return result;
88 }
Information about an axis in specific units.

References m_unit_converter.

◆ checkDimensions()

void SimulationResult::checkDimensions ( ) const
private

Definition at line 147 of file SimulationResult.cpp.

148 {
149  if (m_data->rank() != m_unit_converter->dimension())
150  throw std::runtime_error("Error in SimulationResults::checkDimensions(): "
151  "dimensions of data and unit converter don't match");
152 }

References m_data, and m_unit_converter.

Referenced by SimulationResult().

◆ converter()

const IUnitConverter & SimulationResult::converter ( ) const

Returns underlying unit converter.

Definition at line 90 of file SimulationResult.cpp.

91 {
93  return *m_unit_converter;
94 }
#define ASSERT(condition)
Definition: Assert.h:31

References ASSERT, and m_unit_converter.

Referenced by SimDataPair::initResultArrays(), and JobItemUtils::setResults().

◆ 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 (!m_data)
60  throw std::runtime_error(
61  "Error in SimulationResult::data:Attempt to access non-initialized data");
62  return m_unit_converter->createConvertedData(*m_data, units);
63 }

References m_data, and m_unit_converter.

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

◆ empty()

bool SimulationResult::empty ( ) const
inline

Definition at line 68 of file SimulationResult.h.

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

References size().

Referenced by SimDataPair::experimental_array(), SimDataPair::experimentalData(), HistoUtils::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:

◆ histogram2d()

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

Definition at line 65 of file SimulationResult.cpp.

66 {
67  if (m_data->rank() != 2 || m_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:24

References data(), m_data, and m_unit_converter.

Here is the call graph for this function:

◆ max()

double SimulationResult::max ( ) const

Definition at line 113 of file SimulationResult.cpp.

114 {
115  ASSERT(m_data);
116  double result = 0;
117  for (size_t i = 0; i < size(); ++i)
118  if ((*m_data)[i] > result)
119  result = (*m_data)[i];
120  return result;
121 }

References ASSERT, m_data, and size().

Here is the call graph for this function:

◆ operator=() [1/2]

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

Definition at line 39 of file SimulationResult.cpp.

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

References m_data, and m_unit_converter.

◆ operator=() [2/2]

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

Definition at line 50 of file SimulationResult.cpp.

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

References m_data, and m_unit_converter.

◆ operator[]() [1/2]

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

Data element access.

Definition at line 96 of file SimulationResult.cpp.

97 {
98  ASSERT(m_data);
99  return (*m_data)[i];
100 }

References ASSERT, and m_data.

◆ operator[]() [2/2]

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

Definition at line 102 of file SimulationResult.cpp.

103 {
104  ASSERT(m_data);
105  return (*m_data)[i];
106 }

References ASSERT, and m_data.

◆ size()

size_t SimulationResult::size ( ) const

Definition at line 108 of file SimulationResult.cpp.

109 {
110  return m_data ? m_data->getAllocatedSize() : 0;
111 }

References m_data.

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

Member Data Documentation

◆ m_data

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

◆ m_unit_converter

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

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