From 001dc6853404cb99e74363e1af49f8dd7842389e Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Mon, 12 Jul 2021 15:15:02 +0200 Subject: [PATCH] don't duplicate Sample properties in ProcessedSample --- Core/Term/RoughMultiLayerContribution.cpp | 20 ++++++++++---------- Core/Term/RoughMultiLayerContribution.h | 4 ++-- Resample/Processed/ProcessedSample.cpp | 20 ++++---------------- Resample/Processed/ProcessedSample.h | 7 ------- auto/Wrap/doxygenCore.i | 2 +- auto/Wrap/doxygenResample.i | 9 --------- 6 files changed, 17 insertions(+), 45 deletions(-) diff --git a/Core/Term/RoughMultiLayerContribution.cpp b/Core/Term/RoughMultiLayerContribution.cpp index 67b9878874f..e1e8d7513b3 100644 --- a/Core/Term/RoughMultiLayerContribution.cpp +++ b/Core/Term/RoughMultiLayerContribution.cpp @@ -41,8 +41,8 @@ complex_t h_min(complex_t z) } } // namespace -RoughMultiLayerContribution::RoughMultiLayerContribution(const ProcessedSample* p_sample) - : m_sample{p_sample} +RoughMultiLayerContribution::RoughMultiLayerContribution(const ProcessedSample* re_sample) + : m_re_sample{re_sample} { } @@ -50,7 +50,7 @@ void RoughMultiLayerContribution::compute(DiffuseElement& ele) const { if (ele.getAlphaMean() < 0.0) return; - const size_t n_slices = m_sample->numberOfSlices(); + const size_t n_slices = m_re_sample->numberOfSlices(); kvector_t q = ele.meanQ(); double wavelength = ele.wavelength(); double autocorr(0.0); @@ -64,17 +64,17 @@ void RoughMultiLayerContribution::compute(DiffuseElement& ele) const sterm[i] = get_sum8terms(i, ele); } for (size_t i = 0; i + 1 < n_slices; i++) { - const LayerRoughness* rough = m_sample->avgeSlice(i + 1).topRoughness(); + const LayerRoughness* rough = m_re_sample->avgeSlice(i + 1).topRoughness(); if (rough) autocorr += std::norm(rterm[i]) * std::norm(sterm[i]) * rough->getSpectralFun(q); } // cross correlation between layers - if (m_sample->crossCorrelationLength() != 0.0) { + if (m_re_sample->sample().crossCorrLength() != 0.0) { for (size_t j = 0; j < n_slices - 1; j++) { for (size_t k = 0; k < n_slices - 1; k++) { if (j == k) continue; - crosscorr += rterm[j] * sterm[j] * m_sample->crossCorrSpectralFun(q, j, k) + crosscorr += rterm[j] * sterm[j] * m_re_sample->crossCorrSpectralFun(q, j, k) * std::conj(rterm[k]) * std::conj(sterm[k]); } } @@ -85,15 +85,15 @@ void RoughMultiLayerContribution::compute(DiffuseElement& ele) const complex_t RoughMultiLayerContribution::get_refractive_term(size_t ilayer, double wavelength) const { - const SliceStack& slices = m_sample->slices(); + const SliceStack& slices = m_re_sample->slices(); return slices[ilayer].material().refractiveIndex2(wavelength) - slices[ilayer + 1].material().refractiveIndex2(wavelength); } complex_t RoughMultiLayerContribution::get_sum8terms(size_t ilayer, const DiffuseElement& ele) const { - const SliceStack& slices = m_sample->slices(); - auto p_fresnel_map = m_sample->fresnelMap(); + const SliceStack& slices = m_re_sample->slices(); + auto p_fresnel_map = m_re_sample->fresnelMap(); const auto P_in_plus = p_fresnel_map->getInFlux(ele.getKi(), ilayer); const auto P_out_plus = p_fresnel_map->getOutFlux(ele.getMeanKf(), ilayer); @@ -120,7 +120,7 @@ complex_t RoughMultiLayerContribution::get_sum8terms(size_t ilayer, const Diffus const complex_t qz4_minus = -qz1_minus; double sigma(0.0); - if (const LayerRoughness* roughness = m_sample->avgeSlice(ilayer + 1).topRoughness()) + if (const LayerRoughness* roughness = m_re_sample->avgeSlice(ilayer + 1).topRoughness()) sigma = roughness->getSigma(); const complex_t term1 = T_in_plus * T_out_plus * h_plus(qz1_plus * sigma); const complex_t term2 = T_in_plus * R_out_plus * h_plus(qz2_plus * sigma); diff --git a/Core/Term/RoughMultiLayerContribution.h b/Core/Term/RoughMultiLayerContribution.h index 4f566e62260..f7123ffc397 100644 --- a/Core/Term/RoughMultiLayerContribution.h +++ b/Core/Term/RoughMultiLayerContribution.h @@ -30,12 +30,12 @@ class DiffuseElement; class RoughMultiLayerContribution final { public: - RoughMultiLayerContribution(const ProcessedSample* p_sample); + RoughMultiLayerContribution(const ProcessedSample* re_sample); void compute(DiffuseElement& ele) const; private: - const ProcessedSample* m_sample; + const ProcessedSample* m_re_sample; complex_t get_refractive_term(size_t ilayer, double wavelength) const; complex_t get_sum8terms(size_t ilayer, const DiffuseElement& sim_element) const; diff --git a/Resample/Processed/ProcessedSample.cpp b/Resample/Processed/ProcessedSample.cpp index 3f84200678c..a2d5e90c76b 100644 --- a/Resample/Processed/ProcessedSample.cpp +++ b/Resample/Processed/ProcessedSample.cpp @@ -227,10 +227,7 @@ std::unique_ptr<IFresnelMap> fresnelify(const MultiLayer& sample, const SliceSta ProcessedSample::ProcessedSample(const MultiLayer& sample, const SimulationOptions& options, bool forcePolarized) : m_sample(sample) - , m_roughness_model(sample.roughnessModel()) , m_polarized{forcePolarized || sample.isMagnetic()} - , m_crossCorrLength{sample.crossCorrLength()} - , m_ext_field{sample.externalField()} , 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)} @@ -269,16 +266,6 @@ const IFresnelMap* ProcessedSample::fresnelMap() const return m_fresnel_map.get(); } -double ProcessedSample::crossCorrelationLength() const -{ - return m_crossCorrLength; -} - -const kvector_t& ProcessedSample::externalField() const -{ - return m_ext_field; -} - double ProcessedSample::sliceTopZ(size_t i) const { return m_slices.at(i).zTop(); @@ -296,7 +283,7 @@ bool ProcessedSample::containsMagneticMaterial() const bool ProcessedSample::polarizing() const { - return containsMagneticMaterial() || externalField() != kvector_t{}; + return containsMagneticMaterial() || m_sample.externalField() != kvector_t{}; } bool ProcessedSample::hasRoughness() const @@ -309,7 +296,8 @@ bool ProcessedSample::hasRoughness() const double ProcessedSample::crossCorrSpectralFun(const kvector_t kvec, size_t j, size_t k) const { - if (m_crossCorrLength <= 0.0) + const double xCorrLength = m_sample.crossCorrLength(); + if ( xCorrLength<= 0.0) return 0.0; const double z_j = sliceBottomZ(j); const double z_k = sliceBottomZ(k); @@ -324,5 +312,5 @@ double ProcessedSample::crossCorrSpectralFun(const kvector_t kvec, size_t j, siz return 0.5 * ((sigma_k / sigma_j) * rough_j->getSpectralFun(kvec) + (sigma_j / sigma_k) * rough_k->getSpectralFun(kvec)) - * std::exp(-1 * std::abs(z_j - z_k) / m_crossCorrLength); + * std::exp(-1 * std::abs(z_j - z_k) / xCorrLength); } diff --git a/Resample/Processed/ProcessedSample.h b/Resample/Processed/ProcessedSample.h index 1cca988663d..99883470095 100644 --- a/Resample/Processed/ProcessedSample.h +++ b/Resample/Processed/ProcessedSample.h @@ -22,7 +22,6 @@ #include "Base/Vector/Vectors3D.h" #include "Resample/Slice/SliceStack.h" -#include "Sample/Multilayer/RoughnessModels.h" #include <memory> #include <vector> @@ -49,14 +48,11 @@ public: const Slice& avgeSlice(size_t i) const; const std::vector<ProcessedLayout>& layouts() const; const IFresnelMap* fresnelMap() const; - double crossCorrelationLength() const; - const kvector_t& externalField() const; double sliceTopZ(size_t i) const; double sliceBottomZ(size_t i) const; bool containsMagneticMaterial() const; bool polarizing() const; //!< Contains magnetic material, or nonzero magnetic field bool hasRoughness() const; - const RoughnessModel& roughnessModel() const { return m_roughness_model; } const MultiLayer& sample() const { return m_sample; } //! Fourier transform of the correlation function of roughnesses between the interfaces @@ -64,10 +60,7 @@ public: private: const MultiLayer& m_sample; - const RoughnessModel m_roughness_model; const bool m_polarized; - const double m_crossCorrLength; - const kvector_t m_ext_field; const SliceStack m_slices; const std::vector<ProcessedLayout> m_layouts; const std::unique_ptr<const IFresnelMap> m_fresnel_map; diff --git a/auto/Wrap/doxygenCore.i b/auto/Wrap/doxygenCore.i index a36e2f73cf5..152aecce61b 100644 --- a/auto/Wrap/doxygenCore.i +++ b/auto/Wrap/doxygenCore.i @@ -1842,7 +1842,7 @@ Computes the diffuse reflection from the rough interfaces of a multilayer. Used C++ includes: RoughMultiLayerContribution.h "; -%feature("docstring") RoughMultiLayerContribution::RoughMultiLayerContribution "RoughMultiLayerContribution::RoughMultiLayerContribution(const ProcessedSample *p_sample) +%feature("docstring") RoughMultiLayerContribution::RoughMultiLayerContribution "RoughMultiLayerContribution::RoughMultiLayerContribution(const ProcessedSample *re_sample) "; %feature("docstring") RoughMultiLayerContribution::compute "void RoughMultiLayerContribution::compute(DiffuseElement &ele) const diff --git a/auto/Wrap/doxygenResample.i b/auto/Wrap/doxygenResample.i index e6a82ab322a..f72bb0610a7 100644 --- a/auto/Wrap/doxygenResample.i +++ b/auto/Wrap/doxygenResample.i @@ -507,12 +507,6 @@ C++ includes: ProcessedSample.h %feature("docstring") ProcessedSample::fresnelMap "const IFresnelMap * ProcessedSample::fresnelMap() const "; -%feature("docstring") ProcessedSample::crossCorrelationLength "double ProcessedSample::crossCorrelationLength() const -"; - -%feature("docstring") ProcessedSample::externalField "const kvector_t & ProcessedSample::externalField() const -"; - %feature("docstring") ProcessedSample::sliceTopZ "double ProcessedSample::sliceTopZ(size_t i) const "; @@ -530,9 +524,6 @@ Contains magnetic material, or nonzero magnetic field. %feature("docstring") ProcessedSample::hasRoughness "bool ProcessedSample::hasRoughness() const "; -%feature("docstring") ProcessedSample::roughnessModel "const RoughnessModel& ProcessedSample::roughnessModel() const -"; - %feature("docstring") ProcessedSample::sample "const MultiLayer& ProcessedSample::sample() const "; -- GitLab