BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SimulationResult.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Device/Histo/SimulationResult.h
6 //! @brief Defines class SimulationResult.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #ifndef BORNAGAIN_DEVICE_HISTO_SIMULATIONRESULT_H
16 #define BORNAGAIN_DEVICE_HISTO_SIMULATIONRESULT_H
17 
18 #include "Base/Py/PyObject.h"
20 #include <memory>
21 #include <vector>
22 
23 class Histogram1D;
24 class Histogram2D;
25 class IAxis;
26 template <class T> class OutputData;
27 
28 //! Information about an axis in specific units. Can be used for plotting.
29 //! @ingroup detector
30 
31 struct AxisInfo {
32  std::string m_name;
33  double m_min;
34  double m_max;
35 };
36 
37 //! Wrapper around OutputData<double> that also provides unit conversions.
38 //! @ingroup detector
39 
41 public:
42  SimulationResult() = default;
43  SimulationResult(const OutputData<double>& data, const IUnitConverter& unit_converter);
44 
45  SimulationResult(const SimulationResult& other);
47 
50 
51 #ifndef SWIG
52  std::unique_ptr<OutputData<double>> data(Axes::Units units = Axes::Units::DEFAULT) const;
53 #endif
54 
55  Histogram2D* histogram2d(Axes::Units units = Axes::Units::DEFAULT) const;
56 
57  //! Provide AxisInfo for each axis and the given units
58  std::vector<AxisInfo> axisInfo(Axes::Units units = Axes::Units::DEFAULT) const;
59 
60  //! Returns underlying unit converter
61  const IUnitConverter& converter() const;
62 
63  //! Data element access
64  double& operator[](size_t i);
65  const double& operator[](size_t i) const;
66  size_t size() const;
67  double max() const;
68  bool empty() const { return size() == 0; }
69 
70  //! returns intensity data as Python numpy array
71 #ifdef BORNAGAIN_PYTHON
72  PyObject* array(Axes::Units units = Axes::Units::DEFAULT) const;
73 #endif
74 
75  std::vector<double> axis(Axes::Units units = Axes::Units::DEFAULT) const;
76 
77  //! Returns axis coordinates as a numpy array. With no parameters given
78  //! returns coordinates of x-axis in default units.
79  std::vector<double> axis(size_t i_axis, Axes::Units units = Axes::Units::DEFAULT) const;
80 
81 private:
82  void checkDimensions() const;
83 
84  std::unique_ptr<OutputData<double>> m_data;
85  std::unique_ptr<IUnitConverter> m_unit_converter;
86 };
87 
88 #endif // BORNAGAIN_DEVICE_HISTO_SIMULATIONRESULT_H
Defines interface IUnitConverter and possible axis units.
PyObvject forward declaration.
_object PyObject
Definition: PyObject.h:25
One dimensional histogram.
Definition: Histogram1D.h:23
Two dimensional histogram.
Definition: Histogram2D.h:24
Interface for one-dimensional axes.
Definition: IAxis.h:25
Interface to provide axis translations to different units for simulation output.
Templated class to store data of type double or CumulativeValue in multi-dimensional space.
Definition: OutputData.h:32
Wrapper around OutputData<double> that also provides unit conversions.
SimulationResult & operator=(const SimulationResult &other)
bool empty() const
std::vector< double > axis(Axes::Units units=Axes::Units::DEFAULT) const
std::unique_ptr< IUnitConverter > m_unit_converter
size_t size() const
void checkDimensions() const
const IUnitConverter & converter() const
Returns underlying unit converter.
double & operator[](size_t i)
Data element access.
std::vector< AxisInfo > axisInfo(Axes::Units units=Axes::Units::DEFAULT) const
Provide AxisInfo for each axis and the given units.
std::unique_ptr< OutputData< double > > m_data
double max() const
SimulationResult()=default
Histogram2D * histogram2d(Axes::Units units=Axes::Units::DEFAULT) const
PyObject * array(Axes::Units units=Axes::Units::DEFAULT) const
returns intensity data as Python numpy array
std::unique_ptr< OutputData< double > > data(Axes::Units units=Axes::Units::DEFAULT) const
Information about an axis in specific units.
double m_max
double m_min
std::string m_name