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