28 MultiLayer* RadialParaCrystalBuilder::buildSample()
const
30 const double m_corr_peak_distance(20.0 * Units::nanometer);
31 const double m_corr_width(7 * Units::nanometer);
32 const double m_corr_length(1e3 * Units::nanometer);
33 const double m_cylinder_height(5 * Units::nanometer);
34 const double m_cylinder_radius(5 * Units::nanometer);
36 Layer vacuum_layer(refMat::Vacuum);
37 Layer substrate_layer(refMat::Substrate);
42 interference_function.setProbabilityDistribution(pdf);
45 Particle particle(refMat::Particle, ff_cylinder);
47 particle_layout.setInterferenceFunction(interference_function);
49 vacuum_layer.addLayout(particle_layout);
53 multi_layer->
addLayer(substrate_layer);
61 Basic2DParaCrystalBuilder::Basic2DParaCrystalBuilder()
67 Basic2DParaCrystalBuilder::~Basic2DParaCrystalBuilder() =
default;
69 MultiLayer* Basic2DParaCrystalBuilder::buildSample()
const
71 Layer vacuum_layer(refMat::Vacuum);
72 Layer substrate_layer(refMat::Substrate);
75 10.0 * Units::nanometer, 20.0 * Units::nanometer, 30.0 * Units::degree,
76 45.0 * Units::degree, 1000.0 * Units::nanometer);
78 interference_function.setDomainSizes(20.0 * Units::micrometer, 40.0 * Units::micrometer);
80 interference_function.setProbabilityDistributions(*m_pdf1, *m_pdf2);
84 Particle particle(refMat::Particle, ff_cylinder);
86 particle_layout.setInterferenceFunction(interference_function);
88 vacuum_layer.addLayout(particle_layout);
92 multi_layer->
addLayer(substrate_layer);
96 MultiLayer* Basic2DParaCrystalBuilder::createSampleByIndex(
size_t index)
103 setName(names.at(index));
105 return buildSample();
112 MultiLayer* HexParaCrystalBuilder::buildSample()
const
114 const double m_peak_distance(20.0 * Units::nanometer);
115 const double m_corr_length(0.0);
116 const double m_domain_size_1(20.0 * Units::micrometer);
117 const double m_domain_size_2(20.0 * Units::micrometer);
118 const double m_cylinder_height(5 * Units::nanometer);
119 const double m_cylinder_radius(5 * Units::nanometer);
121 Layer vacuum_layer(refMat::Vacuum);
122 Layer substrate_layer(refMat::Substrate);
124 std::unique_ptr<InterferenceFunction2DParaCrystal> P_interference_function{
126 m_domain_size_1, m_domain_size_2)};
128 P_interference_function->setProbabilityDistributions(pdf, pdf);
131 Particle cylinder(refMat::Particle, ff_cylinder);
134 particle_layout.setInterferenceFunction(*P_interference_function);
136 vacuum_layer.addLayout(particle_layout);
139 multi_layer->
addLayer(vacuum_layer);
140 multi_layer->
addLayer(substrate_layer);
148 MultiLayer* RectParaCrystalBuilder::buildSample()
const
150 Layer vacuum_layer(refMat::Vacuum);
151 Layer substrate_layer(refMat::Substrate);
153 std::unique_ptr<InterferenceFunction2DParaCrystal> P_interference_function{
157 P_interference_function->
setDomainSizes(20.0 * Units::micrometer, 20.0 * Units::micrometer);
160 P_interference_function->setProbabilityDistributions(pdf1, pdf2);
164 Particle particle(refMat::Particle, ff_cylinder);
166 particle_layout.setInterferenceFunction(*P_interference_function);
168 vacuum_layer.addLayout(particle_layout);
171 multi_layer->
addLayer(vacuum_layer);
172 multi_layer->
addLayer(substrate_layer);
Defines the macro ASSERT.
Defines class InterferenceFunction2DParaCrystal.
Defines class InterferenceFunctionRadialParaCrystal.
Defines class MultiLayer.
Defines classes of ParaCrystalBuilder family.
Defines class ParticleLayout.
Defines materials in namespace refMat.
Defines sample components for complex sample builders.
Defines some unit conversion factors and other constants in namespace Units.
Gaussian IFTDistribution1D; its Fourier transform evaluate(q) is a Gaussian starting at evaluate(0)=1...
Two-dimensional Cauchy distribution in Fourier space; corresponds to a normalized exp(-r) in real spa...
Predefined Fourier transformed distributions for functional tests.
Interference function of a 2D paracrystal.
static InterferenceFunction2DParaCrystal * createHexagonal(double lattice_length, double damping_length, double domain_size_1, double domain_size_2)
Creates hexagonal lattice.
static InterferenceFunction2DParaCrystal * createSquare(double lattice_length, double damping_length, double domain_size_1, double domain_size_2)
Creates square lattice.
void setDomainSizes(double size_1, double size_2)
Sets the sizes of coherence domains.
Interference function of radial paracrystal.
A layer, with thickness (in nanometer) and material.
Our sample model: a stack of layers one below the other.
void addLayer(const Layer &layer)
Adds object to multilayer.
Decorator class that adds particles to ISample objects.
A particle with a form factor and refractive index.
Constants and functions for physical unit conversions.