BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
CylindersBuilder.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/StandardSamples/CylindersBuilder.cpp
6 //! @brief Implements classes of CylindersBuilder family.
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"
24 
25 // -----------------------------------------------------------------------------
26 // Cylinders in DWBA
27 // -----------------------------------------------------------------------------
29  : m_height(5 * Units::nanometer), m_radius(5 * Units::nanometer)
30 {
31 }
32 
34 {
35  Layer vacuum_layer(refMat::Vacuum);
36  Layer substrate_layer(refMat::Substrate);
37 
38  FormFactorCylinder ff_cylinder(m_radius, m_height);
39 
40  Particle particle(refMat::Particle, ff_cylinder);
41  ParticleLayout particle_layout(particle);
42 
43  vacuum_layer.addLayout(particle_layout);
44 
45  MultiLayer* multi_layer = new MultiLayer();
46  multi_layer->addLayer(vacuum_layer);
47  multi_layer->addLayer(substrate_layer);
48  return multi_layer;
49 }
50 
51 // -----------------------------------------------------------------------------
52 // Cylinders in BA
53 // -----------------------------------------------------------------------------
55  : m_height(5 * Units::nanometer), m_radius(5 * Units::nanometer)
56 {
57  registerParameter("height", &m_height);
58  registerParameter("radius", &m_radius);
59 }
60 
62 {
63  Layer vacuum_layer(refMat::Vacuum);
64 
65  FormFactorCylinder ff_cylinder(m_radius, m_height);
66  Particle cylinder(refMat::Particle, ff_cylinder);
67 
68  ParticleLayout particle_layout(cylinder);
69 
70  vacuum_layer.addLayout(particle_layout);
71 
72  MultiLayer* multi_layer = new MultiLayer();
73  multi_layer->addLayer(vacuum_layer);
74  return multi_layer;
75 }
76 
77 // -----------------------------------------------------------------------------
78 // Large cylinders in DWBA
79 // -----------------------------------------------------------------------------
81  : m_height(1000 * Units::nanometer), m_radius(500 * Units::nanometer)
82 {
83 }
84 
86 {
87  Layer vacuum_layer(refMat::Vacuum);
88  Layer substrate_layer(refMat::Substrate);
89 
90  FormFactorCylinder ff_cylinder(m_radius, m_height);
91 
92  Particle particle(refMat::Particle, ff_cylinder);
93  ParticleLayout particle_layout(particle);
94 
95  vacuum_layer.addLayout(particle_layout);
96 
97  MultiLayer* multi_layer = new MultiLayer();
98  multi_layer->addLayer(vacuum_layer);
99  multi_layer->addLayer(substrate_layer);
100  return multi_layer;
101 }
102 
103 // -----------------------------------------------------------------------------
104 // Rotated cylinders in DWBA
105 // -----------------------------------------------------------------------------
107  : m_height(5 * Units::nanometer), m_radius(5 * Units::nanometer)
108 {
109 }
110 
112 {
113  FormFactorCylinder ff_cylinder(m_radius, m_height);
114 
115  Particle particle(refMat::Particle, ff_cylinder);
116  ParticleLayout particle_layout;
117  particle_layout.addParticle(particle, 1.0, kvector_t(), RotationY(M_PI));
118 
119  Layer vacuum_layer(refMat::Vacuum);
120  Layer substrate_layer(refMat::Substrate);
121  substrate_layer.addLayout(particle_layout);
122 
123  MultiLayer* multi_layer = new MultiLayer();
124  multi_layer->addLayer(vacuum_layer);
125  multi_layer->addLayer(substrate_layer);
126  return multi_layer;
127 }
Defines classes of CylindersBuilder family.
Defines class FormFactorCylinder.
Defines class LayerInterface.
Defines class Layer.
#define M_PI
Definition: MathConstants.h:39
Defines class MultiLayer.
Defines class ParticleLayout.
Defines class Particle.
Defines materials in namespace refMat.
Defines some unit conversion factors and other constants in namespace Units.
BasicVector3D< double > kvector_t
Definition: Vectors3D.h:21
MultiLayer * buildSample() const
MultiLayer * buildSample() const
A circular cylinder.
RealParameter & registerParameter(const std::string &name, double *parpointer)
MultiLayer * buildSample() const
A layer, with thickness (in nanometer) and material.
Definition: Layer.h:28
void addLayout(const ILayout &decoration)
Definition: Layer.cpp:57
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
Decorator class that adds particles to ISample objects.
void addParticle(const IAbstractParticle &particle, double abundance=-1.0, const kvector_t position={}, const IRotation &rotation=IdentityRotation())
Adds particle to the layout with abundance, position and the rotation defined.
A particle with a form factor and refractive index.
Definition: Particle.h:26
MultiLayer * buildSample() const
A rotation about the y axis.
Definition: Rotations.h:93
Constants and functions for physical unit conversions.
Definition: Units.h:21
static constexpr double nanometer
Definition: Units.h:24
static const Material Vacuum
static const Material Particle
static const Material Substrate