15 #ifndef BORNAGAIN_CORE_INTENSITY_IUNITCONVERTER_H
16 #define BORNAGAIN_CORE_INTENSITY_IUNITCONVERTER_H
34 enum Units { DEFAULT, NBINS, RADIANS, DEGREES, MM, QSPACE, QXQY, RQ4 };
37 const std::map<Axes::Units, const char*> axisUnitName = {
38 {Axes::Units::NBINS,
"Axes::Units::UNDEFINED"}, {Axes::Units::NBINS,
"Axes::Units::NBINS"},
39 {Axes::Units::RADIANS,
"Axes::Units::RADIANS"}, {Axes::Units::DEGREES,
"Axes::Units::DEGREES"},
40 {Axes::Units::MM,
"Axes::Units::MM"}, {Axes::Units::QSPACE,
"Axes::Units::QSPACE"},
41 {Axes::Units::QXQY,
"Axes::Units::QXQY"}, {Axes::Units::RQ4,
"Axes::Units::RQ4"}};
43 const std::map<Axes::Units, const char*> axisUnitLabel = {
44 {Axes::Units::NBINS,
"undefined"}, {Axes::Units::NBINS,
"bin"}, {Axes::Units::RADIANS,
"rad"},
45 {Axes::Units::DEGREES,
"deg"}, {Axes::Units::MM,
"mm"}, {Axes::Units::QSPACE,
"1/nm"},
46 {Axes::Units::QXQY,
"1/nm"}, {Axes::Units::RQ4,
"nm^-4?"}};
58 virtual size_t dimension()
const = 0;
60 virtual double calculateMin(
size_t i_axis, Axes::Units units_type)
const = 0;
61 virtual double calculateMax(
size_t i_axis, Axes::Units units_type)
const = 0;
62 virtual size_t axisSize(
size_t i_axis)
const = 0;
64 std::string axisName(
size_t i_axis, Axes::Units units_type = Axes::Units::DEFAULT)
const;
66 virtual std::vector<Axes::Units> availableUnits()
const = 0;
67 virtual Axes::Units defaultUnits()
const = 0;
68 Axes::Units substituteDefaultUnits(Axes::Units units)
const;
71 virtual std::unique_ptr<IAxis> createConvertedAxis(
size_t i_axis, Axes::Units units)
const = 0;
75 Axes::Units units)
const;
79 void checkIndex(
size_t i_axis)
const;
81 [[noreturn]]
void throwUnitsError(std::string method, std::vector<Axes::Units> available)
const;
85 virtual std::vector<std::map<Axes::Units, std::string>> createNameMaps()
const = 0;
Defines and implements the standard mix-in ICloneable.
Wrapper for detector axes units, required for a better representation of detector axes units in pytho...
Interface for one-dimensional axes.
Interface for polymorphic classes that should not be copied, except by explicit cloning.
Interface to provide axis translations to different units for simulation output.
virtual std::unique_ptr< OutputData< double > > createConvertedData(const OutputData< double > &data, Axes::Units units) const
Creates OutputData array in converter units.
Template class to store data of any type in multi-dimensional space.
Constants and functions for physical unit conversions.