Programmatic usage

Four-state pipeline (from a CIF)

from mag4 import (
    run_cif_analysis, expand_supercell,
    find_dimers, build_reference_bath,
    generate_four_states, find_unique_configs,
    find_symmetry_ops,
)
from mag4.lattice import get_cartesian_coords

crystal, couplings = run_cif_analysis("Gd2S3.cif", "Gd",
                                      cutoff=7.0, tol=0.01)
crystal = expand_supercell(crystal, 2, 1, 1)

atoms    = crystal.target_species
ref_bath = build_reference_bath(len(atoms))
dimers   = find_dimers(atoms, crystal.lattice_matrix, couplings, tol=0.05)

cart    = get_cartesian_coords(atoms, crystal.lattice_matrix)
sym_ops = find_symmetry_ops(cart, crystal.lattice_vectors)

all_cfgs = []
for name, _ in couplings:
    if dimers[name]:
        all_cfgs.extend(generate_four_states(ref_bath, dimers[name][0], name))

unique = find_unique_configs(all_cfgs, sym_ops)
print(f"{len(unique)} unique configurations to compute "
      f"(out of {len(all_cfgs)} raw)")

Multi-sublattice LSWT and T_c

from pymatgen.core import Structure
from mag4.io_cif import get_distance_shells
from mag4.magnon import (
    get_sublattice_bonds, build_qmesh, build_jq_matrices,
    compute_eigenvalues_all_q, analyse_ordering,
    compute_tc, compute_tc_lswt,
)

shells   = get_distance_shells("Gd2O2S.cif", "Gd", cutoff=7.0)
j_values = {"J1": 0.26, "J2": 0.26, "J3": 0.12}
bonds    = get_sublattice_bonds("Gd2O2S.cif", "Gd", 7.0, shells, j_values)

structure       = Structure.from_file("Gd2O2S.cif")
q_cart, q_frac  = build_qmesh(structure, 30, 30, 20)
Jq              = build_jq_matrices(bonds, q_cart)
evals           = compute_eigenvalues_all_q(Jq)

ordering = analyse_ordering(Jq, evals, q_frac, q_cart, structure)
tc_lt    = compute_tc(evals, S=3.5, lam0=ordering["lam0"])
tc_sw    = compute_tc_lswt(bonds, S=3.5, ordering_lt=ordering,
                           q_cart=q_cart, evals_lt=evals)

M – L – M angles

from pymatgen.core import Structure
from mag4.analysis import (
    group_into_shells, find_bridging_angles,
)
from mag4.analysis.bond_angles import get_mm_pairs

structure = Structure.from_file("Gd2S3.cif")
pairs     = get_mm_pairs(structure, "Gd", cutoff=7.0)
shells    = group_into_shells(pairs)
for shell in shells:
    for p in shell["pairs"]:
        angles = find_bridging_angles(
            structure, p["site_i"], p["site_j"], p["image"],
            ligand_elements=["S"], bond_cutoff=3.5)

WIEN2k moment extraction

from mag4.analysis import find_cases, build_table

cases = find_cases(".")
table = build_table(cases, atom_indices=list(range(9, 17)))
print("\\n".join(table))