29 const double sphere_radius = 5 * Units::nanometer;
31 MultiLayer* parametricBuild(
double sigmaRoughness, RoughnessModel roughnessModel)
42 roughness.setSigma(sigmaRoughness * Units::angstrom);
44 Layer vacuum_layer(vacuum_material);
45 Layer substrate_layer(substrate_material);
46 Layer layer(layer_material, 200 * Units::angstrom);
50 multi_layer->setRoughnessModel(roughnessModel);
56 MultiLayer* MagneticSubstrateZeroFieldBuilder::buildSample()
const
65 kvector_t position(0.0, 0.0, -10.0 * Units::nanometer);
67 Particle particle(particle_material, ff_sphere);
68 particle_layout.
addParticle(particle, 1.0, position);
70 Layer vacuum_layer(vacuum_material);
71 Layer substrate_layer(substrate_material);
72 substrate_layer.addLayout(particle_layout);
76 multi_layer->
addLayer(substrate_layer);
80 MultiLayer* SimpleMagneticLayerBuilder::buildSample()
const
85 Material vacuum_material = MaterialBySLD(
"Vacuum", 0.0, 0.0);
86 Material layer_material = MaterialBySLD(
"MagLayer", 1e-4, 1e-8, layer_field);
87 Material substrate_material = MaterialBySLD(
"Substrate", 7e-5, 2e-6);
89 Layer vacuum_layer(vacuum_material);
90 Layer intermediate_layer(layer_material, 10.0);
91 Layer substrate_layer(substrate_material);
94 multi_layer->
addLayer(intermediate_layer);
95 multi_layer->
addLayer(substrate_layer);
99 MultiLayer* MagneticLayerBuilder::buildSample()
const
112 Particle particle(particle_material, ff_sphere);
115 Layer vacuum_layer(vacuum_material);
116 Layer intermediate_layer(layer_material);
117 intermediate_layer.addLayout(particle_layout);
118 Layer substrate_layer(substrate_material);
120 multi_layer->
addLayer(vacuum_layer);
121 multi_layer->
addLayer(intermediate_layer);
122 multi_layer->
addLayer(substrate_layer);
126 MultiLayer* SimpleMagneticRotationBuilder::buildSample()
const
128 return parametricBuild(0., RoughnessModel::TANH);
131 size_t SimpleMagneticRotationBuilder::size()
136 MultiLayer* SimpleMagneticRotationBuilder::createSampleByIndex(
size_t index)
141 return parametricBuild(0., RoughnessModel::TANH);
145 return parametricBuild(2., RoughnessModel::TANH);
149 return parametricBuild(2., RoughnessModel::NEVOT_CROCE);
156 MultiLayer* MagneticRotationBuilder::buildSample()
const
167 kvector_t position(0.0, 0.0, -10.0 * Units::nanometer);
169 Particle particle(particle_material, ff_sphere);
171 particle_layout.
addParticle(particle, 1.0, position, rot_z);
173 Layer vacuum_layer(vacuum_material);
174 Layer substrate_layer(substrate_material);
175 substrate_layer.addLayout(particle_layout);
177 multi_layer->
addLayer(vacuum_layer);
178 multi_layer->
addLayer(substrate_layer);
Defines the macro ASSERT.
Defines class LayerRoughness.
Defines class to build samples with magnetic layers.
Factory functions used to create material instances.
Defines class MultiLayer.
Defines class ParticleLayout.
Defines some unit conversion factors and other constants in namespace Units.
A roughness of interface between two layers.
A layer, with thickness (in nanometer) and material.
A wrapper for underlying material implementation.
Our sample model: a stack of layers one below the other.
void addLayer(const Layer &layer)
Adds object to multilayer.
void addLayerWithTopRoughness(const Layer &layer, const LayerRoughness &roughness)
Adds layer with top roughness.
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.
A rotation about the z axis.
Material HomogeneousMaterial(const std::string &name, complex_t refractive_index, kvector_t magnetization)
Constructs a material with name, refractive_index and magnetization (in A/m).