Cylinders and prisms

This example deposits a dilute Mixture of cylinders and triangular prisms on a substrate. Each site contains one of the two particle types, selected with equal abundance. Their scattered intensities are added incoherently, with no interference between different particles or particle types. The calculation demonstrates an uncorrelated mixture of distinct particle shapes in the DWBA geometry.

Result

Cylinders and prisms result

Sample

Cylinders and prisms 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
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python3
# /// script
# requires-python = ">=3.10"
# dependencies = ["bornagain>=25,<26"]
# ///
"""
Dilute mixture of cylinders and prisms without interference.

Each dilute site contains one particle, chosen from equal-abundance cylinder
and prism alternatives.
"""
import bornagain as ba
ba.require_versions("bornagain>=25,<26")
from bornagain import deg, nm, nm2


def get_sample():
    """
    A sample with uncorrelated cylinders and prisms on a substrate.
    """

    # Materials
    particle_color = (0.86, 0.24, 0.18)
    particle_mat = ba.RefractiveMaterial("Particle", particle_color, 0.0006, 2e-08)
    substrate_color = (0.28, 0.57, 0.82)
    substrate_mat = ba.RefractiveMaterial("Substrate", substrate_color, 6e-06, 2e-08)
    vacuum = ba.Vacuum()

    # Form factors
    ff_1 = ba.Cylinder(5*nm, 5*nm)
    ff_2 = ba.Prism3(10*nm, 5*nm)

    # Particles
    particle_1 = ba.Particle(particle_mat, ff_1)
    particle_2 = ba.Particle(particle_mat, ff_2)

    # Particle mixture
    mix = ba.Mixture()
    mix.addParticle(particle_1, 1)
    mix.addParticle(particle_2, 1)

    # Layers
    layer_1 = ba.Layer(vacuum)
    layer_1.deposit2D(ba.Dilute2D(.001/nm2, mix))
    layer_2 = ba.Layer(substrate_mat)

    # Sample
    sample = ba.Sample()
    sample.addLayer(layer_1)
    sample.addLayer(layer_2)

    return sample


def get_simulation(sample):
    beam = ba.Beam(1e9, 0.1*nm, 0.2*deg)
    n = 100
    detector = ba.SphericalDetector(n, -1*deg, 1*deg, n, 0., 2*deg)
    simulation = ba.ScatteringSimulation(beam, sample, detector)
    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/sample/CylindersAndPrisms.py