From 5e867846caf0299c8aa3a65212e19fb0b73fd5b7 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Thu, 15 Jul 2021 21:19:31 +0200 Subject: [PATCH] DWBAComputation now passing Fluxes through ele - 1 MC test broken --- Base/Pixel/DiffuseElement.cpp | 12 ++++++++---- Base/Pixel/DiffuseElement.h | 9 ++++----- Core/Computation/DWBAComputation.cpp | 4 +--- Core/Contrib/GISASSpecularContribution.cpp | 7 +++---- Resample/FFCompute/IComputePol.cpp | 11 ++--------- Resample/FFCompute/IComputeScalar.cpp | 11 ++--------- auto/Wrap/doxygenBase.i | 9 ++++++--- 7 files changed, 26 insertions(+), 37 deletions(-) diff --git a/Base/Pixel/DiffuseElement.cpp b/Base/Pixel/DiffuseElement.cpp index a9adcc88443..5e130f80bb4 100644 --- a/Base/Pixel/DiffuseElement.cpp +++ b/Base/Pixel/DiffuseElement.cpp @@ -20,7 +20,8 @@ DiffuseElement::DiffuseElement(double wavelength, double alpha_i, double phi_i, std::unique_ptr<IPixel> pixel, const Eigen::Matrix2cd& beam_polarization, const Eigen::Matrix2cd& analyzer, bool isSpecular_, - const IFresnelMap* const fresnel_map) + const Fluxes* const fluxes_in, + const Fluxes* const fluxes_out ) : m_polarization(beam_polarization, analyzer) , m_wavelength(wavelength) , m_alpha_i(alpha_i) @@ -29,7 +30,8 @@ DiffuseElement::DiffuseElement(double wavelength, double alpha_i, double phi_i, , m_mean_kf(pixel->getK(0.5, 0.5, m_wavelength)) , m_pixel(std::move(pixel)) , m_is_specular(isSpecular_) - , m_fresnel_map(fresnel_map) + , m_fluxes_in(fluxes_in) + , m_fluxes_out(fluxes_out) , m_intensity(0.0) { } @@ -43,7 +45,8 @@ DiffuseElement::DiffuseElement(const DiffuseElement& other) , m_mean_kf(other.m_mean_kf) , m_pixel(std::move(other.m_pixel->clone())) , m_is_specular(other.m_is_specular) - , m_fresnel_map(other.m_fresnel_map) + , m_fluxes_in(other.m_fluxes_in) + , m_fluxes_out(other.m_fluxes_out) , m_intensity(other.m_intensity) { } @@ -65,7 +68,8 @@ DiffuseElement DiffuseElement::pointElement(double x, double y) const m_polarization.getPolarization(), m_polarization.getAnalyzerOperator(), m_is_specular, - m_fresnel_map}; + m_fluxes_in, + m_fluxes_out}; } kvector_t DiffuseElement::getKi() const diff --git a/Base/Pixel/DiffuseElement.h b/Base/Pixel/DiffuseElement.h index a043dbbdd04..017ceb40230 100644 --- a/Base/Pixel/DiffuseElement.h +++ b/Base/Pixel/DiffuseElement.h @@ -35,15 +35,15 @@ class DiffuseElement { public: DiffuseElement(double wavelength, double alpha_i, double phi_i, std::unique_ptr<IPixel> pixel, const Eigen::Matrix2cd& beam_polarization, const Eigen::Matrix2cd& analyzer, - bool isSpecular_, const IFresnelMap* const fresnel_map = nullptr); + bool isSpecular_, const Fluxes* const fluxes_in = nullptr, + const Fluxes* const fluxes_out = nullptr); DiffuseElement(const DiffuseElement& other); DiffuseElement& operator=(const DiffuseElement&) = delete; ~DiffuseElement(); - void setFresnelMap(const IFresnelMap* const fresnel_map) { m_fresnel_map = fresnel_map; } - const IFresnelMap* fresnelMap() const { return m_fresnel_map; } - void setFluxes(const Fluxes* fluxes_in, const Fluxes* fluxes_out); + const Fluxes& fluxesIn() const { return *m_fluxes_in; } + const Fluxes& fluxesOut() const { return *m_fluxes_out; } //! Returns copy of this DiffuseElement with k_f given by in-pixel coordinate x,y. DiffuseElement pointElement(double x, double y) const; @@ -85,7 +85,6 @@ private: const kvector_t m_mean_kf; //!< cached value of mean_kf const std::unique_ptr<IPixel> m_pixel; const bool m_is_specular; - const IFresnelMap* m_fresnel_map; const Fluxes* m_fluxes_in; const Fluxes* m_fluxes_out; double m_intensity; //!< simulated intensity for detector cell diff --git a/Core/Computation/DWBAComputation.cpp b/Core/Computation/DWBAComputation.cpp index 56a2d2cf565..58f8849efd4 100644 --- a/Core/Computation/DWBAComputation.cpp +++ b/Core/Computation/DWBAComputation.cpp @@ -72,11 +72,9 @@ void DWBAComputation::runProtected() DiffuseElement& ele = *it; const Fluxes fluxes_in = m_re_sample.fluxesIn(ele.getKi()); - const Fluxes fluxes_out = m_re_sample.fluxesOut(ele.getKi()); + const Fluxes fluxes_out = m_re_sample.fluxesOut(ele.getMeanKf()); ele.setFluxes(&fluxes_in, &fluxes_out); - ele.setFresnelMap(m_fresnel_map); - for (auto& contrib : m_layout_contribs) contrib->compute(ele); diff --git a/Core/Contrib/GISASSpecularContribution.cpp b/Core/Contrib/GISASSpecularContribution.cpp index 86c3e77ab7a..a9fe61906c4 100644 --- a/Core/Contrib/GISASSpecularContribution.cpp +++ b/Core/Contrib/GISASSpecularContribution.cpp @@ -16,7 +16,6 @@ #include "Base/Pixel/DiffuseElement.h" #include "Base/Utils/Assert.h" #include "Resample/Flux/IFlux.h" -#include "Resample/Fresnel/IFresnelMap.h" GISASSpecularContribution::GISASSpecularContribution() {} @@ -24,9 +23,9 @@ void GISASSpecularContribution::compute(DiffuseElement& ele) const { if (!ele.isSpecular()) return; - const IFresnelMap* const fresnel_map = ele.fresnelMap(); - ASSERT(fresnel_map); - complex_t R = fresnel_map->getInFlux(ele.getKi(), 0)->getScalarR(); + + complex_t R = ele.fluxesIn()[0]->getScalarR(); + double sin_alpha_i = std::abs(std::sin(ele.getAlphaI())); if (sin_alpha_i == 0.0) { ele.setIntensity(0); diff --git a/Resample/FFCompute/IComputePol.cpp b/Resample/FFCompute/IComputePol.cpp index 9cef066f2ee..41af81eb30c 100644 --- a/Resample/FFCompute/IComputePol.cpp +++ b/Resample/FFCompute/IComputePol.cpp @@ -14,17 +14,10 @@ #include "Resample/FFCompute/IComputePol.h" #include "Base/Pixel/DiffuseElement.h" -#include "Base/Utils/Assert.h" -#include "Resample/Flux/IFlux.h" // required by VS19 compiler -#include "Resample/Fresnel/IFresnelMap.h" +#include "Resample/Flux/IFlux.h" #include "Sample/Material/WavevectorInfo.h" - Eigen::Matrix2cd IComputePol::coherentPolFF(const DiffuseElement& ele) const { - const IFresnelMap* const fresnel_map = ele.fresnelMap(); - ASSERT(fresnel_map); - auto inFlux = fresnel_map->getInFlux(ele.getKi(), m_i_layer); - auto outFlux = fresnel_map->getOutFlux(ele.getMeanKf(), m_i_layer); - return computePolFF({ele}, inFlux, outFlux); + return computePolFF({ele}, ele.fluxesIn()[m_i_layer], ele.fluxesOut()[m_i_layer]); } diff --git a/Resample/FFCompute/IComputeScalar.cpp b/Resample/FFCompute/IComputeScalar.cpp index 8ff03958698..9b6caf732e7 100644 --- a/Resample/FFCompute/IComputeScalar.cpp +++ b/Resample/FFCompute/IComputeScalar.cpp @@ -14,17 +14,10 @@ #include "Resample/FFCompute/IComputeScalar.h" #include "Base/Pixel/DiffuseElement.h" -#include "Base/Utils/Assert.h" -#include "Resample/Flux/IFlux.h" // required by VS19 compiler -#include "Resample/Fresnel/IFresnelMap.h" +#include "Resample/Flux/IFlux.h" #include "Sample/Material/WavevectorInfo.h" - complex_t IComputeScalar::coherentFF(const DiffuseElement& ele) const { - const IFresnelMap* const fresnel_map = ele.fresnelMap(); - ASSERT(fresnel_map); - auto inFlux = fresnel_map->getInFlux(ele.getKi(), m_i_layer); - auto outFlux = fresnel_map->getOutFlux(ele.getMeanKf(), m_i_layer); - return computeFF({ele}, inFlux, outFlux); + return computeFF({ele}, ele.fluxesIn()[m_i_layer], ele.fluxesOut()[m_i_layer]); } diff --git a/auto/Wrap/doxygenBase.i b/auto/Wrap/doxygenBase.i index 8f843029010..60131dffb8b 100644 --- a/auto/Wrap/doxygenBase.i +++ b/auto/Wrap/doxygenBase.i @@ -394,7 +394,7 @@ Data stucture containing both input and output of a single detector cell. C++ includes: DiffuseElement.h "; -%feature("docstring") DiffuseElement::DiffuseElement "DiffuseElement::DiffuseElement(double wavelength, double alpha_i, double phi_i, std::unique_ptr< IPixel > pixel, const Eigen::Matrix2cd &beam_polarization, const Eigen::Matrix2cd &analyzer, bool isSpecular_, const IFresnelMap *const fresnel_map=nullptr) +%feature("docstring") DiffuseElement::DiffuseElement "DiffuseElement::DiffuseElement(double wavelength, double alpha_i, double phi_i, std::unique_ptr< IPixel > pixel, const Eigen::Matrix2cd &beam_polarization, const Eigen::Matrix2cd &analyzer, bool isSpecular_, const Fluxes *const fluxes_in=nullptr, const Fluxes *const fluxes_out=nullptr) "; %feature("docstring") DiffuseElement::DiffuseElement "DiffuseElement::DiffuseElement(const DiffuseElement &other) @@ -403,10 +403,13 @@ C++ includes: DiffuseElement.h %feature("docstring") DiffuseElement::~DiffuseElement "DiffuseElement::~DiffuseElement() "; -%feature("docstring") DiffuseElement::setFresnelMap "void DiffuseElement::setFresnelMap(const IFresnelMap *const fresnel_map) +%feature("docstring") DiffuseElement::setFluxes "void DiffuseElement::setFluxes(const Fluxes *fluxes_in, const Fluxes *fluxes_out) "; -%feature("docstring") DiffuseElement::fresnelMap "const IFresnelMap* DiffuseElement::fresnelMap() const +%feature("docstring") DiffuseElement::fluxesIn "const Fluxes& DiffuseElement::fluxesIn() const +"; + +%feature("docstring") DiffuseElement::fluxesOut "const Fluxes& DiffuseElement::fluxesOut() const "; %feature("docstring") DiffuseElement::pointElement "DiffuseElement DiffuseElement::pointElement(double x, double y) const -- GitLab