The optional thickness argument is the layer thickness in nm. If it is
omitted, then the thickness is set to infinite, and the layer can be used as
top or bottom of a multi-layer sample, or as the sole component of a
single-layer sample.
For the optional roughness argument, see Roughness.
Add 2D particle structures
To add particles on a surface or interface, first create a 2D structure:
With deposit2D and addDeposit2D, the bottom of particles is placed at the
layer’s bottom interface. This is appropriate for particles sitting on a
substrate. These methods are only valid for finite-thickness layers.
With suspend2D and addSuspend2D, the top of particles is placed at the
layer’s top interface. This is appropriate for particles hanging from below an
interface, such as holes or inclusions embedded in a substrate.
For an incoherent mixture of different structures, call addDeposit2D or
addSuspend2D several times, with a coverage argument between 0 and 1. If
coverage is 1, the simpler forms deposit2D or suspend2D can be used.
Soft particles at interfaces
Soft particles such as FuzzySphere and GaussSphere have diffuse
boundaries. To place their center away from the default anchor plane,
translate the particle before creating the 2D structure:
For an incoherent mixture of different structures, call add3D several times,
with a coverage argument between 0 and 1. If coverage is 1, the simpler form
fill3D can be used.
Impose slicing
To divide the layer into n slices for the reflectivity computation, use
layer.setNumberOfSlices(n)
Example: HolesLattice
The following example demonstrates suspend2D: a hexagonal lattice of
hemispherical vacuum holes in a substrate. The holes are half-spheres of
vacuum material, suspended from the substrate’s top interface so they extend
downward into the substrate.
#!/usr/bin/env python3"""
Hexagonal lattice of hemispherical holes in a substrate
"""importbornagainasbafrombornagainimportba_plotasbp,deg,nmdefget_sample():"""
Substrate with hemispherical holes arranged in a hexagonal lattice.
The holes are vacuum half-spheres suspended from the substrate top interface.
"""# Materialssubstrate_color=(0.28,0.57,0.82)substrate_mat=ba.RefractiveMaterial("Substrate",substrate_color,6e-6,2e-8)vacuum=ba.Vacuum()# Hemispherical hole (vacuum half-sphere, spanning from -R to 0)R=5*nmff=ba.SphericalSegment(R,R,0)# radius, top_cut=R, bottom_cut=0hole=ba.Particle(vacuum,ff)# Hexagonal latticelattice=ba.HexagonalLattice2D(20*nm,0)layout=ba.Crystal2D(hole,lattice)profile=ba.Profile2DCauchy(100*nm,100*nm,0)layout.setDecayFunction(profile)# Layersvacuum_layer=ba.Layer(vacuum)substrate_layer=ba.Layer(substrate_mat)substrate_layer.suspend2D(layout)substrate_layer.setNumberOfSlices(6)# Samplesample=ba.Sample()sample.addLayer(vacuum_layer)sample.addLayer(substrate_layer)returnsampledefget_simulation(sample):beam=ba.Beam(1e9,0.1*nm,0.2*deg)n=200detector=ba.SphericalDetector(n,-2*deg,2*deg,n,0,2*deg)simulation=ba.ScatteringSimulation(beam,sample,detector)returnsimulationif__name__=='__main__':sample=get_sample()ba.showSample3D(sample,sample_size=250*nm,seed=0)simulation=get_simulation(sample)result=simulation.simulate()bp.plot_datafield(result,unit_aspect=1)bp.plt.show()
auto/Examples/scatter2d/HolesLattice.py
Example: SoftSpheres
The following example demonstrates soft particles in a finite layer. The
particle is translated before deposition so that the diffuse sphere is placed
inside the film.
#!/usr/bin/env python3"""
Soft spheres (FuzzySphere) in a finite layer.
Soft particles have diffuse boundaries modelled by a Debye-Waller factor.
Slicing is not supported for soft particles; material averaging is disabled.
The layer thickness is 8*R. The particle center is shifted up by 4*R (= thickness/2)
so that almost all of the particle sits inside the finite layer.
"""importbornagainasbafrombornagainimportba_plotasbp,deg,nm,nm2defget_sample():R=5*nmthickness=8*R# 40 nm# Materialsparticle_color=(0.86,0.24,0.18)particle_mat=ba.RefractiveMaterial("Particle",particle_color,6e-04,2e-08)substrate_color=(0.28,0.57,0.82)substrate_mat=ba.RefractiveMaterial("Substrate",substrate_color,6e-06,2e-08)vacuum=ba.Vacuum()# Soft particle (FuzzySphere with Gaussian fuzziness)ff=ba.FuzzySphere(R,0.5*nm)particle=ba.Particle(particle_mat,ff)# Shift center to thickness/2 (deposit2D anchors the bottom, so compensate)particle.translate(0,0,thickness/2-particle.height_below_center())# Layers: vacuum / finite film / substratelayer_vacuum=ba.Layer(vacuum)layer_film=ba.Layer(vacuum,thickness)layer_film.deposit2D(ba.Dilute2D(1e-3/nm2,particle))layer_substrate=ba.Layer(substrate_mat)# Samplesample=ba.Sample()sample.addLayer(layer_vacuum)sample.addLayer(layer_film)sample.addLayer(layer_substrate)returnsampledefget_simulation(sample):beam=ba.Beam(1e9,0.1*nm,0.2*deg)n=200detector=ba.SphericalDetector(n,-2*deg,2*deg,n,0,3*deg)simulation=ba.ScatteringSimulation(beam,sample,detector)# Disable material averaging (slicing not supported for soft particles)simulation.options().setUseAvgMaterials(False)returnsimulationif__name__=='__main__':sample=get_sample()ba.showSample3D(sample,sample_size=120*nm,seed=0)simulation=get_simulation(sample)result=simulation.simulate()bp.plot_datafield(result,unit_aspect=1)bp.plt.show()
auto/Examples/scatter2d/SoftSpheres.py
History
The deposit2D, suspend2D, fill3D, and add* methods were introduced in
BornAgain 24, replacing addLayout. The entire concept of a particle Layout
has become unnecessary and was removed.