BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
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 IAxis;
24 class Datafield;
25 
26 //! Wrapper around Datafield that also provides unit conversions.
27 //! @ingroup detector
28 
30 public:
31  SimulationResult() = default;
32  SimulationResult(const Datafield& data, const ICoordSystem& coords); // TODO rm
33  SimulationResult(const Datafield& data, const ICoordSystem*&& coords);
35 
36  SimulationResult(const SimulationResult& other);
38 
41 
42  std::vector<double> flatVector(Coords units = Coords::UNDEFINED) const;
44 
45  std::pair<double, double> axisMinMax(size_t i, Coords units = Coords::UNDEFINED) const;
46 
47  std::string axisName(size_t i, Coords units = Coords::UNDEFINED) const;
48 
49  //! Returns underlying unit converter
50  const ICoordSystem& converter() const;
51 
52  //! Data element access
53  size_t rank() const;
54  double& operator[](size_t i);
55  const double& operator[](size_t i) const;
56  size_t size() const;
57  bool empty() const { return size() == 0; }
58 
59  //! Returns modified SimulationResult: all intensities dvided by maximum intensity
61 
62  //! Returns intensity data as Python numpy array
63 #ifdef BORNAGAIN_PYTHON
64  PyObject* array(Coords units = Coords::UNDEFINED) const;
65 #endif
66 
67  std::vector<double> convertedBinCenters(Coords units = Coords::UNDEFINED) const;
68 
69  //! Returns axis coordinates as a numpy array. With no parameters given
70  //! Returns coordinates of x-axis in default units.
71  std::vector<double> convertedBinCenters(size_t i_axis, Coords units = Coords::UNDEFINED) const;
72 
73  void setTitle(const std::string& title) { m_title = title; }
74  std::string title() { return m_title; }
75 
76 private:
77  void checkRank() const;
78 
79  std::unique_ptr<Datafield> m_data;
80  std::unique_ptr<const ICoordSystem> m_coordsys;
81 
82  std::string m_title;
83 };
84 
85 #endif // BORNAGAIN_DEVICE_HISTO_SIMULATIONRESULT_H
Defines interface ICoordSystem and possible axis units.
PyObject forward declaration.
_object PyObject
Definition: PyObject.h:25
Stores radiation power per bin.
Definition: Datafield.h:30
Abstract base class for one-dimensional axes.
Definition: IAxis.h:27
Interface to provide axis translations to different units for simulation output.
Definition: ICoordSystem.h:40
Wrapper around Datafield that also provides unit conversions.
std::string title()
std::vector< double > flatVector(Coords units=Coords::UNDEFINED) const
SimulationResult & operator=(const SimulationResult &other)
bool empty() const
const ICoordSystem & converter() const
Returns underlying unit converter.
SimulationResult relativeToMaximum() const
Returns modified SimulationResult: all intensities dvided by maximum intensity.
size_t size() const
void checkRank() const
void setTitle(const std::string &title)
std::unique_ptr< const ICoordSystem > m_coordsys
PyObject * array(Coords units=Coords::UNDEFINED) const
Returns intensity data as Python numpy array.
std::pair< double, double > axisMinMax(size_t i, Coords units=Coords::UNDEFINED) const
std::string axisName(size_t i, Coords units=Coords::UNDEFINED) const
std::string m_title
std::unique_ptr< Datafield > m_data
double & operator[](size_t i)
size_t rank() const
Data element access.
Datafield * datafield(Coords units=Coords::UNDEFINED) const
SimulationResult()=default
std::vector< double > convertedBinCenters(Coords units=Coords::UNDEFINED) const
Coords
Definition: Tags.h:20