From 3c05f2f7e8a08f0b993c4b1c3394234ec1a20846 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Mon, 23 Sep 2024 17:32:12 +0200 Subject: [PATCH] remove AddLayerWithTopRoughness and upd everything --- GUI/Model/FromCore/ItemizeSample.cpp | 13 +- GUI/Model/ToCore/SampleToCore.cpp | 44 +++-- GUI/View/Realspace/RealspaceBuilder.cpp | 16 +- Resample/Processed/ReSample.cpp | 11 +- Sample/Interface/LayerInterface.cpp | 40 ----- Sample/Interface/LayerInterface.h | 53 ------- Sample/Interface/RoughnessMap.cpp | 14 +- Sample/Interface/RoughnessMap.h | 4 +- Sample/Multilayer/Layer.cpp | 9 +- Sample/Multilayer/Layer.h | 1 + Sample/Multilayer/MultiLayer.cpp | 103 ++++-------- Sample/Multilayer/MultiLayer.h | 23 +-- Sample/StandardSample/CylindersBuilder.cpp | 1 - Sample/StandardSample/FeNiBilayerBuilder.cpp | 12 +- .../HomogeneousMultilayerBuilder.cpp | 4 +- .../StandardSample/MagneticLayersBuilder.cpp | 9 +- .../MagneticParticlesBuilder.cpp | 1 - .../MultiLayerWithRoughnessBuilder.cpp | 16 +- Sample/StandardSample/ResonatorBuilder.cpp | 24 +-- .../ThickAbsorptiveSampleBuilder.cpp | 12 +- .../RoughMultiLayerContribution.cpp | 1 - Sim/Export/SampleToPython.cpp | 16 +- Tests/Unit/Resample/RTTest.cpp | 5 +- Tests/Unit/Sample/MultiLayerTest.cpp | 123 ++++++-------- Wrap/Swig/libBornAgainSample.i | 1 - auto/Examples/fit/scatter2d/expfit_galaxi.py | 8 +- .../Examples/fit/scatter2d/hardcode_galaxi.py | 8 +- auto/Examples/fit/specular/Honeycomb_fit.py | 25 +-- .../fit/specular/PolarizedSpinAsymmetry.py | 12 +- auto/Examples/fit/specular/Pt_layer_fit.py | 13 +- auto/Examples/fit/specular/TREFF_Ni_film.py | 11 +- .../Examples/scatter2d/CorrelatedRoughness.py | 19 +-- auto/Examples/scatter2d/FindPeaks.py | 12 +- auto/Examples/scatter2d/RectangularGrating.py | 12 +- auto/Examples/scatter2d/RoughAndSpecular.py | 8 +- .../specular/MagneticLayerImperfect.py | 18 +-- .../specular/PolarizedSpinAsymmetry.py | 12 +- auto/Examples/specular/RoughnessModel.py | 18 +-- .../SpecularSimulationWithRoughness.py | 19 +-- auto/Examples/varia/MaterialProfile.py | 17 +- auto/Examples/varia/RoughSurface.py | 14 +- .../fit/scatter2d/expfit_galaxi.py | 8 +- .../fit/scatter2d/hardcode_galaxi.py | 8 +- .../FigExamples/fit/specular/Honeycomb_fit.py | 25 +-- .../fit/specular/PolarizedSpinAsymmetry.py | 12 +- auto/FigExamples/fit/specular/Pt_layer_fit.py | 13 +- .../FigExamples/fit/specular/TREFF_Ni_film.py | 11 +- .../scatter2d/CorrelatedRoughness.py | 19 +-- auto/FigExamples/scatter2d/FindPeaks.py | 12 +- .../scatter2d/RectangularGrating.py | 12 +- .../FigExamples/scatter2d/RoughAndSpecular.py | 8 +- .../specular/MagneticLayerImperfect.py | 18 +-- .../specular/PolarizedSpinAsymmetry.py | 12 +- auto/FigExamples/specular/RoughnessModel.py | 18 +-- .../SpecularSimulationWithRoughness.py | 19 +-- auto/FigExamples/varia/MaterialProfile.py | 17 +- auto/FigExamples/varia/RoughSurface.py | 14 +- .../fit/scatter2d/expfit_galaxi.py | 8 +- .../fit/scatter2d/hardcode_galaxi.py | 8 +- .../fit/specular/Honeycomb_fit.py | 25 +-- .../fit/specular/PolarizedSpinAsymmetry.py | 12 +- .../MiniExamples/fit/specular/Pt_layer_fit.py | 13 +- .../fit/specular/TREFF_Ni_film.py | 11 +- .../scatter2d/CorrelatedRoughness.py | 19 +-- auto/MiniExamples/scatter2d/FindPeaks.py | 12 +- .../scatter2d/RectangularGrating.py | 12 +- .../scatter2d/RoughAndSpecular.py | 8 +- .../specular/MagneticLayerImperfect.py | 18 +-- .../specular/PolarizedSpinAsymmetry.py | 12 +- auto/MiniExamples/specular/RoughnessModel.py | 18 +-- .../SpecularSimulationWithRoughness.py | 19 +-- auto/MiniExamples/varia/MaterialProfile.py | 17 +- auto/MiniExamples/varia/RoughSurface.py | 14 +- auto/Wrap/libBornAgainSample.py | 37 +++-- auto/Wrap/libBornAgainSample_wrap.cpp | 150 +++++++++--------- rawEx/fit/scatter2d/expfit_galaxi.py | 8 +- rawEx/fit/scatter2d/hardcode_galaxi.py | 8 +- rawEx/fit/specular/Honeycomb_fit.py | 25 +-- rawEx/fit/specular/PolarizedSpinAsymmetry.py | 12 +- rawEx/fit/specular/Pt_layer_fit.py | 13 +- rawEx/fit/specular/TREFF_Ni_film.py | 11 +- rawEx/scatter2d/CorrelatedRoughness.py | 19 +-- rawEx/scatter2d/FindPeaks.py | 12 +- rawEx/scatter2d/RectangularGrating.py | 12 +- rawEx/scatter2d/RoughAndSpecular.py | 8 +- rawEx/specular/MagneticLayerImperfect.py | 18 +-- rawEx/specular/PolarizedSpinAsymmetry.py | 12 +- rawEx/specular/RoughnessModel.py | 18 +-- .../SpecularSimulationWithRoughness.py | 19 +-- rawEx/varia/MaterialProfile.py | 17 +- rawEx/varia/RoughSurface.py | 14 +- 91 files changed, 742 insertions(+), 905 deletions(-) delete mode 100644 Sample/Interface/LayerInterface.cpp delete mode 100644 Sample/Interface/LayerInterface.h diff --git a/GUI/Model/FromCore/ItemizeSample.cpp b/GUI/Model/FromCore/ItemizeSample.cpp index 8bf1f3a8c10..162c3008fd6 100644 --- a/GUI/Model/FromCore/ItemizeSample.cpp +++ b/GUI/Model/FromCore/ItemizeSample.cpp @@ -27,7 +27,6 @@ #include "Sample/Aggregate/Interferences.h" #include "Sample/Aggregate/ParticleLayout.h" #include "Sample/HardParticle/HardParticles.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Multilayer/Layer.h" #include "Sample/Multilayer/MultiLayer.h" @@ -302,15 +301,13 @@ void set_CrosscorrelationModel(RoughnessItem* parent, const CrosscorrelationMode cd->baseCrossCorrDepth(), cd->baseSpatialFrequency(), cd->power())); } -void set_Roughness(LayerItem* parent, const LayerInterface* top_interface) +void set_Roughness(LayerItem* parent, const LayerRoughness* roughness) { - if (!top_interface) { + if (!roughness) { parent->roughnessSelection().setCertainItem(nullptr); return; } - const LayerRoughness* roughness = top_interface->roughness(); - if (!roughness->showInScriptOrGui()) { parent->roughnessSelection().setCertainItem(nullptr); return; @@ -656,15 +653,15 @@ SampleItem* itemizeSample(const MultiLayer& sample, const QString& nodeName) for (size_t layerIndex = 0; layerIndex < sample.numberOfLayers(); layerIndex++) { const auto* layer = sample.layer(layerIndex); - const LayerInterface* top_interface = - layerIndex == 0 ? nullptr : sample.layerInterface(layerIndex - 1); + const LayerRoughness* top_roughness = + layerIndex == 0 ? nullptr : sample.layerRoughness(layerIndex); auto* layerItem = result->createLayerItemAt(); layerItem->setMaterial(findMaterialItem(matItems, layer)); layerItem->thickness().setDVal(layer->thickness()); layerItem->setNumSlices(layer->numberOfSlices()); - set_Roughness(layerItem, top_interface); + set_Roughness(layerItem, top_roughness); // iterate over particle layouts for (const auto* layout : layer->layouts()) { diff --git a/GUI/Model/ToCore/SampleToCore.cpp b/GUI/Model/ToCore/SampleToCore.cpp index f500e50c284..f969129ad21 100644 --- a/GUI/Model/ToCore/SampleToCore.cpp +++ b/GUI/Model/ToCore/SampleToCore.cpp @@ -47,9 +47,26 @@ std::unique_ptr<MultiLayer> createMultiLayer(const SampleItem& item) std::unique_ptr<Layer> createLayer(const LayerItem& item) { + const RoughnessItem* roughItem = item.certainRoughness(); + std::unique_ptr<LayerRoughness> roughness; + if (!item.isTopLayer() && roughItem) { + std::unique_ptr<AutocorrelationModel> autocorrelation = roughItem->createModel(); + + std::unique_ptr<InterlayerModel> interlayer = + roughItem->certainInterlayerModel()->createModel(); + + std::unique_ptr<CrosscorrelationModel> crosscorrelation; + if (!item.isBottomLayer() && !dynamic_cast<LinearGrowthModel*>(autocorrelation.get())) + if (const auto* item = roughItem->certainCrosscorrModel()) + crosscorrelation = item->createModel(); + + roughness = std::make_unique<LayerRoughness>(autocorrelation.get(), interlayer.get(), + crosscorrelation.get()); + } const bool isFirstOrLastLayer = item.isTopLayer() || item.isBottomLayer(); auto layer = std::make_unique<Layer>(*item.materialItem()->createMaterial(), - isFirstOrLastLayer ? 0.0 : item.thickness().dVal()); + isFirstOrLastLayer ? 0.0 : item.thickness().dVal(), + roughness.get()); layer->setNumberOfSlices(item.numSlices()); return layer; } @@ -108,28 +125,7 @@ std::unique_ptr<Layer> buildLayer(const LayerItem& item) std::unique_ptr<MultiLayer> GUI::ToCore::itemToSample(const SampleItem& sampleItem) { auto sample = createMultiLayer(sampleItem); - for (auto* layerItem : sampleItem.layerItems()) { - auto layer = buildLayer(*layerItem); - ASSERT(layer); - - const RoughnessItem* roughItem = layerItem->certainRoughness(); - if (layerItem->isTopLayer() || !roughItem) { - sample->addLayer(*layer); - continue; - } - - std::unique_ptr<AutocorrelationModel> autocorrelation = roughItem->createModel(); - - std::unique_ptr<InterlayerModel> interlayer = - roughItem->certainInterlayerModel()->createModel(); - - std::unique_ptr<CrosscorrelationModel> crosscorrelation; - if (!layerItem->isBottomLayer() && !dynamic_cast<LinearGrowthModel*>(autocorrelation.get())) - if (const auto* item = roughItem->certainCrosscorrModel()) - crosscorrelation = item->createModel(); - - LayerRoughness roughness(autocorrelation.get(), interlayer.get(), crosscorrelation.get()); - sample->addLayerWithTopRoughness(*layer, roughness); - } + for (auto* layerItem : sampleItem.layerItems()) + sample->addLayer(*buildLayer(*layerItem)); return sample; } diff --git a/GUI/View/Realspace/RealspaceBuilder.cpp b/GUI/View/Realspace/RealspaceBuilder.cpp index 77505cb4261..69ae6488925 100644 --- a/GUI/View/Realspace/RealspaceBuilder.cpp +++ b/GUI/View/Realspace/RealspaceBuilder.cpp @@ -92,17 +92,16 @@ std::unique_ptr<double2d_t> scaledArray(const double2d_t& src, double factor) [&src, factor](size_t i, size_t j) { return src[i][j] * factor; })); } -std::unique_ptr<const double2d_t> layerRoughnessMap(const MultiLayer& sample, int i_interface, +std::unique_ptr<const double2d_t> layerRoughnessMap(const MultiLayer& sample, int i_layer, const SceneGeometry& sceneGeometry, int seed) { - if (i_interface < 0 || i_interface >= int(sample.numberOfInterfaces()) - || sample.layerInterfaceRMS(i_interface) == 0) + if (i_layer < 1 || i_layer >= int(sample.numberOfLayers()) + || sample.layerRoughnessRMS(i_layer) == 0) return nullptr; int n = sceneGeometry.numRoughnessPointsAlongAxis; double L = 2 * sceneGeometry.layerSize; - auto rmap = - RoughnessMap(n, n, L, L, sample, i_interface, seed); // seed < 0 ==> random every time + auto rmap = RoughnessMap(n, n, L, L, sample, i_layer, seed); // seed < 0 ==> random every time return std::make_unique<const double2d_t>(rmap.generateMap()); } @@ -176,7 +175,7 @@ void RealspaceBuilder::populateSample(Model* model, const SampleItem& sampleItem rough_maps.push_back(nullptr); // top interface of fronting for (size_t i = 1; i < layers.size(); i++) rough_maps.push_back( - ::layerRoughnessMap(*sample, i - 1, sceneGeometry, layers[i]->roughnessSeed).release()); + ::layerRoughnessMap(*sample, i, sceneGeometry, layers[i]->roughnessSeed).release()); rough_maps.push_back(nullptr); // bottom interface of substrate for (size_t i = 0; i < layers.size(); i++) { @@ -203,14 +202,13 @@ void RealspaceBuilder::populateLayer(Model* model, const LayerItem& layerItem, // individual layer visualization if (!topRoughMap && !bottomRoughMap) { std::unique_ptr<MultiLayer> sample = GUI::ToCore::itemToSample(sampleItem); - const int i_interface = i_layer - 1; auto new_topRoughMap = - ::layerRoughnessMap(*sample, i_interface, sceneGeometry, layerItem.roughnessSeed); + ::layerRoughnessMap(*sample, i_layer, sceneGeometry, layerItem.roughnessSeed); std::unique_ptr<const double2d_t> new_bottomRoughMap; if (i_layer + 1 < int(sampleItem.layerItems().size())) { const LayerItem* layerItemBelow = sampleItem.layerItems()[i_layer + 1]; - new_bottomRoughMap = ::layerRoughnessMap(*sample, i_interface + 1, sceneGeometry, + new_bottomRoughMap = ::layerRoughnessMap(*sample, i_layer + 1, sceneGeometry, layerItemBelow->roughnessSeed); } layer = ::createLayer(layerItem, sampleItem, sceneGeometry, origin, new_topRoughMap.get(), diff --git a/Resample/Processed/ReSample.cpp b/Resample/Processed/ReSample.cpp index 9a8a71b01b5..1786228a1a3 100644 --- a/Resample/Processed/ReSample.cpp +++ b/Resample/Processed/ReSample.cpp @@ -25,7 +25,6 @@ #include "Resample/Specular/ComputeFluxScalar.h" #include "Sample/Aggregate/IInterference.h" #include "Sample/Aggregate/ParticleLayout.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Material/MaterialBySLDImpl.h" #include "Sample/Material/MaterialUtil.h" @@ -82,11 +81,11 @@ std::vector<ZLimits> particleSpans(const MultiLayer& sample) } //! Returns top roughness of layer -const LayerRoughness* layerTopRoughness(const MultiLayer& sample, size_t i) +const LayerRoughness* layerTopRoughness(const MultiLayer& sample, size_t i_layer) { - if (i == 0) + if (i_layer == 0) return nullptr; - return sample.layerInterface(i - 1)->roughness(); + return sample.layerRoughness(i_layer); } //! Returns a vector of slices that represent the layer structure of the sample. @@ -122,7 +121,7 @@ SliceStack slicify(const MultiLayer& sample, bool useAvgMaterials) if (i == nLayers - 1) ASSERT(tl == 0); const LayerRoughness* roughness = layerTopRoughness(sample, i); - const double rms = sample.layerInterfaceRMS(i - 1); + const double rms = sample.layerRoughnessRMS(i); result.addSlice(tl, *material, roughness, rms); } } @@ -137,7 +136,7 @@ SliceStack slicify(const MultiLayer& sample, bool useAvgMaterials) const Material* const material = layer->material(); const ZLimits& particle_span = particle_spans[i]; const LayerRoughness* roughness = layerTopRoughness(sample, i); - const double rms = (i >= 1) ? sample.layerInterfaceRMS(i - 1) : 0.0; + const double rms = sample.layerRoughnessRMS(i); // if no slicing is needed, create single slice for the layer if (!particle_span.isFinite()) { // also if layer contains no particles diff --git a/Sample/Interface/LayerInterface.cpp b/Sample/Interface/LayerInterface.cpp deleted file mode 100644 index c8ddcd2f93a..00000000000 --- a/Sample/Interface/LayerInterface.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file Sample/Interface/LayerInterface.cpp -//! @brief Implements class LayerInterface. -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#include "Sample/Interface/LayerInterface.h" -#include "Base/Util/Assert.h" -#include "Sample/Interface/LayerRoughness.h" - -LayerInterface::LayerInterface(const LayerRoughness* layerRoughness) - : m_roughness(layerRoughness) -{ - ASSERT(layerRoughness); -} - -LayerInterface::~LayerInterface() = default; - -LayerInterface* LayerInterface::clone() const -{ - throw std::runtime_error("LayerInterface::clone -> Not allowed to clone."); -} - -std::vector<const INode*> LayerInterface::nodeChildren() const -{ - return std::vector<const INode*>() << m_roughness; -} - -std::string LayerInterface::validate() const -{ - return ""; -} diff --git a/Sample/Interface/LayerInterface.h b/Sample/Interface/LayerInterface.h deleted file mode 100644 index 98cff49c57a..00000000000 --- a/Sample/Interface/LayerInterface.h +++ /dev/null @@ -1,53 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file Sample/Interface/LayerInterface.h -//! @brief Defines class LayerInterface. -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#ifdef SWIG -#error no need to expose this header to Swig -#endif // SWIG -#ifndef BORNAGAIN_SAMPLE_INTERFACE_LAYERINTERFACE_H -#define BORNAGAIN_SAMPLE_INTERFACE_LAYERINTERFACE_H - -#include "Sample/Scattering/ISampleNode.h" -#include <memory> - -class Layer; -class LayerRoughness; - -//! Interface between two layers, always with roughness. - -class LayerInterface : public ISampleNode { -public: - LayerInterface(const LayerRoughness* layerRoughness); - ~LayerInterface() override; - - LayerInterface* clone() const override; - std::string className() const final { return "LayerInterface"; } - - //! Returns roughness of the interface. - const LayerRoughness* roughness() const; - - std::vector<const INode*> nodeChildren() const override; - - std::string validate() const override; - -private: - std::unique_ptr<const LayerRoughness> m_roughness; //!< roughness of the interface -}; - -inline const LayerRoughness* LayerInterface::roughness() const -{ - return m_roughness.get(); -} - -#endif // BORNAGAIN_SAMPLE_INTERFACE_LAYERINTERFACE_H diff --git a/Sample/Interface/RoughnessMap.cpp b/Sample/Interface/RoughnessMap.cpp index bc89154d8da..1e0056d7bab 100644 --- a/Sample/Interface/RoughnessMap.cpp +++ b/Sample/Interface/RoughnessMap.cpp @@ -15,7 +15,6 @@ #include "Sample/Interface/RoughnessMap.h" #include "Base/Const/PhysicalConstants.h" #include "Base/Util/Assert.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include <algorithm> @@ -53,13 +52,13 @@ Arrayf64Wrapper arrayExport(const std::vector<std::size_t>& dimensions, } // namespace RoughnessMap::RoughnessMap(size_t x_points, size_t y_points, double Lx, double Ly, - const MultiLayer& sample, int i_interface, int seed) + const MultiLayer& sample, int i_layer, int seed) : m_x_points(x_points) , m_y_points(y_points) , m_lx(Lx) , m_ly(Ly) , m_sample(sample) - , m_i_interface(i_interface) + , m_i_layer(i_layer) , m_gen(seed < 0 ? m_rd() : seed) { if (x_points == 0) @@ -81,9 +80,8 @@ double2d_t RoughnessMap::generateMap() double2d_t RoughnessMap::mapFromHeights() const { const size_t z_steps = 3999; - const InterlayerModel* interlayerModel = - m_sample.layerInterface(m_i_interface)->roughness()->interlayerModel(); - const double rms = m_sample.layerInterfaceRMS(m_i_interface); + const InterlayerModel* interlayerModel = m_sample.layerRoughness(m_i_layer)->interlayerModel(); + const double rms = m_sample.layerRoughnessRMS(m_i_layer); const double sigma_factor = interlayerModel->sigmaRange(); const double z_limit = rms * sigma_factor; const double step = 2 * z_limit / (z_steps - 1); @@ -129,7 +127,7 @@ double2d_t RoughnessMap::mapFromSpectrum() const for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) psd_mag[j][i] = - std::sqrt(m_sample.layerInterfaceSpectrum(std::hypot(fx[i], fy[j]), m_i_interface)); + std::sqrt(m_sample.layerRoughnessSpectrum(std::hypot(fx[i], fy[j]), m_i_layer)); for (int j = M; j < m_y_points; j++) psd_mag[j][i] = psd_mag[m_y_points - j][i]; } @@ -209,7 +207,7 @@ double2d_t RoughnessMap::applyHeightsToSpectrum(const double2d_t& h_map, void RoughnessMap::createMap() { - if (m_sample.layerInterfaceRMS(m_i_interface) < 1e-10) { + if (m_sample.layerRoughnessRMS(m_i_layer) < 1e-10) { m_rough_map = double2d_t(m_y_points, std::vector<double>(m_x_points)); return; } diff --git a/Sample/Interface/RoughnessMap.h b/Sample/Interface/RoughnessMap.h index 0b3f311b24b..daa537b9971 100644 --- a/Sample/Interface/RoughnessMap.h +++ b/Sample/Interface/RoughnessMap.h @@ -31,7 +31,7 @@ class RoughnessMap { public: RoughnessMap(size_t x_points, size_t y_points, double Lx, double Ly, const MultiLayer& sample, - int i_interface, int seed = -1); + int i_layer, int seed = -1); RoughnessMap() = delete; double2d_t generateMap(); @@ -61,7 +61,7 @@ private: const MultiLayer& m_sample; - int m_i_interface; + int m_i_layer; double2d_t m_rough_map; mutable FourierTransform m_ft; diff --git a/Sample/Multilayer/Layer.cpp b/Sample/Multilayer/Layer.cpp index f20114bcd28..4981351563a 100644 --- a/Sample/Multilayer/Layer.cpp +++ b/Sample/Multilayer/Layer.cpp @@ -41,13 +41,19 @@ Layer::Layer(const Material& material, double thickness, const LayerRoughness* r ASSERT(m_roughness); if (thickness < 0.) throw std::runtime_error("Layer contructor called with negative thickness"); + validateOrThrow(); +} + +Layer::Layer(const Material& material, const LayerRoughness* roughness) + : Layer(material, 0, roughness) +{ } Layer::~Layer() = default; Layer* Layer::clone() const { - auto* result = new Layer(m_material, m_thickness); + auto* result = new Layer(m_material, m_thickness, m_roughness.get()); result->m_B_field = m_B_field; result->m_n_slices = m_n_slices; for (const auto* layout : layouts()) @@ -60,6 +66,7 @@ std::vector<const INode*> Layer::nodeChildren() const std::vector<const INode*> result; for (const auto* layout : m_layouts) result.push_back(layout); + result.push_back(m_roughness.get()); return result; } diff --git a/Sample/Multilayer/Layer.h b/Sample/Multilayer/Layer.h index 5f753db3a9a..c6dd7a5d611 100644 --- a/Sample/Multilayer/Layer.h +++ b/Sample/Multilayer/Layer.h @@ -28,6 +28,7 @@ class Layer : public ISampleNode { public: Layer(const Material& material, double thickness = 0, const LayerRoughness* roughness = nullptr); + Layer(const Material& material, const LayerRoughness* roughness); ~Layer() override; Layer* clone() const override; diff --git a/Sample/Multilayer/MultiLayer.cpp b/Sample/Multilayer/MultiLayer.cpp index 55f6e3585d7..bef82bede71 100644 --- a/Sample/Multilayer/MultiLayer.cpp +++ b/Sample/Multilayer/MultiLayer.cpp @@ -18,7 +18,6 @@ #include "Base/Util/Assert.h" #include "Base/Util/StringUtil.h" #include "Sample/Aggregate/ParticleLayout.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Material/MaterialUtil.h" #include "Sample/Multilayer/Layer.h" @@ -36,13 +35,8 @@ MultiLayer* MultiLayer::clone() const { auto* result = new MultiLayer; result->setExternalField(externalField()); - for (size_t i = 0; i < numberOfLayers(); ++i) { - const LayerInterface* interface = i > 0 ? m_interfaces[i - 1] : nullptr; - if (i > 0 && interface->roughness()) - result->addLayerWithTopRoughness(std::as_const(*m_layers[i]), *interface->roughness()); - else - result->addLayer(std::as_const(*m_layers[i])); - } + for (size_t i = 0; i < numberOfLayers(); ++i) + result->addLayer(std::as_const(*m_layers[i])); return result; } @@ -52,56 +46,26 @@ void MultiLayer::checkMaterials(double wavelength) const m_layers[i]->material()->checkRefractiveIndex(wavelength); } -//! Adds layer with default (zero) roughness void MultiLayer::addLayer(const Layer& layer) { - addLayerExec(layer, nullptr); -} - -//! Adds layer with top roughness -void MultiLayer::addLayerWithTopRoughness(const Layer& layer, const LayerRoughness& roughness) -{ - addLayerExec(layer, &roughness); -} - -//! Internal -void MultiLayer::addLayerExec(const Layer& layer, const LayerRoughness* roughness) -{ - const Layer* new_layer = layer.clone(); - - if (numberOfLayers()) { // not the top layer - const LayerRoughness* new_roughness; - if (roughness) - new_roughness = roughness->clone(); - else { - K_CorrelationModel autocorrelation(0, 0, 0); - ErfInterlayer interlayer; - new_roughness = new LayerRoughness(&autocorrelation, &interlayer); - } - m_interfaces.push_back(new LayerInterface(new_roughness)); - - } else { // the top layer - if (new_layer->thickness() != 0.0) + if (!numberOfLayers()) // the top layer + if (layer.thickness() != 0.0) throw std::runtime_error("Invalid top layer; to indicate that it is semiinfinite," " it must have a nominal thickness of 0"); - if (roughness) - throw std::runtime_error("Invalid top layer with roughness"); - } - - m_layers.push_back(new_layer); + m_layers.push_back(layer.clone()); m_validated = false; } -const AutocorrelationModel* MultiLayer::autocorrAt(int i_interface) const +const AutocorrelationModel* MultiLayer::autocorrAt(int i_layer) const { - return m_interfaces.at(i_interface)->roughness()->autocorrelationModel(); + return layerRoughness(i_layer)->autocorrelationModel(); } -double MultiLayer::maxCutoffSpatialFrequencyAt(size_t i_interface) const +double MultiLayer::maxCutoffSpatialFrequencyAt(size_t i_layer) const { double result = 0; - for (size_t i = i_interface; i < m_interfaces.size(); i++) { - const auto autocorr = m_interfaces.at(i_interface)->roughness()->autocorrelationModel(); + for (size_t i = i_layer; i < m_layers.size(); i++) { + const auto autocorr = layerRoughness(i_layer)->autocorrelationModel(); result = std::max(autocorr->maxSpatialFrequency(), result); } return result; @@ -112,9 +76,9 @@ const Layer* MultiLayer::layer(size_t i_layer) const return m_layers.at(i_layer); } -const LayerInterface* MultiLayer::layerInterface(size_t i_interface) const +const LayerRoughness* MultiLayer::layerRoughness(size_t i_layer) const { - return m_interfaces.at(i_interface); + return m_layers.at(i_layer)->roughness(); } void MultiLayer::setExternalField(const R3& ext_field) @@ -123,19 +87,19 @@ void MultiLayer::setExternalField(const R3& ext_field) m_validated = false; } -double MultiLayer::layerInterfaceSpectrum(double spatial_f, int i_interface) const +double MultiLayer::layerRoughnessSpectrum(double spatial_f, int i_layer) const { - int size = m_interfaces.size(); - const AutocorrelationModel* autocorr = autocorrAt(i_interface); + int size = m_layers.size(); + const AutocorrelationModel* autocorr = autocorrAt(i_layer); if (const auto k_corr = dynamic_cast<const K_CorrelationModel*>(autocorr)) return k_corr->spectralFunction(spatial_f); if (dynamic_cast<const LinearGrowthModel*>(autocorr)) { - if (i_interface == size - 1) + if (i_layer == size - 1) ASSERT_NEVER; - int j = i_interface + 1; + int j = i_layer + 1; for (; j < size; j++) { if (dynamic_cast<const K_CorrelationModel*>(autocorrAt(j))) break; @@ -145,10 +109,10 @@ double MultiLayer::layerInterfaceSpectrum(double spatial_f, int i_interface) con double spectrum_below = base_k_corr->spectralFunction(spatial_f); double current_spectrum = spectrum_below; - // all interfaces between i and j have linear growth model - for (int k = j - 1; k >= i_interface; k--) { + // all layers between i and j have linear growth model + for (int k = j - 1; k >= i_layer; k--) { const auto lin_growth = dynamic_cast<const LinearGrowthModel*>(autocorrAt(k)); - const double thickness = m_layers.at(k + 1)->thickness(); + const double thickness = m_layers.at(k)->thickness(); current_spectrum = lin_growth->spectralFunction(spectrum_below, thickness, spatial_f); spectrum_below = current_spectrum; } @@ -157,19 +121,19 @@ double MultiLayer::layerInterfaceSpectrum(double spatial_f, int i_interface) con ASSERT_NEVER; } -double MultiLayer::layerInterfaceRMS(size_t i_interface) const +double MultiLayer::layerRoughnessRMS(size_t i_layer) const { - ASSERT(i_interface < m_interfaces.size()); - const auto autocorr = m_interfaces.at(i_interface)->roughness()->autocorrelationModel(); + ASSERT(i_layer < m_layers.size()); + const auto autocorr = autocorrAt(i_layer); if (auto* k_corr = dynamic_cast<const K_CorrelationModel*>(autocorr)) { return k_corr->rms(); } else if (dynamic_cast<const LinearGrowthModel*>(autocorr)) { - const double maxSpatialFrequency = maxCutoffSpatialFrequencyAt(i_interface); + const double maxSpatialFrequency = maxCutoffSpatialFrequencyAt(i_layer); return std::sqrt((2 * pi) * RealIntegrator().integrate( - [this, i_interface](double spatial_f) -> double { - return spatial_f * layerInterfaceSpectrum(spatial_f, i_interface); + [this, i_layer](double spatial_f) -> double { + return spatial_f * layerRoughnessSpectrum(spatial_f, i_layer); }, 0, maxSpatialFrequency)); } @@ -180,14 +144,11 @@ std::vector<const INode*> MultiLayer::nodeChildren() const { std::vector<const INode*> result; const size_t N = m_layers.size(); - result.reserve(N + m_interfaces.size()); + result.reserve(N); - for (size_t i = 0; i < N; ++i) { + for (size_t i = 0; i < N; ++i) result.push_back(layer(i)); - if (i == N - 1) - break; - result.push_back(layerInterface(i)); - } + return result; } @@ -218,12 +179,6 @@ std::string MultiLayer::validate() const errs.push_back("{ layer " + std::to_string(i) + ": " + err + " }"); } - for (size_t i = 0; i < m_interfaces.size(); ++i) { - std::string err = m_interfaces[i]->validate(); - if (!err.empty()) - errs.push_back("{ interface " + std::to_string(i) + ": " + err + " }"); - } - if (!errs.empty()) return "[ " + Base::String::join(errs, ", ") + " ]"; diff --git a/Sample/Multilayer/MultiLayer.h b/Sample/Multilayer/MultiLayer.h index 3e979ebfd6f..d15f75f5fc2 100644 --- a/Sample/Multilayer/MultiLayer.h +++ b/Sample/Multilayer/MultiLayer.h @@ -23,7 +23,6 @@ class AutocorrelationModel; class Layer; -class LayerInterface; class LayerRoughness; class ParticleLayout; @@ -49,17 +48,16 @@ public: std::string className() const final { return "MultiLayer"; } void addLayer(const Layer& layer); - void addLayerWithTopRoughness(const Layer& layer, const LayerRoughness& roughness); //! Sets the external field applied to the sample (units: A/m) void setExternalField(const R3& ext_field); void setName(const std::string& name) { m_sample_name = name; } - //! Returns roughness spectrum for a given interface index - double layerInterfaceSpectrum(double spatial_f, int i_interface) const; + //! Returns roughness spectrum for a given layer index + double layerRoughnessSpectrum(double spatial_f, int i_layer) const; - //! Returns roughness rms for a given interface index - double layerInterfaceRMS(size_t i_interface) const; + //! Returns roughness rms for a given layer index + double layerRoughnessRMS(size_t i_layer) const; #ifndef SWIG std::vector<const INode*> nodeChildren() const override; @@ -78,13 +76,9 @@ public: { return m_layers.size(); } - size_t numberOfInterfaces() const - { - return m_interfaces.size(); - } const Layer* layer(size_t i_layer) const; - const LayerInterface* layerInterface(size_t i_interface) const; + const LayerRoughness* layerRoughness(size_t i_layer) const; R3 externalField() const { return m_ext_field; @@ -93,14 +87,11 @@ public: void checkMaterials(double wavelength) const; private: - void addLayerExec(const Layer& layer, const LayerRoughness* roughness); - const AutocorrelationModel* autocorrAt(int i_interface) const; - double maxCutoffSpatialFrequencyAt(size_t i_interface) const; + const AutocorrelationModel* autocorrAt(int i_layer) const; + double maxCutoffSpatialFrequencyAt(size_t i_layer) const; //! stack of layers [nlayers] OwningVector<const Layer> m_layers; - //! stack of layer interfaces [nlayers-1] - OwningVector<const LayerInterface> m_interfaces; //! external magnetic field (in A/m) R3 m_ext_field; diff --git a/Sample/StandardSample/CylindersBuilder.cpp b/Sample/StandardSample/CylindersBuilder.cpp index 8718a5288b8..43d0c3a92b2 100644 --- a/Sample/StandardSample/CylindersBuilder.cpp +++ b/Sample/StandardSample/CylindersBuilder.cpp @@ -15,7 +15,6 @@ #include "Sample/StandardSample/CylindersBuilder.h" #include "Sample/Aggregate/ParticleLayout.h" #include "Sample/HardParticle/Cylinder.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Multilayer/Layer.h" #include "Sample/Multilayer/MultiLayer.h" #include "Sample/Particle/Particle.h" diff --git a/Sample/StandardSample/FeNiBilayerBuilder.cpp b/Sample/StandardSample/FeNiBilayerBuilder.cpp index fcfbaf66481..190689b1b73 100644 --- a/Sample/StandardSample/FeNiBilayerBuilder.cpp +++ b/Sample/StandardSample/FeNiBilayerBuilder.cpp @@ -110,19 +110,19 @@ std::unique_ptr<MultiLayer> FeNiBilayer::constructSample() auto m_Ni = MaterialBySLD("Ni", sldNi.real(), sldNi.imag()); auto m_Substrate = MaterialBySLD("Au", sldAu.real(), sldAu.imag()); - Layer l_Fe{m_Fe, thicknessFe}; - Layer l_Ni{m_Ni, thicknessNi}; - K_CorrelationModel autocorrelation(sigmaRoughness); LayerRoughness roughness{&autocorrelation, interlayerModel.get()}; + + Layer l_Fe{m_Fe, thicknessFe, &roughness}; + Layer l_Ni{m_Ni, thicknessNi, &roughness}; result->addLayer(Layer{m_ambient}); for (auto i = 0; i < NBilayers; ++i) { - result->addLayerWithTopRoughness(l_Fe, roughness); - result->addLayerWithTopRoughness(l_Ni, roughness); + result->addLayer(l_Fe); + result->addLayer(l_Ni); } - result->addLayerWithTopRoughness(Layer{m_Substrate}, roughness); + result->addLayer(Layer{m_Substrate, &roughness}); return result; } diff --git a/Sample/StandardSample/HomogeneousMultilayerBuilder.cpp b/Sample/StandardSample/HomogeneousMultilayerBuilder.cpp index 409e40e3997..678697ad626 100644 --- a/Sample/StandardSample/HomogeneousMultilayerBuilder.cpp +++ b/Sample/StandardSample/HomogeneousMultilayerBuilder.cpp @@ -31,10 +31,10 @@ MultiLayer* ExemplarySamples::createHomogeneousMultilayer() Material ni_material = RefractiveMaterial("Ni", delta_ni, 0.0); Material ti_material = RefractiveMaterial("Ti", delta_ti, 0.0); - Layer vacuum_layer(vacuum_material, 0); + Layer vacuum_layer(vacuum_material); Layer ni_layer(ni_material, thick_ni); Layer ti_layer(ti_material, thick_ti); - Layer substrate_layer(substrate_material, 0); + Layer substrate_layer(substrate_material); auto* sample = new MultiLayer; sample->addLayer(vacuum_layer); diff --git a/Sample/StandardSample/MagneticLayersBuilder.cpp b/Sample/StandardSample/MagneticLayersBuilder.cpp index f74b33047f6..141d634101f 100644 --- a/Sample/StandardSample/MagneticLayersBuilder.cpp +++ b/Sample/StandardSample/MagneticLayersBuilder.cpp @@ -140,11 +140,12 @@ ExemplarySamples::createSimpleMagneticRotationWithRoughness(const std::string& r auto roughness = LayerRoughness(&autocorrelation, interlayerModel.get()); Layer vacuum_layer(vacuum_material); - Layer substrate_layer(substrate_material); - Layer layer(layer_material, 200 * Units::angstrom); + Layer layer(layer_material, 200 * Units::angstrom, &roughness); + Layer substrate_layer(substrate_material, &roughness); + sample->addLayer(vacuum_layer); - sample->addLayerWithTopRoughness(layer, roughness); - sample->addLayerWithTopRoughness(substrate_layer, roughness); + sample->addLayer(layer); + sample->addLayer(substrate_layer); return sample; } diff --git a/Sample/StandardSample/MagneticParticlesBuilder.cpp b/Sample/StandardSample/MagneticParticlesBuilder.cpp index 2ed6661fa5b..9f06947a56a 100644 --- a/Sample/StandardSample/MagneticParticlesBuilder.cpp +++ b/Sample/StandardSample/MagneticParticlesBuilder.cpp @@ -16,7 +16,6 @@ #include "Sample/Aggregate/ParticleLayout.h" #include "Sample/HardParticle/Cylinder.h" #include "Sample/HardParticle/Sphere.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Material/MaterialFactoryFuncs.h" #include "Sample/Multilayer/Layer.h" diff --git a/Sample/StandardSample/MultiLayerWithRoughnessBuilder.cpp b/Sample/StandardSample/MultiLayerWithRoughnessBuilder.cpp index e6f8096b709..7545002a151 100644 --- a/Sample/StandardSample/MultiLayerWithRoughnessBuilder.cpp +++ b/Sample/StandardSample/MultiLayerWithRoughnessBuilder.cpp @@ -33,22 +33,22 @@ MultiLayer* createMultiLayerWithInterlayerModel(const InterlayerModel* interlaye Material part_a_material = RefractiveMaterial("PartA", 5e-6, 0.0); Material part_b_material = RefractiveMaterial("PartB", 10e-6, 0.0); - Layer vacuum_layer(vacuum_material, 0); - Layer partA_layer(part_a_material, thicknessA); - Layer partB_layer(part_b_material, thicknessB); - Layer substrate_layer(substrate_material, 0); - K_CorrelationModel autocorrelation(sigma, hurst, lateralCorrLength); CommonDepthCrosscorrelation crosscorrelation(crossCorrDepth); LayerRoughness roughness(&autocorrelation, interlayerModel, &crosscorrelation); + Layer vacuum_layer(vacuum_material); + Layer partA_layer(part_a_material, thicknessA, &roughness); + Layer partB_layer(part_b_material, thicknessB, &roughness); + Layer substrate_layer(substrate_material, &roughness); + auto* sample = new MultiLayer; sample->addLayer(vacuum_layer); for (int i = 0; i < 5; ++i) { - sample->addLayerWithTopRoughness(partA_layer, roughness); - sample->addLayerWithTopRoughness(partB_layer, roughness); + sample->addLayer(partA_layer); + sample->addLayer(partB_layer); } - sample->addLayerWithTopRoughness(substrate_layer, roughness); + sample->addLayer(substrate_layer); return sample; } } // namespace diff --git a/Sample/StandardSample/ResonatorBuilder.cpp b/Sample/StandardSample/ResonatorBuilder.cpp index e6d3368d0e5..fdf95b70394 100644 --- a/Sample/StandardSample/ResonatorBuilder.cpp +++ b/Sample/StandardSample/ResonatorBuilder.cpp @@ -29,29 +29,29 @@ MultiLayer* ExemplarySamples::createResonator(double ti_thickness) Material m_Pt = RefractiveMaterial("Pt", 2.52936993309e-05, 7.54553992473e-09); Material m_D2O = RefractiveMaterial("D2O", 2.52897204573e-05, 4.5224432814e-13); - Layer l_TiO2(m_TiO2, 3.0); - Layer l_Ti_top(m_Ti, 10.0); - Layer l_Ti(m_Ti, ti_thickness); - Layer l_Si(m_Si); - Layer l_Pt(m_Pt, 32.0); - Layer l_D2O(m_D2O); - K_CorrelationModel autocorrelation(2.0, 0.8, 1e4); TanhInterlayer interlayer; CommonDepthCrosscorrelation crosscorrelation(400); LayerRoughness roughness(&autocorrelation, &interlayer, &crosscorrelation); + Layer l_TiO2(m_TiO2, 3.0, &roughness); + Layer l_Ti_top(m_Ti, 10.0, &roughness); + Layer l_Ti(m_Ti, ti_thickness, &roughness); + Layer l_Si(m_Si); + Layer l_Pt(m_Pt, 32.0, &roughness); + Layer l_D2O(m_D2O, &roughness); + result->addLayer(l_Si); const int nlayers = 3; for (size_t i = 0; i < nlayers; ++i) { - result->addLayerWithTopRoughness(l_Ti, roughness); - result->addLayerWithTopRoughness(l_Pt, roughness); + result->addLayer(l_Ti); + result->addLayer(l_Pt); } - result->addLayerWithTopRoughness(l_Ti_top, roughness); - result->addLayerWithTopRoughness(l_TiO2, roughness); - result->addLayerWithTopRoughness(l_D2O, roughness); + result->addLayer(l_Ti_top); + result->addLayer(l_TiO2); + result->addLayer(l_D2O); return result; } diff --git a/Sample/StandardSample/ThickAbsorptiveSampleBuilder.cpp b/Sample/StandardSample/ThickAbsorptiveSampleBuilder.cpp index 576115dc5ed..6da87dfc3e9 100644 --- a/Sample/StandardSample/ThickAbsorptiveSampleBuilder.cpp +++ b/Sample/StandardSample/ThickAbsorptiveSampleBuilder.cpp @@ -24,19 +24,19 @@ MultiLayer* ExemplarySamples::createThickAbsorptiveSample() Material au_material = MaterialBySLD("Au", 3.48388057043e-05, 1.79057609656e-05); Material si_material = MaterialBySLD("Si", 3.84197565094e-07, 6.28211531498e-07); + K_CorrelationModel autocorrelation(5.0, 0.5, 10.0); + ErfInterlayer interlayer; + LayerRoughness roughness(&autocorrelation, &interlayer); + Layer vacuum_layer(vacuum_material); Layer au_layer(au_material, 200.0); Layer vacuum_layer_2(vacuum_material, 10.0); - Layer substrate_layer(si_material); - - K_CorrelationModel autocorrelation(5.0, 0.5, 10.0); - ErfInterlayer interlayer; - LayerRoughness rough(&autocorrelation, &interlayer); + Layer substrate_layer(si_material, &roughness); auto* sample = new MultiLayer; sample->addLayer(vacuum_layer); sample->addLayer(au_layer); sample->addLayer(vacuum_layer_2); - sample->addLayerWithTopRoughness(substrate_layer, rough); + sample->addLayer(substrate_layer); return sample; } diff --git a/Sim/Computation/RoughMultiLayerContribution.cpp b/Sim/Computation/RoughMultiLayerContribution.cpp index ce487881e67..b06082d109c 100644 --- a/Sim/Computation/RoughMultiLayerContribution.cpp +++ b/Sim/Computation/RoughMultiLayerContribution.cpp @@ -19,7 +19,6 @@ #include "Resample/Element/DiffuseElement.h" #include "Resample/Flux/ScalarFlux.h" #include "Resample/Processed/ReSample.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Multilayer/Layer.h" #include "Sample/Multilayer/MultiLayer.h" diff --git a/Sim/Export/SampleToPython.cpp b/Sim/Export/SampleToPython.cpp index 8033a9b620c..8d11316527d 100644 --- a/Sim/Export/SampleToPython.cpp +++ b/Sim/Export/SampleToPython.cpp @@ -19,7 +19,6 @@ #include "Param/Node/NodeUtil.h" #include "Sample/Aggregate/Interferences.h" #include "Sample/Aggregate/ParticleLayout.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Lattice/Lattice3D.h" #include "Sample/Multilayer/Layer.h" @@ -127,8 +126,11 @@ std::string defineLayers(const ComponentKeyHandler& objHandler, const MaterialKeyHandler& matHandler) { std::vector<const Layer*> v = objHandler.objectsOfType<Layer>(); + std::vector<const LayerRoughness*> r = objHandler.objectsOfType<LayerRoughness>(); + ASSERT(v.size() == r.size()) if (v.empty()) return ""; + std::ostringstream result; result << "\n" << indent() << "# Define layers\n"; result << std::setprecision(12); @@ -137,6 +139,11 @@ std::string defineLayers(const ComponentKeyHandler& objHandler, result << indent() << key << " = ba.Layer(" << matHandler.mat2key(s->material()); if (s->thickness() != 0) result << ", " << Py::Fmt::printNm(s->thickness()); + + const LayerRoughness* rough = s->roughness(); + if (rough->showInScriptOrGui()) + result << ", " << objHandler.obj2key(rough); + result << ")\n"; if (s->numberOfSlices() != 1) result << indent() << key << ".setNumberOfSlices(" << s->numberOfSlices() << ")\n"; @@ -533,13 +540,6 @@ std::string defineMultiLayers(const ComponentKeyHandler& objHandler) size_t i_layer = 1; while (i_layer != numberOfLayers) { - const LayerInterface* layerInterface = s->layerInterface(i_layer - 1); - const LayerRoughness* rough = layerInterface->roughness(); - if (rough->showInScriptOrGui()) - result << indent() << key << ".addLayerWithTopRoughness(" - << objHandler.obj2key(s->layer(i_layer)) << ", " - << objHandler.obj2key(rough) << ")\n"; - else result << indent() << key << ".addLayer(" << objHandler.obj2key(s->layer(i_layer)) << ")\n"; i_layer++; diff --git a/Tests/Unit/Resample/RTTest.cpp b/Tests/Unit/Resample/RTTest.cpp index ef086de2ee6..db8ee083241 100644 --- a/Tests/Unit/Resample/RTTest.cpp +++ b/Tests/Unit/Resample/RTTest.cpp @@ -3,7 +3,6 @@ #include "Resample/Processed/ReSample.h" #include "Resample/Specular/ComputeFluxScalar.h" #include "Sample/Aggregate/ParticleLayout.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Material/MaterialFactoryFuncs.h" #include "Sample/Multilayer/Layer.h" @@ -39,8 +38,8 @@ protected: const Material amat = RefractiveMaterial("material A", 2e-6, 8e-7); const Material bmat = RefractiveMaterial("material B (high absorption)", 3e-5, 2e-4); const Material stone = RefractiveMaterial("substrate material", 1e-6, 1e-7); - const Layer topLayer{air, 0}; - const Layer substrate{stone, 0}; + const Layer topLayer{air}; + const Layer substrate{stone}; const R3 k{1, 0, -1e-3}; MultiLayer sample1, sample2; std::vector<ScalarFlux> coeffs1, coeffs2; diff --git a/Tests/Unit/Sample/MultiLayerTest.cpp b/Tests/Unit/Sample/MultiLayerTest.cpp index d03a2e642ec..7d2e0c19985 100644 --- a/Tests/Unit/Sample/MultiLayerTest.cpp +++ b/Tests/Unit/Sample/MultiLayerTest.cpp @@ -2,7 +2,6 @@ #include "Base/Const/Units.h" #include "Sample/Aggregate/ParticleLayout.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Material/MaterialFactoryFuncs.h" #include "Sample/Multilayer/Layer.h" @@ -84,20 +83,17 @@ TEST_F(MultiLayerTest, LayerInterfaces) set_four(); // check interfaces - const LayerInterface* interface0 = mLayer.layerInterface(0); - EXPECT_TRUE(nullptr != interface0); - EXPECT_TRUE(nullptr != interface0->roughness()); - EXPECT_EQ(mLayer.layerInterfaceRMS(0), 0.0); - - const LayerInterface* interface1 = mLayer.layerInterface(1); - EXPECT_TRUE(nullptr != interface1); - EXPECT_TRUE(nullptr != interface1->roughness()); - EXPECT_EQ(mLayer.layerInterfaceRMS(1), 0.0); - - const LayerInterface* interface2 = mLayer.layerInterface(2); - EXPECT_TRUE(nullptr != interface2); - EXPECT_TRUE(nullptr != interface2->roughness()); - EXPECT_EQ(mLayer.layerInterfaceRMS(2), 0.0); + const LayerRoughness* roughness1 = mLayer.layerRoughness(1); + EXPECT_TRUE(nullptr != roughness1); + EXPECT_EQ(mLayer.layerRoughnessRMS(1), 0.0); + + const LayerRoughness* roughness2 = mLayer.layerRoughness(2); + EXPECT_TRUE(nullptr != roughness2); + EXPECT_EQ(mLayer.layerRoughnessRMS(2), 0.0); + + const LayerRoughness* roughness3 = mLayer.layerRoughness(3); + EXPECT_TRUE(nullptr != roughness3); + EXPECT_EQ(mLayer.layerRoughnessRMS(3), 0.0); } TEST_F(MultiLayerTest, Clone) @@ -116,23 +112,20 @@ TEST_F(MultiLayerTest, Clone) EXPECT_EQ(substrate.thickness(), mLayerClone->layer(3)->thickness()); // check interfaces - const LayerInterface* interface0 = mLayerClone->layerInterface(0); - EXPECT_TRUE(nullptr != interface0); - EXPECT_TRUE(nullptr != interface0->roughness()); - EXPECT_EQ(mLayerClone->layerInterfaceRMS(0), 0.0); - EXPECT_TRUE(nullptr == interface0->roughness()->crosscorrelationModel()); - - const LayerInterface* interface1 = mLayerClone->layerInterface(1); - EXPECT_TRUE(nullptr != interface1); - EXPECT_TRUE(nullptr != interface1->roughness()); - EXPECT_EQ(mLayerClone->layerInterfaceRMS(1), 0.0); - EXPECT_TRUE(nullptr == interface1->roughness()->crosscorrelationModel()); - - const LayerInterface* interface2 = mLayerClone->layerInterface(2); - EXPECT_TRUE(nullptr != interface2); - EXPECT_TRUE(nullptr != interface2->roughness()); - EXPECT_EQ(mLayerClone->layerInterfaceRMS(2), 0.0); - EXPECT_TRUE(nullptr == interface2->roughness()->crosscorrelationModel()); + const LayerRoughness* roughness0 = mLayerClone->layerRoughness(0); + EXPECT_TRUE(nullptr != roughness0); + EXPECT_EQ(mLayerClone->layerRoughnessRMS(0), 0.0); + EXPECT_TRUE(nullptr == roughness0->crosscorrelationModel()); + + const LayerRoughness* roughness1 = mLayerClone->layerRoughness(1); + EXPECT_TRUE(nullptr != roughness1); + EXPECT_EQ(mLayerClone->layerRoughnessRMS(1), 0.0); + EXPECT_TRUE(nullptr == roughness1->crosscorrelationModel()); + + const LayerRoughness* roughness2 = mLayerClone->layerRoughness(2); + EXPECT_TRUE(nullptr != roughness2); + EXPECT_EQ(mLayerClone->layerRoughnessRMS(2), 0.0); + EXPECT_TRUE(nullptr == roughness2->crosscorrelationModel()); delete mLayerClone; } @@ -142,71 +135,67 @@ TEST_F(MultiLayerTest, WithRoughness) K_CorrelationModel autocorrelation(1.1, .3, 0.1, 1e100); ErfInterlayer interlayer; LayerRoughness lr(&autocorrelation, &interlayer); + mLayer.addLayer(topLayer); - mLayer.addLayerWithTopRoughness(layer1, lr); + mLayer.addLayer(Layer(*layer1.material(), layer1.thickness(), &lr)); mLayer.addLayer(substrate); - const LayerInterface* interface0 = mLayer.layerInterface(0); - const LayerInterface* interface1 = mLayer.layerInterface(1); - - const LayerRoughness* roughness0 = interface0->roughness(); - const LayerRoughness* roughness1 = interface1->roughness(); + const LayerRoughness* roughness0 = mLayer.layerRoughness(1); + const LayerRoughness* roughness1 = mLayer.layerRoughness(2); EXPECT_TRUE(roughness0); auto* roughness0_AC = dynamic_cast<const K_CorrelationModel*>(roughness0->autocorrelationModel()); EXPECT_TRUE(roughness0_AC); - EXPECT_EQ(1.1, mLayer.layerInterfaceRMS(0)); + EXPECT_EQ(1.1, mLayer.layerRoughnessRMS(1)); EXPECT_EQ(.3, roughness0_AC->hurst()); EXPECT_EQ(0.1, roughness0_AC->lateralCorrLength()); EXPECT_TRUE(roughness1); - EXPECT_EQ(mLayer.layerInterfaceRMS(1), 0.0); + EXPECT_EQ(mLayer.layerRoughnessRMS(2), 0.0); } TEST_F(MultiLayerTest, CloneWithRoughness) { ErfInterlayer interlayer; - K_CorrelationModel autocorrelation0(2.1, .3, 12.1, 1e100); - LayerRoughness lr0(&autocorrelation0, &interlayer); - K_CorrelationModel autocorrelation1(1.1, .3, 0.1, 1e100); + K_CorrelationModel autocorrelation1(2.1, .3, 12.1, 1e100); LayerRoughness lr1(&autocorrelation1, &interlayer); + K_CorrelationModel autocorrelation2(1.1, .3, 0.1, 1e100); + LayerRoughness lr2(&autocorrelation2, &interlayer); auto magnetization = R3{0., 1e8, 0.}; auto magneticLayer = Layer(RefractiveMaterial("iron", 2e-5, 8e-5, magnetization), 20 * Units::nm); mLayer.addLayer(topLayer); - mLayer.addLayerWithTopRoughness(magneticLayer, lr0); - mLayer.addLayerWithTopRoughness(substrate, lr1); + mLayer.addLayer(Layer(*magneticLayer.material(), magneticLayer.thickness(), &lr1)); + mLayer.addLayer(Layer(*substrate.material(), substrate.thickness(), &lr2)); MultiLayer* mLayerClone = mLayer.clone(); - const LayerInterface* interface0 = mLayerClone->layerInterface(0); - const LayerInterface* interface1 = mLayerClone->layerInterface(1); - const LayerRoughness* roughness0 = interface0->roughness(); - const LayerRoughness* roughness1 = interface1->roughness(); + const LayerRoughness* roughness1 = mLayerClone->layerRoughness(1); + const LayerRoughness* roughness2 = mLayerClone->layerRoughness(2); - EXPECT_TRUE(roughness0); EXPECT_TRUE(roughness1); - - auto* roughness0_AC = - dynamic_cast<const K_CorrelationModel*>(roughness0->autocorrelationModel()); - EXPECT_TRUE(roughness0_AC); - - EXPECT_EQ(2.1, mLayerClone->layerInterfaceRMS(0)); - EXPECT_EQ(.3, roughness0_AC->hurst()); - EXPECT_EQ(12.1, roughness0_AC->lateralCorrLength()); + EXPECT_TRUE(roughness2); auto* roughness1_AC = dynamic_cast<const K_CorrelationModel*>(roughness1->autocorrelationModel()); EXPECT_TRUE(roughness1_AC); - EXPECT_EQ(1.1, mLayerClone->layerInterfaceRMS(1)); + EXPECT_EQ(2.1, mLayerClone->layerRoughnessRMS(1)); EXPECT_EQ(.3, roughness1_AC->hurst()); - EXPECT_EQ(0.1, roughness1_AC->lateralCorrLength()); + EXPECT_EQ(12.1, roughness1_AC->lateralCorrLength()); + + auto* roughness2_AC = + dynamic_cast<const K_CorrelationModel*>(roughness2->autocorrelationModel()); + EXPECT_TRUE(roughness2_AC); + + EXPECT_EQ(1.1, mLayerClone->layerRoughnessRMS(2)); + EXPECT_EQ(.3, roughness2_AC->hurst()); + EXPECT_EQ(0.1, roughness2_AC->lateralCorrLength()); EXPECT_EQ(mLayerClone->layer(1)->material()->isMagneticMaterial(), true); EXPECT_EQ(mLayerClone->layer(1)->material()->magnetization(), magnetization); @@ -233,26 +222,18 @@ TEST_F(MultiLayerTest, MultiLayerComposite) mLayer.addLayer(layer4); std::vector<const Layer*> layer_buffer; - std::vector<const LayerInterface*> interface_buffer; int counter(0); std::vector<const INode*> children = mLayer.nodeChildren(); for (const auto* sample : children) { - if (counter % 2 == 1) { - const auto* interface = dynamic_cast<const LayerInterface*>(sample); - EXPECT_TRUE(nullptr != interface); - interface_buffer.push_back(interface); - } else { + if (counter % 2 == 0) { const auto* layer = dynamic_cast<const Layer*>(sample); EXPECT_TRUE(nullptr != layer); layer_buffer.push_back(layer); } counter++; } - EXPECT_EQ(size_t(5), layer_buffer.size()); - EXPECT_EQ(size_t(4), interface_buffer.size()); + EXPECT_EQ(size_t(3), layer_buffer.size()); for (size_t i = 0; i < layer_buffer.size(); ++i) - EXPECT_EQ(double(i * 10), layer_buffer[i]->thickness()); - for (size_t i = 0; i < interface_buffer.size(); ++i) - EXPECT_EQ(double((i + 1) * 10), layer_buffer[i + 1]->thickness()); + EXPECT_EQ(double(i * 20), layer_buffer[i]->thickness()); } diff --git a/Wrap/Swig/libBornAgainSample.i b/Wrap/Swig/libBornAgainSample.i index 2e0e86dcb8c..e81f05a2da2 100644 --- a/Wrap/Swig/libBornAgainSample.i +++ b/Wrap/Swig/libBornAgainSample.i @@ -53,7 +53,6 @@ #include "Sample/Particle/Particle.h" #include "Sample/Particle/Compound.h" #include "Sample/Particle/CoreAndShell.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Interface/RoughnessMap.h" #include "Sample/Scattering/Rotations.h" diff --git a/auto/Examples/fit/scatter2d/expfit_galaxi.py b/auto/Examples/fit/scatter2d/expfit_galaxi.py index 29be6f67614..7c714b29a60 100755 --- a/auto/Examples/fit/scatter2d/expfit_galaxi.py +++ b/auto/Examples/fit/scatter2d/expfit_galaxi.py @@ -76,16 +76,16 @@ def get_sample(P): # layers vacuum_layer = ba.Layer(vacuum) - hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness) + hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness, r_hmdso) hmdso_layer.addLayout(layout) - ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness) + ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness, r_ptfe) substrate_layer = ba.Layer(material_Si) # assembling sample sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(hmdso_layer, r_hmdso) - sample.addLayerWithTopRoughness(ptfe_layer, r_ptfe) + sample.addLayer(hmdso_layer) + sample.addLayer(ptfe_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/fit/scatter2d/hardcode_galaxi.py b/auto/Examples/fit/scatter2d/hardcode_galaxi.py index 1936b6ddcb7..dce5578cbb5 100755 --- a/auto/Examples/fit/scatter2d/hardcode_galaxi.py +++ b/auto/Examples/fit/scatter2d/hardcode_galaxi.py @@ -58,16 +58,16 @@ def get_sample(): # layers vacuum_layer = ba.Layer(vacuum) - hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness) + hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness, r_hmdso) hmdso_layer.addLayout(layout) - ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness) + ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness, r_ptfe) substrate_layer = ba.Layer(material_Si) # assembling sample sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(hmdso_layer, r_hmdso) - sample.addLayerWithTopRoughness(ptfe_layer, r_ptfe) + sample.addLayer(hmdso_layer) + sample.addLayer(ptfe_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/fit/specular/Honeycomb_fit.py b/auto/Examples/fit/specular/Honeycomb_fit.py index 34ce24986a7..5e7c1d4115d 100755 --- a/auto/Examples/fit/specular/Honeycomb_fit.py +++ b/auto/Examples/fit/specular/Honeycomb_fit.py @@ -42,13 +42,6 @@ def get_sample(P, sign, T): material_Si = ba.MaterialBySLD("Substrate", P["sld_Si_real"]*1e-6, P["sld_Si_imag"]*1e-6) - l_Air = ba.Layer(material_Air) - l_PyOx = ba.Layer(material_PyOx, P["t_PyOx"]*angstrom) - l_Py2 = ba.Layer(material_Py2, P["t_Py2"]*angstrom) - l_Py1 = ba.Layer(material_Py1, P["t_Py1"]*angstrom) - l_SiO2 = ba.Layer(material_SiO2, P["t_SiO2"]*angstrom) - l_Si = ba.Layer(material_Si) - interlayer_model = ba.ErfInterlayer() rPyOx_autocorr = ba.K_CorrelationModel(P["rPyOx"]*angstrom) @@ -62,14 +55,22 @@ def get_sample(P, sign, T): rPy1 = ba.LayerRoughness(rPy1_autocorr, interlayer_model) rSiO2 = ba.LayerRoughness(rSiO2_autocorr, interlayer_model) rSi = ba.LayerRoughness(rSi_autocorr, interlayer_model) + + l_Air = ba.Layer(material_Air) + l_PyOx = ba.Layer(material_PyOx, P["t_PyOx"]*angstrom, rPyOx) + l_Py2 = ba.Layer(material_Py2, P["t_Py2"]*angstrom, rPy2) + l_Py1 = ba.Layer(material_Py1, P["t_Py1"]*angstrom, rPy1) + l_SiO2 = ba.Layer(material_SiO2, P["t_SiO2"]*angstrom, rSiO2) + l_Si = ba.Layer(material_Si, rSi) + sample = ba.MultiLayer() sample.addLayer(l_Air) - sample.addLayerWithTopRoughness(l_PyOx, rPyOx) - sample.addLayerWithTopRoughness(l_Py2, rPy2) - sample.addLayerWithTopRoughness(l_Py1, rPy1) - sample.addLayerWithTopRoughness(l_SiO2, rSiO2) - sample.addLayerWithTopRoughness(l_Si, rSi) + sample.addLayer(l_PyOx) + sample.addLayer(l_Py2) + sample.addLayer(l_Py1) + sample.addLayer(l_SiO2) + sample.addLayer(l_Si) return sample diff --git a/auto/Examples/fit/specular/PolarizedSpinAsymmetry.py b/auto/Examples/fit/specular/PolarizedSpinAsymmetry.py index 4c2edb5c23d..824c2d3761d 100755 --- a/auto/Examples/fit/specular/PolarizedSpinAsymmetry.py +++ b/auto/Examples/fit/specular/PolarizedSpinAsymmetry.py @@ -47,10 +47,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("(Mg,Al,Fe)3O4", P["rho_Mafo"]*1e-6, 0, B) material_substrate = ba.MaterialBySLD("MgAl2O4", *sldMao) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom) - substrate_layer = ba.Layer(material_substrate) - r_Mafo_autocorr = ba.K_CorrelationModel(P["r_Mafo"]*angstrom) r_substrate_autocorr = ba.K_CorrelationModel(P["r_Mao"]*angstrom) @@ -59,10 +55,14 @@ def get_sample(P): r_Mafo = ba.LayerRoughness(r_Mafo_autocorr, interlayer) r_substrate = ba.LayerRoughness(r_substrate_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom, r_Mafo) + substrate_layer = ba.Layer(material_substrate, r_substrate) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_Mafo) - sample.addLayerWithTopRoughness(substrate_layer, r_substrate) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/fit/specular/Pt_layer_fit.py b/auto/Examples/fit/specular/Pt_layer_fit.py index 759eb516ed6..44875ce8c49 100755 --- a/auto/Examples/fit/specular/Pt_layer_fit.py +++ b/auto/Examples/fit/specular/Pt_layer_fit.py @@ -28,10 +28,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("Pt", *sldPt) material_substrate = ba.MaterialBySLD("Si", *sldSi) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_pt/nm"]) - substrate_layer = ba.Layer(material_substrate) - interlayer = ba.TanhInterlayer() si_autocorr = ba.K_CorrelationModel(P["r_si/nm"]) @@ -40,11 +36,14 @@ def get_sample(P): r_si = ba.LayerRoughness(si_autocorr, interlayer) r_pt = ba.LayerRoughness(pt_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_pt/nm"], r_pt) + substrate_layer = ba.Layer(material_substrate, r_si) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_pt) - - sample.addLayerWithTopRoughness(substrate_layer, r_si) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/fit/specular/TREFF_Ni_film.py b/auto/Examples/fit/specular/TREFF_Ni_film.py index 436eba87aa2..e49b70eba97 100755 --- a/auto/Examples/fit/specular/TREFF_Ni_film.py +++ b/auto/Examples/fit/specular/TREFF_Ni_film.py @@ -24,22 +24,21 @@ def get_sample(P): material_SiO2 = ba.MaterialBySLD("SiO2", 2.0704e-06, 0) # Layers and interfaces - layer_Ni = ba.Layer(material_Ni_58, P["thickness"]) - interlayer = ba.TanhInterlayer() Ni_autocorr = ba.K_CorrelationModel(P["sigma_Ni"]) roughness_Ni = ba.LayerRoughness(Ni_autocorr, interlayer) - substrate = ba.Layer(material_SiO2) - sub_autocorr = ba.K_CorrelationModel(P["sigma_Substrate"]) roughness_Substrate = ba.LayerRoughness(sub_autocorr, interlayer) + + layer_Ni = ba.Layer(material_Ni_58, P["thickness"], roughness_Ni) + substrate = ba.Layer(material_SiO2, roughness_Substrate) sample = ba.MultiLayer() sample.addLayer(ba.Layer(vacuum)) - sample.addLayerWithTopRoughness(layer_Ni, roughness_Ni) - sample.addLayerWithTopRoughness(substrate, roughness_Substrate) + sample.addLayer(layer_Ni) + sample.addLayer(substrate) return sample diff --git a/auto/Examples/scatter2d/CorrelatedRoughness.py b/auto/Examples/scatter2d/CorrelatedRoughness.py index de6876e58f1..8fcbd4d6bfa 100755 --- a/auto/Examples/scatter2d/CorrelatedRoughness.py +++ b/auto/Examples/scatter2d/CorrelatedRoughness.py @@ -17,18 +17,19 @@ def get_sample(): material_part_b = ba.RefractiveMaterial("PartB", 10e-6, 0) material_substrate = ba.RefractiveMaterial("substrate", 15e-6, 0) - # defining layers - l_ambience = ba.Layer(vacuum) - l_part_a = ba.Layer(material_part_a, 2.5*nm) - l_part_b = ba.Layer(material_part_b, 5*nm) - l_substrate = ba.Layer(material_substrate) - + # defining roughenss sigma, hurst, corrLength = 1*nm, 0.3, 5*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() crosscorrelation = ba.CommonDepthCrosscorrelation(10*nm) roughness = ba.LayerRoughness(autocorr, interlayer, crosscorrelation) + # defining layers + l_ambience = ba.Layer(vacuum) + l_part_a = ba.Layer(material_part_a, 2.5*nm, roughness) + l_part_b = ba.Layer(material_part_b, 5*nm, roughness) + l_substrate = ba.Layer(material_substrate, roughness) + my_sample = ba.MultiLayer() # adding layers @@ -36,10 +37,10 @@ def get_sample(): n_repetitions = 5 for _ in range(n_repetitions): - my_sample.addLayerWithTopRoughness(l_part_a, roughness) - my_sample.addLayerWithTopRoughness(l_part_b, roughness) + my_sample.addLayer(l_part_a) + my_sample.addLayer(l_part_b) - my_sample.addLayerWithTopRoughness(l_substrate, roughness) + my_sample.addLayer(l_substrate) return my_sample diff --git a/auto/Examples/scatter2d/FindPeaks.py b/auto/Examples/scatter2d/FindPeaks.py index cb9833311e8..585266ed7a4 100755 --- a/auto/Examples/scatter2d/FindPeaks.py +++ b/auto/Examples/scatter2d/FindPeaks.py @@ -36,19 +36,19 @@ def get_sample(lattice_rotation_angle=0*deg): particle_layout.addParticle(box) particle_layout.setInterference(interference) - # assembling the sample - vacuum_layer = ba.Layer(ba.Vacuum()) - vacuum_layer.addLayout(particle_layout) - substrate_layer = ba.Layer(material_si) - sigma, hurst, corrLength = 5*nm, 0.5, 10*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # assembling the sample + vacuum_layer = ba.Layer(ba.Vacuum()) + vacuum_layer.addLayout(particle_layout) + substrate_layer = ba.Layer(material_si, roughness) + sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/scatter2d/RectangularGrating.py b/auto/Examples/scatter2d/RectangularGrating.py index 83614489f14..ac3cff679d8 100755 --- a/auto/Examples/scatter2d/RectangularGrating.py +++ b/auto/Examples/scatter2d/RectangularGrating.py @@ -36,19 +36,19 @@ def get_sample(lattice_rotation_angle=0*deg): particle_layout.addParticle(box) particle_layout.setInterference(interference) - # Sample - vacuum_layer = ba.Layer(vacuum) - vacuum_layer.addLayout(particle_layout) - substrate_layer = ba.Layer(material_si) - sigma, hurst, corrLength = 5*nm, 0.5, 10*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Sample + vacuum_layer = ba.Layer(vacuum) + vacuum_layer.addLayout(particle_layout) + substrate_layer = ba.Layer(material_si, roughness) + sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/scatter2d/RoughAndSpecular.py b/auto/Examples/scatter2d/RoughAndSpecular.py index 5747ec9ad94..f61f9b5e908 100755 --- a/auto/Examples/scatter2d/RoughAndSpecular.py +++ b/auto/Examples/scatter2d/RoughAndSpecular.py @@ -22,15 +22,15 @@ def get_sample(): # Define layers layer_1 = ba.Layer(material_Vacuum) - layer_2 = ba.Layer(material_HMDSO, 18.5*nm) - layer_3 = ba.Layer(material_PTFE, 22.1*nm) + layer_2 = ba.Layer(material_HMDSO, 18.5*nm, roughness_1) + layer_3 = ba.Layer(material_PTFE, 22.1*nm, roughness_2) layer_4 = ba.Layer(material_Si) # Define sample sample = ba.MultiLayer() sample.addLayer(layer_1) - sample.addLayerWithTopRoughness(layer_2, roughness_1) - sample.addLayerWithTopRoughness(layer_3, roughness_2) + sample.addLayer(layer_2) + sample.addLayer(layer_3) sample.addLayer(layer_4) return sample diff --git a/auto/Examples/specular/MagneticLayerImperfect.py b/auto/Examples/specular/MagneticLayerImperfect.py index ff255726ade..edd0d85e0ad 100755 --- a/auto/Examples/specular/MagneticLayerImperfect.py +++ b/auto/Examples/specular/MagneticLayerImperfect.py @@ -20,22 +20,22 @@ def get_sample(): material_Fe = ba.MaterialBySLD("Fe", 8.0241e-06, 6.0448e-10, B) material_substrate = ba.MaterialBySLD("MgO", 5.9803e-06, 9.3996e-12) - # Layers - layer_vacuum = ba.Layer(vacuum) - layer_Pd = ba.Layer(material_Pd, 120*angstrom) - layer_Fe = ba.Layer(material_Fe, 1000*angstrom) - layer_substrate = ba.Layer(material_substrate) - autocorr = ba.K_CorrelationModel(20*angstrom) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Layers + layer_vacuum = ba.Layer(vacuum) + layer_Pd = ba.Layer(material_Pd, 120*angstrom, roughness) + layer_Fe = ba.Layer(material_Fe, 1000*angstrom, roughness) + layer_substrate = ba.Layer(material_substrate, roughness) + # Multilayer sample = ba.MultiLayer() sample.addLayer(layer_vacuum) - sample.addLayerWithTopRoughness(layer_Pd, roughness) - sample.addLayerWithTopRoughness(layer_Fe, roughness) - sample.addLayerWithTopRoughness(layer_substrate, roughness) + sample.addLayer(layer_Pd) + sample.addLayer(layer_Fe) + sample.addLayer(layer_substrate) return sample diff --git a/auto/Examples/specular/PolarizedSpinAsymmetry.py b/auto/Examples/specular/PolarizedSpinAsymmetry.py index 3d696268a6a..d130ba14f72 100755 --- a/auto/Examples/specular/PolarizedSpinAsymmetry.py +++ b/auto/Examples/specular/PolarizedSpinAsymmetry.py @@ -48,10 +48,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("(Mg,Al,Fe)3O4", P["rho_Mafo"]*1e-6, 0, B) material_substrate = ba.MaterialBySLD("MgAl2O4", *sldMao) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom) - substrate_layer = ba.Layer(material_substrate) - r_Mafo_autocorr = ba.K_CorrelationModel(P["r_Mafo"]*angstrom) r_sub_autocorr = ba.K_CorrelationModel(P["r_Mao"]*angstrom) @@ -60,10 +56,14 @@ def get_sample(P): r_Mafo = ba.LayerRoughness(r_Mafo_autocorr, interlayer) r_substrate = ba.LayerRoughness(r_sub_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom, r_Mafo) + substrate_layer = ba.Layer(material_substrate, r_substrate) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_Mafo) - sample.addLayerWithTopRoughness(substrate_layer, r_substrate) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/specular/RoughnessModel.py b/auto/Examples/specular/RoughnessModel.py index caa32713291..b8ce9056563 100755 --- a/auto/Examples/specular/RoughnessModel.py +++ b/auto/Examples/specular/RoughnessModel.py @@ -16,23 +16,23 @@ def get_sample(interlayer): material_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0) - # create layers - ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) - substrate_layer = ba.Layer(material_substrate) - # Roughness autocorr = ba.K_CorrelationModel(10*angstrom) roughness = ba.LayerRoughness(autocorr, interlayer) + # create layers + ambient_layer = ba.Layer(vacuum) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) + substrate_layer = ba.Layer(material_substrate, roughness) + # create sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) for _ in range(10): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/specular/SpecularSimulationWithRoughness.py b/auto/Examples/specular/SpecularSimulationWithRoughness.py index d3a7fc2e37b..f53ff3d4bc4 100755 --- a/auto/Examples/specular/SpecularSimulationWithRoughness.py +++ b/auto/Examples/specular/SpecularSimulationWithRoughness.py @@ -16,23 +16,24 @@ def get_sample(): material_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0) - # Layers - ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) - substrate_layer = ba.Layer(material_substrate) - + # roughness autocorr = ba.K_CorrelationModel(1*nm) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Layers + ambient_layer = ba.Layer(vacuum) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) + substrate_layer = ba.Layer(material_substrate, roughness) + # Sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) for _ in range(10): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/varia/MaterialProfile.py b/auto/Examples/varia/MaterialProfile.py index a6ea4b4b0fb..0d30e034cea 100755 --- a/auto/Examples/varia/MaterialProfile.py +++ b/auto/Examples/varia/MaterialProfile.py @@ -19,24 +19,25 @@ def get_sample(): B_substrate = R3(1e8, 0, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0, B_substrate) + + # roughness + autocorr = ba.K_CorrelationModel(5*angstrom, 0.5, 10*angstrom) + interlayer = ba.TanhInterlayer() + roughness = ba.LayerRoughness(autocorr, interlayer) # layers ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) substrate_layer = ba.Layer(material_substrate) # sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) - autocorr = ba.K_CorrelationModel(5*angstrom, 0.5, 10*angstrom) - interlayer = ba.TanhInterlayer() - roughness = ba.LayerRoughness(autocorr, interlayer) - for _ in range(4): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/Examples/varia/RoughSurface.py b/auto/Examples/varia/RoughSurface.py index 6f319b1e8ff..0f50e6bb9f0 100755 --- a/auto/Examples/varia/RoughSurface.py +++ b/auto/Examples/varia/RoughSurface.py @@ -55,11 +55,6 @@ def get_sample(): material_layer = ba.RefractiveMaterial("layer", 5e-6, 0) material_substrate = ba.RefractiveMaterial("substrate", 15e-6, 0) - # defining layers - l_ambience = ba.Layer(vacuum) - l_layer = ba.Layer(material_layer, 25*nm) - l_substrate = ba.Layer(material_substrate) - # defining roughness height_distribution = ba.ErfInterlayer() max_spat_freq = 0.5*nm @@ -80,11 +75,16 @@ def get_sample(): autocorr_sub = ba.K_CorrelationModel(sigma, alpha, xi, max_spat_freq) roughness_sub = ba.LayerRoughness(autocorr_sub, height_distribution) + # defining layers + l_ambience = ba.Layer(vacuum) + l_layer = ba.Layer(material_layer, 25*nm, roughness_layer) + l_substrate = ba.Layer(material_substrate, roughness_sub) + # adding layers my_sample = ba.MultiLayer() my_sample.addLayer(l_ambience) - my_sample.addLayerWithTopRoughness(l_layer, roughness_layer) - my_sample.addLayerWithTopRoughness(l_substrate, roughness_sub) + my_sample.addLayer(l_layer) + my_sample.addLayer(l_substrate) return my_sample diff --git a/auto/FigExamples/fit/scatter2d/expfit_galaxi.py b/auto/FigExamples/fit/scatter2d/expfit_galaxi.py index 7b744666a99..e7f44ceb8c4 100755 --- a/auto/FigExamples/fit/scatter2d/expfit_galaxi.py +++ b/auto/FigExamples/fit/scatter2d/expfit_galaxi.py @@ -76,16 +76,16 @@ def get_sample(P): # layers vacuum_layer = ba.Layer(vacuum) - hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness) + hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness, r_hmdso) hmdso_layer.addLayout(layout) - ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness) + ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness, r_ptfe) substrate_layer = ba.Layer(material_Si) # assembling sample sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(hmdso_layer, r_hmdso) - sample.addLayerWithTopRoughness(ptfe_layer, r_ptfe) + sample.addLayer(hmdso_layer) + sample.addLayer(ptfe_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/fit/scatter2d/hardcode_galaxi.py b/auto/FigExamples/fit/scatter2d/hardcode_galaxi.py index 1936b6ddcb7..dce5578cbb5 100755 --- a/auto/FigExamples/fit/scatter2d/hardcode_galaxi.py +++ b/auto/FigExamples/fit/scatter2d/hardcode_galaxi.py @@ -58,16 +58,16 @@ def get_sample(): # layers vacuum_layer = ba.Layer(vacuum) - hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness) + hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness, r_hmdso) hmdso_layer.addLayout(layout) - ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness) + ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness, r_ptfe) substrate_layer = ba.Layer(material_Si) # assembling sample sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(hmdso_layer, r_hmdso) - sample.addLayerWithTopRoughness(ptfe_layer, r_ptfe) + sample.addLayer(hmdso_layer) + sample.addLayer(ptfe_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/fit/specular/Honeycomb_fit.py b/auto/FigExamples/fit/specular/Honeycomb_fit.py index d2fd6fb2c2c..7b5937050a8 100755 --- a/auto/FigExamples/fit/specular/Honeycomb_fit.py +++ b/auto/FigExamples/fit/specular/Honeycomb_fit.py @@ -42,13 +42,6 @@ def get_sample(P, sign, T): material_Si = ba.MaterialBySLD("Substrate", P["sld_Si_real"]*1e-6, P["sld_Si_imag"]*1e-6) - l_Air = ba.Layer(material_Air) - l_PyOx = ba.Layer(material_PyOx, P["t_PyOx"]*angstrom) - l_Py2 = ba.Layer(material_Py2, P["t_Py2"]*angstrom) - l_Py1 = ba.Layer(material_Py1, P["t_Py1"]*angstrom) - l_SiO2 = ba.Layer(material_SiO2, P["t_SiO2"]*angstrom) - l_Si = ba.Layer(material_Si) - interlayer_model = ba.ErfInterlayer() rPyOx_autocorr = ba.K_CorrelationModel(P["rPyOx"]*angstrom) @@ -62,14 +55,22 @@ def get_sample(P, sign, T): rPy1 = ba.LayerRoughness(rPy1_autocorr, interlayer_model) rSiO2 = ba.LayerRoughness(rSiO2_autocorr, interlayer_model) rSi = ba.LayerRoughness(rSi_autocorr, interlayer_model) + + l_Air = ba.Layer(material_Air) + l_PyOx = ba.Layer(material_PyOx, P["t_PyOx"]*angstrom, rPyOx) + l_Py2 = ba.Layer(material_Py2, P["t_Py2"]*angstrom, rPy2) + l_Py1 = ba.Layer(material_Py1, P["t_Py1"]*angstrom, rPy1) + l_SiO2 = ba.Layer(material_SiO2, P["t_SiO2"]*angstrom, rSiO2) + l_Si = ba.Layer(material_Si, rSi) + sample = ba.MultiLayer() sample.addLayer(l_Air) - sample.addLayerWithTopRoughness(l_PyOx, rPyOx) - sample.addLayerWithTopRoughness(l_Py2, rPy2) - sample.addLayerWithTopRoughness(l_Py1, rPy1) - sample.addLayerWithTopRoughness(l_SiO2, rSiO2) - sample.addLayerWithTopRoughness(l_Si, rSi) + sample.addLayer(l_PyOx) + sample.addLayer(l_Py2) + sample.addLayer(l_Py1) + sample.addLayer(l_SiO2) + sample.addLayer(l_Si) return sample diff --git a/auto/FigExamples/fit/specular/PolarizedSpinAsymmetry.py b/auto/FigExamples/fit/specular/PolarizedSpinAsymmetry.py index 48d5cd964c6..09a5b85ddc1 100755 --- a/auto/FigExamples/fit/specular/PolarizedSpinAsymmetry.py +++ b/auto/FigExamples/fit/specular/PolarizedSpinAsymmetry.py @@ -47,10 +47,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("(Mg,Al,Fe)3O4", P["rho_Mafo"]*1e-6, 0, B) material_substrate = ba.MaterialBySLD("MgAl2O4", *sldMao) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom) - substrate_layer = ba.Layer(material_substrate) - r_Mafo_autocorr = ba.K_CorrelationModel(P["r_Mafo"]*angstrom) r_substrate_autocorr = ba.K_CorrelationModel(P["r_Mao"]*angstrom) @@ -59,10 +55,14 @@ def get_sample(P): r_Mafo = ba.LayerRoughness(r_Mafo_autocorr, interlayer) r_substrate = ba.LayerRoughness(r_substrate_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom, r_Mafo) + substrate_layer = ba.Layer(material_substrate, r_substrate) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_Mafo) - sample.addLayerWithTopRoughness(substrate_layer, r_substrate) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/fit/specular/Pt_layer_fit.py b/auto/FigExamples/fit/specular/Pt_layer_fit.py index f6ca20a4d9a..87ef4678a46 100755 --- a/auto/FigExamples/fit/specular/Pt_layer_fit.py +++ b/auto/FigExamples/fit/specular/Pt_layer_fit.py @@ -28,10 +28,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("Pt", *sldPt) material_substrate = ba.MaterialBySLD("Si", *sldSi) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_pt/nm"]) - substrate_layer = ba.Layer(material_substrate) - interlayer = ba.TanhInterlayer() si_autocorr = ba.K_CorrelationModel(P["r_si/nm"]) @@ -40,11 +36,14 @@ def get_sample(P): r_si = ba.LayerRoughness(si_autocorr, interlayer) r_pt = ba.LayerRoughness(pt_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_pt/nm"], r_pt) + substrate_layer = ba.Layer(material_substrate, r_si) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_pt) - - sample.addLayerWithTopRoughness(substrate_layer, r_si) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/fit/specular/TREFF_Ni_film.py b/auto/FigExamples/fit/specular/TREFF_Ni_film.py index 283b7dc9625..587f9362ca5 100755 --- a/auto/FigExamples/fit/specular/TREFF_Ni_film.py +++ b/auto/FigExamples/fit/specular/TREFF_Ni_film.py @@ -24,22 +24,21 @@ def get_sample(P): material_SiO2 = ba.MaterialBySLD("SiO2", 2.0704e-06, 0) # Layers and interfaces - layer_Ni = ba.Layer(material_Ni_58, P["thickness"]) - interlayer = ba.TanhInterlayer() Ni_autocorr = ba.K_CorrelationModel(P["sigma_Ni"]) roughness_Ni = ba.LayerRoughness(Ni_autocorr, interlayer) - substrate = ba.Layer(material_SiO2) - sub_autocorr = ba.K_CorrelationModel(P["sigma_Substrate"]) roughness_Substrate = ba.LayerRoughness(sub_autocorr, interlayer) + + layer_Ni = ba.Layer(material_Ni_58, P["thickness"], roughness_Ni) + substrate = ba.Layer(material_SiO2, roughness_Substrate) sample = ba.MultiLayer() sample.addLayer(ba.Layer(vacuum)) - sample.addLayerWithTopRoughness(layer_Ni, roughness_Ni) - sample.addLayerWithTopRoughness(substrate, roughness_Substrate) + sample.addLayer(layer_Ni) + sample.addLayer(substrate) return sample diff --git a/auto/FigExamples/scatter2d/CorrelatedRoughness.py b/auto/FigExamples/scatter2d/CorrelatedRoughness.py index 0561abf001e..b6277d248f7 100755 --- a/auto/FigExamples/scatter2d/CorrelatedRoughness.py +++ b/auto/FigExamples/scatter2d/CorrelatedRoughness.py @@ -17,18 +17,19 @@ def get_sample(): material_part_b = ba.RefractiveMaterial("PartB", 10e-6, 0) material_substrate = ba.RefractiveMaterial("substrate", 15e-6, 0) - # defining layers - l_ambience = ba.Layer(vacuum) - l_part_a = ba.Layer(material_part_a, 2.5*nm) - l_part_b = ba.Layer(material_part_b, 5*nm) - l_substrate = ba.Layer(material_substrate) - + # defining roughenss sigma, hurst, corrLength = 1*nm, 0.3, 5*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() crosscorrelation = ba.CommonDepthCrosscorrelation(10*nm) roughness = ba.LayerRoughness(autocorr, interlayer, crosscorrelation) + # defining layers + l_ambience = ba.Layer(vacuum) + l_part_a = ba.Layer(material_part_a, 2.5*nm, roughness) + l_part_b = ba.Layer(material_part_b, 5*nm, roughness) + l_substrate = ba.Layer(material_substrate, roughness) + my_sample = ba.MultiLayer() # adding layers @@ -36,10 +37,10 @@ def get_sample(): n_repetitions = 5 for _ in range(n_repetitions): - my_sample.addLayerWithTopRoughness(l_part_a, roughness) - my_sample.addLayerWithTopRoughness(l_part_b, roughness) + my_sample.addLayer(l_part_a) + my_sample.addLayer(l_part_b) - my_sample.addLayerWithTopRoughness(l_substrate, roughness) + my_sample.addLayer(l_substrate) return my_sample diff --git a/auto/FigExamples/scatter2d/FindPeaks.py b/auto/FigExamples/scatter2d/FindPeaks.py index 6d918bd201c..481f900f9d1 100755 --- a/auto/FigExamples/scatter2d/FindPeaks.py +++ b/auto/FigExamples/scatter2d/FindPeaks.py @@ -36,19 +36,19 @@ def get_sample(lattice_rotation_angle=0*deg): particle_layout.addParticle(box) particle_layout.setInterference(interference) - # assembling the sample - vacuum_layer = ba.Layer(ba.Vacuum()) - vacuum_layer.addLayout(particle_layout) - substrate_layer = ba.Layer(material_si) - sigma, hurst, corrLength = 5*nm, 0.5, 10*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # assembling the sample + vacuum_layer = ba.Layer(ba.Vacuum()) + vacuum_layer.addLayout(particle_layout) + substrate_layer = ba.Layer(material_si, roughness) + sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/scatter2d/RectangularGrating.py b/auto/FigExamples/scatter2d/RectangularGrating.py index a70446e70ea..74504c8213b 100755 --- a/auto/FigExamples/scatter2d/RectangularGrating.py +++ b/auto/FigExamples/scatter2d/RectangularGrating.py @@ -36,19 +36,19 @@ def get_sample(lattice_rotation_angle=0*deg): particle_layout.addParticle(box) particle_layout.setInterference(interference) - # Sample - vacuum_layer = ba.Layer(vacuum) - vacuum_layer.addLayout(particle_layout) - substrate_layer = ba.Layer(material_si) - sigma, hurst, corrLength = 5*nm, 0.5, 10*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Sample + vacuum_layer = ba.Layer(vacuum) + vacuum_layer.addLayout(particle_layout) + substrate_layer = ba.Layer(material_si, roughness) + sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/scatter2d/RoughAndSpecular.py b/auto/FigExamples/scatter2d/RoughAndSpecular.py index fdb0644de49..34ef03d1f99 100755 --- a/auto/FigExamples/scatter2d/RoughAndSpecular.py +++ b/auto/FigExamples/scatter2d/RoughAndSpecular.py @@ -22,15 +22,15 @@ def get_sample(): # Define layers layer_1 = ba.Layer(material_Vacuum) - layer_2 = ba.Layer(material_HMDSO, 18.5*nm) - layer_3 = ba.Layer(material_PTFE, 22.1*nm) + layer_2 = ba.Layer(material_HMDSO, 18.5*nm, roughness_1) + layer_3 = ba.Layer(material_PTFE, 22.1*nm, roughness_2) layer_4 = ba.Layer(material_Si) # Define sample sample = ba.MultiLayer() sample.addLayer(layer_1) - sample.addLayerWithTopRoughness(layer_2, roughness_1) - sample.addLayerWithTopRoughness(layer_3, roughness_2) + sample.addLayer(layer_2) + sample.addLayer(layer_3) sample.addLayer(layer_4) return sample diff --git a/auto/FigExamples/specular/MagneticLayerImperfect.py b/auto/FigExamples/specular/MagneticLayerImperfect.py index 3e127287289..291bef064eb 100755 --- a/auto/FigExamples/specular/MagneticLayerImperfect.py +++ b/auto/FigExamples/specular/MagneticLayerImperfect.py @@ -20,22 +20,22 @@ def get_sample(): material_Fe = ba.MaterialBySLD("Fe", 8.0241e-06, 6.0448e-10, B) material_substrate = ba.MaterialBySLD("MgO", 5.9803e-06, 9.3996e-12) - # Layers - layer_vacuum = ba.Layer(vacuum) - layer_Pd = ba.Layer(material_Pd, 120*angstrom) - layer_Fe = ba.Layer(material_Fe, 1000*angstrom) - layer_substrate = ba.Layer(material_substrate) - autocorr = ba.K_CorrelationModel(20*angstrom) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Layers + layer_vacuum = ba.Layer(vacuum) + layer_Pd = ba.Layer(material_Pd, 120*angstrom, roughness) + layer_Fe = ba.Layer(material_Fe, 1000*angstrom, roughness) + layer_substrate = ba.Layer(material_substrate, roughness) + # Multilayer sample = ba.MultiLayer() sample.addLayer(layer_vacuum) - sample.addLayerWithTopRoughness(layer_Pd, roughness) - sample.addLayerWithTopRoughness(layer_Fe, roughness) - sample.addLayerWithTopRoughness(layer_substrate, roughness) + sample.addLayer(layer_Pd) + sample.addLayer(layer_Fe) + sample.addLayer(layer_substrate) return sample diff --git a/auto/FigExamples/specular/PolarizedSpinAsymmetry.py b/auto/FigExamples/specular/PolarizedSpinAsymmetry.py index 3f60f0f3ac8..b8ec2ff1dc8 100755 --- a/auto/FigExamples/specular/PolarizedSpinAsymmetry.py +++ b/auto/FigExamples/specular/PolarizedSpinAsymmetry.py @@ -48,10 +48,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("(Mg,Al,Fe)3O4", P["rho_Mafo"]*1e-6, 0, B) material_substrate = ba.MaterialBySLD("MgAl2O4", *sldMao) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom) - substrate_layer = ba.Layer(material_substrate) - r_Mafo_autocorr = ba.K_CorrelationModel(P["r_Mafo"]*angstrom) r_sub_autocorr = ba.K_CorrelationModel(P["r_Mao"]*angstrom) @@ -60,10 +56,14 @@ def get_sample(P): r_Mafo = ba.LayerRoughness(r_Mafo_autocorr, interlayer) r_substrate = ba.LayerRoughness(r_sub_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom, r_Mafo) + substrate_layer = ba.Layer(material_substrate, r_substrate) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_Mafo) - sample.addLayerWithTopRoughness(substrate_layer, r_substrate) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/specular/RoughnessModel.py b/auto/FigExamples/specular/RoughnessModel.py index dd42a718c6b..4699a7a31cd 100755 --- a/auto/FigExamples/specular/RoughnessModel.py +++ b/auto/FigExamples/specular/RoughnessModel.py @@ -16,23 +16,23 @@ def get_sample(interlayer): material_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0) - # create layers - ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) - substrate_layer = ba.Layer(material_substrate) - # Roughness autocorr = ba.K_CorrelationModel(10*angstrom) roughness = ba.LayerRoughness(autocorr, interlayer) + # create layers + ambient_layer = ba.Layer(vacuum) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) + substrate_layer = ba.Layer(material_substrate, roughness) + # create sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) for _ in range(10): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/specular/SpecularSimulationWithRoughness.py b/auto/FigExamples/specular/SpecularSimulationWithRoughness.py index 0a4d9209236..305bfaab093 100755 --- a/auto/FigExamples/specular/SpecularSimulationWithRoughness.py +++ b/auto/FigExamples/specular/SpecularSimulationWithRoughness.py @@ -16,23 +16,24 @@ def get_sample(): material_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0) - # Layers - ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) - substrate_layer = ba.Layer(material_substrate) - + # roughness autocorr = ba.K_CorrelationModel(1*nm) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Layers + ambient_layer = ba.Layer(vacuum) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) + substrate_layer = ba.Layer(material_substrate, roughness) + # Sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) for _ in range(10): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/varia/MaterialProfile.py b/auto/FigExamples/varia/MaterialProfile.py index a52132ee388..dc16882b36a 100755 --- a/auto/FigExamples/varia/MaterialProfile.py +++ b/auto/FigExamples/varia/MaterialProfile.py @@ -19,24 +19,25 @@ def get_sample(): B_substrate = R3(1e8, 0, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0, B_substrate) + + # roughness + autocorr = ba.K_CorrelationModel(5*angstrom, 0.5, 10*angstrom) + interlayer = ba.TanhInterlayer() + roughness = ba.LayerRoughness(autocorr, interlayer) # layers ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) substrate_layer = ba.Layer(material_substrate) # sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) - autocorr = ba.K_CorrelationModel(5*angstrom, 0.5, 10*angstrom) - interlayer = ba.TanhInterlayer() - roughness = ba.LayerRoughness(autocorr, interlayer) - for _ in range(4): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/FigExamples/varia/RoughSurface.py b/auto/FigExamples/varia/RoughSurface.py index 181070ebdde..76ad9a64d7b 100755 --- a/auto/FigExamples/varia/RoughSurface.py +++ b/auto/FigExamples/varia/RoughSurface.py @@ -55,11 +55,6 @@ def get_sample(): material_layer = ba.RefractiveMaterial("layer", 5e-6, 0) material_substrate = ba.RefractiveMaterial("substrate", 15e-6, 0) - # defining layers - l_ambience = ba.Layer(vacuum) - l_layer = ba.Layer(material_layer, 25*nm) - l_substrate = ba.Layer(material_substrate) - # defining roughness height_distribution = ba.ErfInterlayer() max_spat_freq = 0.5*nm @@ -80,11 +75,16 @@ def get_sample(): autocorr_sub = ba.K_CorrelationModel(sigma, alpha, xi, max_spat_freq) roughness_sub = ba.LayerRoughness(autocorr_sub, height_distribution) + # defining layers + l_ambience = ba.Layer(vacuum) + l_layer = ba.Layer(material_layer, 25*nm, roughness_layer) + l_substrate = ba.Layer(material_substrate, roughness_sub) + # adding layers my_sample = ba.MultiLayer() my_sample.addLayer(l_ambience) - my_sample.addLayerWithTopRoughness(l_layer, roughness_layer) - my_sample.addLayerWithTopRoughness(l_substrate, roughness_sub) + my_sample.addLayer(l_layer) + my_sample.addLayer(l_substrate) return my_sample diff --git a/auto/MiniExamples/fit/scatter2d/expfit_galaxi.py b/auto/MiniExamples/fit/scatter2d/expfit_galaxi.py index 7b744666a99..e7f44ceb8c4 100755 --- a/auto/MiniExamples/fit/scatter2d/expfit_galaxi.py +++ b/auto/MiniExamples/fit/scatter2d/expfit_galaxi.py @@ -76,16 +76,16 @@ def get_sample(P): # layers vacuum_layer = ba.Layer(vacuum) - hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness) + hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness, r_hmdso) hmdso_layer.addLayout(layout) - ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness) + ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness, r_ptfe) substrate_layer = ba.Layer(material_Si) # assembling sample sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(hmdso_layer, r_hmdso) - sample.addLayerWithTopRoughness(ptfe_layer, r_ptfe) + sample.addLayer(hmdso_layer) + sample.addLayer(ptfe_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/fit/scatter2d/hardcode_galaxi.py b/auto/MiniExamples/fit/scatter2d/hardcode_galaxi.py index 1936b6ddcb7..dce5578cbb5 100755 --- a/auto/MiniExamples/fit/scatter2d/hardcode_galaxi.py +++ b/auto/MiniExamples/fit/scatter2d/hardcode_galaxi.py @@ -58,16 +58,16 @@ def get_sample(): # layers vacuum_layer = ba.Layer(vacuum) - hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness) + hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness, r_hmdso) hmdso_layer.addLayout(layout) - ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness) + ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness, r_ptfe) substrate_layer = ba.Layer(material_Si) # assembling sample sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(hmdso_layer, r_hmdso) - sample.addLayerWithTopRoughness(ptfe_layer, r_ptfe) + sample.addLayer(hmdso_layer) + sample.addLayer(ptfe_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/fit/specular/Honeycomb_fit.py b/auto/MiniExamples/fit/specular/Honeycomb_fit.py index d2fd6fb2c2c..7b5937050a8 100755 --- a/auto/MiniExamples/fit/specular/Honeycomb_fit.py +++ b/auto/MiniExamples/fit/specular/Honeycomb_fit.py @@ -42,13 +42,6 @@ def get_sample(P, sign, T): material_Si = ba.MaterialBySLD("Substrate", P["sld_Si_real"]*1e-6, P["sld_Si_imag"]*1e-6) - l_Air = ba.Layer(material_Air) - l_PyOx = ba.Layer(material_PyOx, P["t_PyOx"]*angstrom) - l_Py2 = ba.Layer(material_Py2, P["t_Py2"]*angstrom) - l_Py1 = ba.Layer(material_Py1, P["t_Py1"]*angstrom) - l_SiO2 = ba.Layer(material_SiO2, P["t_SiO2"]*angstrom) - l_Si = ba.Layer(material_Si) - interlayer_model = ba.ErfInterlayer() rPyOx_autocorr = ba.K_CorrelationModel(P["rPyOx"]*angstrom) @@ -62,14 +55,22 @@ def get_sample(P, sign, T): rPy1 = ba.LayerRoughness(rPy1_autocorr, interlayer_model) rSiO2 = ba.LayerRoughness(rSiO2_autocorr, interlayer_model) rSi = ba.LayerRoughness(rSi_autocorr, interlayer_model) + + l_Air = ba.Layer(material_Air) + l_PyOx = ba.Layer(material_PyOx, P["t_PyOx"]*angstrom, rPyOx) + l_Py2 = ba.Layer(material_Py2, P["t_Py2"]*angstrom, rPy2) + l_Py1 = ba.Layer(material_Py1, P["t_Py1"]*angstrom, rPy1) + l_SiO2 = ba.Layer(material_SiO2, P["t_SiO2"]*angstrom, rSiO2) + l_Si = ba.Layer(material_Si, rSi) + sample = ba.MultiLayer() sample.addLayer(l_Air) - sample.addLayerWithTopRoughness(l_PyOx, rPyOx) - sample.addLayerWithTopRoughness(l_Py2, rPy2) - sample.addLayerWithTopRoughness(l_Py1, rPy1) - sample.addLayerWithTopRoughness(l_SiO2, rSiO2) - sample.addLayerWithTopRoughness(l_Si, rSi) + sample.addLayer(l_PyOx) + sample.addLayer(l_Py2) + sample.addLayer(l_Py1) + sample.addLayer(l_SiO2) + sample.addLayer(l_Si) return sample diff --git a/auto/MiniExamples/fit/specular/PolarizedSpinAsymmetry.py b/auto/MiniExamples/fit/specular/PolarizedSpinAsymmetry.py index 48d5cd964c6..09a5b85ddc1 100755 --- a/auto/MiniExamples/fit/specular/PolarizedSpinAsymmetry.py +++ b/auto/MiniExamples/fit/specular/PolarizedSpinAsymmetry.py @@ -47,10 +47,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("(Mg,Al,Fe)3O4", P["rho_Mafo"]*1e-6, 0, B) material_substrate = ba.MaterialBySLD("MgAl2O4", *sldMao) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom) - substrate_layer = ba.Layer(material_substrate) - r_Mafo_autocorr = ba.K_CorrelationModel(P["r_Mafo"]*angstrom) r_substrate_autocorr = ba.K_CorrelationModel(P["r_Mao"]*angstrom) @@ -59,10 +55,14 @@ def get_sample(P): r_Mafo = ba.LayerRoughness(r_Mafo_autocorr, interlayer) r_substrate = ba.LayerRoughness(r_substrate_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom, r_Mafo) + substrate_layer = ba.Layer(material_substrate, r_substrate) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_Mafo) - sample.addLayerWithTopRoughness(substrate_layer, r_substrate) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/fit/specular/Pt_layer_fit.py b/auto/MiniExamples/fit/specular/Pt_layer_fit.py index f6ca20a4d9a..87ef4678a46 100755 --- a/auto/MiniExamples/fit/specular/Pt_layer_fit.py +++ b/auto/MiniExamples/fit/specular/Pt_layer_fit.py @@ -28,10 +28,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("Pt", *sldPt) material_substrate = ba.MaterialBySLD("Si", *sldSi) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_pt/nm"]) - substrate_layer = ba.Layer(material_substrate) - interlayer = ba.TanhInterlayer() si_autocorr = ba.K_CorrelationModel(P["r_si/nm"]) @@ -40,11 +36,14 @@ def get_sample(P): r_si = ba.LayerRoughness(si_autocorr, interlayer) r_pt = ba.LayerRoughness(pt_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_pt/nm"], r_pt) + substrate_layer = ba.Layer(material_substrate, r_si) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_pt) - - sample.addLayerWithTopRoughness(substrate_layer, r_si) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/fit/specular/TREFF_Ni_film.py b/auto/MiniExamples/fit/specular/TREFF_Ni_film.py index 2fd2ab16085..c86a05ce289 100755 --- a/auto/MiniExamples/fit/specular/TREFF_Ni_film.py +++ b/auto/MiniExamples/fit/specular/TREFF_Ni_film.py @@ -24,22 +24,21 @@ def get_sample(P): material_SiO2 = ba.MaterialBySLD("SiO2", 2.0704e-06, 0) # Layers and interfaces - layer_Ni = ba.Layer(material_Ni_58, P["thickness"]) - interlayer = ba.TanhInterlayer() Ni_autocorr = ba.K_CorrelationModel(P["sigma_Ni"]) roughness_Ni = ba.LayerRoughness(Ni_autocorr, interlayer) - substrate = ba.Layer(material_SiO2) - sub_autocorr = ba.K_CorrelationModel(P["sigma_Substrate"]) roughness_Substrate = ba.LayerRoughness(sub_autocorr, interlayer) + + layer_Ni = ba.Layer(material_Ni_58, P["thickness"], roughness_Ni) + substrate = ba.Layer(material_SiO2, roughness_Substrate) sample = ba.MultiLayer() sample.addLayer(ba.Layer(vacuum)) - sample.addLayerWithTopRoughness(layer_Ni, roughness_Ni) - sample.addLayerWithTopRoughness(substrate, roughness_Substrate) + sample.addLayer(layer_Ni) + sample.addLayer(substrate) return sample diff --git a/auto/MiniExamples/scatter2d/CorrelatedRoughness.py b/auto/MiniExamples/scatter2d/CorrelatedRoughness.py index dff362626ff..c5bf1e6fef5 100755 --- a/auto/MiniExamples/scatter2d/CorrelatedRoughness.py +++ b/auto/MiniExamples/scatter2d/CorrelatedRoughness.py @@ -17,18 +17,19 @@ def get_sample(): material_part_b = ba.RefractiveMaterial("PartB", 10e-6, 0) material_substrate = ba.RefractiveMaterial("substrate", 15e-6, 0) - # defining layers - l_ambience = ba.Layer(vacuum) - l_part_a = ba.Layer(material_part_a, 2.5*nm) - l_part_b = ba.Layer(material_part_b, 5*nm) - l_substrate = ba.Layer(material_substrate) - + # defining roughenss sigma, hurst, corrLength = 1*nm, 0.3, 5*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() crosscorrelation = ba.CommonDepthCrosscorrelation(10*nm) roughness = ba.LayerRoughness(autocorr, interlayer, crosscorrelation) + # defining layers + l_ambience = ba.Layer(vacuum) + l_part_a = ba.Layer(material_part_a, 2.5*nm, roughness) + l_part_b = ba.Layer(material_part_b, 5*nm, roughness) + l_substrate = ba.Layer(material_substrate, roughness) + my_sample = ba.MultiLayer() # adding layers @@ -36,10 +37,10 @@ def get_sample(): n_repetitions = 5 for _ in range(n_repetitions): - my_sample.addLayerWithTopRoughness(l_part_a, roughness) - my_sample.addLayerWithTopRoughness(l_part_b, roughness) + my_sample.addLayer(l_part_a) + my_sample.addLayer(l_part_b) - my_sample.addLayerWithTopRoughness(l_substrate, roughness) + my_sample.addLayer(l_substrate) return my_sample diff --git a/auto/MiniExamples/scatter2d/FindPeaks.py b/auto/MiniExamples/scatter2d/FindPeaks.py index e9ad574e646..c91d672cd90 100755 --- a/auto/MiniExamples/scatter2d/FindPeaks.py +++ b/auto/MiniExamples/scatter2d/FindPeaks.py @@ -36,19 +36,19 @@ def get_sample(lattice_rotation_angle=0*deg): particle_layout.addParticle(box) particle_layout.setInterference(interference) - # assembling the sample - vacuum_layer = ba.Layer(ba.Vacuum()) - vacuum_layer.addLayout(particle_layout) - substrate_layer = ba.Layer(material_si) - sigma, hurst, corrLength = 5*nm, 0.5, 10*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # assembling the sample + vacuum_layer = ba.Layer(ba.Vacuum()) + vacuum_layer.addLayout(particle_layout) + substrate_layer = ba.Layer(material_si, roughness) + sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/scatter2d/RectangularGrating.py b/auto/MiniExamples/scatter2d/RectangularGrating.py index 8b5d01caa96..e274965f772 100755 --- a/auto/MiniExamples/scatter2d/RectangularGrating.py +++ b/auto/MiniExamples/scatter2d/RectangularGrating.py @@ -36,19 +36,19 @@ def get_sample(lattice_rotation_angle=0*deg): particle_layout.addParticle(box) particle_layout.setInterference(interference) - # Sample - vacuum_layer = ba.Layer(vacuum) - vacuum_layer.addLayout(particle_layout) - substrate_layer = ba.Layer(material_si) - sigma, hurst, corrLength = 5*nm, 0.5, 10*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Sample + vacuum_layer = ba.Layer(vacuum) + vacuum_layer.addLayout(particle_layout) + substrate_layer = ba.Layer(material_si, roughness) + sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/scatter2d/RoughAndSpecular.py b/auto/MiniExamples/scatter2d/RoughAndSpecular.py index d2e103da8b6..50290728ac5 100755 --- a/auto/MiniExamples/scatter2d/RoughAndSpecular.py +++ b/auto/MiniExamples/scatter2d/RoughAndSpecular.py @@ -22,15 +22,15 @@ def get_sample(): # Define layers layer_1 = ba.Layer(material_Vacuum) - layer_2 = ba.Layer(material_HMDSO, 18.5*nm) - layer_3 = ba.Layer(material_PTFE, 22.1*nm) + layer_2 = ba.Layer(material_HMDSO, 18.5*nm, roughness_1) + layer_3 = ba.Layer(material_PTFE, 22.1*nm, roughness_2) layer_4 = ba.Layer(material_Si) # Define sample sample = ba.MultiLayer() sample.addLayer(layer_1) - sample.addLayerWithTopRoughness(layer_2, roughness_1) - sample.addLayerWithTopRoughness(layer_3, roughness_2) + sample.addLayer(layer_2) + sample.addLayer(layer_3) sample.addLayer(layer_4) return sample diff --git a/auto/MiniExamples/specular/MagneticLayerImperfect.py b/auto/MiniExamples/specular/MagneticLayerImperfect.py index 3e127287289..291bef064eb 100755 --- a/auto/MiniExamples/specular/MagneticLayerImperfect.py +++ b/auto/MiniExamples/specular/MagneticLayerImperfect.py @@ -20,22 +20,22 @@ def get_sample(): material_Fe = ba.MaterialBySLD("Fe", 8.0241e-06, 6.0448e-10, B) material_substrate = ba.MaterialBySLD("MgO", 5.9803e-06, 9.3996e-12) - # Layers - layer_vacuum = ba.Layer(vacuum) - layer_Pd = ba.Layer(material_Pd, 120*angstrom) - layer_Fe = ba.Layer(material_Fe, 1000*angstrom) - layer_substrate = ba.Layer(material_substrate) - autocorr = ba.K_CorrelationModel(20*angstrom) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Layers + layer_vacuum = ba.Layer(vacuum) + layer_Pd = ba.Layer(material_Pd, 120*angstrom, roughness) + layer_Fe = ba.Layer(material_Fe, 1000*angstrom, roughness) + layer_substrate = ba.Layer(material_substrate, roughness) + # Multilayer sample = ba.MultiLayer() sample.addLayer(layer_vacuum) - sample.addLayerWithTopRoughness(layer_Pd, roughness) - sample.addLayerWithTopRoughness(layer_Fe, roughness) - sample.addLayerWithTopRoughness(layer_substrate, roughness) + sample.addLayer(layer_Pd) + sample.addLayer(layer_Fe) + sample.addLayer(layer_substrate) return sample diff --git a/auto/MiniExamples/specular/PolarizedSpinAsymmetry.py b/auto/MiniExamples/specular/PolarizedSpinAsymmetry.py index 3f60f0f3ac8..b8ec2ff1dc8 100755 --- a/auto/MiniExamples/specular/PolarizedSpinAsymmetry.py +++ b/auto/MiniExamples/specular/PolarizedSpinAsymmetry.py @@ -48,10 +48,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("(Mg,Al,Fe)3O4", P["rho_Mafo"]*1e-6, 0, B) material_substrate = ba.MaterialBySLD("MgAl2O4", *sldMao) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom) - substrate_layer = ba.Layer(material_substrate) - r_Mafo_autocorr = ba.K_CorrelationModel(P["r_Mafo"]*angstrom) r_sub_autocorr = ba.K_CorrelationModel(P["r_Mao"]*angstrom) @@ -60,10 +56,14 @@ def get_sample(P): r_Mafo = ba.LayerRoughness(r_Mafo_autocorr, interlayer) r_substrate = ba.LayerRoughness(r_sub_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom, r_Mafo) + substrate_layer = ba.Layer(material_substrate, r_substrate) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_Mafo) - sample.addLayerWithTopRoughness(substrate_layer, r_substrate) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/specular/RoughnessModel.py b/auto/MiniExamples/specular/RoughnessModel.py index d02b645a71c..20643d08d37 100755 --- a/auto/MiniExamples/specular/RoughnessModel.py +++ b/auto/MiniExamples/specular/RoughnessModel.py @@ -16,23 +16,23 @@ def get_sample(interlayer): material_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0) - # create layers - ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) - substrate_layer = ba.Layer(material_substrate) - # Roughness autocorr = ba.K_CorrelationModel(10*angstrom) roughness = ba.LayerRoughness(autocorr, interlayer) + # create layers + ambient_layer = ba.Layer(vacuum) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) + substrate_layer = ba.Layer(material_substrate, roughness) + # create sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) for _ in range(10): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/specular/SpecularSimulationWithRoughness.py b/auto/MiniExamples/specular/SpecularSimulationWithRoughness.py index 537c356420c..73ccd906f8f 100755 --- a/auto/MiniExamples/specular/SpecularSimulationWithRoughness.py +++ b/auto/MiniExamples/specular/SpecularSimulationWithRoughness.py @@ -16,23 +16,24 @@ def get_sample(): material_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0) - # Layers - ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) - substrate_layer = ba.Layer(material_substrate) - + # roughness autocorr = ba.K_CorrelationModel(1*nm) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Layers + ambient_layer = ba.Layer(vacuum) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) + substrate_layer = ba.Layer(material_substrate, roughness) + # Sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) for _ in range(10): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) + sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/varia/MaterialProfile.py b/auto/MiniExamples/varia/MaterialProfile.py index a52132ee388..dc16882b36a 100755 --- a/auto/MiniExamples/varia/MaterialProfile.py +++ b/auto/MiniExamples/varia/MaterialProfile.py @@ -19,24 +19,25 @@ def get_sample(): B_substrate = R3(1e8, 0, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0, B_substrate) + + # roughness + autocorr = ba.K_CorrelationModel(5*angstrom, 0.5, 10*angstrom) + interlayer = ba.TanhInterlayer() + roughness = ba.LayerRoughness(autocorr, interlayer) # layers ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) substrate_layer = ba.Layer(material_substrate) # sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) - autocorr = ba.K_CorrelationModel(5*angstrom, 0.5, 10*angstrom) - interlayer = ba.TanhInterlayer() - roughness = ba.LayerRoughness(autocorr, interlayer) - for _ in range(4): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) sample.addLayer(substrate_layer) return sample diff --git a/auto/MiniExamples/varia/RoughSurface.py b/auto/MiniExamples/varia/RoughSurface.py index e677d0d71bd..f40422c2357 100755 --- a/auto/MiniExamples/varia/RoughSurface.py +++ b/auto/MiniExamples/varia/RoughSurface.py @@ -55,11 +55,6 @@ def get_sample(): material_layer = ba.RefractiveMaterial("layer", 5e-6, 0) material_substrate = ba.RefractiveMaterial("substrate", 15e-6, 0) - # defining layers - l_ambience = ba.Layer(vacuum) - l_layer = ba.Layer(material_layer, 25*nm) - l_substrate = ba.Layer(material_substrate) - # defining roughness height_distribution = ba.ErfInterlayer() max_spat_freq = 0.5*nm @@ -80,11 +75,16 @@ def get_sample(): autocorr_sub = ba.K_CorrelationModel(sigma, alpha, xi, max_spat_freq) roughness_sub = ba.LayerRoughness(autocorr_sub, height_distribution) + # defining layers + l_ambience = ba.Layer(vacuum) + l_layer = ba.Layer(material_layer, 25*nm, roughness_layer) + l_substrate = ba.Layer(material_substrate, roughness_sub) + # adding layers my_sample = ba.MultiLayer() my_sample.addLayer(l_ambience) - my_sample.addLayerWithTopRoughness(l_layer, roughness_layer) - my_sample.addLayerWithTopRoughness(l_substrate, roughness_sub) + my_sample.addLayer(l_layer) + my_sample.addLayer(l_substrate) return my_sample diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py index 6c2e39716d6..f2092380694 100644 --- a/auto/Wrap/libBornAgainSample.py +++ b/auto/Wrap/libBornAgainSample.py @@ -4212,9 +4212,9 @@ class RoughnessMap(object): thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag") __repr__ = _swig_repr - def __init__(self, x_points, y_points, Lx, Ly, sample, i_interface, seed=-1): - r"""__init__(RoughnessMap self, size_t x_points, size_t y_points, double Lx, double Ly, MultiLayer sample, int i_interface, int seed=-1) -> RoughnessMap""" - _libBornAgainSample.RoughnessMap_swiginit(self, _libBornAgainSample.new_RoughnessMap(x_points, y_points, Lx, Ly, sample, i_interface, seed)) + def __init__(self, x_points, y_points, Lx, Ly, sample, i_layer, seed=-1): + r"""__init__(RoughnessMap self, size_t x_points, size_t y_points, double Lx, double Ly, MultiLayer sample, int i_layer, int seed=-1) -> RoughnessMap""" + _libBornAgainSample.RoughnessMap_swiginit(self, _libBornAgainSample.new_RoughnessMap(x_points, y_points, Lx, Ly, sample, i_layer, seed)) def generateMap(self): r"""generateMap(RoughnessMap self) -> double2d_t""" @@ -4233,9 +4233,12 @@ class Layer(ISampleNode): thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag") __repr__ = _swig_repr - def __init__(self, material, thickness=0, roughness=None): - r"""__init__(Layer self, Material material, double thickness=0, LayerRoughness roughness=None) -> Layer""" - _libBornAgainSample.Layer_swiginit(self, _libBornAgainSample.new_Layer(material, thickness, roughness)) + def __init__(self, *args): + r""" + __init__(Layer self, Material material, double thickness=0, LayerRoughness roughness=None) -> Layer + __init__(Layer self, Material material, LayerRoughness roughness) -> Layer + """ + _libBornAgainSample.Layer_swiginit(self, _libBornAgainSample.new_Layer(*args)) __swig_destroy__ = _libBornAgainSample.delete_Layer def clone(self): @@ -4283,10 +4286,6 @@ class MultiLayer(ISampleNode): r"""addLayer(MultiLayer self, Layer layer)""" return _libBornAgainSample.MultiLayer_addLayer(self, layer) - def addLayerWithTopRoughness(self, layer, roughness): - r"""addLayerWithTopRoughness(MultiLayer self, Layer layer, LayerRoughness roughness)""" - return _libBornAgainSample.MultiLayer_addLayerWithTopRoughness(self, layer, roughness) - def setExternalField(self, ext_field): r"""setExternalField(MultiLayer self, R3 ext_field)""" return _libBornAgainSample.MultiLayer_setExternalField(self, ext_field) @@ -4295,13 +4294,13 @@ class MultiLayer(ISampleNode): r"""setName(MultiLayer self, std::string const & name)""" return _libBornAgainSample.MultiLayer_setName(self, name) - def layerInterfaceSpectrum(self, spatial_f, i_interface): - r"""layerInterfaceSpectrum(MultiLayer self, double spatial_f, int i_interface) -> double""" - return _libBornAgainSample.MultiLayer_layerInterfaceSpectrum(self, spatial_f, i_interface) + def layerRoughnessSpectrum(self, spatial_f, i_layer): + r"""layerRoughnessSpectrum(MultiLayer self, double spatial_f, int i_layer) -> double""" + return _libBornAgainSample.MultiLayer_layerRoughnessSpectrum(self, spatial_f, i_layer) - def layerInterfaceRMS(self, i_interface): - r"""layerInterfaceRMS(MultiLayer self, size_t i_interface) -> double""" - return _libBornAgainSample.MultiLayer_layerInterfaceRMS(self, i_interface) + def layerRoughnessRMS(self, i_layer): + r"""layerRoughnessRMS(MultiLayer self, size_t i_layer) -> double""" + return _libBornAgainSample.MultiLayer_layerRoughnessRMS(self, i_layer) # Register MultiLayer in _libBornAgainSample: _libBornAgainSample.MultiLayer_swigregister(MultiLayer) @@ -6391,9 +6390,9 @@ class SimpleSelectionRule(ISelectionRule): r"""isEqualTo(SimpleSelectionRule self, ISelectionRule isr) -> bool""" return _libBornAgainSample.SimpleSelectionRule_isEqualTo(self, isr) - def __eq__(self, arg2): - r"""__eq__(SimpleSelectionRule self, SimpleSelectionRule arg2) -> bool""" - return _libBornAgainSample.SimpleSelectionRule___eq__(self, arg2) + def __eq__(self, other): + r"""__eq__(SimpleSelectionRule self, SimpleSelectionRule other) -> bool""" + return _libBornAgainSample.SimpleSelectionRule___eq__(self, other) # Register SimpleSelectionRule in _libBornAgainSample: _libBornAgainSample.SimpleSelectionRule_swigregister(SimpleSelectionRule) diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp index a3071aed777..b7f7a6019e8 100644 --- a/auto/Wrap/libBornAgainSample_wrap.cpp +++ b/auto/Wrap/libBornAgainSample_wrap.cpp @@ -7147,7 +7147,6 @@ SWIGINTERN void std_vector_Sl_std_pair_Sl_double_Sc_double_Sg__Sg__insert__SWIG_ #include "Sample/Particle/Particle.h" #include "Sample/Particle/Compound.h" #include "Sample/Particle/CoreAndShell.h" -#include "Sample/Interface/LayerInterface.h" #include "Sample/Interface/LayerRoughness.h" #include "Sample/Interface/RoughnessMap.h" #include "Sample/Scattering/Rotations.h" @@ -51373,6 +51372,49 @@ fail: } +SWIGINTERN PyObject *_wrap_new_Layer__SWIG_3(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) { + PyObject *resultobj = 0; + Material *arg1 = 0 ; + LayerRoughness *arg2 = (LayerRoughness *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + Layer *result = 0 ; + + (void)self; + if ((nobjs < 2) || (nobjs > 2)) SWIG_fail; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_Material, 0 | 0); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Layer" "', argument " "1"" of type '" "Material const &""'"); + } + if (!argp1) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Layer" "', argument " "1"" of type '" "Material const &""'"); + } + arg1 = reinterpret_cast< Material * >(argp1); + res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_LayerRoughness, 0 | 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_Layer" "', argument " "2"" of type '" "LayerRoughness const *""'"); + } + arg2 = reinterpret_cast< LayerRoughness * >(argp2); + { + try { + result = (Layer *)new Layer((Material const &)*arg1,(LayerRoughness const *)arg2); + } catch (const std::exception& ex) { + // message shown in the Python interpreter + const std::string msg { + "BornAgain C++ Exception: " + std::string(ex.what()) + }; + SWIG_exception(SWIG_RuntimeError, msg.c_str()); + } + } + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Layer, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_new_Layer(PyObject *self, PyObject *args) { Py_ssize_t argc; PyObject *argv[4] = { @@ -51389,6 +51431,19 @@ SWIGINTERN PyObject *_wrap_new_Layer(PyObject *self, PyObject *args) { return _wrap_new_Layer__SWIG_2(self, argc, argv); } } + if (argc == 2) { + int _v = 0; + int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, SWIG_POINTER_NO_NULL | 0); + _v = SWIG_CheckState(res); + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_LayerRoughness, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_Layer__SWIG_3(self, argc, argv); + } + } + } if (argc == 2) { int _v = 0; int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, SWIG_POINTER_NO_NULL | 0); @@ -51428,7 +51483,8 @@ fail: " Possible C/C++ prototypes are:\n" " Layer::Layer(Material const &,double,LayerRoughness const *)\n" " Layer::Layer(Material const &,double)\n" - " Layer::Layer(Material const &)\n"); + " Layer::Layer(Material const &)\n" + " Layer::Layer(Material const &,LayerRoughness const *)\n"); return 0; } @@ -51830,60 +51886,6 @@ fail: } -SWIGINTERN PyObject *_wrap_MultiLayer_addLayerWithTopRoughness(PyObject *self, PyObject *args) { - PyObject *resultobj = 0; - MultiLayer *arg1 = (MultiLayer *) 0 ; - Layer *arg2 = 0 ; - LayerRoughness *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject *swig_obj[3] ; - - (void)self; - if (!SWIG_Python_UnpackTuple(args, "MultiLayer_addLayerWithTopRoughness", 3, 3, swig_obj)) SWIG_fail; - res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_MultiLayer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_addLayerWithTopRoughness" "', argument " "1"" of type '" "MultiLayer *""'"); - } - arg1 = reinterpret_cast< MultiLayer * >(argp1); - res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Layer, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MultiLayer_addLayerWithTopRoughness" "', argument " "2"" of type '" "Layer const &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MultiLayer_addLayerWithTopRoughness" "', argument " "2"" of type '" "Layer const &""'"); - } - arg2 = reinterpret_cast< Layer * >(argp2); - res3 = SWIG_ConvertPtr(swig_obj[2], &argp3, SWIGTYPE_p_LayerRoughness, 0 | 0); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "MultiLayer_addLayerWithTopRoughness" "', argument " "3"" of type '" "LayerRoughness const &""'"); - } - if (!argp3) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MultiLayer_addLayerWithTopRoughness" "', argument " "3"" of type '" "LayerRoughness const &""'"); - } - arg3 = reinterpret_cast< LayerRoughness * >(argp3); - { - try { - (arg1)->addLayerWithTopRoughness((Layer const &)*arg2,(LayerRoughness const &)*arg3); - } catch (const std::exception& ex) { - // message shown in the Python interpreter - const std::string msg { - "BornAgain C++ Exception: " + std::string(ex.what()) - }; - SWIG_exception(SWIG_RuntimeError, msg.c_str()); - } - } - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - SWIGINTERN PyObject *_wrap_MultiLayer_setExternalField(PyObject *self, PyObject *args) { PyObject *resultobj = 0; MultiLayer *arg1 = (MultiLayer *) 0 ; @@ -51974,7 +51976,7 @@ fail: } -SWIGINTERN PyObject *_wrap_MultiLayer_layerInterfaceSpectrum(PyObject *self, PyObject *args) { +SWIGINTERN PyObject *_wrap_MultiLayer_layerRoughnessSpectrum(PyObject *self, PyObject *args) { PyObject *resultobj = 0; MultiLayer *arg1 = (MultiLayer *) 0 ; double arg2 ; @@ -51989,25 +51991,25 @@ SWIGINTERN PyObject *_wrap_MultiLayer_layerInterfaceSpectrum(PyObject *self, PyO double result; (void)self; - if (!SWIG_Python_UnpackTuple(args, "MultiLayer_layerInterfaceSpectrum", 3, 3, swig_obj)) SWIG_fail; + if (!SWIG_Python_UnpackTuple(args, "MultiLayer_layerRoughnessSpectrum", 3, 3, swig_obj)) SWIG_fail; res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_MultiLayer, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_layerInterfaceSpectrum" "', argument " "1"" of type '" "MultiLayer const *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_layerRoughnessSpectrum" "', argument " "1"" of type '" "MultiLayer const *""'"); } arg1 = reinterpret_cast< MultiLayer * >(argp1); ecode2 = SWIG_AsVal_double(swig_obj[1], &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_layerInterfaceSpectrum" "', argument " "2"" of type '" "double""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_layerRoughnessSpectrum" "', argument " "2"" of type '" "double""'"); } arg2 = static_cast< double >(val2); ecode3 = SWIG_AsVal_int(swig_obj[2], &val3); if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "MultiLayer_layerInterfaceSpectrum" "', argument " "3"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "MultiLayer_layerRoughnessSpectrum" "', argument " "3"" of type '" "int""'"); } arg3 = static_cast< int >(val3); { try { - result = (double)((MultiLayer const *)arg1)->layerInterfaceSpectrum(arg2,arg3); + result = (double)((MultiLayer const *)arg1)->layerRoughnessSpectrum(arg2,arg3); } catch (const std::exception& ex) { // message shown in the Python interpreter const std::string msg { @@ -52023,7 +52025,7 @@ fail: } -SWIGINTERN PyObject *_wrap_MultiLayer_layerInterfaceRMS(PyObject *self, PyObject *args) { +SWIGINTERN PyObject *_wrap_MultiLayer_layerRoughnessRMS(PyObject *self, PyObject *args) { PyObject *resultobj = 0; MultiLayer *arg1 = (MultiLayer *) 0 ; size_t arg2 ; @@ -52035,20 +52037,20 @@ SWIGINTERN PyObject *_wrap_MultiLayer_layerInterfaceRMS(PyObject *self, PyObject double result; (void)self; - if (!SWIG_Python_UnpackTuple(args, "MultiLayer_layerInterfaceRMS", 2, 2, swig_obj)) SWIG_fail; + if (!SWIG_Python_UnpackTuple(args, "MultiLayer_layerRoughnessRMS", 2, 2, swig_obj)) SWIG_fail; res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_MultiLayer, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_layerInterfaceRMS" "', argument " "1"" of type '" "MultiLayer const *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_layerRoughnessRMS" "', argument " "1"" of type '" "MultiLayer const *""'"); } arg1 = reinterpret_cast< MultiLayer * >(argp1); ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_layerInterfaceRMS" "', argument " "2"" of type '" "size_t""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_layerRoughnessRMS" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); { try { - result = (double)((MultiLayer const *)arg1)->layerInterfaceRMS(arg2); + result = (double)((MultiLayer const *)arg1)->layerRoughnessRMS(arg2); } catch (const std::exception& ex) { // message shown in the Python interpreter const std::string msg { @@ -75308,13 +75310,16 @@ static PyMethodDef SwigMethods[] = { { "delete_LayerRoughness", _wrap_delete_LayerRoughness, METH_O, "delete_LayerRoughness(LayerRoughness self)"}, { "LayerRoughness_swigregister", LayerRoughness_swigregister, METH_O, NULL}, { "LayerRoughness_swiginit", LayerRoughness_swiginit, METH_VARARGS, NULL}, - { "new_RoughnessMap", _wrap_new_RoughnessMap, METH_VARARGS, "RoughnessMap(size_t x_points, size_t y_points, double Lx, double Ly, MultiLayer sample, int i_interface, int seed=-1)"}, + { "new_RoughnessMap", _wrap_new_RoughnessMap, METH_VARARGS, "RoughnessMap(size_t x_points, size_t y_points, double Lx, double Ly, MultiLayer sample, int i_layer, int seed=-1)"}, { "RoughnessMap_generateMap", _wrap_RoughnessMap_generateMap, METH_O, "RoughnessMap_generateMap(RoughnessMap self) -> double2d_t"}, { "RoughnessMap_generate", _wrap_RoughnessMap_generate, METH_O, "RoughnessMap_generate(RoughnessMap self) -> Arrayf64Wrapper"}, { "delete_RoughnessMap", _wrap_delete_RoughnessMap, METH_O, "delete_RoughnessMap(RoughnessMap self)"}, { "RoughnessMap_swigregister", RoughnessMap_swigregister, METH_O, NULL}, { "RoughnessMap_swiginit", RoughnessMap_swiginit, METH_VARARGS, NULL}, - { "new_Layer", _wrap_new_Layer, METH_VARARGS, "Layer(Material material, double thickness=0, LayerRoughness roughness=None)"}, + { "new_Layer", _wrap_new_Layer, METH_VARARGS, "\n" + "Layer(Material material, double thickness=0, LayerRoughness roughness=None)\n" + "new_Layer(Material material, LayerRoughness roughness) -> Layer\n" + ""}, { "delete_Layer", _wrap_delete_Layer, METH_O, "delete_Layer(Layer self)"}, { "Layer_clone", _wrap_Layer_clone, METH_O, "Layer_clone(Layer self) -> Layer"}, { "Layer_className", _wrap_Layer_className, METH_O, "Layer_className(Layer self) -> std::string"}, @@ -75328,11 +75333,10 @@ static PyMethodDef SwigMethods[] = { { "MultiLayer_clone", _wrap_MultiLayer_clone, METH_O, "MultiLayer_clone(MultiLayer self) -> MultiLayer"}, { "MultiLayer_className", _wrap_MultiLayer_className, METH_O, "MultiLayer_className(MultiLayer self) -> std::string"}, { "MultiLayer_addLayer", _wrap_MultiLayer_addLayer, METH_VARARGS, "MultiLayer_addLayer(MultiLayer self, Layer layer)"}, - { "MultiLayer_addLayerWithTopRoughness", _wrap_MultiLayer_addLayerWithTopRoughness, METH_VARARGS, "MultiLayer_addLayerWithTopRoughness(MultiLayer self, Layer layer, LayerRoughness roughness)"}, { "MultiLayer_setExternalField", _wrap_MultiLayer_setExternalField, METH_VARARGS, "MultiLayer_setExternalField(MultiLayer self, R3 ext_field)"}, { "MultiLayer_setName", _wrap_MultiLayer_setName, METH_VARARGS, "MultiLayer_setName(MultiLayer self, std::string const & name)"}, - { "MultiLayer_layerInterfaceSpectrum", _wrap_MultiLayer_layerInterfaceSpectrum, METH_VARARGS, "MultiLayer_layerInterfaceSpectrum(MultiLayer self, double spatial_f, int i_interface) -> double"}, - { "MultiLayer_layerInterfaceRMS", _wrap_MultiLayer_layerInterfaceRMS, METH_VARARGS, "MultiLayer_layerInterfaceRMS(MultiLayer self, size_t i_interface) -> double"}, + { "MultiLayer_layerRoughnessSpectrum", _wrap_MultiLayer_layerRoughnessSpectrum, METH_VARARGS, "MultiLayer_layerRoughnessSpectrum(MultiLayer self, double spatial_f, int i_layer) -> double"}, + { "MultiLayer_layerRoughnessRMS", _wrap_MultiLayer_layerRoughnessRMS, METH_VARARGS, "MultiLayer_layerRoughnessRMS(MultiLayer self, size_t i_layer) -> double"}, { "MultiLayer_swigregister", MultiLayer_swigregister, METH_O, NULL}, { "MultiLayer_swiginit", MultiLayer_swiginit, METH_VARARGS, NULL}, { "AutocorrelationModel_clone", _wrap_AutocorrelationModel_clone, METH_O, "AutocorrelationModel_clone(AutocorrelationModel self) -> AutocorrelationModel"}, @@ -75956,7 +75960,7 @@ static PyMethodDef SwigMethods[] = { { "SimpleSelectionRule_clone", _wrap_SimpleSelectionRule_clone, METH_O, "SimpleSelectionRule_clone(SimpleSelectionRule self) -> SimpleSelectionRule"}, { "SimpleSelectionRule_coordinateSelected", _wrap_SimpleSelectionRule_coordinateSelected, METH_VARARGS, "SimpleSelectionRule_coordinateSelected(SimpleSelectionRule self, I3 const & coordinate) -> bool"}, { "SimpleSelectionRule_isEqualTo", _wrap_SimpleSelectionRule_isEqualTo, METH_VARARGS, "SimpleSelectionRule_isEqualTo(SimpleSelectionRule self, ISelectionRule isr) -> bool"}, - { "SimpleSelectionRule___eq__", _wrap_SimpleSelectionRule___eq__, METH_VARARGS, "SimpleSelectionRule___eq__(SimpleSelectionRule self, SimpleSelectionRule arg2) -> bool"}, + { "SimpleSelectionRule___eq__", _wrap_SimpleSelectionRule___eq__, METH_VARARGS, "SimpleSelectionRule___eq__(SimpleSelectionRule self, SimpleSelectionRule other) -> bool"}, { "SimpleSelectionRule_swigregister", SimpleSelectionRule_swigregister, METH_O, NULL}, { "SimpleSelectionRule_swiginit", SimpleSelectionRule_swiginit, METH_VARARGS, NULL}, { "new_Lattice3D", _wrap_new_Lattice3D, METH_VARARGS, "\n" diff --git a/rawEx/fit/scatter2d/expfit_galaxi.py b/rawEx/fit/scatter2d/expfit_galaxi.py index d8c144eea87..832075302e4 100755 --- a/rawEx/fit/scatter2d/expfit_galaxi.py +++ b/rawEx/fit/scatter2d/expfit_galaxi.py @@ -76,16 +76,16 @@ def get_sample(P): # layers vacuum_layer = ba.Layer(vacuum) - hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness) + hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness, r_hmdso) hmdso_layer.addLayout(layout) - ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness) + ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness, r_ptfe) substrate_layer = ba.Layer(material_Si) # assembling sample sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(hmdso_layer, r_hmdso) - sample.addLayerWithTopRoughness(ptfe_layer, r_ptfe) + sample.addLayer(hmdso_layer) + sample.addLayer(ptfe_layer) sample.addLayer(substrate_layer) return sample diff --git a/rawEx/fit/scatter2d/hardcode_galaxi.py b/rawEx/fit/scatter2d/hardcode_galaxi.py index 1936b6ddcb7..dce5578cbb5 100755 --- a/rawEx/fit/scatter2d/hardcode_galaxi.py +++ b/rawEx/fit/scatter2d/hardcode_galaxi.py @@ -58,16 +58,16 @@ def get_sample(): # layers vacuum_layer = ba.Layer(vacuum) - hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness) + hmdso_layer = ba.Layer(material_HMDSO, hmdso_thickness, r_hmdso) hmdso_layer.addLayout(layout) - ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness) + ptfe_layer = ba.Layer(material_PTFE, ptfe_thickness, r_ptfe) substrate_layer = ba.Layer(material_Si) # assembling sample sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(hmdso_layer, r_hmdso) - sample.addLayerWithTopRoughness(ptfe_layer, r_ptfe) + sample.addLayer(hmdso_layer) + sample.addLayer(ptfe_layer) sample.addLayer(substrate_layer) return sample diff --git a/rawEx/fit/specular/Honeycomb_fit.py b/rawEx/fit/specular/Honeycomb_fit.py index 598aadf8726..f5d118abc5a 100755 --- a/rawEx/fit/specular/Honeycomb_fit.py +++ b/rawEx/fit/specular/Honeycomb_fit.py @@ -42,13 +42,6 @@ def get_sample(P, sign, T): material_Si = ba.MaterialBySLD("Substrate", P["sld_Si_real"]*1e-6, P["sld_Si_imag"]*1e-6) - l_Air = ba.Layer(material_Air) - l_PyOx = ba.Layer(material_PyOx, P["t_PyOx"]*angstrom) - l_Py2 = ba.Layer(material_Py2, P["t_Py2"]*angstrom) - l_Py1 = ba.Layer(material_Py1, P["t_Py1"]*angstrom) - l_SiO2 = ba.Layer(material_SiO2, P["t_SiO2"]*angstrom) - l_Si = ba.Layer(material_Si) - interlayer_model = ba.ErfInterlayer() rPyOx_autocorr = ba.K_CorrelationModel(P["rPyOx"]*angstrom) @@ -62,14 +55,22 @@ def get_sample(P, sign, T): rPy1 = ba.LayerRoughness(rPy1_autocorr, interlayer_model) rSiO2 = ba.LayerRoughness(rSiO2_autocorr, interlayer_model) rSi = ba.LayerRoughness(rSi_autocorr, interlayer_model) + + l_Air = ba.Layer(material_Air) + l_PyOx = ba.Layer(material_PyOx, P["t_PyOx"]*angstrom, rPyOx) + l_Py2 = ba.Layer(material_Py2, P["t_Py2"]*angstrom, rPy2) + l_Py1 = ba.Layer(material_Py1, P["t_Py1"]*angstrom, rPy1) + l_SiO2 = ba.Layer(material_SiO2, P["t_SiO2"]*angstrom, rSiO2) + l_Si = ba.Layer(material_Si, rSi) + sample = ba.MultiLayer() sample.addLayer(l_Air) - sample.addLayerWithTopRoughness(l_PyOx, rPyOx) - sample.addLayerWithTopRoughness(l_Py2, rPy2) - sample.addLayerWithTopRoughness(l_Py1, rPy1) - sample.addLayerWithTopRoughness(l_SiO2, rSiO2) - sample.addLayerWithTopRoughness(l_Si, rSi) + sample.addLayer(l_PyOx) + sample.addLayer(l_Py2) + sample.addLayer(l_Py1) + sample.addLayer(l_SiO2) + sample.addLayer(l_Si) return sample diff --git a/rawEx/fit/specular/PolarizedSpinAsymmetry.py b/rawEx/fit/specular/PolarizedSpinAsymmetry.py index f4f708970f0..0f93a677597 100755 --- a/rawEx/fit/specular/PolarizedSpinAsymmetry.py +++ b/rawEx/fit/specular/PolarizedSpinAsymmetry.py @@ -47,10 +47,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("(Mg,Al,Fe)3O4", P["rho_Mafo"]*1e-6, 0, B) material_substrate = ba.MaterialBySLD("MgAl2O4", *sldMao) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom) - substrate_layer = ba.Layer(material_substrate) - r_Mafo_autocorr = ba.K_CorrelationModel(P["r_Mafo"]*angstrom) r_substrate_autocorr = ba.K_CorrelationModel(P["r_Mao"]*angstrom) @@ -59,10 +55,14 @@ def get_sample(P): r_Mafo = ba.LayerRoughness(r_Mafo_autocorr, interlayer) r_substrate = ba.LayerRoughness(r_substrate_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom, r_Mafo) + substrate_layer = ba.Layer(material_substrate, r_substrate) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_Mafo) - sample.addLayerWithTopRoughness(substrate_layer, r_substrate) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/rawEx/fit/specular/Pt_layer_fit.py b/rawEx/fit/specular/Pt_layer_fit.py index a86ffcaab70..51c37b6ebbf 100755 --- a/rawEx/fit/specular/Pt_layer_fit.py +++ b/rawEx/fit/specular/Pt_layer_fit.py @@ -28,10 +28,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("Pt", *sldPt) material_substrate = ba.MaterialBySLD("Si", *sldSi) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_pt/nm"]) - substrate_layer = ba.Layer(material_substrate) - interlayer = ba.TanhInterlayer() si_autocorr = ba.K_CorrelationModel(P["r_si/nm"]) @@ -40,11 +36,14 @@ def get_sample(P): r_si = ba.LayerRoughness(si_autocorr, interlayer) r_pt = ba.LayerRoughness(pt_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_pt/nm"], r_pt) + substrate_layer = ba.Layer(material_substrate, r_si) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_pt) - - sample.addLayerWithTopRoughness(substrate_layer, r_si) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/rawEx/fit/specular/TREFF_Ni_film.py b/rawEx/fit/specular/TREFF_Ni_film.py index a7f82ddcb8e..fbd96289b55 100755 --- a/rawEx/fit/specular/TREFF_Ni_film.py +++ b/rawEx/fit/specular/TREFF_Ni_film.py @@ -24,22 +24,21 @@ def get_sample(P): material_SiO2 = ba.MaterialBySLD("SiO2", 2.0704e-06, 0) # Layers and interfaces - layer_Ni = ba.Layer(material_Ni_58, P["thickness"]) - interlayer = ba.TanhInterlayer() Ni_autocorr = ba.K_CorrelationModel(P["sigma_Ni"]) roughness_Ni = ba.LayerRoughness(Ni_autocorr, interlayer) - substrate = ba.Layer(material_SiO2) - sub_autocorr = ba.K_CorrelationModel(P["sigma_Substrate"]) roughness_Substrate = ba.LayerRoughness(sub_autocorr, interlayer) + + layer_Ni = ba.Layer(material_Ni_58, P["thickness"], roughness_Ni) + substrate = ba.Layer(material_SiO2, roughness_Substrate) sample = ba.MultiLayer() sample.addLayer(ba.Layer(vacuum)) - sample.addLayerWithTopRoughness(layer_Ni, roughness_Ni) - sample.addLayerWithTopRoughness(substrate, roughness_Substrate) + sample.addLayer(layer_Ni) + sample.addLayer(substrate) return sample diff --git a/rawEx/scatter2d/CorrelatedRoughness.py b/rawEx/scatter2d/CorrelatedRoughness.py index fd99e5c65c4..e4ce4b0b9ff 100755 --- a/rawEx/scatter2d/CorrelatedRoughness.py +++ b/rawEx/scatter2d/CorrelatedRoughness.py @@ -17,18 +17,19 @@ def get_sample(): material_part_b = ba.RefractiveMaterial("PartB", 10e-6, 0) material_substrate = ba.RefractiveMaterial("substrate", 15e-6, 0) - # defining layers - l_ambience = ba.Layer(vacuum) - l_part_a = ba.Layer(material_part_a, 2.5*nm) - l_part_b = ba.Layer(material_part_b, 5*nm) - l_substrate = ba.Layer(material_substrate) - + # defining roughenss sigma, hurst, corrLength = 1*nm, 0.3, 5*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() crosscorrelation = ba.CommonDepthCrosscorrelation(10*nm) roughness = ba.LayerRoughness(autocorr, interlayer, crosscorrelation) + # defining layers + l_ambience = ba.Layer(vacuum) + l_part_a = ba.Layer(material_part_a, 2.5*nm, roughness) + l_part_b = ba.Layer(material_part_b, 5*nm, roughness) + l_substrate = ba.Layer(material_substrate, roughness) + my_sample = ba.MultiLayer() # adding layers @@ -36,10 +37,10 @@ def get_sample(): n_repetitions = 5 for _ in range(n_repetitions): - my_sample.addLayerWithTopRoughness(l_part_a, roughness) - my_sample.addLayerWithTopRoughness(l_part_b, roughness) + my_sample.addLayer(l_part_a) + my_sample.addLayer(l_part_b) - my_sample.addLayerWithTopRoughness(l_substrate, roughness) + my_sample.addLayer(l_substrate) return my_sample diff --git a/rawEx/scatter2d/FindPeaks.py b/rawEx/scatter2d/FindPeaks.py index 4f8f2494eb7..db7c12daa15 100755 --- a/rawEx/scatter2d/FindPeaks.py +++ b/rawEx/scatter2d/FindPeaks.py @@ -36,19 +36,19 @@ def get_sample(lattice_rotation_angle=0*deg): particle_layout.addParticle(box) particle_layout.setInterference(interference) - # assembling the sample - vacuum_layer = ba.Layer(ba.Vacuum()) - vacuum_layer.addLayout(particle_layout) - substrate_layer = ba.Layer(material_si) - sigma, hurst, corrLength = 5*nm, 0.5, 10*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # assembling the sample + vacuum_layer = ba.Layer(ba.Vacuum()) + vacuum_layer.addLayout(particle_layout) + substrate_layer = ba.Layer(material_si, roughness) + sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(substrate_layer) return sample diff --git a/rawEx/scatter2d/RectangularGrating.py b/rawEx/scatter2d/RectangularGrating.py index e7581e87aa1..9f865dec3f7 100755 --- a/rawEx/scatter2d/RectangularGrating.py +++ b/rawEx/scatter2d/RectangularGrating.py @@ -36,19 +36,19 @@ def get_sample(lattice_rotation_angle=0*deg): particle_layout.addParticle(box) particle_layout.setInterference(interference) - # Sample - vacuum_layer = ba.Layer(vacuum) - vacuum_layer.addLayout(particle_layout) - substrate_layer = ba.Layer(material_si) - sigma, hurst, corrLength = 5*nm, 0.5, 10*nm autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Sample + vacuum_layer = ba.Layer(vacuum) + vacuum_layer.addLayout(particle_layout) + substrate_layer = ba.Layer(material_si, roughness) + sample = ba.MultiLayer() sample.addLayer(vacuum_layer) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(substrate_layer) return sample diff --git a/rawEx/scatter2d/RoughAndSpecular.py b/rawEx/scatter2d/RoughAndSpecular.py index c81a9829040..fe751b4c180 100755 --- a/rawEx/scatter2d/RoughAndSpecular.py +++ b/rawEx/scatter2d/RoughAndSpecular.py @@ -22,15 +22,15 @@ def get_sample(): # Define layers layer_1 = ba.Layer(material_Vacuum) - layer_2 = ba.Layer(material_HMDSO, 18.5*nm) - layer_3 = ba.Layer(material_PTFE, 22.1*nm) + layer_2 = ba.Layer(material_HMDSO, 18.5*nm, roughness_1) + layer_3 = ba.Layer(material_PTFE, 22.1*nm, roughness_2) layer_4 = ba.Layer(material_Si) # Define sample sample = ba.MultiLayer() sample.addLayer(layer_1) - sample.addLayerWithTopRoughness(layer_2, roughness_1) - sample.addLayerWithTopRoughness(layer_3, roughness_2) + sample.addLayer(layer_2) + sample.addLayer(layer_3) sample.addLayer(layer_4) return sample diff --git a/rawEx/specular/MagneticLayerImperfect.py b/rawEx/specular/MagneticLayerImperfect.py index 4431c856819..9f097d78e1b 100755 --- a/rawEx/specular/MagneticLayerImperfect.py +++ b/rawEx/specular/MagneticLayerImperfect.py @@ -20,22 +20,22 @@ def get_sample(): material_Fe = ba.MaterialBySLD("Fe", 8.0241e-06, 6.0448e-10, B) material_substrate = ba.MaterialBySLD("MgO", 5.9803e-06, 9.3996e-12) - # Layers - layer_vacuum = ba.Layer(vacuum) - layer_Pd = ba.Layer(material_Pd, 120*angstrom) - layer_Fe = ba.Layer(material_Fe, 1000*angstrom) - layer_substrate = ba.Layer(material_substrate) - autocorr = ba.K_CorrelationModel(20*angstrom) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Layers + layer_vacuum = ba.Layer(vacuum) + layer_Pd = ba.Layer(material_Pd, 120*angstrom, roughness) + layer_Fe = ba.Layer(material_Fe, 1000*angstrom, roughness) + layer_substrate = ba.Layer(material_substrate, roughness) + # Multilayer sample = ba.MultiLayer() sample.addLayer(layer_vacuum) - sample.addLayerWithTopRoughness(layer_Pd, roughness) - sample.addLayerWithTopRoughness(layer_Fe, roughness) - sample.addLayerWithTopRoughness(layer_substrate, roughness) + sample.addLayer(layer_Pd) + sample.addLayer(layer_Fe) + sample.addLayer(layer_substrate) return sample diff --git a/rawEx/specular/PolarizedSpinAsymmetry.py b/rawEx/specular/PolarizedSpinAsymmetry.py index 487d78cca4c..1eaa33e3368 100755 --- a/rawEx/specular/PolarizedSpinAsymmetry.py +++ b/rawEx/specular/PolarizedSpinAsymmetry.py @@ -48,10 +48,6 @@ def get_sample(P): material_layer = ba.MaterialBySLD("(Mg,Al,Fe)3O4", P["rho_Mafo"]*1e-6, 0, B) material_substrate = ba.MaterialBySLD("MgAl2O4", *sldMao) - ambient_layer = ba.Layer(vacuum) - layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom) - substrate_layer = ba.Layer(material_substrate) - r_Mafo_autocorr = ba.K_CorrelationModel(P["r_Mafo"]*angstrom) r_sub_autocorr = ba.K_CorrelationModel(P["r_Mao"]*angstrom) @@ -60,10 +56,14 @@ def get_sample(P): r_Mafo = ba.LayerRoughness(r_Mafo_autocorr, interlayer) r_substrate = ba.LayerRoughness(r_sub_autocorr, interlayer) + ambient_layer = ba.Layer(vacuum) + layer = ba.Layer(material_layer, P["t_Mafo"]*angstrom, r_Mafo) + substrate_layer = ba.Layer(material_substrate, r_substrate) + sample = ba.MultiLayer() sample.addLayer(ambient_layer) - sample.addLayerWithTopRoughness(layer, r_Mafo) - sample.addLayerWithTopRoughness(substrate_layer, r_substrate) + sample.addLayer(layer) + sample.addLayer(substrate_layer) return sample diff --git a/rawEx/specular/RoughnessModel.py b/rawEx/specular/RoughnessModel.py index 60f2379a043..195c7632e39 100755 --- a/rawEx/specular/RoughnessModel.py +++ b/rawEx/specular/RoughnessModel.py @@ -16,23 +16,23 @@ def get_sample(interlayer): material_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0) - # create layers - ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) - substrate_layer = ba.Layer(material_substrate) - # Roughness autocorr = ba.K_CorrelationModel(10*angstrom) roughness = ba.LayerRoughness(autocorr, interlayer) + # create layers + ambient_layer = ba.Layer(vacuum) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) + substrate_layer = ba.Layer(material_substrate, roughness) + # create sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) for _ in range(10): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) + sample.addLayer(substrate_layer) return sample diff --git a/rawEx/specular/SpecularSimulationWithRoughness.py b/rawEx/specular/SpecularSimulationWithRoughness.py index fa8e1c6f775..f9dc7f97965 100755 --- a/rawEx/specular/SpecularSimulationWithRoughness.py +++ b/rawEx/specular/SpecularSimulationWithRoughness.py @@ -16,23 +16,24 @@ def get_sample(): material_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0) - # Layers - ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) - substrate_layer = ba.Layer(material_substrate) - + # roughness autocorr = ba.K_CorrelationModel(1*nm) interlayer = ba.TanhInterlayer() roughness = ba.LayerRoughness(autocorr, interlayer) + # Layers + ambient_layer = ba.Layer(vacuum) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) + substrate_layer = ba.Layer(material_substrate, roughness) + # Sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) for _ in range(10): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) - sample.addLayerWithTopRoughness(substrate_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) + sample.addLayer(substrate_layer) return sample diff --git a/rawEx/varia/MaterialProfile.py b/rawEx/varia/MaterialProfile.py index e8e5342b211..8ae7cdaada3 100755 --- a/rawEx/varia/MaterialProfile.py +++ b/rawEx/varia/MaterialProfile.py @@ -19,24 +19,25 @@ def get_sample(): B_substrate = R3(1e8, 0, 0) material_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0, B_substrate) + + # roughness + autocorr = ba.K_CorrelationModel(5*angstrom, 0.5, 10*angstrom) + interlayer = ba.TanhInterlayer() + roughness = ba.LayerRoughness(autocorr, interlayer) # layers ambient_layer = ba.Layer(vacuum) - ti_layer = ba.Layer(material_ti, 30*angstrom) - ni_layer = ba.Layer(material_ni, 70*angstrom) + ti_layer = ba.Layer(material_ti, 30*angstrom, roughness) + ni_layer = ba.Layer(material_ni, 70*angstrom, roughness) substrate_layer = ba.Layer(material_substrate) # sample sample = ba.MultiLayer() sample.addLayer(ambient_layer) - autocorr = ba.K_CorrelationModel(5*angstrom, 0.5, 10*angstrom) - interlayer = ba.TanhInterlayer() - roughness = ba.LayerRoughness(autocorr, interlayer) - for _ in range(4): - sample.addLayerWithTopRoughness(ti_layer, roughness) - sample.addLayerWithTopRoughness(ni_layer, roughness) + sample.addLayer(ti_layer) + sample.addLayer(ni_layer) sample.addLayer(substrate_layer) return sample diff --git a/rawEx/varia/RoughSurface.py b/rawEx/varia/RoughSurface.py index f353a60c887..7814154371a 100755 --- a/rawEx/varia/RoughSurface.py +++ b/rawEx/varia/RoughSurface.py @@ -55,11 +55,6 @@ def get_sample(): material_layer = ba.RefractiveMaterial("layer", 5e-6, 0) material_substrate = ba.RefractiveMaterial("substrate", 15e-6, 0) - # defining layers - l_ambience = ba.Layer(vacuum) - l_layer = ba.Layer(material_layer, 25*nm) - l_substrate = ba.Layer(material_substrate) - # defining roughness height_distribution = ba.ErfInterlayer() max_spat_freq = 0.5*nm @@ -80,11 +75,16 @@ def get_sample(): autocorr_sub = ba.K_CorrelationModel(sigma, alpha, xi, max_spat_freq) roughness_sub = ba.LayerRoughness(autocorr_sub, height_distribution) + # defining layers + l_ambience = ba.Layer(vacuum) + l_layer = ba.Layer(material_layer, 25*nm, roughness_layer) + l_substrate = ba.Layer(material_substrate, roughness_sub) + # adding layers my_sample = ba.MultiLayer() my_sample.addLayer(l_ambience) - my_sample.addLayerWithTopRoughness(l_layer, roughness_layer) - my_sample.addLayerWithTopRoughness(l_substrate, roughness_sub) + my_sample.addLayer(l_layer) + my_sample.addLayer(l_substrate) return my_sample -- GitLab