From a9aefdf6986fb54c3f433d5caee20192057b6bf2 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 23 Apr 2021 11:37:52 +0200
Subject: [PATCH] now really class UnitConverter2D

---
 Core/Fitting/SimDataPair.cpp               |  2 +-
 Core/Simulation/GISASSimulation.cpp        |  2 +-
 Device/Detector/UnitConverter2D.cpp        | 48 +++++++++++-----------
 Device/Detector/UnitConverter2D.h          | 20 ++++-----
 Device/Unit/IUnitConverter.cpp             |  5 +--
 GUI/coregui/Models/DomainObjectBuilder.cpp |  2 +-
 6 files changed, 38 insertions(+), 41 deletions(-)

diff --git a/Core/Fitting/SimDataPair.cpp b/Core/Fitting/SimDataPair.cpp
index 29f50b8548d..fd4548c0772 100644
--- a/Core/Fitting/SimDataPair.cpp
+++ b/Core/Fitting/SimDataPair.cpp
@@ -51,7 +51,7 @@ bool detHasSameDimensions(const IDetector& detector, const OutputData<double>& d
 std::unique_ptr<IUnitConverter> createConverter(const ISimulation& simulation)
 {
     if (auto gisas = dynamic_cast<const GISASSimulation*>(&simulation))
-        return UnitConverterSimple::createConverterForGISAS(gisas->instrument());
+        return UnitConverter2D::createConverterForGISAS(gisas->instrument());
 
     if (auto spec = dynamic_cast<const SpecularSimulation*>(&simulation))
         return UnitConverter1D::createUnitConverter(*spec->dataHandler());
diff --git a/Core/Simulation/GISASSimulation.cpp b/Core/Simulation/GISASSimulation.cpp
index fa98019d9af..fc87164d162 100644
--- a/Core/Simulation/GISASSimulation.cpp
+++ b/Core/Simulation/GISASSimulation.cpp
@@ -57,7 +57,7 @@ void GISASSimulation::prepareSimulation()
 
 SimulationResult GISASSimulation::result() const
 {
-    const auto converter = UnitConverterSimple::createConverterForGISAS(instrument());
+    const auto converter = UnitConverter2D::createConverterForGISAS(instrument());
     const std::unique_ptr<OutputData<double>> data(
         detector().createDetectorIntensity(m_sim_elements));
     return SimulationResult(*data, *converter);
diff --git a/Device/Detector/UnitConverter2D.cpp b/Device/Detector/UnitConverter2D.cpp
index 4c49d007d89..29f24afd5ac 100644
--- a/Device/Detector/UnitConverter2D.cpp
+++ b/Device/Detector/UnitConverter2D.cpp
@@ -33,28 +33,28 @@ double getQ(double wavelength, double angle)
 } // namespace
 
 //  ************************************************************************************************
-//  class UnitConverterSimple
+//  class UnitConverter2D
 //  ************************************************************************************************
 
-UnitConverterSimple::UnitConverterSimple(const Beam& beam)
+UnitConverter2D::UnitConverter2D(const Beam& beam)
     : m_wavelength(beam.wavelength())
     , m_alpha_i(-beam.direction().alpha())
     , m_phi_i(beam.direction().phi())
 {
 }
 
-size_t UnitConverterSimple::dimension() const
+size_t UnitConverter2D::dimension() const
 {
     return m_axis_data_table.size();
 }
 
-void UnitConverterSimple::addAxisData(std::string name, double min, double max,
+void UnitConverter2D::addAxisData(std::string name, double min, double max,
                                       Axes::Units default_units, size_t nbins)
 {
     m_axis_data_table.emplace_back(AxisData{name, min, max, default_units, nbins});
 }
 
-double UnitConverterSimple::calculateMin(size_t i_axis, Axes::Units units) const
+double UnitConverter2D::calculateMin(size_t i_axis, Axes::Units units) const
 {
     ASSERT(i_axis < dimension());
     units = substituteDefaultUnits(units);
@@ -64,7 +64,7 @@ double UnitConverterSimple::calculateMin(size_t i_axis, Axes::Units units) const
     return calculateValue(i_axis, units, axis_data.min);
 }
 
-double UnitConverterSimple::calculateMax(size_t i_axis, Axes::Units units) const
+double UnitConverter2D::calculateMax(size_t i_axis, Axes::Units units) const
 {
     ASSERT(i_axis < dimension());
     units = substituteDefaultUnits(units);
@@ -74,18 +74,18 @@ double UnitConverterSimple::calculateMax(size_t i_axis, Axes::Units units) const
     return calculateValue(i_axis, units, axis_data.max);
 }
 
-size_t UnitConverterSimple::axisSize(size_t i_axis) const
+size_t UnitConverter2D::axisSize(size_t i_axis) const
 {
     ASSERT(i_axis < dimension());
     return m_axis_data_table[i_axis].nbins;
 }
 
-std::vector<Axes::Units> UnitConverterSimple::availableUnits() const
+std::vector<Axes::Units> UnitConverter2D::availableUnits() const
 {
     return {Axes::Units::NBINS, Axes::Units::RADIANS, Axes::Units::DEGREES};
 }
 
-std::unique_ptr<IAxis> UnitConverterSimple::createConvertedAxis(size_t i_axis,
+std::unique_ptr<IAxis> UnitConverter2D::createConvertedAxis(size_t i_axis,
                                                                 Axes::Units units) const
 {
     const double min = calculateMin(i_axis, units);
@@ -95,7 +95,7 @@ std::unique_ptr<IAxis> UnitConverterSimple::createConvertedAxis(size_t i_axis,
     return std::make_unique<FixedBinAxis>(axis_name, axis_size, min, max);
 }
 
-UnitConverterSimple::UnitConverterSimple(const UnitConverterSimple& other)
+UnitConverter2D::UnitConverter2D(const UnitConverter2D& other)
     : m_axis_data_table(other.m_axis_data_table)
     , m_wavelength(other.m_wavelength)
     , m_alpha_i(other.m_alpha_i)
@@ -103,7 +103,7 @@ UnitConverterSimple::UnitConverterSimple(const UnitConverterSimple& other)
 {
 }
 
-void UnitConverterSimple::addDetectorAxis(const IDetector& detector, size_t i_axis)
+void UnitConverter2D::addDetectorAxis(const IDetector& detector, size_t i_axis)
 {
     const auto& axis = detector.axis(i_axis);
     const auto* p_roi = detector.regionOfInterest();
@@ -117,8 +117,8 @@ void UnitConverterSimple::addDetectorAxis(const IDetector& detector, size_t i_ax
                 P_roi_axis->size());
 }
 
-std::unique_ptr<UnitConverterSimple>
-UnitConverterSimple::createConverterForGISAS(const Instrument& instrument)
+std::unique_ptr<UnitConverter2D>
+UnitConverter2D::createConverterForGISAS(const Instrument& instrument)
 {
     const IDetector* const detector = instrument.getDetector();
 
@@ -136,7 +136,7 @@ UnitConverterSimple::createConverterForGISAS(const Instrument& instrument)
 //  ************************************************************************************************
 
 SphericalConverter::SphericalConverter(const SphericalDetector& detector, const Beam& beam)
-    : UnitConverterSimple(beam)
+    : UnitConverter2D(beam)
 {
     ASSERT(detector.dimension() == 2);
     addDetectorAxis(detector, 0);
@@ -152,7 +152,7 @@ SphericalConverter* SphericalConverter::clone() const
 
 std::vector<Axes::Units> SphericalConverter::availableUnits() const
 {
-    auto result = UnitConverterSimple::availableUnits();
+    auto result = UnitConverter2D::availableUnits();
     result.push_back(Axes::Units::QSPACE);
     return result;
 }
@@ -162,7 +162,7 @@ Axes::Units SphericalConverter::defaultUnits() const
     return Axes::Units::DEGREES;
 }
 
-SphericalConverter::SphericalConverter(const SphericalConverter& other) : UnitConverterSimple(other)
+SphericalConverter::SphericalConverter(const SphericalConverter& other) : UnitConverter2D(other)
 {
 }
 
@@ -214,7 +214,7 @@ std::vector<std::map<Axes::Units, std::string>> SphericalConverter::createNameMa
 //  ************************************************************************************************
 
 RectangularConverter::RectangularConverter(const RectangularDetector& detector, const Beam& beam)
-    : UnitConverterSimple(beam)
+    : UnitConverter2D(beam)
 {
     ASSERT(detector.dimension() == 2);
     addDetectorAxis(detector, 0);
@@ -231,7 +231,7 @@ RectangularConverter* RectangularConverter::clone() const
 
 std::vector<Axes::Units> RectangularConverter::availableUnits() const
 {
-    auto result = UnitConverterSimple::availableUnits();
+    auto result = UnitConverter2D::availableUnits();
     result.push_back(Axes::Units::QSPACE);
     result.push_back(Axes::Units::MM);
     return result;
@@ -243,7 +243,7 @@ Axes::Units RectangularConverter::defaultUnits() const
 }
 
 RectangularConverter::RectangularConverter(const RectangularConverter& other)
-    : UnitConverterSimple(other), m_detector_pixel(other.m_detector_pixel->clone())
+    : UnitConverter2D(other), m_detector_pixel(other.m_detector_pixel->clone())
 {
 }
 
@@ -317,7 +317,7 @@ double RectangularConverter::axisAngle(size_t i_axis, kvector_t k_f) const
 
 OffSpecularConverter::OffSpecularConverter(const IDetector2D& detector, const Beam& beam,
                                            const IAxis& alpha_axis)
-    : UnitConverterSimple(beam)
+    : UnitConverter2D(beam)
 {
     ASSERT(detector.dimension() == 2);
     addAxisData(axisName(0), alpha_axis.lowerBound(), alpha_axis.upperBound(), defaultUnits(),
@@ -338,7 +338,7 @@ Axes::Units OffSpecularConverter::defaultUnits() const
 }
 
 OffSpecularConverter::OffSpecularConverter(const OffSpecularConverter& other)
-    : UnitConverterSimple(other)
+    : UnitConverter2D(other)
 {
 }
 
@@ -396,7 +396,7 @@ const std::string z_axis_name = "Position [nm]";
 
 DepthProbeConverter::DepthProbeConverter(const Beam& beam, const IAxis& alpha_axis,
                                          const IAxis& z_axis)
-    : UnitConverterSimple(beam)
+    : UnitConverter2D(beam)
 {
     const auto& alpha_axis_name = axisName(0);
     const auto& z_axis_name = axisName(1);
@@ -415,13 +415,13 @@ DepthProbeConverter* DepthProbeConverter::clone() const
 
 std::vector<Axes::Units> DepthProbeConverter::availableUnits() const
 {
-    auto result = UnitConverterSimple::availableUnits();
+    auto result = UnitConverter2D::availableUnits();
     result.push_back(Axes::Units::QSPACE);
     return result;
 }
 
 DepthProbeConverter::DepthProbeConverter(const DepthProbeConverter& other)
-    : UnitConverterSimple(other)
+    : UnitConverter2D(other)
 {
 }
 
diff --git a/Device/Detector/UnitConverter2D.h b/Device/Detector/UnitConverter2D.h
index 4231eece938..ccfb7080aa2 100644
--- a/Device/Detector/UnitConverter2D.h
+++ b/Device/Detector/UnitConverter2D.h
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit reflection and scattering
 //
 //! @file      Device/Detector/UnitConverter2D.h
-//! @brief     Defines interface UnitConverterSimple and its subclasses.
+//! @brief     Defines interface UnitConverter2D and its subclasses.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -34,10 +34,10 @@ class SphericalDetector;
 //! Interface for objects that provide axis translations to different units for IDetector objects
 //! @ingroup simulation_internal
 
-class UnitConverterSimple : public IUnitConverter {
+class UnitConverter2D : public IUnitConverter {
 public:
-    UnitConverterSimple(const Beam& beam);
-    ~UnitConverterSimple() override = default;
+    UnitConverter2D(const Beam& beam);
+    ~UnitConverter2D() override = default;
 
     virtual size_t dimension() const override;
 
@@ -52,11 +52,11 @@ public:
 
     //! Helper factory function to use in GISASSimulation. Depending on the type of detector,
     //! returns either RectangularConverter or SphericalConverter.
-    static std::unique_ptr<UnitConverterSimple> createConverterForGISAS(
+    static std::unique_ptr<UnitConverter2D> createConverterForGISAS(
         const Instrument& instrument);
 
 protected:
-    UnitConverterSimple(const UnitConverterSimple& other);
+    UnitConverter2D(const UnitConverter2D& other);
     void addDetectorAxis(const IDetector& detector, size_t i_axis);
 
     void addAxisData(std::string name, double min, double max, Axes::Units default_units,
@@ -83,7 +83,7 @@ private:
 //! Its default units are radians for both axes
 //! @ingroup simulation_internal
 
-class SphericalConverter : public UnitConverterSimple {
+class SphericalConverter : public UnitConverter2D {
 public:
     SphericalConverter(const SphericalDetector& detector, const Beam& beam);
 
@@ -106,7 +106,7 @@ private:
 //! Its default units are mm for both axes
 //! @ingroup simulation_internal
 
-class RectangularConverter : public UnitConverterSimple {
+class RectangularConverter : public UnitConverter2D {
 public:
     RectangularConverter(const RectangularDetector& detector, const Beam& beam);
     ~RectangularConverter() override;
@@ -132,7 +132,7 @@ private:
 //! Its default units are radians for both axes
 //! @ingroup simulation_internal
 
-class OffSpecularConverter : public UnitConverterSimple {
+class OffSpecularConverter : public UnitConverter2D {
 public:
     OffSpecularConverter(const IDetector2D& detector, const Beam& beam, const IAxis& alpha_axis);
     ~OffSpecularConverter() override;
@@ -152,7 +152,7 @@ private:
 //! Its default units are radians for x-axis and nm for y-axis
 //! @ingroup simulation_internal
 
-class DepthProbeConverter : public UnitConverterSimple {
+class DepthProbeConverter : public UnitConverter2D {
 public:
     DepthProbeConverter(const Beam& beam, const IAxis& alpha_axis, const IAxis& z_axis);
     ~DepthProbeConverter() override;
diff --git a/Device/Unit/IUnitConverter.cpp b/Device/Unit/IUnitConverter.cpp
index b4805e7d020..6c2f114744f 100644
--- a/Device/Unit/IUnitConverter.cpp
+++ b/Device/Unit/IUnitConverter.cpp
@@ -19,8 +19,6 @@
 
 IUnitConverter::~IUnitConverter() = default;
 
-
-
 std::unique_ptr<OutputData<double>> IUnitConverter::createOutputData(Axes::Units units) const
 {
     std::unique_ptr<OutputData<double>> result = std::make_unique<OutputData<double>>();
@@ -39,8 +37,7 @@ std::string IUnitConverter::axisName(size_t i_axis, const Axes::Units& units) co
                                  + std::to_string(static_cast<int>(i_axis)));
     const auto& name_map = name_maps[i_axis];
     const auto& it = name_map.find(substituteDefaultUnits(units));
-    if (it == name_map.cend())
-        throwUnitsError("IUnitConverter::axisName", availableUnits());
+    ASSERT(it != name_map.cend());
     return it->second;
 }
 
diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp
index 0b548a24d89..12708ff1b0f 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.cpp
+++ b/GUI/coregui/Models/DomainObjectBuilder.cpp
@@ -139,7 +139,7 @@ DomainObjectBuilder::createUnitConverter(const InstrumentItem* instrumentItem)
     instrument->initDetector();
 
     if (instrumentItem->is<GISASInstrumentItem>())
-        return UnitConverterSimple::createConverterForGISAS(*instrument);
+        return UnitConverter2D::createConverterForGISAS(*instrument);
 
     if (instrumentItem->is<OffSpecularInstrumentItem>()) {
         auto axis_item =
-- 
GitLab