From f0a64aec01e537f6b4665013fc54daa63a33c748 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 23 Apr 2021 10:34:10 +0200
Subject: [PATCH] createOutputData is now member of IUnitConverter

---
 Core/Fitting/SimDataPair.cpp         |  4 ++--
 Device/Unit/IUnitConverter.cpp       | 22 +++++++++++-----------
 Device/Unit/IUnitConverter.h         | 11 +++--------
 GUI/coregui/Models/DataViewUtils.cpp |  2 +-
 GUI/coregui/Models/JobItemUtils.cpp  |  4 ++--
 auto/Wrap/doxygenDevice.i            | 12 +++++-------
 6 files changed, 24 insertions(+), 31 deletions(-)

diff --git a/Core/Fitting/SimDataPair.cpp b/Core/Fitting/SimDataPair.cpp
index 03db8dc1c8e..ff336ec5b38 100644
--- a/Core/Fitting/SimDataPair.cpp
+++ b/Core/Fitting/SimDataPair.cpp
@@ -74,7 +74,7 @@ SimulationResult convertData(const ISimulation& simulation, const OutputData<dou
                              bool put_masked_areas_to_zero)
 {
     auto converter = createConverter(simulation);
-    auto roi_data = UnitConverterUtils::createOutputData(*converter, converter->defaultUnits());
+    auto roi_data = converter->createOutputData(converter->defaultUnits());
 
     if (roi_data->hasSameDimensions(data)) {
         // data is already cropped to ROI
@@ -165,7 +165,7 @@ void SimDataPair::execSimulation(const mumufit::Parameters& params)
     } else {
         const IUnitConverter& converter = m_sim_data.converter();
         std::unique_ptr<OutputData<double>> dummy_array =
-            UnitConverterUtils::createOutputData(converter, converter.defaultUnits());
+            converter.createOutputData(converter.defaultUnits());
         m_uncertainties = SimulationResult(*dummy_array, converter);
     }
 
diff --git a/Device/Unit/IUnitConverter.cpp b/Device/Unit/IUnitConverter.cpp
index 7c3fd4b86e2..c025796e892 100644
--- a/Device/Unit/IUnitConverter.cpp
+++ b/Device/Unit/IUnitConverter.cpp
@@ -19,6 +19,17 @@
 
 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>>();
+    for (size_t i = 0; i < dimension(); ++i)
+        result->addAxis(*createConvertedAxis(i, units));
+    result->setAllTo(0.0);
+    return result;
+}
+
 std::string IUnitConverter::axisName(size_t i_axis, const Axes::Units& units_type) const
 {
     const auto& name_maps = createNameMaps();
@@ -58,14 +69,3 @@ Axes::Units IUnitConverter::substituteDefaultUnits(Axes::Units units) const
 {
     return units == Axes::Units::DEFAULT ? defaultUnits() : units;
 }
-
-
-std::unique_ptr<OutputData<double>>
-UnitConverterUtils::createOutputData(const IUnitConverter& converter, Axes::Units units)
-{
-    std::unique_ptr<OutputData<double>> result = std::make_unique<OutputData<double>>();
-    for (size_t i = 0; i < converter.dimension(); ++i)
-        result->addAxis(*converter.createConvertedAxis(i, units));
-    result->setAllTo(0.0);
-    return result;
-}
diff --git a/Device/Unit/IUnitConverter.h b/Device/Unit/IUnitConverter.h
index 01e89417b43..72a633f31de 100644
--- a/Device/Unit/IUnitConverter.h
+++ b/Device/Unit/IUnitConverter.h
@@ -46,6 +46,9 @@ public:
 
     virtual IUnitConverter* clone() const = 0;
 
+    //! Returns zero-valued output data array in specified units
+    std::unique_ptr<OutputData<double>> createOutputData(Axes::Units units) const;
+
     virtual size_t dimension() const = 0;
 
     virtual double calculateMin(size_t i_axis, Axes::Units units_type) const = 0;
@@ -75,14 +78,6 @@ private:
     virtual std::vector<std::map<Axes::Units, std::string>> createNameMaps() const = 0;
 };
 
-
-namespace UnitConverterUtils {
-
-//! Returns zero-valued output data array in specified units
-std::unique_ptr<OutputData<double>> createOutputData(const IUnitConverter& converter,
-                                                     Axes::Units units);
-}
-
 #endif // USER_API
 
 #endif // BORNAGAIN_DEVICE_UNIT_IUNITCONVERTER_H
diff --git a/GUI/coregui/Models/DataViewUtils.cpp b/GUI/coregui/Models/DataViewUtils.cpp
index 4b1dafa5f63..6ba163040da 100644
--- a/GUI/coregui/Models/DataViewUtils.cpp
+++ b/GUI/coregui/Models/DataViewUtils.cpp
@@ -62,7 +62,7 @@ std::unique_ptr<OutputData<double>> DataViewUtils::getTranslatedData(Data1DViewI
     auto converter = getConverter(view_item);
     auto current_units = selectedUnits(view_item);
 
-    result = UnitConverterUtils::createOutputData(*converter, current_units);
+    result = converter->createOutputData(current_units);
     result->setRawDataVector(data_item->getOutputData()->getRawDataVector());
 
     return result;
diff --git a/GUI/coregui/Models/JobItemUtils.cpp b/GUI/coregui/Models/JobItemUtils.cpp
index c21720fed8f..c70544c1f87 100644
--- a/GUI/coregui/Models/JobItemUtils.cpp
+++ b/GUI/coregui/Models/JobItemUtils.cpp
@@ -60,7 +60,7 @@ void JobItemUtils::updateDataAxes(DataItem* intensityItem, const InstrumentItem*
     Axes::Units requested_units = axesUnitsFromName(intensityItem->selectedAxesUnits());
 
     const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
-    auto newData = UnitConverterUtils::createOutputData(*converter.get(), requested_units);
+    auto newData = converter->createOutputData(requested_units);
     newData->setRawDataVector(intensityItem->getOutputData()->getRawDataVector());
 
     intensityItem->setOutputData(newData.release());
@@ -107,7 +107,7 @@ void JobItemUtils::createDefaultDetectorMap(DataItem* intensityItem,
                                             const InstrumentItem* instrumentItem)
 {
     const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
-    auto output_data = UnitConverterUtils::createOutputData(*converter, converter->defaultUnits());
+    auto output_data = converter->createOutputData(converter->defaultUnits());
     intensityItem->setOutputData(output_data.release());
     setIntensityItemAxesUnits(intensityItem, *converter);
     updateAxesTitle(intensityItem, *converter, converter->defaultUnits());
diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i
index d77a1b060dc..e6e275b5b8d 100644
--- a/auto/Wrap/doxygenDevice.i
+++ b/auto/Wrap/doxygenDevice.i
@@ -1469,6 +1469,11 @@ C++ includes: IUnitConverter.h
 %feature("docstring")  IUnitConverter::clone "virtual IUnitConverter* IUnitConverter::clone() const =0
 ";
 
+%feature("docstring")  IUnitConverter::createOutputData "std::unique_ptr< OutputData< double > > IUnitConverter::createOutputData(Axes::Units units) const
+
+Returns zero-valued output data array in specified units. 
+";
+
 %feature("docstring")  IUnitConverter::dimension "virtual size_t IUnitConverter::dimension() const =0
 ";
 
@@ -2945,13 +2950,6 @@ Returns true if SimulatioResult agrees with data from reference file.
 ";
 
 
-// File: namespaceUnitConverterUtils.xml
-%feature("docstring")  UnitConverterUtils::createOutputData "std::unique_ptr< OutputData< double > > UnitConverterUtils::createOutputData(const IUnitConverter &converter, Axes::Units units)
-
-Returns zero-valued output data array in specified units. 
-";
-
-
 // File: Beam_8cpp.xml
 
 
-- 
GitLab