BornAgain  1.18.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 scattering at grazing incidence
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_CORE_INSTRUMENT_SIMULATIONRESULT_H
16 #define BORNAGAIN_CORE_INSTRUMENT_SIMULATIONRESULT_H
17 
18 #include "Base/Utils/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 {
42 public:
43  SimulationResult() = default;
44  SimulationResult(const OutputData<double>& data, const IUnitConverter& unit_converter);
45 
46  SimulationResult(const SimulationResult& other);
47 #ifndef SWIG
49 #endif
50 
52 #ifndef SWIG
54 #endif
55 
56 #ifndef SWIG
57  std::unique_ptr<OutputData<double>> data(Axes::Units units = Axes::Units::DEFAULT) const;
58 #endif
59 
60  Histogram2D* histogram2d(Axes::Units units = Axes::Units::DEFAULT) const;
61 
62  //! Provide AxisInfo for each axis and the given units
63  std::vector<AxisInfo> axisInfo(Axes::Units units = Axes::Units::DEFAULT) const;
64 
65  //! Returns underlying unit converter
66  const IUnitConverter& converter() const;
67 
68  //! Data element access
69  double& operator[](size_t i);
70  const double& operator[](size_t i) const;
71  size_t size() const;
72  bool empty() const { return size() == 0; }
73 
74  //! returns intensity data as Python numpy array
75 #ifdef BORNAGAIN_PYTHON
76  PyObject* array(Axes::Units units = Axes::Units::DEFAULT) const;
77 #endif
78 
79  std::vector<double> axis(Axes::Units units = Axes::Units::DEFAULT) const;
80 
81  //! Returns axis coordinates as a numpy array. With no parameters given
82  //! returns coordinates of x-axis in default units.
83  std::vector<double> axis(size_t i_axis, Axes::Units units = Axes::Units::DEFAULT) const;
84 
85 private:
86  void checkDimensions() const;
87  std::unique_ptr<OutputData<double>> mP_data;
88  std::unique_ptr<IUnitConverter> mP_unit_converter;
89 };
90 
91 #endif // BORNAGAIN_CORE_INSTRUMENT_SIMULATIONRESULT_H
Defines interface IUnitConverter and possible axis units.
PyObvject forward declaration.
_object PyObject
Definition: PyObject.h:20
One dimensional histogram.
Definition: Histogram1D.h:24
Two dimensional histogram.
Definition: Histogram2D.h:25
Interface for one-dimensional axes.
Definition: IAxis.h:25
Interface to provide axis translations to different units for simulation output.
Template class to store data of any type in multi-dimensional space.
Definition: OutputData.h:33
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< OutputData< double > > mP_data
size_t size() const
void checkDimensions() const
const IUnitConverter & converter() const
Returns underlying unit converter.
std::unique_ptr< IUnitConverter > mP_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.
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