diff --git a/Core/Computation/RoughMultiLayerComputation.cpp b/Core/Computation/RoughMultiLayerComputation.cpp index 8e1c71d5242c15e43a7f63186b06bf4ca87f55c1..681880e63022c43d902bc6700b64e443c51482ba 100644 --- a/Core/Computation/RoughMultiLayerComputation.cpp +++ b/Core/Computation/RoughMultiLayerComputation.cpp @@ -77,7 +77,7 @@ double RoughMultiLayerComputation::evaluate(const SimulationElement& sim_element std::vector<complex_t > sterm( mp_multilayer->numberOfLayers()-1 ); for (size_t i=0; i<mp_multilayer->numberOfLayers()-1; i++){ - rterm[i] = get_refractive_term(i); + rterm[i] = get_refractive_term(i, wavelength); sterm[i] = get_sum8terms(i, sim_element); } @@ -104,10 +104,10 @@ double RoughMultiLayerComputation::evaluate(const SimulationElement& sim_element return (autocorr+crosscorr.real())*M_PI/4./wavelength/wavelength; } -complex_t RoughMultiLayerComputation::get_refractive_term(size_t ilayer) const +complex_t RoughMultiLayerComputation::get_refractive_term(size_t ilayer, double wavelength) const { - return mp_multilayer->layer(ilayer )->refractiveIndex2() - - mp_multilayer->layer(ilayer+1)->refractiveIndex2(); + return mp_multilayer->layer(ilayer )->material()->refractiveIndex2(wavelength) - + mp_multilayer->layer(ilayer+1)->material()->refractiveIndex2(wavelength); } complex_t RoughMultiLayerComputation::get_sum8terms( diff --git a/Core/Computation/RoughMultiLayerComputation.h b/Core/Computation/RoughMultiLayerComputation.h index d2223ea0ec4bbd6dfb7e7cfc692cc663c941cd8d..3d869ce3d36175424cfa6ba1545e5ec44091545d 100644 --- a/Core/Computation/RoughMultiLayerComputation.h +++ b/Core/Computation/RoughMultiLayerComputation.h @@ -40,7 +40,7 @@ public: private: double evaluate(const SimulationElement& sim_element) const; - complex_t get_refractive_term(size_t ilayer) const; + complex_t get_refractive_term(size_t ilayer, double wavelength) const; complex_t get_sum8terms(size_t ilayer, const SimulationElement& sim_element) const; }; diff --git a/Core/Multilayer/Layer.cpp b/Core/Multilayer/Layer.cpp index f3c8acf9ee734205ca115e17133623e30f376193..2369397c5c2c39dee081515cb6f9a1c7e201a06f 100644 --- a/Core/Multilayer/Layer.cpp +++ b/Core/Multilayer/Layer.cpp @@ -65,16 +65,6 @@ void Layer::setMaterial(HomogeneousMaterial material) m_material = std::move(material); } -complex_t Layer::refractiveIndex() const -{ - return m_material.refractiveIndex(); -} - -complex_t Layer::refractiveIndex2() const -{ - return m_material.refractiveIndex2(); -} - void Layer::addLayout(const ILayout& layout) { ILayout* clone = layout.clone(); @@ -153,13 +143,13 @@ SafePointerVector<Layer> Layer::slice(ZLimits limits, Layer::ELayerType layer_ty complex_t Layer::scalarReducedPotential(kvector_t k, double n_ref) const { - complex_t n = m_material.refractiveIndex(); + complex_t n = m_material.refractiveIndex(2.0 * M_PI / k.mag()); return ScalarReducedPotential(n, k, n_ref); } Eigen::Matrix2cd Layer::polarizedReducedPotential(kvector_t k, double n_ref) const { - complex_t n = m_material.refractiveIndex(); + complex_t n = m_material.refractiveIndex(2.0 * M_PI / k.mag()); kvector_t b_field = bField(); return PolarizedReducedPotential(n, b_field, k, n_ref); } diff --git a/Core/Multilayer/Layer.h b/Core/Multilayer/Layer.h index 153e9f370191491650127b0912f43b6b87fb392a..d2c5fdfada2ffc2139fd51896b126288ad9d0540 100644 --- a/Core/Multilayer/Layer.h +++ b/Core/Multilayer/Layer.h @@ -51,9 +51,6 @@ public: const HomogeneousMaterial* material() const override final { return &m_material; } void setMaterial(HomogeneousMaterial material); - complex_t refractiveIndex() const; - complex_t refractiveIndex2() const; //!< squared refractive index - void addLayout(const ILayout& decoration); size_t numberOfLayouts() const { return m_layouts.size(); } std::vector<const ILayout*> layouts() const; diff --git a/Core/Multilayer/SpecularMagnetic.cpp b/Core/Multilayer/SpecularMagnetic.cpp index 74733e328e7750fceb75bd06951691ee6f44af76..a7c34dc402e78cc26434eda789c090b5c01b17c5 100644 --- a/Core/Multilayer/SpecularMagnetic.cpp +++ b/Core/Multilayer/SpecularMagnetic.cpp @@ -40,7 +40,7 @@ void SpecularMagnetic::calculateEigenvalues( const MultiLayer& sample, const kvector_t k, std::vector<MatrixRTCoefficients>& coeff) { double mag_k = k.mag(); - double n_ref = sample.layer(0)->refractiveIndex().real(); + double n_ref = sample.layer(0)->material()->refractiveIndex(2 * M_PI / mag_k).real(); double sign_kz = k.z() > 0.0 ? -1.0 : 1.0; for(size_t i=0; i<coeff.size(); ++i) { coeff[i].m_scatt_matrix = sample.layer(i)->polarizedReducedPotential(k, n_ref); diff --git a/Core/Multilayer/SpecularMatrix.cpp b/Core/Multilayer/SpecularMatrix.cpp index d28508fc1d9371ae48e3fdbda2c1887e4ac6fb8a..66c881077740c81aa074f0ef5a9bec92760ad24e 100644 --- a/Core/Multilayer/SpecularMatrix.cpp +++ b/Core/Multilayer/SpecularMatrix.cpp @@ -49,7 +49,7 @@ void SpecularMatrix::execute(const MultiLayer& sample, const kvector_t k, coeff.clear(); coeff.resize(N); - double n_ref = sample.layer(0)->refractiveIndex().real(); + double n_ref = sample.layer(0)->material()->refractiveIndex(2 * M_PI / k.mag()).real(); // Calculate refraction angle, expressed as lambda or k_z, for each layer. double sign_kz_out = k.z() > 0.0 ? -1.0 : 1.0; diff --git a/Tests/UnitTests/Core/Sample/LayerTest.h b/Tests/UnitTests/Core/Sample/LayerTest.h index 2f1973bb723976db60da50b3259d0d9375318334..5779f8fa9c48e88802250ac21ac0f9b32bfbf7fb 100644 --- a/Tests/UnitTests/Core/Sample/LayerTest.h +++ b/Tests/UnitTests/Core/Sample/LayerTest.h @@ -13,26 +13,23 @@ class LayerTest : public ::testing::Test TEST_F(LayerTest, LayerGetAndSet) { HomogeneousMaterial air("air",0,0); - Layer layer(air, 10*Units::nanometer); - EXPECT_EQ(air.getName(), layer.material()->getName()); + EXPECT_EQ(air, *layer.material()); EXPECT_EQ(0u, layer.layouts().size()); EXPECT_EQ(10, layer.thickness()); EXPECT_EQ(layer.numberOfLayouts(), 0u); - EXPECT_EQ(complex_t(1, 0), layer.refractiveIndex()); EXPECT_EQ(BornAgain::LayerType, layer.getName()); layer.setThickness(20.0); + EXPECT_EQ(air, *layer.material()); EXPECT_EQ(20, layer.thickness()); EXPECT_EQ(BornAgain::LayerType, layer.getName()); - EXPECT_EQ(complex_t(1, 0), layer.refractiveIndex()); std::unique_ptr<Layer> clone(layer.clone()); - EXPECT_EQ(air.getName(), clone->material()->getName()); + EXPECT_EQ(air, *clone->material()); EXPECT_EQ(0u, clone->layouts().size()); EXPECT_EQ(20, clone->thickness()); EXPECT_EQ(clone->numberOfLayouts(), 0u); - EXPECT_EQ(complex_t(1, 0), clone->refractiveIndex()); EXPECT_EQ(BornAgain::LayerType, clone->getName()); }