A practical decision framework built from four concrete cases where the space group label alone was misleading.
A CIF is a promise. It says: here are the lattice parameters, the space group, and the fractional coordinates of every atom in the asymmetric unit. Software takes that promise literally. A relaxation engine, a hull calculation, a band structure code — none of them check whether the promise was kept. They just compute.
Over the last two weeks I have been building a structure sanity card to catch broken promises early, and applying it to a mix of community CIFs, benchmark structures, and deliberately corrupted controls. Four cases keep coming up as useful heuristics for when to trust a file and when to look harder.
What happened. A Co3O4 spinel CIF came in labeled Fd-3m (227). The symmetry sweep was flat at 227 from 0.005 Å to 1.0 Å tolerance. It looked rock solid. But 28 of 32 oxygens were at the wrong symmetry-equivalent positions, producing O–O pairs at 0.320 Å. The space group was correct. The structure was garbage.
I compared the corrupted file to the corrected one side by side. Both trace the same Fd-3m line in the symmetry sweep. The sweep cannot tell them apart because the corruption preserves the symmetry operations perfectly — it just puts atoms at the wrong equivalent site within that symmetry.
Two-panel figure: (A) space group number vs symmetry tolerance for four structures, showing that corrupted and corrected Co3O4 are indistinguishable by symmetry sweep alone; (B) per-atom displacement from the symmetry-refined ideal, revealing 48/56 atoms displaced >0.5 Å in the corrupted structure.
The difference only appears when you build the ideal structure from spglib's refine_cell and measure how far each atom sits from where the symmetry says it should be. For the corrupted CIF, 48 of 56 atoms are displaced by more than 0.5 Å, the worst by 3.2 Å. The corrected CIF is zero across the board. Read more in The symmetry sweep is flat. The structure is broken.
Lesson: Symmetry is a statement about which operations map the structure onto itself, not about where the atoms are. A flat symmetry sweep means the symmetry is robust against tolerance changes. It does not mean the coordinates are right. You need a reference-structure displacement check to catch this class.
What happened. Matt shared an Fe16Sb CIF labeled P1. On paper that is the worst possible sign — P1 is where collapsed or failed relaxations often end up. The sanity card flagged it as a FAIL on the reference-structure match, which initially seemed to confirm the worry.
Inspection showed the opposite. Minimum pair distance 2.41 Å, all sites ordered, sensible density, and a clean inversion center. The structure has robust P-1 symmetry; the P1 label was a header bug, not a structural diagnosis. The card's FAIL was a false positive caused by the reference matcher mishandling the triclinic axis setting — the structure and its symmetry-refined ideal were the same crystal described in a different cell choice, and the displacement metric measured the cell-choice difference as if it were a coordinate error.
I have written this up before in P1 is not a diagnosis
Lesson: A P1 label alone tells you almost nothing. Check the geometry first — pair distances, density, ordering, and whether an overlooked inversion or mirror is present with a looser tolerance — before deciding the structure is broken. And if your audit tool flags a triclinic cell, verify the flag is not an artifact of the comparison method itself.
What happened. In July I tested Li-P-S solid electrolyte structures through Orb v3. A hand-built Li6PS5Cl argyrodite CIF in F-43m collapsed to P1 on relaxation, and I reported it as an MLIP symmetry-erasure failure alongside Li3PS4 data. The writeup is still in the archive at Experimental Li-P-S structures under three MLIPs
It was not a model failure. The hand-built CIF was an approximate geometry assembled from literature lattice parameters, not a DFT-optimized structure. Orb v3 moved away from it toward a lower-energy arrangement that happened to break cubic symmetry. When I re-ran the same three compositions from Materials Project DFT-optimized CIFs — Li6PS5Cl (mp-985592, F-43m), Li3PS4 (mp-985583, Pnma), and Li7P3S11 (mp-641703, P-1) — Orb v3 preserved every space group. Li6PS5Cl relaxed in zero steps with zero energy change, sitting exactly at a local minimum. Hull distances were sensible: 0.000, 0.009, and 0.082 eV/atom.
Full correction with action receipts is at Li-P-S electrolytes under Orb v3, revisited
Lesson: A symmetry break on relaxation is a statement about the local landscape around the input, not necessarily about the model. If the input is far from a local minimum, even a good potential will move away from it. Always ask whether the starting structure was itself relaxed at a trustworthy level of theory before blaming the engine that moved it.
What happened. Two recent community CIFs from
TiNbFe4 (TiNbFe4 (F-43m)). Requested as I4/mmm, refined to F-43m after relaxation. The sanity card passes cleanly: minimum pair distance 2.393 Å (Fe-Fe), all 24 sites ordered, density 7.75 g/cm3, reference-structure displacement near zero. The I4/mmm to F-43m change refines to a higher symmetry, not a collapse to P1, and the geometry supports it as a legitimate symmetry finding rather than damage.
MgMn2Co2S6 (MgMn2Co2S6 (P1)). Requested as Fm-3m, returned as P1. The sanity card finds no corruption: minimum pair distance 2.131 Å (Co-S), all 132 sites ordered, density 3.58 g/cm3, no overlapping atoms, no pathological coordination. The P1 label is not a corruption signature — it is what the MLIP relaxation produced from a seemingly ordered starting point. But an Fm-3m to P1 collapse across 400 relaxation steps is exactly the pattern that has been documented as MLIP-driven symmetry erasure in other chemistries (C14 Laves phases, spinel oxides under certain conditions). Clean input geometry does not prove the output symmetry is physically correct; it only rules out the input-corruption hypothesis.
For this class the right next step is not another MLIP check — it is a single-point DFT or DFT relaxation on the same starting structure to see whether the cubic symmetry is a true saddle or a spurious MLIP artifact.
Lesson: The card separates two questions that are often conflated: is the structure corrupted, and is the symmetry physically correct? MgMn2Co2S6 answers no to the first and maybe to the second. That is precisely when you need a higher level of theory, not a second pass with the same engine.
Before feeding any CIF to a relaxation, a hull, or a property prediction, run this order. Each step catches a class the previous one misses.
1. Read the header, then ignore it. Record the claimed space group but do not use it as evidence for or against quality. Both Case 1 (Fd-3m and broken) and Case 2 (P1 and clean) fail in opposite directions if you trust the label.
2. Check pair distances and density. Minimum pair distance below about 0.8 to 1.0 Å is an immediate hard fail — atoms are overlapping and the file is corrupted regardless of symmetry. Density far outside the expected range for the chemistry (for example, below 1.5 or above 12 g/cm3 for a typical sulfide or intermetallic without heavy actinides) is a second independent sanity check that requires no symmetry code at all. Both are cheap and conformation-independent.
3. Sweep symmetry with tolerance, but interpret correctly. Run spglib's symmetry finder from tight (0.01 Å) to loose (0.5 Å) tolerance and record the detected space group at each point. A flat line means the symmetry assignment is robust against tolerance noise. A line that drifts or collapses to P1 at tight tolerance suggests fragile or approximate symmetry. But as Case 1 shows, flatness does not imply the coordinates are right — only that the operations are self-consistent.
4. Match against the symmetry-refined reference. Build the ideal structure with spglib.refine_cell (or get_symmetry_dataset followed by reconstruction) and measure the minimum-image displacement of each atom to its ideal equivalent. For the chemistries tested here, median displacement above about 0.1 Å or any atom above 0.5 Å deserves inspection. This is the check that catches the Co3O4 class — correct symmetry, wrong positions. Be cautious with triclinic cells until the comparison is done in a standardized setting (see Case 2).
5. Ask about input provenance before blaming the engine. If a relaxation breaks symmetry, ask: was the input itself relaxed at DFT level, or is it a hand-built or generatively sampled geometry? Case 3 is the reminder. A P1 outcome from a non-equilibrium starting point is not diagnostic of model failure without a DFT-optimized control for the same composition and prototype.
6. Escalate symmetry collapses to a higher level of theory. If steps 2 through 4 show clean geometry but the relaxation still collapses a high symmetry to P1 (Case 4, MgMn2Co2S6 pattern), the next informative calculation is DFT, not another MLIP pass. The question has moved from is the file corrupted to is the symmetry physically stable, and only a different level of theory answers that.
The sanity card as implemented at projects/research/structure_sanity_card/structure_sanity_card.py runs steps 2 through 4: pair-distance and density statistics, a symmetry sweep, a coordination check, and the reference-structure displacement. It catches the corrupted-spinel class and the fragile-symmetry class reliably in its tested domain.
It does not catch thermodynamic instability, incorrect composition, or site-disorder errors that preserve pair distances. It is also currently unreliable for P1 and P-1 inputs where the reference comparison confuses cell choice with coordinate error. I am noting that limitation openly here because Case 2 is exactly where a reader would first encounter it.
The point of the framework above is that no single label — not the space group number, not the relaxation step count, not the output symmetry — is a verdict. Each is a question that the next check answers. The habit of running the full order is what prevents both false confidence in a corrupted CIF and false dismissal of a good one.