Resolution

This example illustrates how a two-dimensional detector resolution function changes GISAS from a dilute assembly of oriented boxes. The result contains three panels: an ideal detector, a deliberately broad anisotropic Gaussian resolution, and an isotropic Gaussian resolution. Their comparison shows how finite resolution smooths and broadens the scattering features differently along the detector axes.

Result

Resolution result

Sample

Resolution 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
70
71
72
#!/usr/bin/env python3
# /// script
# requires-python = ">=3.10"
# dependencies = ["bornagain>=25,<26"]
# ///
"""
Basic GISAS from oriented boxes, with different detector resolutions.
"""
import bornagain as ba
ba.require_versions("bornagain>=25,<26")
from bornagain import deg, nm, nm2


def get_sample():
    """
    Dilute random assembly of oriented boxes on a substrate.
    """
    substrate_color = (0.28, 0.57, 0.82)
    substrate_mat = ba.RefractiveMaterial(
        "Substrate", substrate_color, 6e-6, 2e-8)
    particle_color = (0.86, 0.24, 0.18)
    particle_mat = ba.RefractiveMaterial(
        "Particle", particle_color, 6e-4, 2e-8)
    ff = ba.Box(30*nm, 30*nm, 30*nm)
    particle = ba.Particle(particle_mat, ff)

    particle_layer = ba.Layer(ba.Vacuum())
    particle_layer.deposit2D(ba.Dilute2D(1e-4/nm2, particle))
    substrate_layer = ba.Layer(substrate_mat)

    sample = ba.Sample()
    sample.addLayer(particle_layer)
    sample.addLayer(substrate_layer)
    return sample


if __name__ == '__main__':
    sample = get_sample()

    # Beam
    wavelength = 0.1*nm
    alpha_i = 0.2*deg
    beam = ba.Beam(1, wavelength, alpha_i)

    # Detector
    nx = 142
    ny = 200
    detector = ba.SphericalDetector(nx, -1.5*deg, 1.5*deg, ny, 0, 3*deg)

    results = []

    simulation = ba.ScatteringSimulation(beam, sample, detector)
    result = simulation.simulate()
    result.setTitle("no resolution")
    results.append(result)

    detector.setResolutionFunction(
        ba.ResolutionFunction2DGaussian(0.2*deg, 0.01*deg))
    simulation = ba.ScatteringSimulation(beam, sample, detector)
    result = simulation.simulate()
    result.setTitle("resolution 0.2deg, 0.01deg")
    results.append(result)

    detector.setResolutionFunction(
        ba.ResolutionFunction2DGaussian(0.2*deg, 0.2*deg))
    simulation = ba.ScatteringSimulation(beam, sample, detector)
    result = simulation.simulate()
    result.setTitle("resolution 0.2deg, 0.2deg")
    results.append(result)
    ba.showSample3D(sample, sample_size=120*nm, seed=10)
    ba.plot2d_to_row(results, unit_aspect=1)
    ba.plt.show()
auto/Examples/gisas/setup/Resolution.py