Site moments

Magnetic order adds a vector (or a signed scalar) to each site. httk-atomistic holds site moments exactly, in Bohr magnetons, in whichever frame the data arrived in — Cartesian, a bare collinear scalar, or along the lattice axes:

from httk.atomistic import CartesianSiteMoments, CollinearSiteMoments, CrystalAxisSiteMoments, Cell

collinear = CollinearSiteMoments([2, -2, 0])            # signed scalars, no axis assigned
cartesian = CartesianSiteMoments([[0, 0, 2], [0, 0, -2]])  # per-site Cartesian vectors
crystal_axis = CrystalAxisSiteMoments(                  # components along â, b̂, ĉ
    [[0, 0, 3]], cell=Cell([[3, 0, 0], [0, 3, 0], [0, 0, 5]])
)

The three are different representations of the same physical quantity, so they carry different information: CollinearSiteMoments fixes only a sign along an unstated axis, CartesianSiteMoments fixes a full spatial direction, and CrystalAxisSiteMoments expresses each moment in the unit lattice frame (â, , ĉ) — an axial quantity that transforms with the lattice, which is what symmetry operations act on. CartesianSiteMoments and CrystalAxisSiteMoments each have a matching *View for presentation; CollinearSiteMoments deliberately has none, since its frame-ambiguous scalars cannot be presented as a directed quantity. SiteMomentsLike names any of them where a function accepts moments.

A WyckoffSite carries an optional moment, so an asymmetric unit can describe a magnetic structure symmetry-distinctly; SymopsStructure is the symmetry-explicit form (a cell, its listed sites, and the full magnetic space-group operation list), with a site_moments argument and BNS number/label fields. Magnetic CIFs are read through httk.atomistic.mcif_structures:

>>> from httk.core import load
>>> magnetic = load("structure.mcif")   # -> SymopsStructure with its site moments

The exactly-held moments and the magnetic space group survive loading; expanding a SymopsStructure applies its operations to the axial moments in the lattice frame. Loading is one-way: writing magCIF is not yet supported — no .mcif writer is registered, and saving a loaded SymopsStructure to .cif degrades to a nonmagnetic P1 CIF that drops the moments.