From d6152fb480e89464a21528f395dac0924ef8392f Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Thu, 8 Jul 2021 17:32:42 +0200 Subject: [PATCH] merge setFlux and computeFF --- Resample/FFCompute/ComputeBA.cpp | 4 +++- Resample/FFCompute/ComputeBA.h | 4 +++- Resample/FFCompute/ComputeBAPol.cpp | 4 +++- Resample/FFCompute/ComputeBAPol.h | 4 +++- Resample/FFCompute/ComputeDWBA.cpp | 28 ++++++++++----------------- Resample/FFCompute/ComputeDWBA.h | 7 +++---- Resample/FFCompute/ComputeDWBAPol.cpp | 4 +++- Resample/FFCompute/ComputeDWBAPol.h | 4 +++- Resample/FFCompute/IComputeFF.cpp | 3 +-- Resample/FFCompute/IComputeFF.h | 4 +++- 10 files changed, 35 insertions(+), 31 deletions(-) diff --git a/Resample/FFCompute/ComputeBA.cpp b/Resample/FFCompute/ComputeBA.cpp index 182396945fd..d52c177c3c7 100644 --- a/Resample/FFCompute/ComputeBA.cpp +++ b/Resample/FFCompute/ComputeBA.cpp @@ -25,7 +25,9 @@ ComputeBA* ComputeBA::clone() const return new ComputeBA(*m_ff, m_iLayer); } -complex_t ComputeBA::computeFF(const WavevectorInfo& wavevectors) const +complex_t ComputeBA::computeFF(const WavevectorInfo& wavevectors, + const std::unique_ptr<const IFlux>&, + const std::unique_ptr<const IFlux>&) const { return m_ff->theFF(wavevectors); } diff --git a/Resample/FFCompute/ComputeBA.h b/Resample/FFCompute/ComputeBA.h index 27ffcbbe2a2..a74cc5ffc10 100644 --- a/Resample/FFCompute/ComputeBA.h +++ b/Resample/FFCompute/ComputeBA.h @@ -35,7 +35,9 @@ public: ComputeBA* clone() const override; //! Calculates and returns a form factor calculation in BA - complex_t computeFF(const WavevectorInfo& wavevectors) const override; + complex_t computeFF(const WavevectorInfo& wavevectors, + const std::unique_ptr<const IFlux>& inFlux, + const std::unique_ptr<const IFlux>& outFlux) const override; }; #endif // BORNAGAIN_RESAMPLE_FFCOMPUTE_COMPUTEBA_H diff --git a/Resample/FFCompute/ComputeBAPol.cpp b/Resample/FFCompute/ComputeBAPol.cpp index 44c6fe2f054..1e3184e9df1 100644 --- a/Resample/FFCompute/ComputeBAPol.cpp +++ b/Resample/FFCompute/ComputeBAPol.cpp @@ -25,7 +25,9 @@ ComputeBAPol* ComputeBAPol::clone() const return new ComputeBAPol(*m_ff, m_iLayer); } -complex_t ComputeBAPol::computeFF(const WavevectorInfo&) const +complex_t ComputeBAPol::computeFF(const WavevectorInfo&, + const std::unique_ptr<const IFlux>&, + const std::unique_ptr<const IFlux>&) const { throw std::runtime_error("ComputeBAPol::evaluate: " "should never be called for matrix interactions"); diff --git a/Resample/FFCompute/ComputeBAPol.h b/Resample/FFCompute/ComputeBAPol.h index 408e3009c97..d77f2dfd917 100644 --- a/Resample/FFCompute/ComputeBAPol.h +++ b/Resample/FFCompute/ComputeBAPol.h @@ -36,7 +36,9 @@ public: ComputeBAPol* clone() const override; //! Throws not-implemented exception - complex_t computeFF(const WavevectorInfo& wavevectors) const override; + complex_t computeFF(const WavevectorInfo& wavevectors, + const std::unique_ptr<const IFlux>& inFlux, + const std::unique_ptr<const IFlux>& outFlux) const override; //! Calculates and returns a polarized form factor calculation in BA Eigen::Matrix2cd computePolFF(const WavevectorInfo& wavevectors) const override; diff --git a/Resample/FFCompute/ComputeDWBA.cpp b/Resample/FFCompute/ComputeDWBA.cpp index f62687126cd..4567a0b2b2d 100644 --- a/Resample/FFCompute/ComputeDWBA.cpp +++ b/Resample/FFCompute/ComputeDWBA.cpp @@ -23,24 +23,22 @@ ComputeDWBA::~ComputeDWBA() = default; ComputeDWBA* ComputeDWBA::clone() const { - ComputeDWBA* result = new ComputeDWBA(*m_ff, m_iLayer); - auto in_coefs = std::unique_ptr<const IFlux>(m_inFlux ? m_inFlux->clone() : nullptr); - auto out_coefs = std::unique_ptr<const IFlux>(m_outFlux ? m_outFlux->clone() : nullptr); - result->setFlux(std::move(in_coefs), std::move(out_coefs)); - return result; + return new ComputeDWBA(*m_ff, m_iLayer); } -complex_t ComputeDWBA::computeFF(const WavevectorInfo& wavevectors) const +complex_t ComputeDWBA::computeFF(const WavevectorInfo& wavevectors, + const std::unique_ptr<const IFlux>& inFlux, + const std::unique_ptr<const IFlux>& outFlux) const { // Retrieve the two different incoming wavevectors in the layer cvector_t k_i_T = wavevectors.getKi(); - k_i_T.setZ(-m_inFlux->getScalarKz()); + k_i_T.setZ(-inFlux->getScalarKz()); cvector_t k_i_R = k_i_T; k_i_R.setZ(-k_i_T.z()); // Retrieve the two different outgoing wavevector bins in the layer cvector_t k_f_T = wavevectors.getKf(); - k_f_T.setZ(m_outFlux->getScalarKz()); + k_f_T.setZ(outFlux->getScalarKz()); cvector_t k_f_R = k_f_T; k_f_R.setZ(-k_f_T.z()); @@ -52,10 +50,10 @@ complex_t ComputeDWBA::computeFF(const WavevectorInfo& wavevectors) const WavevectorInfo k_RR(k_i_R, k_f_R, wavelength); // Get the four R,T coefficients - complex_t T_in = m_inFlux->getScalarT(); - complex_t R_in = m_inFlux->getScalarR(); - complex_t T_out = m_outFlux->getScalarT(); - complex_t R_out = m_outFlux->getScalarR(); + complex_t T_in = inFlux->getScalarT(); + complex_t R_in = inFlux->getScalarR(); + complex_t T_out = outFlux->getScalarT(); + complex_t R_out = outFlux->getScalarR(); // The four different scattering contributions; S stands for scattering // off the particle, R for reflection off the layer interface @@ -66,9 +64,3 @@ complex_t ComputeDWBA::computeFF(const WavevectorInfo& wavevectors) const return term_S + term_RS + term_SR + term_RSR; } - -void ComputeDWBA::setFlux(std::unique_ptr<const IFlux> inFlux, std::unique_ptr<const IFlux> outFlux) -{ - m_inFlux = std::move(inFlux); - m_outFlux = std::move(outFlux); -} diff --git a/Resample/FFCompute/ComputeDWBA.h b/Resample/FFCompute/ComputeDWBA.h index 108ae3b0c26..73936d9ad2d 100644 --- a/Resample/FFCompute/ComputeDWBA.h +++ b/Resample/FFCompute/ComputeDWBA.h @@ -37,10 +37,9 @@ public: ComputeDWBA* clone() const override; //! Returns the coherent sum of the four DWBA terms for scalar scattering. - complex_t computeFF(const WavevectorInfo& wavevectors) const override; - - void setFlux(std::unique_ptr<const IFlux> inFlux, - std::unique_ptr<const IFlux> outFlux) override; + complex_t computeFF(const WavevectorInfo& wavevectors, + const std::unique_ptr<const IFlux>& inFlux, + const std::unique_ptr<const IFlux>& outFlux) const override; friend class TestPolarizedDWBATerms; diff --git a/Resample/FFCompute/ComputeDWBAPol.cpp b/Resample/FFCompute/ComputeDWBAPol.cpp index d0be17ca072..bacc851fc1f 100644 --- a/Resample/FFCompute/ComputeDWBAPol.cpp +++ b/Resample/FFCompute/ComputeDWBAPol.cpp @@ -43,7 +43,9 @@ ComputeDWBAPol* ComputeDWBAPol::clone() const return result; } -complex_t ComputeDWBAPol::computeFF(const WavevectorInfo&) const +complex_t ComputeDWBAPol::computeFF(const WavevectorInfo&, + const std::unique_ptr<const IFlux>&, + const std::unique_ptr<const IFlux>&) const { throw std::runtime_error("Bug: forbidden call of ComputeDWBAPol::evaluate"); } diff --git a/Resample/FFCompute/ComputeDWBAPol.h b/Resample/FFCompute/ComputeDWBAPol.h index eeb05f46aa4..20144d2a0b7 100644 --- a/Resample/FFCompute/ComputeDWBAPol.h +++ b/Resample/FFCompute/ComputeDWBAPol.h @@ -37,7 +37,9 @@ public: ComputeDWBAPol* clone() const override; //! Throws not-implemented exception. - complex_t computeFF(const WavevectorInfo& wavevectors) const override; + complex_t computeFF(const WavevectorInfo& wavevectors, + const std::unique_ptr<const IFlux>& inFlux, + const std::unique_ptr<const IFlux>& outFlux) const override; //! Returns the coherent sum of the four DWBA terms for polarized scattering. Eigen::Matrix2cd computePolFF(const WavevectorInfo& wavevectors) const override; diff --git a/Resample/FFCompute/IComputeFF.cpp b/Resample/FFCompute/IComputeFF.cpp index e7301f36ddc..818317ab77e 100644 --- a/Resample/FFCompute/IComputeFF.cpp +++ b/Resample/FFCompute/IComputeFF.cpp @@ -60,8 +60,7 @@ complex_t IComputeFF::coherentFF(const SimulationElement& ele) ASSERT(fresnel_map); auto inFlux = fresnel_map->getInFlux(ele.getKi(), m_iLayer); auto outFlux = fresnel_map->getOutFlux(ele.getMeanKf(), m_iLayer); - setFlux(std::move(inFlux), std::move(outFlux)); - return computeFF({ele}); + return computeFF({ele}, inFlux, outFlux); } Eigen::Matrix2cd IComputeFF::coherentPolFF(const SimulationElement& ele) diff --git a/Resample/FFCompute/IComputeFF.h b/Resample/FFCompute/IComputeFF.h index 6d0cfffd2ca..c8e7e4e963c 100644 --- a/Resample/FFCompute/IComputeFF.h +++ b/Resample/FFCompute/IComputeFF.h @@ -48,7 +48,9 @@ public: virtual double radialExtension() const; virtual double bottomZ(const IRotation& rotation) const; virtual double topZ(const IRotation& rotation) const; - virtual complex_t computeFF(const WavevectorInfo& wavevectors) const = 0; + virtual complex_t computeFF(const WavevectorInfo& wavevectors, + const std::unique_ptr<const IFlux>& inFlux, + const std::unique_ptr<const IFlux>& outFlux) const = 0; //! Returns scattering amplitude for matrix interactions virtual Eigen::Matrix2cd computePolFF(const WavevectorInfo& wavevectors) const; //! Sets reflection/transmission info -- GitLab