From 71b74b963d22a1fd58171545ee802d875c2c2c57 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 15 Jan 2023 08:30:22 +0100
Subject: [PATCH] do w/o extractValue

---
 Sim/Scan/AlphaScan.cpp | 44 +++++++++++-------------------------------
 1 file changed, 11 insertions(+), 33 deletions(-)

diff --git a/Sim/Scan/AlphaScan.cpp b/Sim/Scan/AlphaScan.cpp
index 590d4be6ede..1ab75e26ec4 100644
--- a/Sim/Scan/AlphaScan.cpp
+++ b/Sim/Scan/AlphaScan.cpp
@@ -22,21 +22,6 @@
 #include "Param/Distrib/RangedDistributions.h"
 #include "Resample/Element/SpecularElement.h"
 #include "Sim/Scan/ScanResolution.h"
-#include <algorithm>
-
-namespace {
-
-std::vector<double> extractValues1(const std::vector<ParameterSample>& samples,
-                                   const std::function<double(const ParameterSample&)> extractor)
-{
-    std::vector<double> result;
-    result.reserve(samples.size());
-    std::for_each(samples.begin(), samples.end(),
-                  [&](const ParameterSample& sample) { result.push_back(extractor(sample)); });
-    return result;
-}
-
-} // namespace
 
 AlphaScan::AlphaScan(double wl, std::vector<double> inc_angle)
     : m_lambda(wl)
@@ -82,7 +67,6 @@ AlphaScan::~AlphaScan() = default;
 
 std::vector<SpecularElement> AlphaScan::generateElements() const
 {
-
     std::vector<SpecularElement> result;
     result.reserve(nSteps());
 
@@ -92,12 +76,10 @@ std::vector<SpecularElement> AlphaScan::generateElements() const
         m_alpha_distrib->generateResolutionSamples(m_alpha_axis->binCenters());
 
     for (size_t i = 0; i < m_alpha_axis->size(); ++i) {
-        const auto wls = extractValues1(lambdaDistrib[i],
-                                        [](const ParameterSample& sample) { return sample.value; });
-        const auto incs = extractValues1(
-            alphaDistrib[i], [](const ParameterSample& sample) { return sample.value; });
-        for (const double alpha : incs) {
-            for (const double wavelength : wls) {
+        for (size_t j = 0; j < alphaDistrib[i].size(); ++j) {
+            const double alpha = alphaDistrib[i][j].value;
+            for (size_t k = 0; k < lambdaDistrib[i].size(); ++k) {
+                const double wavelength = lambdaDistrib[i][k].value;
                 const bool computable = wavelength >= 0 && alpha >= 0 && alpha <= M_PI_2;
                 result.emplace_back(SpecularElement::FromAlphaScan(
                     wavelength, -alpha, polarizerMatrix(), analyzerMatrix(), computable));
@@ -156,11 +138,9 @@ std::vector<double> AlphaScan::footprint(size_t start, size_t n_elements) const
     int left = static_cast<int>(n_elements);
     size_t pos_res = 0;
     for (size_t i = pos_out; left > 0; ++i) {
-        const auto sample_values = extractValues1(
-            alphaDistrib[i], [](const ParameterSample& sample) { return sample.value; });
         for (size_t k = pos_inc; k < n_inc_samples && left > 0; ++k) {
             pos_inc = 0;
-            const double angle = sample_values[k];
+            const double angle = alphaDistrib[i][k].value;
             const double footprint =
                 (angle >= 0 && angle <= M_PI_2) ? m_footprint->calculate(angle) : 1.0;
             for (size_t j = pos_wl; j < n_wl_samples && left > 0; ++j) {
@@ -196,14 +176,12 @@ std::vector<double> AlphaScan::createIntensities(const std::vector<SpecularEleme
 
     size_t elem_pos = 0;
     for (size_t i = 0; i < axis_size; ++i) {
-        const auto wl_weights = extractValues1(
-            lambdaDistrib[i], [](const ParameterSample& sample) { return sample.weight; });
-        const auto inc_weights = extractValues1(
-            alphaDistrib[i], [](const ParameterSample& sample) { return sample.weight; });
-        double& current = result[i];
-        for (const double inc_weight : inc_weights) {
-            for (const double wl_weight : wl_weights) {
-                current += eles[elem_pos].intensity() * inc_weight * wl_weight;
+        for (size_t j = 0; j < alphaDistrib[i].size(); ++j) {
+            const double alpha_wgt = alphaDistrib[i][j].weight;
+            for (size_t k = 0; k < lambdaDistrib[i].size(); ++k) {
+                const double lambda_wgt = lambdaDistrib[i][k].weight;
+
+                result[i] += eles[elem_pos].intensity() * alpha_wgt * lambda_wgt;
                 ++elem_pos;
             }
         }
-- 
GitLab