VOLT
Plugins

Steinhardt Order Parameters

Compute per-atom bond-orientational order parameters for crystallinity, nucleation, and liquid/solid discrimination.

Parameters

ParameterTypeDefaultDescription
qliststring4,6,8,10,12Comma-separated list of orders l to compute.
nnnint12Fixed number of nearest neighbors. Set to 0 to use cutoff instead.
cutofffloat0Cutoff radius for neighbor search. Only used when nnn is 0.
wlboolfalseAlso compute the Wigner-3j invariants w_l.
wlHatboolfalseAlso compute the normalized w_l_hat = w_l / q_l^3 (dimensionless).
componentsint-1Emit the 2l+1 complex `Q_l^m /
onlySelectedboolfalseOnly classify atoms flagged by a Selection column.

Output

The plugin writes two parquet files per frame.

{outputBase}_steinhardt.parquet

Summary statistics for the frame, including the q_6-derived structure breakdown.

interface SteinhardtOutput {
    main_listing: {
        total_atoms: int;
        qlist: int[];
        nnn: int;
        cutoff: float;
        wl: bool;
        wl_hat: bool;
        components: int;
        liquid_like: int;
        interface: int;
        crystal_like: int;
    };
    sub_listings: {
        structures: Array<{
            structure_id: int;
            structure_name: string;
            atom_count: int;
        }>;
    };
}

{outputBase}_atoms.parquet

Per-atom data in AtomisticExporter format, consumed by the VOLT viewer for 3D rendering. Atoms are bucketed by their q_6-derived structure label under group names Liquid-like, Interface, and Crystal-like. Each atom carries one scalar column per order in qlist, the classifying q6 scalar, and the full q_l set as a single list<double> for downstream analysis.

interface Atom {
    id: int;
    pos: [float, float, float];
    bucket: string;
    // one scalar column per order l in qlist (e.g. q_4, q_6, q_8, q_10, q_12)
    [q_l: `q_${number}`]: float;
    q6: float;
    q: float[];
    // emitted only when wl = true (one per order l)
    [w_l: `w_${number}`]?: float;
    // emitted only when wlHat = true (one per order l)
    [w_hat_l: `w_hat_${number}`]?: float;
    // emitted only when components >= 0: the 2*(2l+1) real/imag parts
    components?: float[];
}

interface AtomsOutput {
    main_listing: {
        total_atoms: int;
        structure_count: int;
    };
    sub_listings: {
        structures: Array<{
            structure_id: int;
            structure_name: string;
            atom_count: int;
        }>;
    };
    export: {
        AtomisticExporter: {
            [bucketName: string]: Atom[];
        };
    };
}

Surfaced in VOLT as the Steinhardt Model exposure and exported as a .glb scene.

See Also

On this page