31 MultiLayer* CylindersWithSizeDistributionBuilder::buildSample()
const
33 const double height(5 * Units::nanometer);
34 const double radius(5 * Units::nanometer);
36 Layer vacuum_layer(refMat::Vacuum);
40 double sigma = 0.2 * radius;
42 Particle nano_particle(refMat::Particle, p_ff_cylinder);
46 double n_sigma = 2.0 * 2.0 * std::sqrt(2.0 * std::log(2.0));
49 pattern.add(
"Particle").add(
"Cylinder").add(
"Radius");
55 vacuum_layer.addLayout(particle_layout);
66 TwoTypesCylindersDistributionBuilder::TwoTypesCylindersDistributionBuilder()
67 : m_radius1(5 *
Units::nanometer), m_radius2(10 *
Units::nanometer),
68 m_height1(5 *
Units::nanometer), m_height2(10 *
Units::nanometer), m_sigma1_ratio(0.2),
73 MultiLayer* TwoTypesCylindersDistributionBuilder::buildSample()
const
75 Layer vacuum_layer(refMat::Vacuum);
81 Particle cylinder1(refMat::Particle, p_ff_cylinder1);
84 Particle cylinder2(refMat::Particle, p_ff_cylinder2);
88 double sigma1 = m_radius1 * m_sigma1_ratio;
89 double sigma2 = m_radius2 * m_sigma2_ratio;
97 pattern1.add(
"Particle").add(
"Cylinder").add(
"Radius");
100 particle_layout.
addParticle(particle_collection1, 0.95);
102 pattern2.add(
"Particle").add(
"Cylinder").add(
"Radius");
106 particle_layout.
addParticle(particle_collection2, 0.05);
108 vacuum_layer.addLayout(particle_layout);
111 multi_layer->
addLayer(vacuum_layer);
117 RotatedPyramidsDistributionBuilder::RotatedPyramidsDistributionBuilder()
118 : m_length(10 *
Units::nanometer), m_height(5 *
Units::nanometer),
119 m_alpha(
Units::deg2rad(54.73)), m_zangle(45. *
Units::degree)
123 MultiLayer* RotatedPyramidsDistributionBuilder::buildSample()
const
127 Particle pyramid(refMat::Particle, ff_pyramid);
128 pyramid.setRotation(
RotationZ(m_zangle));
140 Layer vacuum_layer(refMat::Vacuum);
141 Layer substrate_layer(refMat::Substrate);
143 vacuum_layer.addLayout(particle_layout);
146 multi_layer->
addLayer(vacuum_layer);
147 multi_layer->
addLayer(substrate_layer);
153 MultiLayer* SpheresWithLimitsDistributionBuilder::buildSample()
const
157 Particle sphere(refMat::Particle, ff);
170 Layer vacuum_layer(refMat::Vacuum);
171 Layer substrate_layer(refMat::Substrate);
173 vacuum_layer.addLayout(particle_layout);
176 multi_layer->
addLayer(vacuum_layer);
177 multi_layer->
addLayer(substrate_layer);
184 MultiLayer* ConesWithLimitsDistributionBuilder::buildSample()
const
187 FormFactorCone ff(10.0 * Units::nm, 13.0 * Units::nm, 60.0 * Units::deg);
188 Particle cone(refMat::Particle, ff);
193 "/Particle/Cone/Alpha", gauss, 5, 20.0,
202 Layer vacuum_layer(refMat::Vacuum);
203 Layer substrate_layer(refMat::Substrate);
205 vacuum_layer.addLayout(particle_layout);
208 multi_layer->
addLayer(vacuum_layer);
209 multi_layer->
addLayer(substrate_layer);
213 MultiLayer* LinkedBoxDistributionBuilder::buildSample()
const
216 FormFactorBox ff(40.0 * Units::nm, 30.0 * Units::nm, 10.0 * Units::nm);
223 parameter_distr.linkParameter(
"/Particle/Box/Width").linkParameter(
"/Particle/Box/Height");
232 Layer vacuum_layer(refMat::Vacuum);
233 Layer substrate_layer(refMat::Substrate);
235 vacuum_layer.addLayout(particle_layout);
238 multi_layer->
addLayer(vacuum_layer);
239 multi_layer->
addLayer(substrate_layer);
Defines classes representing one-dimensional distributions.
Defines class MultiLayer.
Defines class ParameterPattern.
Defines class ParticleDistribution.
Defines classes of with different types of particle distributions.
Defines class ParticleLayout.
Defines materials in namespace refMat.
Defines some unit conversion factors and other constants in namespace Units.
Uniform distribution function with half width hwhm.
Gaussian distribution with standard deviation std_dev.
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.
A parametric distribution function, for use with any model parameter.
Helper class for constructing parameter patterns.
A particle type that is a parametric distribution of IParticle's.
Decorator class that adds particles to ISample objects.
void setTotalParticleSurfaceDensity(double particle_density) final override
Sets total particle surface density.
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.
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
A rotation about the z axis.
Constants and functions for physical unit conversions.