Disordered particle assembly

Completely uncorrelated particles

To add a dilute random assembly of uncorrelated particles to a layer:

layer.depositParticle(density, particle)

Argument density is the number density in nm$^{-2}$.

For argument particle, Particle.

The particles are vertically aligned such that the bottom of the particles coincides with the bottom of the layer. Accordingly, function depositParticle must not be applied to the bottom layer of a multi-layer sample.

For an incoherent mixture of different particles, just call depositParticle for each kind of particle.

Hard-disk liquid

To add a dense random assembly of non-overlapping but otherwise non-interacting particles to a layer:

layer.depositParticle(density, particle, ba.Random2D_PY)

The scattering is computing in Percus-Yevick approximation, using the approximative structure factor of M.S. Ripoll & C.F. Tejero (1995).

Mixtures of particles

Example

In the following example, the sample is a dense random assembly of disks on a substrate. GISAS has been simulated (a) assuming that the disks are completely uncorrelated, as in an ideal gas, and (b) taking into account that the disks cannot overlap, using the hard-disk liquid model. The figure shows horizontal cuts through these GISAS patterns.

GISAS intensity at $\alpha_f=0.8^\circ$

 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
#!/usr/bin/env python3
"""
Dense cylinders, approximated as ideal gas or as hard disks.
Horizontal cut through GISAS image.
"""
import bornagain as ba
from bornagain import ba_plot as bp, deg, nm


def get_sample(approx):
    # materials
    vacuum = ba.RefractiveMaterial("Vacuum", 0, 0)
    material_substrate = ba.RefractiveMaterial("Substrate", 6e-6, 2e-8)
    material_particle = ba.RefractiveMaterial("Particle", 3e-5, 2e-8)

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

    # layers
    toplayer = ba.Layer(vacuum)
    density = 0.008
    toplayer.depositParticle(density, particle, approx)
    substrate = ba.Layer(material_substrate)

    sample = ba.Sample()
    sample.addLayer(toplayer)
    sample.addLayer(substrate)
    return sample


def simulate(sample, title):
    beam = ba.Beam(1e9, 0.03*nm, 0.2*deg)
    n = 555
    detector = ba.SphericalDetector(n, -1*deg, 1*deg, 1, 0.78*deg, 0.82*deg)
    simulation = ba.ScatteringSimulation(beam, sample, detector)
    simulation.options().setUseAvgMaterials(True)
    field = simulation.simulate()
    field.setTitle(title)
    return field.flat()


if __name__ == '__main__':
    results = [
        simulate(get_sample(ba.Random2D_Dilute), "ideal gas"),
        simulate(get_sample(ba.Random2D_PY), "hard disks"),
    ]
    bp.plot_multicurve(results)
    bp.plt.show()
auto/Examples/scatter2d/Disordered.py