Dense cylinders

By default, layers containing embedded particles of different materials are regarded as composed by a single material using material averaging. This behavior is enabled by default and does not require explicit configuration.

The figure shows the intensity map produced by the script below.

The script below shows how to average materials when simulating scattering from a square lattice of cylinders inside a finite layer.

 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
#!/usr/bin/env python3
"""
Square lattice of cylinders inside finite layer with usage of average material
"""
import bornagain as ba
from bornagain import ba_plot as bp, deg, nm, R3


def get_sample(cyl_height=5*nm):
    """
    A sample with cylinders on a substrate.
    """
    # defining materials
    vacuum = ba.Vacuum()
    material_layer = ba.RefractiveMaterial("Layer", 3e-6, 2e-8)
    material_substrate = ba.RefractiveMaterial("Substrate", 6e-6, 2e-8)
    material_particle = ba.RefractiveMaterial("Particle", 3e-5, 2e-8)

    # cylindrical particle
    cylinder_ff = ba.Cylinder(5*nm, cyl_height)
    cylinder = ba.Particle(material_particle, cylinder_ff)
    cylinder.translate(R3(0, 0, -cyl_height))

    # interference function
    layout = ba.Crystal2D(cylinder, ba.SquareLattice2D(15*nm, 0))
    profile = ba.Profile2DCauchy(300*nm, 300*nm, 0)
    layout.setDecayFunction(profile)

    vacuum_layer = ba.Layer(vacuum)
    intermediate_layer = ba.Layer(material_layer, 5*nm)
    substrate_layer = ba.Layer(material_substrate)
    vacuum_layer.addStruct(layout)

    sample = ba.Sample()
    sample.addLayer(vacuum_layer)
    sample.addLayer(intermediate_layer)
    sample.addLayer(substrate_layer)
    return sample


def get_simulation(sample):
    beam = ba.Beam(1e9, 0.1*nm, 0.2*deg)
    n = 100
    detector = ba.SphericalDetector(n, -2*deg, 2*deg, n, 0, 2*deg)
    simulation = ba.ScatteringSimulation(beam, sample, detector)
    return simulation


if __name__ == '__main__':
    sample = get_sample()
    simulation = get_simulation(sample)
    result = simulation.simulate()
    bp.plot_datafield(result, unit_aspect=1)
    bp.plt.show()
auto/Examples/scatter2d/CylindersInAverageLayer.py