diff --git a/Core/Computation/IComputationTerm.cpp b/Core/Computation/IComputationTerm.cpp index c459ee2264b13ad24b3225b0c20de315e3a9b92b..8cc7196a709b7c8753614feef9b3cc211c50a883 100644 --- a/Core/Computation/IComputationTerm.cpp +++ b/Core/Computation/IComputationTerm.cpp @@ -16,15 +16,11 @@ #include "IComputationTerm.h" -IComputationTerm::IComputationTerm(const MultiLayer* p_multilayer) +IComputationTerm::IComputationTerm(const MultiLayer* p_multilayer, + const ILayerSpecularInfo* p_fresnel_map) : mp_multilayer(p_multilayer) - , mp_fresnel_map(nullptr) + , mp_fresnel_map(p_fresnel_map) {} IComputationTerm::~IComputationTerm() {} - -void IComputationTerm::setSpecularInfo(const ILayerSpecularInfo* p_full_map) -{ - mp_fresnel_map = p_full_map; -} diff --git a/Core/Computation/IComputationTerm.h b/Core/Computation/IComputationTerm.h index 74ba09f736a82b95df3698502181e786103384ea..14b6d4b510ef125b43ce2cbf0bc12e14f21dda81 100644 --- a/Core/Computation/IComputationTerm.h +++ b/Core/Computation/IComputationTerm.h @@ -18,7 +18,6 @@ #include <vector> - class ILayerSpecularInfo; class MultiLayer; class ProgressHandler; @@ -33,12 +32,9 @@ class SimulationOptions; class IComputationTerm { public: - IComputationTerm(const MultiLayer* p_multilayer); + IComputationTerm(const MultiLayer* p_multilayer, const ILayerSpecularInfo* p_fresnel_map); virtual ~IComputationTerm(); - //! Sets magnetic reflection/transmission info for all layers - void setSpecularInfo(const ILayerSpecularInfo* p_full_map); - //! Calculate scattering intensity for each SimulationElement //! returns false if nothing needed to be calculated virtual bool eval(const SimulationOptions& options, diff --git a/Core/Computation/MainComputation.cpp b/Core/Computation/MainComputation.cpp index 1fd7ddd3e8e24b04f87a0f8fe28a74f43e1ec39e..ee14f38d6eb5f537367a73c0d71502ed555b8b06 100644 --- a/Core/Computation/MainComputation.cpp +++ b/Core/Computation/MainComputation.cpp @@ -47,15 +47,16 @@ MainComputation::MainComputation( const Layer* layer = mP_multi_layer->getLayer(i); for (size_t j=0; j<layer->getNumberOfLayouts(); ++j) m_computation_terms.push_back( - new ParticleLayoutComputation(mP_multi_layer.get(), + new ParticleLayoutComputation(mP_multi_layer.get(), mP_fresnel_map.get(), layer->getLayout(j), i)); } // scattering from rough surfaces in DWBA if (mP_multi_layer->hasRoughness()) - m_computation_terms.push_back(new RoughMultiLayerComputation(mP_multi_layer.get())); + m_computation_terms.push_back(new RoughMultiLayerComputation(mP_multi_layer.get(), + mP_fresnel_map.get())); if (m_sim_options.includeSpecular()) - m_computation_terms.push_back(new SpecularComputation(mP_multi_layer.get())); - passFresnelInfo(); + m_computation_terms.push_back(new SpecularComputation(mP_multi_layer.get(), + mP_fresnel_map.get())); } MainComputation::~MainComputation() @@ -96,13 +97,6 @@ void MainComputation::runProtected() } } -void MainComputation::passFresnelInfo() -{ - for (IComputationTerm* comp: m_computation_terms) { - comp->setSpecularInfo(mP_fresnel_map.get()); - } -} - ILayerSpecularInfo* MainComputation::createFresnelMap(const MultiLayer* p_multilayer, const MultiLayer* p_inverted_multilayer) { diff --git a/Core/Computation/MainComputation.h b/Core/Computation/MainComputation.h index c26d976ff53e8e623c8eaa65a25291ae65f19d1d..8c055a286f3a3dadeffe07af20ab33468b444dc9 100644 --- a/Core/Computation/MainComputation.h +++ b/Core/Computation/MainComputation.h @@ -54,7 +54,6 @@ public: private: void runProtected(); - void passFresnelInfo(); static ILayerSpecularInfo* createFresnelMap(const MultiLayer* p_multilayer, const MultiLayer* p_inverted_multilayer); diff --git a/Core/Computation/ParticleLayoutComputation.cpp b/Core/Computation/ParticleLayoutComputation.cpp index 597a64cba508e340434d525dab4a904caf8c158d..aa39fee13dc269bc7547ab6a747da55595fed2cb 100644 --- a/Core/Computation/ParticleLayoutComputation.cpp +++ b/Core/Computation/ParticleLayoutComputation.cpp @@ -25,8 +25,9 @@ #include "SimulationElement.h" ParticleLayoutComputation::ParticleLayoutComputation(const MultiLayer* p_multilayer, + const ILayerSpecularInfo* p_fresnel_map, const ILayout* p_layout, size_t layer_index) - : IComputationTerm(p_multilayer) + : IComputationTerm(p_multilayer, p_fresnel_map) , mp_layout(p_layout) , m_layer_index(layer_index) {} diff --git a/Core/Computation/ParticleLayoutComputation.h b/Core/Computation/ParticleLayoutComputation.h index 715f6c1d25995f84ae3ebf83c2a5bd37b2354e61..35f94b8d37a5523bd1e8048632daa9c311e204e8 100644 --- a/Core/Computation/ParticleLayoutComputation.h +++ b/Core/Computation/ParticleLayoutComputation.h @@ -29,8 +29,9 @@ class ILayout; class ParticleLayoutComputation final : public IComputationTerm { public: - ParticleLayoutComputation(const MultiLayer* p_multilayer, const ILayout* p_layout, - size_t layer_index); + ParticleLayoutComputation( + const MultiLayer* p_multilayer, const ILayerSpecularInfo* p_fresnel_map, + const ILayout* p_layout, size_t layer_index); bool eval(const SimulationOptions& options, ProgressHandler* progress, diff --git a/Core/Computation/RoughMultiLayerComputation.cpp b/Core/Computation/RoughMultiLayerComputation.cpp index fde554f2df9e7b82fd159e786c5cd5bbaa9dab85..3820f3cd87d20d5e97594723c4d0ac9d79e6c444 100644 --- a/Core/Computation/RoughMultiLayerComputation.cpp +++ b/Core/Computation/RoughMultiLayerComputation.cpp @@ -40,14 +40,13 @@ namespace { } } -RoughMultiLayerComputation::RoughMultiLayerComputation(const MultiLayer *p_multi_layer) - : IComputationTerm(p_multi_layer) -{ -} +RoughMultiLayerComputation::RoughMultiLayerComputation(const MultiLayer *p_multi_layer, + const ILayerSpecularInfo* p_fresnel_map) + : IComputationTerm(p_multi_layer, p_fresnel_map) +{} RoughMultiLayerComputation::~RoughMultiLayerComputation() -{ -} +{} bool RoughMultiLayerComputation::eval( const SimulationOptions&, ProgressHandler* progress, bool, diff --git a/Core/Computation/RoughMultiLayerComputation.h b/Core/Computation/RoughMultiLayerComputation.h index c54d014cbf454b93516ed3cea1c1b491bca63926..7bc027302b4c26522de6d7e27bcb2098ec3d4780 100644 --- a/Core/Computation/RoughMultiLayerComputation.h +++ b/Core/Computation/RoughMultiLayerComputation.h @@ -30,7 +30,8 @@ class SimulationElement; class RoughMultiLayerComputation final : public IComputationTerm { public: - RoughMultiLayerComputation(const MultiLayer* p_multi_layer); + RoughMultiLayerComputation(const MultiLayer* p_multi_layer, + const ILayerSpecularInfo* p_fresnel_map); ~RoughMultiLayerComputation(); bool eval(const SimulationOptions& options, diff --git a/Core/Computation/SpecularComputation.cpp b/Core/Computation/SpecularComputation.cpp index 25cae08d66a94b59e19a38f7d970932a1e5dd4f1..250372351bcf77fcbc6e57f343cb50909ec9f855 100644 --- a/Core/Computation/SpecularComputation.cpp +++ b/Core/Computation/SpecularComputation.cpp @@ -19,8 +19,9 @@ #include "ILayerRTCoefficients.h" #include "MultiLayer.h" -SpecularComputation::SpecularComputation(const MultiLayer* p_multi_layer) - : IComputationTerm(p_multi_layer) +SpecularComputation::SpecularComputation(const MultiLayer* p_multi_layer, + const ILayerSpecularInfo* p_fresnel_map) + : IComputationTerm(p_multi_layer, p_fresnel_map) {} bool SpecularComputation::eval( diff --git a/Core/Computation/SpecularComputation.h b/Core/Computation/SpecularComputation.h index 688f14b730bc816cdf8bd59b879e5f7a740f3ed4..e74ac0cb2192c8d3c1a9d8949cf40ac845f37595 100644 --- a/Core/Computation/SpecularComputation.h +++ b/Core/Computation/SpecularComputation.h @@ -25,7 +25,7 @@ class SpecularComputation final : public IComputationTerm { public: - SpecularComputation(const MultiLayer* p_multi_layer); + SpecularComputation(const MultiLayer* p_multi_layer, const ILayerSpecularInfo* p_fresnel_map); bool eval(const SimulationOptions& options, ProgressHandler* progress,