The SLD profile of a sample with embedded particles

Plotting the Scattering Length Density (SLD) profile of a sample which contains embedded particles, will produce a figure similar to the one below. To embedd particles on a sample, a 2D square lattice particle layout needs to be created.

In the figure above, the embeded cone particles in the top layer create a stairlike SLD profile in the region $0 < z < 10$. Each step of the stairlike profile is a weighted average between the SLD of the particle material and that of the solvent (air in this case).

To refine the number of steps obtained in the plot above (and for the calculations carried on in an eventual simulation), the number of slices needs to be set (In the present example, it is set to 20: ambient_layer.setNumberOfSlices(20)).

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61  """ Example for producing a profile of SLD of a multilayer with particles and slicing. """ import bornagain as ba from bornagain import deg, angstrom, nm import numpy as np import matplotlib.pyplot as plt def get_sample(): """ Defines sample and returns it """ # creating materials m_ambient = ba.MaterialBySLD("Ambient", 0.0, 0.0) m_ti = ba.MaterialBySLD("Ti", -1.9493e-06, 0.0) m_ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0.0) m_particle = ba.MaterialBySLD("Particle", 5e-6, 0.0) m_substrate = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0.0) # creating layers ambient_layer = ba.Layer(m_ambient) ti_layer = ba.Layer(m_ti, 30 * angstrom) ni_layer = ba.Layer(m_ni, 70 * angstrom) substrate_layer = ba.Layer(m_substrate) # create roughness roughness = ba.LayerRoughness(5 * angstrom, 0.5, 10 * angstrom) # create particle layout ff = ba.FormFactorCone(5 * nm, 10 * nm, 75 * deg) particle = ba.Particle(m_particle, ff) layout = ba.ParticleLayout() layout.addParticle(particle) iff = ba.InterferenceFunction2DLattice.createSquare(10 * nm) layout.setInterferenceFunction(iff) ambient_layer.addLayout(layout) ambient_layer.setNumberOfSlices(20) # creating multilayer multi_layer = ba.MultiLayer() multi_layer.addLayer(ambient_layer) for i in range(2): multi_layer.addLayerWithTopRoughness(ti_layer, roughness) multi_layer.addLayerWithTopRoughness(ni_layer, roughness) multi_layer.addLayer(substrate_layer) return multi_layer if __name__ == '__main__': sample = get_sample() zpoints, slds = ba.MaterialProfile(sample) plt.figure() plt.plot(zpoints, np.real(slds)) plt.show() 
MaterialProfileWithParticles.py