From 23f1c62aed6cc5f8ddbc0f3d862cde8a2536d340 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Wed, 14 Jul 2021 20:44:51 +0200
Subject: [PATCH] start moving refined stack out of IFresnelMap

---
 Resample/Processed/ProcessedSample.cpp | 26 +++++++++-----------------
 Resample/Processed/ProcessedSample.h   |  1 +
 2 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/Resample/Processed/ProcessedSample.cpp b/Resample/Processed/ProcessedSample.cpp
index 9045b9229ee..b7d68848bc2 100644
--- a/Resample/Processed/ProcessedSample.cpp
+++ b/Resample/Processed/ProcessedSample.cpp
@@ -114,6 +114,7 @@ SliceStack refineStack(const SliceStack& stack, const std::vector<ProcessedLayou
             result[i_slice].setMaterial(createAveragedMaterial(slice_mat, entry.second));
         }
     }
+    ASSERT(result.size()==stack.size());
     return result;
 }
 
@@ -199,22 +200,6 @@ std::vector<ProcessedLayout> collectLayouts(const MultiLayer& sample, const Slic
     return result;
 }
 
-//! Returns a Fresnel map, for use in ProcessedSample constructor.
-
-std::unique_ptr<IFresnelMap> fresnelify(const MultiLayer& sample, const SliceStack& slices,
-                                        const std::vector<ProcessedLayout>& layouts,
-                                        const SimulationOptions& options)
-{
-    SliceStack fresnelStack = options.useAvgMaterials() ? refineStack(slices, layouts) : slices;
-
-    if (slices.containsMagneticMaterial())
-        return std::make_unique<MatrixFresnelMap>(
-            fresnelStack,
-            SampleUtils::SpecularStrategyBuilder::buildMagnetic(sample.roughnessModel()));
-    return std::make_unique<ScalarFresnelMap>(
-        fresnelStack, SampleUtils::SpecularStrategyBuilder::buildScalar(sample.roughnessModel()));
-}
-
 } // namespace
 
 
@@ -228,7 +213,14 @@ ProcessedSample::ProcessedSample(const MultiLayer& sample, const SimulationOptio
     , m_polarized{forcePolarized || sample.isMagnetic()}
     , m_slices{slicify(sample, options).setBField(sample.externalField())}
     , m_layouts{collectLayouts(sample, m_slices, m_polarized)}
-    , m_fresnel_map{fresnelify(sample, m_slices, m_layouts, options)}
+    , m_refined_stack(options.useAvgMaterials() ? refineStack(m_slices, m_layouts) : m_slices)
+    , m_fresnel_map(m_slices.containsMagneticMaterial()
+                    ? (std::unique_ptr<IFresnelMap>)std::make_unique<MatrixFresnelMap>(
+               m_refined_stack,
+               SampleUtils::SpecularStrategyBuilder::buildMagnetic(sample.roughnessModel()))
+                    : (std::unique_ptr<IFresnelMap>)std::make_unique<ScalarFresnelMap>(
+               m_refined_stack,
+               SampleUtils::SpecularStrategyBuilder::buildScalar(sample.roughnessModel())))
 {
 }
 
diff --git a/Resample/Processed/ProcessedSample.h b/Resample/Processed/ProcessedSample.h
index 99883470095..ce97012897a 100644
--- a/Resample/Processed/ProcessedSample.h
+++ b/Resample/Processed/ProcessedSample.h
@@ -63,6 +63,7 @@ private:
     const bool m_polarized;
     const SliceStack m_slices;
     const std::vector<ProcessedLayout> m_layouts;
+    const SliceStack m_refined_stack;
     const std::unique_ptr<const IFresnelMap> m_fresnel_map;
 };
 
-- 
GitLab