diff --git a/Resample/Processed/ProcessedSample.cpp b/Resample/Processed/ProcessedSample.cpp index 9045b9229eeeb754158789d24a6cdac09e07cf28..b7d68848bc221fee02ade361c4c370d31c44b85c 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 998834700957d1a1336b141a0ad3e311303d5d9c..ce97012897a50c3f15e15a16cd7bfad76bc866f7 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; };