diff --git a/Core/Algorithms/MultiLayerDWBASimulation.cpp b/Core/Algorithms/MultiLayerDWBASimulation.cpp index a47edfd0f223b7d6ef678bdc14fc3bd75c111f38..95feb092b33ac9aaa9a83f1d8276678284253ac1 100644 --- a/Core/Algorithms/MultiLayerDWBASimulation.cpp +++ b/Core/Algorithms/MultiLayerDWBASimulation.cpp @@ -82,6 +82,10 @@ void MultiLayerDWBASimulation::run() } } +// The normalization of the calculated scattering intensities is: +// For nanoparticles: rho * (scattering cross-section/scattering particle) +// For roughness: (scattering cross-section of area S)/S +// This allows them to be added and normalized together to the beam afterwards void MultiLayerDWBASimulation::runProtected() { msglog(MSG::DEBUG2) << "MultiLayerDWBASimulation::runProtected()"; diff --git a/Core/Algorithms/MultiLayerRoughnessDWBASimulation.cpp b/Core/Algorithms/MultiLayerRoughnessDWBASimulation.cpp index 3fad7dd82f613d4018ca10a46874d86281f2870e..129f1e24bc55a51a8a92d37fdb1d3a8d70942dd6 100644 --- a/Core/Algorithms/MultiLayerRoughnessDWBASimulation.cpp +++ b/Core/Algorithms/MultiLayerRoughnessDWBASimulation.cpp @@ -91,9 +91,9 @@ double MultiLayerRoughnessDWBASimulation::evaluate(const SimulationElement& sim_ for(size_t j=0; j<mp_multi_layer->getNumberOfLayers()-1; j++){ for(size_t k=0; k<mp_multi_layer->getNumberOfLayers()-1; k++) { if(j==k) continue; - crosscorr += rterm[j]*sterm[j]*rterm[k]* + crosscorr += rterm[j]*sterm[j]* mp_multi_layer->getCrossCorrSpectralFun(q,j,k)* - std::conj(sterm[k]); + std::conj(rterm[k])*std::conj(sterm[k]); } } } @@ -114,18 +114,19 @@ complex_t MultiLayerRoughnessDWBASimulation::get_sum4terms(size_t ilayer, double wavelength = sim_element.getWavelength(); double alpha_i = sim_element.getAlphaI(); double alpha_f = sim_element.getAlphaMean(); - kvector_t k_i = sim_element.getKI(); - kvector_t k_f = sim_element.getMeanKF(); - complex_t qz1 = k_i.z() + k_f.z(); - complex_t qz2 = k_i.z() - k_f.z(); - complex_t qz3 = -k_i.z() + k_f.z(); - complex_t qz4 = -k_i.z() - k_f.z(); const std::unique_ptr<const ILayerRTCoefficients> P_in_coeff( mp_specular_info_vector[ilayer + 1]->getInCoefficients(alpha_i, 0.0, wavelength)); const std::unique_ptr<const ILayerRTCoefficients> P_out_coeff( mp_specular_info_vector[ilayer + 1]->getOutCoefficients(alpha_f, 0.0, wavelength)); + complex_t kiz = P_in_coeff->getScalarKz(); + complex_t kfz = P_out_coeff->getScalarKz(); + complex_t qz1 = kiz + kfz; + complex_t qz2 = kiz - kfz; + complex_t qz3 = -qz2; + complex_t qz4 = -qz1; + double sigma(0.0); if (const LayerRoughness *roughness = mp_multi_layer->getLayerBottomInterface(ilayer)->getRoughness()) { diff --git a/Core/StandardSamples/MesoCrystalBuilder.cpp b/Core/StandardSamples/MesoCrystalBuilder.cpp index c33b267153ed46cd8a14d04d68ee468cb1dbfd61..f0fdecde3a1cefb885238fada896e3b0994beacc 100644 --- a/Core/StandardSamples/MesoCrystalBuilder.cpp +++ b/Core/StandardSamples/MesoCrystalBuilder.cpp @@ -38,7 +38,7 @@ MesoCrystalBuilder::MesoCrystalBuilder() , m_sigma_meso_radius(1.3863e+00*Units::nanometer) , m_sigma_lattice_length_a(1.1601e+00*Units::nanometer) , m_surface_filling_ratio(1.7286e-01) -, m_roughness(2.8746e+01*Units::nanometer) +, m_roughness(12e+00*Units::nanometer) , m_nphi_rotations(2) { init_parameters(); @@ -109,7 +109,7 @@ ISample* MesoCrystalBuilder::buildSample() const n_particle_adapted, &ff_meso) ); P_meso->setPosition(0.0, 0.0, -m_meso_height); // particle_layout.addParticle(*P_meso, z_rotation); - particle_layout.addParticle(*P_meso, 1.0, kvector_t(0,0,0), z_rotation); + particle_layout.addParticle(*P_meso, 1.0, kvector_t(0.0, 0.0, 0.0), z_rotation); } } diff --git a/Tests/ReferenceData/BornAgain/mesocrystal01_reference.int.gz b/Tests/ReferenceData/BornAgain/mesocrystal01_reference.int.gz index df5bd1e074a0484bd517390febfd565277acc6d1..9153e0643aa9200cabc0d3e501fae6bdd670fbb3 100644 Binary files a/Tests/ReferenceData/BornAgain/mesocrystal01_reference.int.gz and b/Tests/ReferenceData/BornAgain/mesocrystal01_reference.int.gz differ diff --git a/Tests/ReferenceData/BornAgain/ref_MesoCrystal.int.gz b/Tests/ReferenceData/BornAgain/ref_MesoCrystal.int.gz index 8b652535207a579ec9d4e916a9d214938f927226..f0faf5a0ed2879d3eeb855440474ac5d9c882b33 100644 Binary files a/Tests/ReferenceData/BornAgain/ref_MesoCrystal.int.gz and b/Tests/ReferenceData/BornAgain/ref_MesoCrystal.int.gz differ diff --git a/Tests/ReferenceData/BornAgain/ref_MultiLayerWithRoughness.int.gz b/Tests/ReferenceData/BornAgain/ref_MultiLayerWithRoughness.int.gz index c89c9b634fc744a470bb39bb78894990b75cc7a5..33389c83c7cdb1edad8a1a06e02f3caee1aab219 100644 Binary files a/Tests/ReferenceData/BornAgain/ref_MultiLayerWithRoughness.int.gz and b/Tests/ReferenceData/BornAgain/ref_MultiLayerWithRoughness.int.gz differ diff --git a/Tests/ReferenceData/BornAgain/roughness01_reference.int.gz b/Tests/ReferenceData/BornAgain/roughness01_reference.int.gz index ab8a2f46ba6f9601af6e20f78e2709a987febb6e..331d4ac926d59da6339a371593f293fe9527878f 100644 Binary files a/Tests/ReferenceData/BornAgain/roughness01_reference.int.gz and b/Tests/ReferenceData/BornAgain/roughness01_reference.int.gz differ