From f66c38dca101b012044ea36d9e9ac47605cb1b70 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de>
Date: Mon, 30 Jan 2023 17:15:18 +0100
Subject: [PATCH] ditto for DWBAComputation

---
 Sim/Computation/DWBAComputation.cpp     | 32 ++++++++++---------------
 Sim/Computation/DWBAComputation.h       |  8 ++-----
 Sim/Simulation/OffspecSimulation.cpp    |  5 ++--
 Sim/Simulation/ScatteringSimulation.cpp |  5 ++--
 4 files changed, 18 insertions(+), 32 deletions(-)

diff --git a/Sim/Computation/DWBAComputation.cpp b/Sim/Computation/DWBAComputation.cpp
index 99d7ffe3a96..23020a04a39 100644
--- a/Sim/Computation/DWBAComputation.cpp
+++ b/Sim/Computation/DWBAComputation.cpp
@@ -24,12 +24,8 @@
 #include "Sim/Contrib/RoughMultiLayerContribution.h"
 
 DWBAComputation::DWBAComputation(const ReSample& re_sample, const SimulationOptions& options,
-                                 ProgressHandler& progress,
-                                 std::vector<DiffuseElement>::iterator begin_it,
-                                 std::vector<DiffuseElement>::iterator end_it)
+                                 ProgressHandler& progress)
     : IComputation(re_sample, options, progress)
-    , m_begin_it(begin_it)
-    , m_end_it(end_it)
 {
 }
 
@@ -40,24 +36,20 @@ DWBAComputation::~DWBAComputation() = default;
 // For roughness: (scattering cross-section of area S)/S
 // For specular peak: |R|^2 * sin(alpha_i) / solid_angle
 // This allows them to be added and normalized together to the beam afterwards
-void DWBAComputation::runProtected()
+void DWBAComputation::run(DiffuseElement& ele)
 {
-    for (auto it = m_begin_it; it != m_end_it; ++it) {
-        DiffuseElement& ele = *it;
+    const Fluxes fluxes_in = m_re_sample.fluxesIn(ele.getKi());
+    const Fluxes fluxes_out = m_re_sample.fluxesOut(ele.meanKf());
+    ele.setFluxes(&fluxes_in, &fluxes_out);
 
-        const Fluxes fluxes_in = m_re_sample.fluxesIn(ele.getKi());
-        const Fluxes fluxes_out = m_re_sample.fluxesOut(ele.meanKf());
-        ele.setFluxes(&fluxes_in, &fluxes_out);
+    for (const ReLayout* relayout : m_re_sample.relayouts())
+        compute::dwbaContribution(*relayout, ele);
 
-        for (const ReLayout* relayout : m_re_sample.relayouts())
-            compute::dwbaContribution(*relayout, ele);
+    if (m_re_sample.hasRoughness())
+        compute::roughMultiLayerContribution(m_re_sample, ele);
 
-        if (m_re_sample.hasRoughness())
-            compute::roughMultiLayerContribution(m_re_sample, ele);
+    if (m_options.includeSpecular())
+        compute::gisasSpecularContribution(ele);
 
-        if (m_options.includeSpecular())
-            compute::gisasSpecularContribution(ele);
-
-        stepProgress();
-    }
+    stepProgress();
 }
diff --git a/Sim/Computation/DWBAComputation.h b/Sim/Computation/DWBAComputation.h
index 48fd859af57..91a39df47b3 100644
--- a/Sim/Computation/DWBAComputation.h
+++ b/Sim/Computation/DWBAComputation.h
@@ -37,14 +37,10 @@ class SimulationOptions;
 class DWBAComputation : public IComputation {
 public:
     DWBAComputation(const ReSample& re_sample, const SimulationOptions& options,
-                    ProgressHandler& progress, std::vector<DiffuseElement>::iterator begin_it,
-                    std::vector<DiffuseElement>::iterator end_it);
+                    ProgressHandler& progress);
     ~DWBAComputation() override;
 
-    void runProtected() override;
-
-private:
-    std::vector<DiffuseElement>::iterator m_begin_it, m_end_it;
+    void run(DiffuseElement& ele);
 };
 
 #endif // BORNAGAIN_SIM_COMPUTATION_DWBACOMPUTATION_H
diff --git a/Sim/Simulation/OffspecSimulation.cpp b/Sim/Simulation/OffspecSimulation.cpp
index 4cea6eb8552..a0e71f93410 100644
--- a/Sim/Simulation/OffspecSimulation.cpp
+++ b/Sim/Simulation/OffspecSimulation.cpp
@@ -147,9 +147,8 @@ void OffspecSimulation::initDistributionHandler()
 
 void OffspecSimulation::runComputation(const ReSample& re_sample, size_t iElement)
 {
-    const auto& begin = m_eles.begin() + static_cast<long>(iElement);
-    DWBAComputation(re_sample, options(), progress(), begin, begin + static_cast<long>(1))
-        .runProtected();
+    DiffuseElement& ele = *(m_eles.begin() + static_cast<long>(iElement));
+    DWBAComputation(re_sample, options(), progress()).run(ele);
 }
 
 void OffspecSimulation::normalize(size_t start, size_t n_elements)
diff --git a/Sim/Simulation/ScatteringSimulation.cpp b/Sim/Simulation/ScatteringSimulation.cpp
index 8840cfd2b29..c899bd2128a 100644
--- a/Sim/Simulation/ScatteringSimulation.cpp
+++ b/Sim/Simulation/ScatteringSimulation.cpp
@@ -120,9 +120,8 @@ void ScatteringSimulation::initElementVector()
 
 void ScatteringSimulation::runComputation(const ReSample& re_sample, size_t iElement)
 {
-    const auto& begin = m_eles.begin() + static_cast<long>(iElement);
-    DWBAComputation(re_sample, options(), progress(), begin, begin + static_cast<long>(1))
-        .runProtected();
+    DiffuseElement& ele = *(m_eles.begin() + static_cast<long>(iElement));
+    DWBAComputation(re_sample, options(), progress()).run(ele);
 }
 
 void ScatteringSimulation::normalize(size_t start, size_t n_elements)
-- 
GitLab