import abtem
import ase
import matplotlib.pyplot as plt
import numpy as np
from ase.build import graphene
from ase.io import write

PACBED quickstart#

This notebook demonstrates a basic simulation of a position averaged convergent beam electron diffraction (PACBED) simulation of SrTiO\(_3\).

Configuration#

We start by (optionally) setting our configuration. See documentation for details.

abtem.config.set(
    {
        "device": "cpu",
        "fft": "fftw",
        "diagnostics.task_progress": True,
        "diagnostics.progress_bar": "tqdm",
    }
);

Atomic model#

We import a model of SrTiO3. See our walkthough or our tutorial on atomic models.

atoms = ase.io.read("data/SrTiO3.cif")

abtem.show_atoms(atoms)
(<Figure size 640x480 with 1 Axes>, <Axes: xlabel='x [Å]', ylabel='y [Å]'>)
../../../_images/89676ef586a8bd9ea2de5e6d0a9dc71940a2fca38e32b415349110f8c7214bfb.png

Crystal potential#

potential_unit = abtem.Potential(atoms, slice_thickness=0.5, sampling=0.05)
repetitions_xy = 5
repetitions_z = 10

potential = abtem.CrystalPotential(
    potential_unit, repetitions=(repetitions_xy, repetitions_xy, repetitions_z)
)

Probe#

probe = abtem.Probe(energy=100e3, semiangle_cutoff=30)

probe.grid.match(potential)

Scan#

scan = abtem.GridScan(start=(0, 0), end=(repetitions_xy, repetitions_xy))
visualization = potential.show()

scan.add_to_plot(visualization)
../../../_images/c1c9e7ba57f5ac85c21bf53be37321febebd730b7c6cb14c99c798be0319a2e9.png

Detect#

detector = abtem.PixelatedDetector()
measurement = probe.scan(scan=scan, potential=potential, detectors=detector)
measurement.compute();

Average over scan positions#

measurement.shape
(17, 17, 185, 185)
measurement.axes_metadata
type                 label     coordinates
-------------------  --------  --------------------
ScanAxis             x [Å]     0.00 0.29 ... 4.71
ScanAxis             y [Å]     0.00 0.29 ... 4.71
ReciprocalSpaceAxis  kx [1/Å]  -4.66 -4.61 ... 4.66
ReciprocalSpaceAxis  ky [1/Å]  -4.66 -4.61 ... 4.66
pacbed = measurement.mean(axis=(0,1))
pacbed.crop(50).show(power=0.5);
../../../_images/77c6694c8dfec26f53cba44ffa4a0f93b49ced9b9cae09325401ed7986fc5b59.png
# this cell produces a thumbnail for the online documentation

visualization = pacbed.crop(50).show(power=0.5)
visualization.axis_off()
plt.savefig(
    "../thumbnails/pacbed_quickstart.png", bbox_inches="tight", pad_inches=0
)
../../../_images/03c8410fae11bb6cface5047a0658f5bf09b915b539dc30f9f824b5939d05925.png