Cylinders in Distorted Wave Born Approximation

Scattering from a monodisperse distribution of cylindrical particles using the Distorted Wave Born Approxiamtion (DWBA).

This example is similar to the simulation Cylinders in Born Approximation, but now the particles sit on top of a substrate. Therefore incoming and scattered waves are distorted by reflections from the substrate surface, as described by the DWBA.

  • The distribution of cylinders is monodisperse with heights and radii of $5$ nm.
  • The wavelength is equal to $1$ $\unicode{x212B}$.
  • The incident angles are equal to $\alpha_i = 0.2 ^{\circ}$ and $\varphi_i = 0^{\circ}$.
  • No interference effects from inter-particle correlations (dilute-particles approximation).

Real-space model

Intensity image

 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
#!/usr/bin/env python3
"""
Basic example of a DWBA simulation of a GISAS experiment:
Scattering by a dilute random assembly of cylinders on a substrate.
"""
import bornagain as ba
from bornagain import deg, nm


def get_sample():
    # Define materials
    material_Particle = ba.HomogeneousMaterial("Particle", 6e-4, 2e-08)
    material_Substrate = ba.HomogeneousMaterial("Substrate", 6e-6, 2e-08)
    material_Vacuum = ba.HomogeneousMaterial("Vacuum", 0, 0)

    # Define particles
    ff = ba.FormFactorCylinder(5*nm, 5*nm)
    particle = ba.Particle(material_Particle, ff)

    # Define particle layouts
    layout = ba.ParticleLayout()
    layout.addParticle(particle)
    layout.setTotalParticleSurfaceDensity(0.01)

    # Define layers
    layer_1 = ba.Layer(material_Vacuum)
    layer_1.addLayout(layout)
    layer_2 = ba.Layer(material_Substrate)

    # Define sample
    sample = ba.MultiLayer()
    sample.addLayer(layer_1)
    sample.addLayer(layer_2)

    return sample


def get_simulation(sample):
    # Define beam
    wavelength = 0.1*nm
    alpha_i = 0.2*deg
    beam = ba.Beam(1, wavelength, ba.Direction(alpha_i, 0*deg))

    # Define detector
    nPix = 200 # pixels per direction
    detector = ba.SphericalDetector(nPix, -2*deg, 2*deg, nPix, 0*deg, 2*deg)

    return ba.GISASSimulation(beam, sample, detector)


if __name__ == '__main__':
    import ba_plot
    sample = get_sample()
    simulation = get_simulation(sample)
    ba_plot.run_and_plot(simulation)
Cylinders.py