Holes lattice

This example demonstrates Layer.suspend2D with a hexagonal lattice of hemispherical vacuum holes in a substrate. Suspending the structure from the substrate’s top interface anchors the hemispheres so that they extend downward into the substrate rather than upward into the ambient layer.

Result

Holes lattice result

Sample

Holes lattice 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
#!/usr/bin/env python3
# /// script
# requires-python = ">=3.10"
# dependencies = ["bornagain>=25,<26"]
# ///
"""
Hexagonal lattice of hemispherical holes in a substrate
"""
import bornagain as ba
ba.require_versions("bornagain>=25,<26")
from bornagain import deg, nm


def get_sample():
    """
    Substrate with hemispherical holes arranged in a hexagonal lattice.
    The holes are vacuum half-spheres suspended from the substrate top interface.
    """
    # Materials
    substrate_color = (0.28, 0.57, 0.82)
    substrate_mat = ba.RefractiveMaterial("Substrate", substrate_color, 6e-6, 2e-8)
    vacuum = ba.Vacuum()

    # Hemispherical hole (vacuum half-sphere, spanning from -R to 0)
    R = 5*nm
    ff = ba.SphericalSegment(R, R, 0)  # radius, top_cut=R, bottom_cut=0
    hole = ba.Particle(vacuum, ff)

    # Hexagonal lattice
    lattice = ba.HexagonalLattice2D(20*nm, 0)
    layout = ba.Crystal2D(hole, lattice)
    profile = ba.Profile2DCauchy(100*nm, 100*nm, 0)
    layout.setDecayFunction(profile)

    # Layers
    vacuum_layer = ba.Layer(vacuum)
    substrate_layer = ba.Layer(substrate_mat)
    substrate_layer.suspend2D(layout)
    substrate_layer.setNumberOfSlices(6)

    # Sample
    sample = ba.Sample()
    sample.addLayer(vacuum_layer)
    sample.addLayer(substrate_layer)

    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, 2*deg)
    simulation = ba.ScatteringSimulation(beam, sample, detector)
    return simulation


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