From 84de185a7004d6fce01aadfec665f5ceae0f7031 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de> Date: Fri, 13 Jan 2023 19:07:17 +0100 Subject: [PATCH] initialize m_cache in ISimulation --- Sim/Simulation/DepthprobeSimulation.cpp | 7 +++++-- Sim/Simulation/DepthprobeSimulation.h | 2 ++ Sim/Simulation/ISimulation.cpp | 1 + Sim/Simulation/ISimulation.h | 5 ++++- Sim/Simulation/OffspecSimulation.h | 6 +++++- Sim/Simulation/ScatteringSimulation.cpp | 2 -- Sim/Simulation/ScatteringSimulation.h | 5 +++++ Sim/Simulation/SpecularSimulation.cpp | 2 -- Sim/Simulation/SpecularSimulation.h | 5 +++++ 9 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Sim/Simulation/DepthprobeSimulation.cpp b/Sim/Simulation/DepthprobeSimulation.cpp index 47831935378..f211c361722 100644 --- a/Sim/Simulation/DepthprobeSimulation.cpp +++ b/Sim/Simulation/DepthprobeSimulation.cpp @@ -136,8 +136,6 @@ void DepthprobeSimulation::initElementVector() m_depth_eles.emplace_back(wavelength, -result_angle, zAxis(), alpha_limits.isInRange(result_angle)); } - - m_cache.resize(m_depth_eles.size() * zAxis()->size(), 0.); } std::unique_ptr<IComputation> @@ -201,6 +199,11 @@ size_t DepthprobeSimulation::numberOfElements() const return alphaAxis()->size(); } +size_t DepthprobeSimulation::nOutChannels() const +{ + return numberOfElements() * zAxis()->size(); +} + SimulationResult DepthprobeSimulation::packResult() { const std::vector<const IAxis*> axes{alphaAxis()->clone(), zAxis()->clone()}; diff --git a/Sim/Simulation/DepthprobeSimulation.h b/Sim/Simulation/DepthprobeSimulation.h index 5bf6adf4da4..26269d7e398 100644 --- a/Sim/Simulation/DepthprobeSimulation.h +++ b/Sim/Simulation/DepthprobeSimulation.h @@ -86,6 +86,8 @@ private: //! Returns the number of elements this simulation needs to calculate size_t numberOfElements() const override; + size_t nOutChannels() const override; + SimulationResult packResult() override; //! Checks the distribution validity for simulation. diff --git a/Sim/Simulation/ISimulation.cpp b/Sim/Simulation/ISimulation.cpp index 1809d28eb0f..72491a6709f 100644 --- a/Sim/Simulation/ISimulation.cpp +++ b/Sim/Simulation/ISimulation.cpp @@ -130,6 +130,7 @@ SimulationResult ISimulation::simulate() gsl_set_error_handler_off(); prepareSimulation(); + m_cache = std::vector<double>(nOutChannels(), 0.); const ReSample re_sample = ReSample::make(*m_sample, options(), force_polarized()); diff --git a/Sim/Simulation/ISimulation.h b/Sim/Simulation/ISimulation.h index f731c8bae10..eada5e6032f 100644 --- a/Sim/Simulation/ISimulation.h +++ b/Sim/Simulation/ISimulation.h @@ -118,9 +118,12 @@ private: //! Force polarized computation even in absence of sample magnetization or external fields virtual bool force_polarized() const = 0; - //! Gets the number of elements this simulation needs to calculate. + //! Returns the number of elements this simulation needs to calculate. virtual size_t numberOfElements() const = 0; + //! Returns the number of output channels to be computed. Determines size of m_cache. + virtual size_t nOutChannels() const = 0; + //! Returns simulation result, based on intensity held in elements vector. virtual SimulationResult packResult() = 0; diff --git a/Sim/Simulation/OffspecSimulation.h b/Sim/Simulation/OffspecSimulation.h index 33440508ad2..ca62a55f02f 100644 --- a/Sim/Simulation/OffspecSimulation.h +++ b/Sim/Simulation/OffspecSimulation.h @@ -87,9 +87,13 @@ private: //... Overridden getters: bool force_polarized() const override; - //! Returns the number of elements this simulation needs to calculate size_t numberOfElements() const override; + size_t nOutChannels() const override + { + return numberOfElements(); + } + SimulationResult packResult() override; //! Checks the distribution validity for simulation. diff --git a/Sim/Simulation/ScatteringSimulation.cpp b/Sim/Simulation/ScatteringSimulation.cpp index 36b62d0635c..3638908277c 100644 --- a/Sim/Simulation/ScatteringSimulation.cpp +++ b/Sim/Simulation/ScatteringSimulation.cpp @@ -117,8 +117,6 @@ void ScatteringSimulation::prepareSimulation() void ScatteringSimulation::initElementVector() { m_eles = generateElements(beam()); - - m_cache.resize(m_eles.size(), 0.0); } std::unique_ptr<IComputation> diff --git a/Sim/Simulation/ScatteringSimulation.h b/Sim/Simulation/ScatteringSimulation.h index 23405ddbf06..bcdb4cb74c1 100644 --- a/Sim/Simulation/ScatteringSimulation.h +++ b/Sim/Simulation/ScatteringSimulation.h @@ -94,6 +94,11 @@ private: //! Returns the number of elements this simulation needs to calculate size_t numberOfElements() const override; + size_t nOutChannels() const override + { + return numberOfElements(); + } + SimulationResult packResult() override; //... Local function: diff --git a/Sim/Simulation/SpecularSimulation.cpp b/Sim/Simulation/SpecularSimulation.cpp index 20476b86648..28202b1eaeb 100644 --- a/Sim/Simulation/SpecularSimulation.cpp +++ b/Sim/Simulation/SpecularSimulation.cpp @@ -48,8 +48,6 @@ const ICoordSystem* SpecularSimulation::simCoordSystem() const void SpecularSimulation::initElementVector() { m_eles = m_scan->generateElements(); - - m_cache.resize(m_eles.size(), 0); } std::unique_ptr<IComputation> SpecularSimulation::createComputation(const ReSample& re_sample, diff --git a/Sim/Simulation/SpecularSimulation.h b/Sim/Simulation/SpecularSimulation.h index bb375cd2b91..328ae45c657 100644 --- a/Sim/Simulation/SpecularSimulation.h +++ b/Sim/Simulation/SpecularSimulation.h @@ -64,6 +64,11 @@ private: //! Returns the number of elements this simulation needs to calculate size_t numberOfElements() const override; + size_t nOutChannels() const override + { + return numberOfElements(); + } + SimulationResult packResult() override; //! Checks the distribution validity for simulation. -- GitLab