18 IUnitConverter::~IUnitConverter() =
default;
20 std::string IUnitConverter::axisName(
size_t i_axis, Axes::Units units_type)
const
22 const auto& name_maps = createNameMaps();
23 if (name_maps.size() <= i_axis)
24 throw std::runtime_error(
"Error in IUnitConverter::axisName: the size of name map vector "
25 "is smaller or equal to the axis index"
26 + std::to_string(
static_cast<int>(i_axis)));
27 const auto& name_map = name_maps[i_axis];
28 units_type = substituteDefaultUnits(units_type);
29 const auto& it = name_map.find(units_type);
30 if (it == name_map.cend())
31 throwUnitsError(
"IUnitConverter::axisName", availableUnits());
35 std::unique_ptr<OutputData<double>>
38 const size_t dim = data.
getRank();
40 for (
size_t i = 0; i < dim; ++i)
41 result->addAxis(*createConvertedAxis(i, units));
46 void IUnitConverter::checkIndex(
size_t i_axis)
const
48 if (i_axis < dimension())
50 throw std::runtime_error(
"Error in IUnitConverter::checkIndex: passed axis index too big: "
51 + std::to_string(
static_cast<int>(i_axis)));
54 void IUnitConverter::throwUnitsError(std::string method, std::vector<Axes::Units> available)
const
57 ss <<
"Unit type error in " << method
58 <<
": unknown or unsupported unit type. Available units "
60 for (
auto unit : available)
61 ss << axisUnitName.at(unit) <<
"\n";
62 throw std::runtime_error(ss.str());
65 Axes::Units IUnitConverter::substituteDefaultUnits(Axes::Units units)
const
67 return units == Axes::Units::DEFAULT ? defaultUnits() : units;
Defines interface IUnitConverter and possible axis units.
Defines and implements template class OutputData.
virtual std::unique_ptr< OutputData< double > > createConvertedData(const OutputData< double > &data, Axes::Units units) const
Creates OutputData array in converter units.
std::vector< T > getRawDataVector() const
Returns copy of raw data vector.
size_t getRank() const
Returns number of dimensions.