Cylinders in BA

This example uses the same dilute random monolayer of cylindrical disks as the introductory GISAS example, but removes the substrate contrast. Without reflected waves, the DWBA expression reduces to the ordinary Born approximation.

Result

Cylinders in BA result

Sample

Cylinders in BA sample

Python script

 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
#!/usr/bin/env python3
# /// script
# requires-python = ">=3.10"
# dependencies = ["bornagain>=25,<26"]
# ///
"""
Cylinder form factor in Born approximation
"""
import bornagain as ba
ba.require_versions("bornagain>=25,<26")
from bornagain import deg, nm, nm2


def get_sample():
    """
    A sample with cylinders in a homogeneous environment ("Vacuum"),
    implying a simulation in plain Born approximation.
    """

    # Materials
    particle_color = (0.86, 0.24, 0.18)
    particle_mat = ba.RefractiveMaterial("Particle", particle_color, 0.0006, 2e-08)
    vacuum = ba.Vacuum()

    # Particle
    ff = ba.Cylinder(5*nm, 5*nm)
    particle = ba.Particle(particle_mat, ff)

    # Layers: two vacuum layers, particles deposited at their interface
    layer_top = ba.Layer(vacuum)
    layer_bottom = ba.Layer(vacuum)
    layer_top.deposit2D(ba.Dilute2D(0.01/nm2, particle))

    # Sample
    sample = ba.Sample()
    sample.addLayer(layer_top)
    sample.addLayer(layer_bottom)

    return sample


def get_simulation(sample):
    beam = ba.Beam(1e9, 0.1*nm, 0.2*deg)
    n = 200
    detector = ba.SphericalDetector(n, -2*deg, 2*deg, n, 0, 3*deg)
    simulation = ba.ScatteringSimulation(beam, sample, detector)
    # Plain Born approximation in a homogeneous vacuum environment,
    # not an averaged decorated layer.
    simulation.options().setUseAvgMaterials(False)
    return simulation


if __name__ == '__main__':
    sample = get_sample()
    ba.showSample3D(sample, sample_size=120*nm, seed=0)
    simulation = get_simulation(sample)
    result = simulation.simulate()
    ba.plot_datafield(result, unit_aspect=1)
    ba.plt.show()
auto/Examples/gisas/methods/CylindersInBA.py