Quick start

Install

pip install ebsdsim

A WebGPU-capable GPU and driver are required to run simulations (not needed to build or read the docs).

From a CIF file

Bundled presets "GaN.cif" and "Ni.cif" ship with the package, or pass any filesystem path:

import ebsdsim as es

mp = es.master_pattern_from_cif(
    "GaN.cif",
    voltage_kv=20.0,
    halfw=250,              # 501×501 Lambert raster
    dmin=0.05,              # nm, reflection cutoff
    energy_binwidth_keV=1.0,
)
print(mp.pattern.shape)     # (501, 501) north hemisphere, raw intensities
mp.save("GaN-master-pattern.npz")

From a manual material

import ebsdsim as es

ni = es.Material(
    cell=es.Cell(a=3.52, b=3.52, c=3.52, space_group="Fm-3m"),
    atoms=[es.Atom("Ni", x=0.0, y=0.0, z=0.0)],
    name="Ni",
)
mp = es.master_pattern(ni, voltage_kv=20.0, halfw=250)

Display scaling

Simulation results are never min–max normalized. For display:

disp, axes = mp.lambert_data(normalize="robust")
nh = disp[0, 0, 0]  # energy- and site-integrated north hemisphere

Offline loading (NumPy only)

The standalone ebsdsim.mploader module reads .npz files without installing the full GPU stack:

from ebsdsim.mploader import load_master_pattern, to_uint8, save_png_gray

mp = load_master_pattern("GaN-master-pattern.npz")
disp, _ = mp.lambert_data(normalize="minmax")
save_png_gray(to_uint8(disp[0, 0, 0]), "preview.png")

Further reading