BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
ICoordSystem.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Device/Coord/ICoordSystem.h
6 //! @brief Defines interface ICoordSystem and possible axis units.
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 #ifdef SWIG
16 #error no need to expose this header to Swig
17 #endif
18 
19 #ifndef USER_API
20 #ifndef BORNAGAIN_DEVICE_COORD_ICOORDSYSTEM_H
21 #define BORNAGAIN_DEVICE_COORD_ICOORDSYSTEM_H
22 
23 #include "Base/Types/ICloneable.h"
24 #include "Device/Coord/Tags.h"
25 #include <map>
26 #include <memory>
27 #include <string>
28 #include <vector>
29 
30 class IAxis;
31 class Datafield;
32 
33 
34 //! Interface to provide axis translations to different units for simulation output
35 
36 //! Child classes are currently declared in
37 //! - Device/Detector/CoordSystem2D.h,
38 //! - Core/Scan/CoordSystem1D.h.
39 
40 class ICoordSystem : public ICloneable {
41 public:
42  ~ICoordSystem() override;
43 
44  ICoordSystem* clone() const override = 0;
45 
46  virtual size_t rank() const = 0;
47 
48  virtual double calculateMin(size_t i_axis, Coords units) const = 0;
49  virtual double calculateMax(size_t i_axis, Coords units) const = 0;
50  virtual size_t axisSize(size_t i_axis) const = 0;
51 
52  std::string axisName(size_t i_axis, Coords units = Coords::UNDEFINED) const;
53 
54  virtual std::vector<Coords> availableUnits() const = 0;
55  virtual Coords defaultUnits() const = 0;
56 
57  virtual IAxis* createConvertedAxis(size_t i_axis, Coords units) const = 0;
58 
59  std::vector<IAxis*> defaultAxes() const;
60  std::vector<IAxis*> convertedAxes(Coords units) const;
61 
62  //! Creates Datafield array in converter units.
63  virtual Datafield* createConvertedData(const Datafield& data, Coords units) const;
64 
65 protected:
67  [[noreturn]] void throwUnitsError(std::string method, std::vector<Coords> available) const;
68 
69 private:
70  virtual std::vector<std::map<Coords, std::string>> createNameMaps() const = 0;
71 };
72 
73 #endif // BORNAGAIN_DEVICE_COORD_ICOORDSYSTEM_H
74 #endif // USER_API
Defines and implements the standard mix-in ICloneable.
Defines enum Axis::Units.
Stores radiation power per bin.
Definition: Datafield.h:30
Abstract base class for one-dimensional axes.
Definition: IAxis.h:27
Interface for polymorphic classes that should not be copied, except by explicit cloning.
Definition: ICloneable.h:23
Interface to provide axis translations to different units for simulation output.
Definition: ICoordSystem.h:40
std::vector< IAxis * > defaultAxes() const
Coords substituteDefaultUnits(Coords units) const
virtual double calculateMax(size_t i_axis, Coords units) const =0
virtual Datafield * createConvertedData(const Datafield &data, Coords units) const
Creates Datafield array in converter units.
ICoordSystem * clone() const override=0
virtual size_t axisSize(size_t i_axis) const =0
virtual IAxis * createConvertedAxis(size_t i_axis, Coords units) const =0
~ICoordSystem() override
virtual double calculateMin(size_t i_axis, Coords units) const =0
virtual std::vector< std::map< Coords, std::string > > createNameMaps() const =0
virtual Coords defaultUnits() const =0
std::string axisName(size_t i_axis, Coords units=Coords::UNDEFINED) const
void throwUnitsError(std::string method, std::vector< Coords > available) const
std::vector< IAxis * > convertedAxes(Coords units) const
virtual std::vector< Coords > availableUnits() const =0
virtual size_t rank() const =0
Coords
Definition: Tags.h:20