BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
PlainMultiLayerBySLDBuilder.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/StandardSamples/PlainMultiLayerBySLDBuilder.cpp
6 //! @brief Implements class PlainMultiLayerBySLDBuilder.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
16 #include "Base/Const/Units.h"
20 
22  : m_number_of_layers(n_layers), m_si{2.0704e-06, 2.3726e-11}, m_ti{-1.9493e-06, 9.6013e-10},
23  m_ni{9.4245e-06, 1.1423e-09}, m_thick_ti(3.0), m_thick_ni(7.0)
24 {
25  registerParameter("ti_thickness", &m_thick_ti);
26 }
27 
29 {
30  Material vacuum_material = MaterialBySLD();
31  Material substrate_material = MaterialBySLD("Si_substrate", m_si.sld_real, m_si.sld_imag);
32  Material ni_material = MaterialBySLD("Ni", m_ni.sld_real, m_ni.sld_imag);
33  Material ti_material = MaterialBySLD("Ti", m_ti.sld_real, m_ti.sld_imag);
34 
35  Layer vacuum_layer(vacuum_material);
36  Layer ni_layer(ni_material, m_thick_ni);
37  Layer ti_layer(ti_material, m_thick_ti);
38  Layer substrate_layer(substrate_material);
39 
40  MultiLayer* multi_layer = new MultiLayer();
41  multi_layer->addLayer(vacuum_layer);
42  for (int i = 0; i < m_number_of_layers; ++i) {
43  multi_layer->addLayer(ti_layer);
44  multi_layer->addLayer(ni_layer);
45  }
46  multi_layer->addLayer(substrate_layer);
47  return multi_layer;
48 }
Defines class Layer.
Factory functions used to create material instances.
Defines class MultiLayer.
Declares the class PlainMultiLayerBySLDBuilder.
Defines some unit conversion factors and other constants in namespace Units.
RealParameter & registerParameter(const std::string &name, double *parpointer)
A layer, with thickness (in nanometer) and material.
Definition: Layer.h:28
A wrapper for underlying material implementation.
Definition: Material.h:29
Our sample model: a stack of layers one below the other.
Definition: MultiLayer.h:42
void addLayer(const Layer &layer)
Adds object to multilayer.
Definition: MultiLayer.cpp:54
MultiLayer * buildSample() const override
double m_thick_ni
thickness of Ni layer
double m_thick_ti
thickness of titanium layer
double sld_imag
imaginary part of sld in AA^{-2}