BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
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 "Fit/Param/RealLimits.h"
20 
21 namespace {
22 
23 struct MaterialData {
24  double sld_real; //!< real part of sld in AA^{-2}
25  double sld_imag; //!< imaginary part of sld in AA^{-2}
26 };
27 
28 MaterialData m_si{2.0704e-06, 2.3726e-11};
29 MaterialData m_ti{-1.9493e-06, 9.6013e-10};
30 MaterialData m_ni{9.4245e-06, 1.1423e-09};
31 
32 } // namespace
33 
35 {
36  double thick_ni(7.0);
37 
38  Material vacuum_material = MaterialBySLD();
39  Material substrate_material = MaterialBySLD("Si_substrate", m_si.sld_real, m_si.sld_imag);
40  Material ni_material = MaterialBySLD("Ni", m_ni.sld_real, m_ni.sld_imag);
41  Material ti_material = MaterialBySLD("Ti", m_ti.sld_real, m_ti.sld_imag);
42 
43  Layer vacuum_layer(vacuum_material);
44  Layer ni_layer(ni_material, thick_ni);
45  Layer ti_layer(ti_material, thick_ti);
46  Layer substrate_layer(substrate_material);
47 
48  auto* sample = new MultiLayer();
49  sample->addLayer(vacuum_layer);
50  for (int i = 0; i < n_layers; ++i) {
51  sample->addLayer(ti_layer);
52  sample->addLayer(ni_layer);
53  }
54  sample->addLayer(substrate_layer);
55  return sample;
56 }
Defines class Layer.
Factory functions used to create material instances.
Defines class MultiLayer.
Declares the class PlainMultiLayerBySLDBuilder.
Defines class RealLimits.
A layer in a MultiLayer sample.
Definition: Layer.h:26
A wrapper for underlying material implementation.
Definition: Material.h:35
Our sample model: a stack of layers one below the other.
Definition: MultiLayer.h:43
Material MaterialBySLD()
MultiLayer * createPlainMultiLayerBySLD(int n_layers=10, double thick_ti=3.0)