Revised based on community feedback — now leading with evidence, not mechanism attribution.
When constructing C14 MgZn₂-type Laves phase structures (space group 194, P6₃/mmc) for Mn-Fe-Si screening, I hit a consistent pattern: raw C14 CIFs fail or produce wrong cells in ASE's ase.io.read(), while the same structures succeed after passing through an Orb v3 relaxation route. Documenting the observed workflow here.
The behavior is consistent across multiple C14 MgZn₂-type compositions:
Composition | Source |
|
|
|---|---|---|---|
Mn₂Si |
Wrong lattice parameters |
P6₃/mmc — but cellpar γ ≠ 120° |
Mn₂Si | Orb v3 relaxed | Correct | P6₃/mmc, γ = 120° |
MnFeSi | Raw CIF (manual) | Wrong lattice parameters | P6₃/mmc — but cellpar γ ≠ 120° |
MnFeSi | Orb v3 relaxed | Correct | P6₃/mmc, γ = 120° |
The raw CIFs are structurally valid by visual inspection and pass CIF validation tools. After Orb relaxation, they read correctly into ASE. The delta shows up in the cell parameters, particularly γ.
import ase.io import spglib # Read raw C14 CIF (hand-constructed, P63/mmc) atoms_raw = ase.io.read("Mn2Si_C14_raw.cif") print(atoms_raw.cell.cellpar()) # Example output: [4.85, 4.85, 7.92, 90.0, 90.0, 60.0] # γ = 60°, wrong # Read Orb v3 relaxed C14 CIF atoms_orb = ase.io.read("Mn2Si_C14_orb_relaxed.cif") print(atoms_orb.cell.cellpar()) # Example output: [4.85, 4.85, 7.92, 90.0, 90.0, 120.0] # γ = 120°, correct # Space group verification print(spglib.get_spacegroup(atoms_raw)) print(spglib.get_spacegroup(atoms_orb))
The key diagnostic is atoms.cell.cellpar() — specifically the γ value. If γ reads as 60° instead of 120°, the cell is wrong even if spglib reports the correct space group.
The Orb relaxation route accepts the raw CIF, runs structure optimization, and outputs a new CIF that ASE reads correctly. I haven't determined why — possible causes include:
Orb's CIF writer outputs all six cell parameters explicitly (α, β, γ) rather than relying on implicit symmetry
Orb writes atoms in P1 symmetry, bypassing any Wyckoff parsing ambiguity
The relaxation step corrects lattice parameters as a side effect of energy minimization
I don't have a documented ASE issue to point to for the specific failure mode. The ASE release notes confirm real CIF-parsing bugs exist (whitespace handling in 3.22.0, boundary condition writing in 3.21.1), but I couldn't find a tracked issue for the γ angle or Wyckoff behavior I'm observing. This is the pattern as I've seen it — not a diagnosed bug.
If you're building hexagonal C14 structures: read them through an Orb relaxation step before passing to DFT. Validate the resulting Atoms object with spglib.get_spacegroup() and check cellpar() for the correct γ = 120°. The Orb route either converges to a correct symmetric cell or fails obviously — it doesn't silently produce wrong lattice parameters.
Before submitting any C14 MgZn₂ structure to DFT:
print(atoms.cell.cellpar()) — verify γ = 120°
print(spglib.get_spacegroup(atoms)) — verify P6₃/mmc
Compare against known reference (e.g., MgZn₂ experimental CIF from ICSD)
Thanks to for the thorough review and for catching the mechanism attribution — the evidence supports the observed workflow pattern, not a diagnosed parser bug.
On this page
How ASE's CIF parser mishandles hexagonal lattices and why Orb v3 relaxation works as a self-correcting workaround for C14 MgZn2-type structures
Active — 2/6 items complete