BornAgain  1.19.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 reflection and scattering
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)
23  , m_si{2.0704e-06, 2.3726e-11}
24  , m_ti{-1.9493e-06, 9.6013e-10}
25  , m_ni{9.4245e-06, 1.1423e-09}
26  , m_thick_ti(3.0)
27  , m_thick_ni(7.0)
28 {
29  registerParameter("ti_thickness", &m_thick_ti);
30 }
31 
33 {
34  Material vacuum_material = MaterialBySLD();
35  Material substrate_material = MaterialBySLD("Si_substrate", m_si.sld_real, m_si.sld_imag);
36  Material ni_material = MaterialBySLD("Ni", m_ni.sld_real, m_ni.sld_imag);
37  Material ti_material = MaterialBySLD("Ti", m_ti.sld_real, m_ti.sld_imag);
38 
39  Layer vacuum_layer(vacuum_material);
40  Layer ni_layer(ni_material, m_thick_ni);
41  Layer ti_layer(ti_material, m_thick_ti);
42  Layer substrate_layer(substrate_material);
43 
44  MultiLayer* multi_layer = new MultiLayer();
45  multi_layer->addLayer(vacuum_layer);
46  for (int i = 0; i < m_number_of_layers; ++i) {
47  multi_layer->addLayer(ti_layer);
48  multi_layer->addLayer(ni_layer);
49  }
50  multi_layer->addLayer(substrate_layer);
51  return multi_layer;
52 }
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 in a MultiLayer sample.
Definition: Layer.h:27
A wrapper for underlying material implementation.
Definition: Material.h:29
Our sample model: a stack of layers one below the other.
Definition: MultiLayer.h:41
void addLayer(const Layer &layer)
Adds layer with default (zero) roughness.
Definition: MultiLayer.cpp:53
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}