From 16b5380bf1b4897a0204a18ba6bc3a36ceb0f88e Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 22 Jan 2023 20:50:45 +0100
Subject: [PATCH 1/8] fcts out of Swig

---
 Sim/Export/SimulationToPython.cpp  | 19 +++-------
 Sim/Scan/AlphaScan.h               | 10 ++---
 auto/Wrap/libBornAgainSim.py       |  8 ----
 auto/Wrap/libBornAgainSim_wrap.cpp | 60 ------------------------------
 4 files changed, 10 insertions(+), 87 deletions(-)

diff --git a/Sim/Export/SimulationToPython.cpp b/Sim/Export/SimulationToPython.cpp
index 865ca7b11f4..33cd577b4ba 100644
--- a/Sim/Export/SimulationToPython.cpp
+++ b/Sim/Export/SimulationToPython.cpp
@@ -81,15 +81,6 @@ std::string defineFootprintFactor(const IFootprintFactor& foot)
     return result.str();
 }
 
-std::string defineScanResolution(const ScanResolution& sresol)
-{
-    std::ostringstream result;
-    result << Py::Fmt2::printRangedDistribution(*sresol.rdistribution()) << "\n"
-           << indent() << "resolution = "
-           << "ba.ScanResolution(distribution, " << Py::Fmt::printDouble(sresol.delta()) << ")\n";
-    return result.str();
-}
-
 std::string defineAlphaScan(const AlphaScan& scan)
 {
     std::ostringstream result;
@@ -104,12 +95,14 @@ std::string defineAlphaScan(const AlphaScan& scan)
         result << indent() << "scan.setFootprintFactor(footprint)\n";
     }
     if (const auto* r = scan.angleResolution(); r && r->rdistribution()) {
-        result << defineScanResolution(*r) << "\n";
-        result << indent() << "scan.setAngleResolution(resolution)\n";
+        result << Py::Fmt2::printRangedDistribution(*r->rdistribution()) << "\n";
+        result << indent() << "scan.setAbsoluteAngularResolution(distribution, "
+               << Py::Fmt::printDouble(r->delta()) << ")\n";
     }
     if (const auto* r = scan.wavelengthResolution(); r && r->rdistribution()) {
-        result << defineScanResolution(*r) << "\n";
-        result << indent() << "scan.setWavelengthResolution(resolution)\n";
+        result << Py::Fmt2::printRangedDistribution(*r->rdistribution()) << "\n";
+        result << indent() << "scan.setAbsoluteWavelengthResolution(distribution, "
+               << Py::Fmt::printDouble(r->delta()) << ")\n";
     }
     return result.str();
 }
diff --git a/Sim/Scan/AlphaScan.h b/Sim/Scan/AlphaScan.h
index 3be4e013847..c035ff0a1c7 100644
--- a/Sim/Scan/AlphaScan.h
+++ b/Sim/Scan/AlphaScan.h
@@ -39,17 +39,15 @@ public:
     //! Sets footprint correction factor
     void setFootprintFactor(const IFootprintFactor* f_factor);
 
-    //! Sets wavelength resolution values via ScanResolution object.
-    void setWavelengthResolution(const ScanResolution* resolution);
-
     void setAbsoluteWavelengthResolution(const IRangedDistribution& distr, double std_dev);
 
-    //! Sets angle resolution values via ScanResolution object.
-    void setAngleResolution(const ScanResolution* resolution);
-
     void setAbsoluteAngularResolution(const IRangedDistribution& distr, double std_dev);
 
 #ifndef SWIG
+    void setWavelengthResolution(const ScanResolution* resolution);
+
+    void setAngleResolution(const ScanResolution* resolution);
+
     //! Generates simulation elements for specular simulations
     std::vector<SpecularElement> generateElements() const override;
 
diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py
index 984c44db37e..7713d15300e 100644
--- a/auto/Wrap/libBornAgainSim.py
+++ b/auto/Wrap/libBornAgainSim.py
@@ -2568,18 +2568,10 @@ class AlphaScan(ISpecularScan):
         r"""setFootprintFactor(AlphaScan self, IFootprintFactor const * f_factor)"""
         return _libBornAgainSim.AlphaScan_setFootprintFactor(self, f_factor)
 
-    def setWavelengthResolution(self, resolution):
-        r"""setWavelengthResolution(AlphaScan self, ScanResolution resolution)"""
-        return _libBornAgainSim.AlphaScan_setWavelengthResolution(self, resolution)
-
     def setAbsoluteWavelengthResolution(self, distr, std_dev):
         r"""setAbsoluteWavelengthResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"""
         return _libBornAgainSim.AlphaScan_setAbsoluteWavelengthResolution(self, distr, std_dev)
 
-    def setAngleResolution(self, resolution):
-        r"""setAngleResolution(AlphaScan self, ScanResolution resolution)"""
-        return _libBornAgainSim.AlphaScan_setAngleResolution(self, resolution)
-
     def setAbsoluteAngularResolution(self, distr, std_dev):
         r"""setAbsoluteAngularResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"""
         return _libBornAgainSim.AlphaScan_setAbsoluteAngularResolution(self, distr, std_dev)
diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp
index ec0119f33f3..8c36c73215a 100644
--- a/auto/Wrap/libBornAgainSim_wrap.cpp
+++ b/auto/Wrap/libBornAgainSim_wrap.cpp
@@ -32253,35 +32253,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_AlphaScan_setWavelengthResolution(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  AlphaScan *arg1 = (AlphaScan *) 0 ;
-  ScanResolution *arg2 = (ScanResolution *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "AlphaScan_setWavelengthResolution", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_AlphaScan, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AlphaScan_setWavelengthResolution" "', argument " "1"" of type '" "AlphaScan *""'"); 
-  }
-  arg1 = reinterpret_cast< AlphaScan * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_ScanResolution, 0 |  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AlphaScan_setWavelengthResolution" "', argument " "2"" of type '" "ScanResolution const *""'"); 
-  }
-  arg2 = reinterpret_cast< ScanResolution * >(argp2);
-  (arg1)->setWavelengthResolution((ScanResolution const *)arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_AlphaScan_setAbsoluteWavelengthResolution(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   AlphaScan *arg1 = (AlphaScan *) 0 ;
@@ -32322,35 +32293,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_AlphaScan_setAngleResolution(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  AlphaScan *arg1 = (AlphaScan *) 0 ;
-  ScanResolution *arg2 = (ScanResolution *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "AlphaScan_setAngleResolution", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_AlphaScan, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AlphaScan_setAngleResolution" "', argument " "1"" of type '" "AlphaScan *""'"); 
-  }
-  arg1 = reinterpret_cast< AlphaScan * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_ScanResolution, 0 |  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AlphaScan_setAngleResolution" "', argument " "2"" of type '" "ScanResolution const *""'"); 
-  }
-  arg2 = reinterpret_cast< ScanResolution * >(argp2);
-  (arg1)->setAngleResolution((ScanResolution const *)arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_AlphaScan_setAbsoluteAngularResolution(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   AlphaScan *arg1 = (AlphaScan *) 0 ;
@@ -36771,9 +36713,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_AlphaScan", _wrap_delete_AlphaScan, METH_O, "delete_AlphaScan(AlphaScan self)"},
 	 { "AlphaScan_clone", _wrap_AlphaScan_clone, METH_O, "AlphaScan_clone(AlphaScan self) -> AlphaScan"},
 	 { "AlphaScan_setFootprintFactor", _wrap_AlphaScan_setFootprintFactor, METH_VARARGS, "AlphaScan_setFootprintFactor(AlphaScan self, IFootprintFactor const * f_factor)"},
-	 { "AlphaScan_setWavelengthResolution", _wrap_AlphaScan_setWavelengthResolution, METH_VARARGS, "AlphaScan_setWavelengthResolution(AlphaScan self, ScanResolution resolution)"},
 	 { "AlphaScan_setAbsoluteWavelengthResolution", _wrap_AlphaScan_setAbsoluteWavelengthResolution, METH_VARARGS, "AlphaScan_setAbsoluteWavelengthResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"},
-	 { "AlphaScan_setAngleResolution", _wrap_AlphaScan_setAngleResolution, METH_VARARGS, "AlphaScan_setAngleResolution(AlphaScan self, ScanResolution resolution)"},
 	 { "AlphaScan_setAbsoluteAngularResolution", _wrap_AlphaScan_setAbsoluteAngularResolution, METH_VARARGS, "AlphaScan_setAbsoluteAngularResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"},
 	 { "AlphaScan_swigregister", AlphaScan_swigregister, METH_O, NULL},
 	 { "AlphaScan_swiginit", AlphaScan_swiginit, METH_VARARGS, NULL},
-- 
GitLab


From 82b1236d9364049d01f4eec3d6879fe28ea572b1 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 22 Jan 2023 21:04:29 +0100
Subject: [PATCH 2/8] skip wrapper

---
 Tests/SimFactory/MakeSimulations.cpp | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/Tests/SimFactory/MakeSimulations.cpp b/Tests/SimFactory/MakeSimulations.cpp
index 61af832f392..e06a3bc5e11 100644
--- a/Tests/SimFactory/MakeSimulations.cpp
+++ b/Tests/SimFactory/MakeSimulations.cpp
@@ -420,13 +420,11 @@ test::makeSimulation::SpecularDivergentBeam(const MultiLayer& sample)
     AlphaScan scan(wavelength, FixedBinAxis("axis", number_of_bins, min_angle, max_angle));
 
     RangedDistributionGaussian wl_distr(n_integration_points, /*sigma_factor = */ 2.0);
-    std::unique_ptr<ScanResolution> wl_res(new ScanResolution(wl_distr, wl_stddev));
 
     RangedDistributionGaussian alpha_distr(n_integration_points, /*sigma_factor = */ 2.0);
-    std::unique_ptr<ScanResolution> ang_res(new ScanResolution(alpha_distr, ang_stddev));
 
-    scan.setWavelengthResolution(wl_res.get());
-    scan.setAngleResolution(ang_res.get());
+    scan.setAbsoluteWavelengthResolution(wl_distr, wl_stddev);
+    scan.setAbsoluteAngularResolution(alpha_distr, ang_stddev);
 
     return std::make_unique<SpecularSimulation>(scan, sample);
 }
-- 
GitLab


From b492967a75580b8b569cbd7bca5b123d3aa412c5 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 22 Jan 2023 21:47:45 +0100
Subject: [PATCH 3/8] privatize setters, at the expense of some complication in
 GUI

---
 GUI/Model/ToCore/SimulationToCore.cpp | 27 +++++++++++++++++++--------
 Sim/Scan/AlphaScan.h                  |  7 +++----
 2 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/GUI/Model/ToCore/SimulationToCore.cpp b/GUI/Model/ToCore/SimulationToCore.cpp
index cbcff76d519..1022c11f90e 100644
--- a/GUI/Model/ToCore/SimulationToCore.cpp
+++ b/GUI/Model/ToCore/SimulationToCore.cpp
@@ -71,22 +71,25 @@ void addBackgroundToSimulation(const InstrumentItem& item, ISimulation& simulati
         simulation.setBackground(*background);
 }
 
-std::unique_ptr<ScanResolution> createScanResolution(const BeamDistributionItem* item)
+//! Returns distribution and width.
+std::pair<std::unique_ptr<IRangedDistribution>, double>
+resolutionDistrib(const BeamDistributionItem* item)
 {
     if (!item)
-        return nullptr;
+        return {std::unique_ptr<IRangedDistribution>{}, 0};
 
     const auto* distr_item = dynamic_cast<const SymmetricResolutionItem*>(item->distributionItem());
     if (!distr_item)
-        return nullptr;
+        return {std::unique_ptr<IRangedDistribution>{}, 0};
 
     const double scale = item->scaleFactor();
-    auto ranged_distr = distr_item->createIRangedDistribution(scale);
+    std::unique_ptr<IRangedDistribution> ranged_distr =
+        distr_item->createIRangedDistribution(scale);
     if (!ranged_distr)
-        return nullptr;
+        return {std::unique_ptr<IRangedDistribution>{}, 0};
 
     const double deviation = distr_item->deviation(scale);
-    return std::unique_ptr<ScanResolution>(new ScanResolution(*ranged_distr, deviation));
+    return {std::move(ranged_distr), deviation};
 }
 
 void setSimulationOptions(ISimulation* simulation, const SimulationOptionsItem& item)
@@ -134,8 +137,16 @@ SpecularSimulation* createSpecularSimulation(std::unique_ptr<MultiLayer> sample,
     AlphaScan scan(beam_item->wavelength(), *axis_item->createAxis(Units::deg));
     scan.setFootprintFactor(footprint_item->createFootprint().get());
 
-    scan.setWavelengthResolution(createScanResolution(beam_item->wavelengthItem()).get());
-    scan.setAngleResolution(createScanResolution(beam_item->inclinationAngleItem()).get());
+    {
+        auto [distr, width] = resolutionDistrib(beam_item->wavelengthItem());
+        if (distr)
+            scan.setAbsoluteWavelengthResolution(*distr, width);
+    }
+    {
+        auto [distr, width] = resolutionDistrib(beam_item->inclinationAngleItem());
+        if (distr)
+            scan.setAbsoluteAngularResolution(*distr, width);
+    }
 
     auto* result = new SpecularSimulation(scan, *sample);
     // result->beam().setIntensity(beam_item->intensity());
diff --git a/Sim/Scan/AlphaScan.h b/Sim/Scan/AlphaScan.h
index c035ff0a1c7..f7ca388dc7b 100644
--- a/Sim/Scan/AlphaScan.h
+++ b/Sim/Scan/AlphaScan.h
@@ -44,10 +44,6 @@ public:
     void setAbsoluteAngularResolution(const IRangedDistribution& distr, double std_dev);
 
 #ifndef SWIG
-    void setWavelengthResolution(const ScanResolution* resolution);
-
-    void setAngleResolution(const ScanResolution* resolution);
-
     //! Generates simulation elements for specular simulations
     std::vector<SpecularElement> generateElements() const override;
 
@@ -77,6 +73,9 @@ private:
 
     void checkInitialization();
 
+    void setWavelengthResolution(const ScanResolution* resolution);
+    void setAngleResolution(const ScanResolution* resolution);
+
     std::unique_ptr<IFootprintFactor> m_footprint;
 
     std::unique_ptr<ScanResolution> m_lambda_distrib;
-- 
GitLab


From 47d216a530223158ee716aaaee03b65250b9e756 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 22 Jan 2023 21:58:59 +0100
Subject: [PATCH 4/8] inline fct

---
 GUI/Model/ToCore/SimulationToCore.cpp | 47 ++++++++++-----------------
 1 file changed, 18 insertions(+), 29 deletions(-)

diff --git a/GUI/Model/ToCore/SimulationToCore.cpp b/GUI/Model/ToCore/SimulationToCore.cpp
index 1022c11f90e..07b66ab5cc7 100644
--- a/GUI/Model/ToCore/SimulationToCore.cpp
+++ b/GUI/Model/ToCore/SimulationToCore.cpp
@@ -71,27 +71,6 @@ void addBackgroundToSimulation(const InstrumentItem& item, ISimulation& simulati
         simulation.setBackground(*background);
 }
 
-//! Returns distribution and width.
-std::pair<std::unique_ptr<IRangedDistribution>, double>
-resolutionDistrib(const BeamDistributionItem* item)
-{
-    if (!item)
-        return {std::unique_ptr<IRangedDistribution>{}, 0};
-
-    const auto* distr_item = dynamic_cast<const SymmetricResolutionItem*>(item->distributionItem());
-    if (!distr_item)
-        return {std::unique_ptr<IRangedDistribution>{}, 0};
-
-    const double scale = item->scaleFactor();
-    std::unique_ptr<IRangedDistribution> ranged_distr =
-        distr_item->createIRangedDistribution(scale);
-    if (!ranged_distr)
-        return {std::unique_ptr<IRangedDistribution>{}, 0};
-
-    const double deviation = distr_item->deviation(scale);
-    return {std::move(ranged_distr), deviation};
-}
-
 void setSimulationOptions(ISimulation* simulation, const SimulationOptionsItem& item)
 {
     simulation->options().setNumberOfThreads(item.numberOfThreads());
@@ -137,15 +116,25 @@ SpecularSimulation* createSpecularSimulation(std::unique_ptr<MultiLayer> sample,
     AlphaScan scan(beam_item->wavelength(), *axis_item->createAxis(Units::deg));
     scan.setFootprintFactor(footprint_item->createFootprint().get());
 
-    {
-        auto [distr, width] = resolutionDistrib(beam_item->wavelengthItem());
-        if (distr)
-            scan.setAbsoluteWavelengthResolution(*distr, width);
+    if (const auto it = beam_item->wavelengthItem()) {
+        if (const auto* distr_item =
+                dynamic_cast<const SymmetricResolutionItem*>(it->distributionItem())) {
+
+            const double scale = it->scaleFactor();
+            if (std::unique_ptr<IRangedDistribution> distr =
+                    distr_item->createIRangedDistribution(scale))
+                scan.setAbsoluteWavelengthResolution(*distr, distr_item->deviation(scale));
+        }
     }
-    {
-        auto [distr, width] = resolutionDistrib(beam_item->inclinationAngleItem());
-        if (distr)
-            scan.setAbsoluteAngularResolution(*distr, width);
+    if (const auto it = beam_item->inclinationAngleItem()) {
+        if (const auto* distr_item =
+                dynamic_cast<const SymmetricResolutionItem*>(it->distributionItem())) {
+
+            const double scale = it->scaleFactor();
+            if (std::unique_ptr<IRangedDistribution> distr =
+                    distr_item->createIRangedDistribution(scale))
+                scan.setAbsoluteAngularResolution(*distr, distr_item->deviation(scale));
+        }
     }
 
     auto* result = new SpecularSimulation(scan, *sample);
-- 
GitLab


From 59a3e41267e4435e12997cab391343c7da71b811 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 22 Jan 2023 23:24:33 +0100
Subject: [PATCH 5/8] inline wrapper

---
 Sim/Export/PyFmt2.cpp  | 2 +-
 Sim/Scan/AlphaScan.cpp | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/Sim/Export/PyFmt2.cpp b/Sim/Export/PyFmt2.cpp
index 7d6c44cffd7..767cf4c3ccf 100644
--- a/Sim/Export/PyFmt2.cpp
+++ b/Sim/Export/PyFmt2.cpp
@@ -110,7 +110,7 @@ std::string printAxis(const IAxis* axis, const std::string& unit)
 }
 
 std::string printParameterDistribution(const ParameterDistribution& par_distr,
-                                       const std::string& distVarName, const std::string& units)
+                                       const std::string& distVarName, const std::string& /*units*/)
 {
     std::ostringstream result;
 
diff --git a/Sim/Scan/AlphaScan.cpp b/Sim/Scan/AlphaScan.cpp
index 1bcfc68c3be..29ce4625f6e 100644
--- a/Sim/Scan/AlphaScan.cpp
+++ b/Sim/Scan/AlphaScan.cpp
@@ -62,8 +62,10 @@ AlphaScan* AlphaScan::clone() const
 {
     auto* result = new AlphaScan(wavelength(), *m_axis);
     result->setFootprintFactor(m_footprint.get());
-    result->setWavelengthResolution(m_lambda_distrib.get());
-    result->setAngleResolution(m_alpha_distrib.get());
+    if (m_lambda_distrib)
+        result->m_lambda_distrib.reset(m_lambda_distrib->clone());
+    if (m_alpha_distrib)
+        result->m_alpha_distrib.reset(m_alpha_distrib->clone());
     if (m_beamPolarization)
         result->m_beamPolarization.reset(new R3(*m_beamPolarization));
     if (m_polAnalyzer)
-- 
GitLab


From 3cbe8053eec8770b425a28376f98d66984e94db5 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 22 Jan 2023 23:37:35 +0100
Subject: [PATCH 6/8] rm wrapper

---
 Sim/Scan/AlphaScan.cpp | 16 ++--------------
 Sim/Scan/AlphaScan.h   |  3 ---
 2 files changed, 2 insertions(+), 17 deletions(-)

diff --git a/Sim/Scan/AlphaScan.cpp b/Sim/Scan/AlphaScan.cpp
index 29ce4625f6e..5d144fc5c95 100644
--- a/Sim/Scan/AlphaScan.cpp
+++ b/Sim/Scan/AlphaScan.cpp
@@ -106,26 +106,14 @@ void AlphaScan::setFootprintFactor(const IFootprintFactor* f_factor)
     m_footprint.reset(f_factor ? f_factor->clone() : nullptr);
 }
 
-void AlphaScan::setWavelengthResolution(const ScanResolution* resolution)
-{
-    m_lambda_distrib.reset(resolution ? resolution->clone() : nullptr);
-}
-
 void AlphaScan::setAbsoluteWavelengthResolution(const IRangedDistribution& distr, double std_dev)
 {
-    std::unique_ptr<ScanResolution> resolution(new ScanResolution(distr, std_dev));
-    setWavelengthResolution(resolution.get());
-}
-
-void AlphaScan::setAngleResolution(const ScanResolution* resolution)
-{
-    m_alpha_distrib.reset(resolution ? resolution->clone() : nullptr);
+    m_lambda_distrib.reset(new ScanResolution(distr, std_dev));
 }
 
 void AlphaScan::setAbsoluteAngularResolution(const IRangedDistribution& distr, double std_dev)
 {
-    std::unique_ptr<ScanResolution> resolution(new ScanResolution(distr, std_dev));
-    setAngleResolution(resolution.get());
+    m_alpha_distrib.reset(new ScanResolution(distr, std_dev));
 }
 
 size_t AlphaScan::nSteps() const
diff --git a/Sim/Scan/AlphaScan.h b/Sim/Scan/AlphaScan.h
index f7ca388dc7b..6dac87fe379 100644
--- a/Sim/Scan/AlphaScan.h
+++ b/Sim/Scan/AlphaScan.h
@@ -73,9 +73,6 @@ private:
 
     void checkInitialization();
 
-    void setWavelengthResolution(const ScanResolution* resolution);
-    void setAngleResolution(const ScanResolution* resolution);
-
     std::unique_ptr<IFootprintFactor> m_footprint;
 
     std::unique_ptr<ScanResolution> m_lambda_distrib;
-- 
GitLab


From 37971b3712ac23db8a91b50910ca37e23e49c69e Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 22 Jan 2023 23:39:28 +0100
Subject: [PATCH 7/8] rm 'Absolute' from fct name

---
 Examples/specular/BeamFullDivergence.py |  2 +-
 GUI/Model/ToCore/SimulationToCore.cpp   |  2 +-
 Sim/Export/SimulationToPython.cpp       |  2 +-
 Sim/Scan/AlphaScan.cpp                  |  2 +-
 Sim/Scan/AlphaScan.h                    |  2 +-
 Tests/SimFactory/MakeSimulations.cpp    |  2 +-
 auto/Wrap/libBornAgainSim.py            |  6 +++---
 auto/Wrap/libBornAgainSim_wrap.cpp      | 16 ++++++++--------
 8 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/Examples/specular/BeamFullDivergence.py b/Examples/specular/BeamFullDivergence.py
index 02a0f2ee36e..74c8cdbfa37 100755
--- a/Examples/specular/BeamFullDivergence.py
+++ b/Examples/specular/BeamFullDivergence.py
@@ -31,7 +31,7 @@ def get_simulation(sample):
 
     scan = ba.AlphaScan(wavelength, n, 2*deg/n, 2*deg)
     scan.setAbsoluteAngularResolution(alpha_distr, d_ang)
-    scan.setAbsoluteWavelengthResolution(wavelength_distr, d_wl)
+    scan.setWavelengthResolution(wavelength_distr, d_wl)
 
     return ba.SpecularSimulation(scan, sample)
 
diff --git a/GUI/Model/ToCore/SimulationToCore.cpp b/GUI/Model/ToCore/SimulationToCore.cpp
index 07b66ab5cc7..c5f26fc8c3f 100644
--- a/GUI/Model/ToCore/SimulationToCore.cpp
+++ b/GUI/Model/ToCore/SimulationToCore.cpp
@@ -123,7 +123,7 @@ SpecularSimulation* createSpecularSimulation(std::unique_ptr<MultiLayer> sample,
             const double scale = it->scaleFactor();
             if (std::unique_ptr<IRangedDistribution> distr =
                     distr_item->createIRangedDistribution(scale))
-                scan.setAbsoluteWavelengthResolution(*distr, distr_item->deviation(scale));
+                scan.setWavelengthResolution(*distr, distr_item->deviation(scale));
         }
     }
     if (const auto it = beam_item->inclinationAngleItem()) {
diff --git a/Sim/Export/SimulationToPython.cpp b/Sim/Export/SimulationToPython.cpp
index 33cd577b4ba..8bfc5fd8546 100644
--- a/Sim/Export/SimulationToPython.cpp
+++ b/Sim/Export/SimulationToPython.cpp
@@ -101,7 +101,7 @@ std::string defineAlphaScan(const AlphaScan& scan)
     }
     if (const auto* r = scan.wavelengthResolution(); r && r->rdistribution()) {
         result << Py::Fmt2::printRangedDistribution(*r->rdistribution()) << "\n";
-        result << indent() << "scan.setAbsoluteWavelengthResolution(distribution, "
+        result << indent() << "scan.setWavelengthResolution(distribution, "
                << Py::Fmt::printDouble(r->delta()) << ")\n";
     }
     return result.str();
diff --git a/Sim/Scan/AlphaScan.cpp b/Sim/Scan/AlphaScan.cpp
index 5d144fc5c95..bcd791014a0 100644
--- a/Sim/Scan/AlphaScan.cpp
+++ b/Sim/Scan/AlphaScan.cpp
@@ -106,7 +106,7 @@ void AlphaScan::setFootprintFactor(const IFootprintFactor* f_factor)
     m_footprint.reset(f_factor ? f_factor->clone() : nullptr);
 }
 
-void AlphaScan::setAbsoluteWavelengthResolution(const IRangedDistribution& distr, double std_dev)
+void AlphaScan::setWavelengthResolution(const IRangedDistribution& distr, double std_dev)
 {
     m_lambda_distrib.reset(new ScanResolution(distr, std_dev));
 }
diff --git a/Sim/Scan/AlphaScan.h b/Sim/Scan/AlphaScan.h
index 6dac87fe379..d8c9767b840 100644
--- a/Sim/Scan/AlphaScan.h
+++ b/Sim/Scan/AlphaScan.h
@@ -39,7 +39,7 @@ public:
     //! Sets footprint correction factor
     void setFootprintFactor(const IFootprintFactor* f_factor);
 
-    void setAbsoluteWavelengthResolution(const IRangedDistribution& distr, double std_dev);
+    void setWavelengthResolution(const IRangedDistribution& distr, double std_dev);
 
     void setAbsoluteAngularResolution(const IRangedDistribution& distr, double std_dev);
 
diff --git a/Tests/SimFactory/MakeSimulations.cpp b/Tests/SimFactory/MakeSimulations.cpp
index e06a3bc5e11..5dbd4bb0999 100644
--- a/Tests/SimFactory/MakeSimulations.cpp
+++ b/Tests/SimFactory/MakeSimulations.cpp
@@ -423,7 +423,7 @@ test::makeSimulation::SpecularDivergentBeam(const MultiLayer& sample)
 
     RangedDistributionGaussian alpha_distr(n_integration_points, /*sigma_factor = */ 2.0);
 
-    scan.setAbsoluteWavelengthResolution(wl_distr, wl_stddev);
+    scan.setWavelengthResolution(wl_distr, wl_stddev);
     scan.setAbsoluteAngularResolution(alpha_distr, ang_stddev);
 
     return std::make_unique<SpecularSimulation>(scan, sample);
diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py
index 7713d15300e..0e33783cbe2 100644
--- a/auto/Wrap/libBornAgainSim.py
+++ b/auto/Wrap/libBornAgainSim.py
@@ -2568,9 +2568,9 @@ class AlphaScan(ISpecularScan):
         r"""setFootprintFactor(AlphaScan self, IFootprintFactor const * f_factor)"""
         return _libBornAgainSim.AlphaScan_setFootprintFactor(self, f_factor)
 
-    def setAbsoluteWavelengthResolution(self, distr, std_dev):
-        r"""setAbsoluteWavelengthResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"""
-        return _libBornAgainSim.AlphaScan_setAbsoluteWavelengthResolution(self, distr, std_dev)
+    def setWavelengthResolution(self, distr, std_dev):
+        r"""setWavelengthResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"""
+        return _libBornAgainSim.AlphaScan_setWavelengthResolution(self, distr, std_dev)
 
     def setAbsoluteAngularResolution(self, distr, std_dev):
         r"""setAbsoluteAngularResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"""
diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp
index 8c36c73215a..7f2022f9f6b 100644
--- a/auto/Wrap/libBornAgainSim_wrap.cpp
+++ b/auto/Wrap/libBornAgainSim_wrap.cpp
@@ -32253,7 +32253,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_AlphaScan_setAbsoluteWavelengthResolution(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_AlphaScan_setWavelengthResolution(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   AlphaScan *arg1 = (AlphaScan *) 0 ;
   IRangedDistribution *arg2 = 0 ;
@@ -32266,26 +32266,26 @@ SWIGINTERN PyObject *_wrap_AlphaScan_setAbsoluteWavelengthResolution(PyObject *s
   int ecode3 = 0 ;
   PyObject *swig_obj[3] ;
   
-  if (!SWIG_Python_UnpackTuple(args, "AlphaScan_setAbsoluteWavelengthResolution", 3, 3, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "AlphaScan_setWavelengthResolution", 3, 3, swig_obj)) SWIG_fail;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_AlphaScan, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AlphaScan_setAbsoluteWavelengthResolution" "', argument " "1"" of type '" "AlphaScan *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AlphaScan_setWavelengthResolution" "', argument " "1"" of type '" "AlphaScan *""'"); 
   }
   arg1 = reinterpret_cast< AlphaScan * >(argp1);
   res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_IRangedDistribution,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AlphaScan_setAbsoluteWavelengthResolution" "', argument " "2"" of type '" "IRangedDistribution const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AlphaScan_setWavelengthResolution" "', argument " "2"" of type '" "IRangedDistribution const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AlphaScan_setAbsoluteWavelengthResolution" "', argument " "2"" of type '" "IRangedDistribution const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AlphaScan_setWavelengthResolution" "', argument " "2"" of type '" "IRangedDistribution const &""'"); 
   }
   arg2 = reinterpret_cast< IRangedDistribution * >(argp2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "AlphaScan_setAbsoluteWavelengthResolution" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "AlphaScan_setWavelengthResolution" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  (arg1)->setAbsoluteWavelengthResolution((IRangedDistribution const &)*arg2,arg3);
+  (arg1)->setWavelengthResolution((IRangedDistribution const &)*arg2,arg3);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -36713,7 +36713,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_AlphaScan", _wrap_delete_AlphaScan, METH_O, "delete_AlphaScan(AlphaScan self)"},
 	 { "AlphaScan_clone", _wrap_AlphaScan_clone, METH_O, "AlphaScan_clone(AlphaScan self) -> AlphaScan"},
 	 { "AlphaScan_setFootprintFactor", _wrap_AlphaScan_setFootprintFactor, METH_VARARGS, "AlphaScan_setFootprintFactor(AlphaScan self, IFootprintFactor const * f_factor)"},
-	 { "AlphaScan_setAbsoluteWavelengthResolution", _wrap_AlphaScan_setAbsoluteWavelengthResolution, METH_VARARGS, "AlphaScan_setAbsoluteWavelengthResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"},
+	 { "AlphaScan_setWavelengthResolution", _wrap_AlphaScan_setWavelengthResolution, METH_VARARGS, "AlphaScan_setWavelengthResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"},
 	 { "AlphaScan_setAbsoluteAngularResolution", _wrap_AlphaScan_setAbsoluteAngularResolution, METH_VARARGS, "AlphaScan_setAbsoluteAngularResolution(AlphaScan self, IRangedDistribution const & distr, double std_dev)"},
 	 { "AlphaScan_swigregister", AlphaScan_swigregister, METH_O, NULL},
 	 { "AlphaScan_swiginit", AlphaScan_swiginit, METH_VARARGS, NULL},
-- 
GitLab


From ac849a2eee24805601d911aa9352cd1a3231fbe3 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 22 Jan 2023 23:39:53 +0100
Subject: [PATCH 8/8] printParameterDistribution: rm unused arg

---
 Sim/Export/PyFmt2.cpp | 2 +-
 Sim/Export/PyFmt2.h   | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/Sim/Export/PyFmt2.cpp b/Sim/Export/PyFmt2.cpp
index 767cf4c3ccf..2f77e7057d4 100644
--- a/Sim/Export/PyFmt2.cpp
+++ b/Sim/Export/PyFmt2.cpp
@@ -110,7 +110,7 @@ std::string printAxis(const IAxis* axis, const std::string& unit)
 }
 
 std::string printParameterDistribution(const ParameterDistribution& par_distr,
-                                       const std::string& distVarName, const std::string& /*units*/)
+                                       const std::string& distVarName)
 {
     std::ostringstream result;
 
diff --git a/Sim/Export/PyFmt2.h b/Sim/Export/PyFmt2.h
index 94f634d5c34..5ec70564457 100644
--- a/Sim/Export/PyFmt2.h
+++ b/Sim/Export/PyFmt2.h
@@ -37,8 +37,7 @@ std::string representShape2D(const std::string& indent, const IShape2D* ishape,
 std::string printAxis(const IAxis* axis, const std::string& unit);
 
 std::string printParameterDistribution(const ParameterDistribution& par_distr,
-                                       const std::string& distVarName,
-                                       const std::string& units = "");
+                                       const std::string& distVarName);
 
 std::string printRangedDistribution(const IRangedDistribution& distr);
 
-- 
GitLab