Skip to main content

PyPI version Python License: MIT Tests Docs

CrystOD

The offline symmetry lab for crystals and molecules.

CrystOD answers questions like:

  • 📊 "Which irreps do the Ti d orbitals belong to in SrTiO₃?"
  • 🔬 "What space groups can this imaginary phonon condense into?"
  • 🧲 "What symmetry-adapted spin bases does this magnetic structure have?"
  • 🧪 "Show me the MO diagram of this molecule from symmetry alone."

It replaces clicking through Bilbao / ISOTROPY / AMPLIMODES with a single pip-installable Python package and seven CLI commands — fully offline, fully scriptable, and cross-validated against the reference servers.

Documentation: https://mochizuki-tus.github.io/CrystOD/

Crystal-orbital diagram of ScF3 at the R point: Sc and F3 sublattice levels on the sides, the crystal orbitals with irrep labels in the middle, and the orbital sketch of the selected level Phonon dispersion of cubic SrTiO3 with the ISO-IR irrep label of every level at the special k points; the imaginary R5- mode in red

Interactive 3D Brillouin zone of ScF3 with the special k points and the seekpath k path MO diagram of CH4 from symmetry and overlap, with the 1t2 HOMO selected and its orbital sketch

Top row: crystod --diagram -c 221_PPOSCAR_ScF3 --co-left Sc --co-right F3 and crystod-phonon --irreps -c 221_PPOSCAR_SrTiO3 --dim "4 4 4" (the labels drawn on a phonopy dispersion); bottom row: crystod-bz -c 221_PPOSCAR_ScF3 and crystod-mol --diagram --xyz XYZ_CH4.xyz. Every input is bundled with the package (see below).

Every irrep label follows one convention throughout — the ISO-IR (ISOTROPY, Miller–Love) tables, which ship inside the package — at the special k points and equally on symmetry lines, planes and general points.

The seven commands

command what it gives you
crystod crystal-orbital / SALC irreps from atomic orbitals, orbital hybridization, crystal-orbital diagrams (extended Hückel or PySCF), band structure, DOS, 3D SALC viewers
crystod-group direct products of point- and space-group irreps, reducible-representation decomposition, ligand-field splitting, polynomial basis functions, coset decompositions, isotropy subgroups, multi-electron terms, POSCAR ↔ CIF, symmetry-mode (AMPLIMODES-style) analysis
crystod-bz interactive 3D Brillouin zones, automatic or manual k-paths, supercell (folded) BZs, special k points of any space group
crystod-phonon phonon irrep labeling, element-projected fatbands, longitudinal/transverse bands, eigenvector VESTA export, symmetry-adapted modulations, symmetry-only vibration bases, isotropy subgroups of imaginary modes
crystod-mag symmetry-adapted spin bases (cluster multipoles / SAMM) with ready-to-paste VASP MAGMOM or Quantum ESPRESSO input
crystod-md atomic displacement parameters (ADPs) and time-averaged cells from an MD trajectory
crystod-mol molecular point groups, molecular SALCs, and MO diagrams from symmetry + overlap (or PySCF)

Several of these are offline counterparts of the Bilbao Crystallographic Server and ISOTROPY tools (DIRPRO, ISOSUBGROUP, AMPLIMODES) and were cross-validated against them; see the documentation for the validation details.

Installation

pip install CrystOD

This installs the seven commands with everything needed for the symmetry analysis, the extended-Hückel crystal-orbital diagrams, the phonon irreps and the MO diagrams. Requires Python 3.10 or later. The dependencies (phonopy, spglib, spgrep, ase, seekpath, pymatgen, numpy, scipy, sympy, pandas, matplotlib) are installed automatically.

pip install "CrystOD[quantum]"

This adds PySCF for the quantitative engines — crystod --diagram/--band/--dos/--visualize --pyscf and crystod-mol --diagram --pyscf. PySCF is about 500 MB with its dependencies, which is why it is an extra; a --pyscf run without it stops with a one-line error that names this command.

To also get the worked examples and the full test suite, clone the repository instead:

conda create -n crystod python=3.11 && conda activate crystod
git clone https://github.com/ahntaeyoung1212/CrystOD.git && cd CrystOD && pip install -e ".[quantum]"

Quick start

With your own structure

# Your POSCAR -> crystal-orbital irreps of the Ti d orbitals
crystod -c POSCAR --element Ti --orbital d

# Your POSCAR + FORCE_SETS (phonopy, 2x2x2 supercell) -> phonon irrep labels
crystod-phonon --irreps -c POSCAR --dim "2 2 2"

# Space-group algebra (no structure file needed)
crystod-group --parent Pm-3m --irrep R4+

Try it without any input file

A few small inputs ship inside the package, so the first run needs nothing but the pip install:

crystod --example ScF3_d          # Sc 3d crystal-orbital irreps of ScF3
crystod-phonon --example SrTiO3   # phonon irrep labels of SrTiO3 (writes phonon_irreps.yaml)
crystod-mol --example CH4         # MO diagram of methane (writes MolOD_XYZ_CH4.html)
crystod-bz --example ScF3         # 3D Brillouin zone of ScF3 (writes BZ_221_PPOSCAR_ScF3.html)

--example NAME copies the input files of that example into the working directory, prints the equivalent ordinary command line (Running: crystod -c 221_PPOSCAR_ScF3 --element Sc --orbital d) and runs it, so the files are there to edit and re-run. --example alone lists the examples bundled with that command.

More

Which space groups the imaginary phonons of cubic SrTiO₃ can condense into — and the distorted structures themselves:

crystod-phonon --subgroup -c 221_PPOSCAR_SrTiO3 --dim "4 4 4" --qpoint R --modulate

Freeze a chosen mode combination into a structure (a unit cell plus FORCE_SETS is all you need):

crystod-phonon --modulation -c 221_PPOSCAR_ScF3 --qpoint 0.5 0.5 0.5 --mode 1 2 3 --amplitude 0.3

An MO diagram of a molecule from symmetry and overlap alone:

crystod-mol --diagram --xyz XYZ_CH4.xyz

Every command prints its own examples with --help, and the documentation shows the output of each one.

Python API

Every analysis is also a Python function, grouped into one module per command, so a part of CrystOD can be used inside another program:

import crystod

subgroups = crystod.group.isotropy_subgroups("Pm-3m", "R4+")
results = crystod.phonon.scan_imaginary_modes(phonon)   # a live phonopy object

crystod.salc, crystod.group, crystod.phonon, crystod.bz, crystod.mag, crystod.md, crystod.mol. Attribute access is lazy, so import crystod plus all seven domains costs ~0.09 s and pulls in nothing heavier than NumPy — phonopy, spgrep, PySCF and matplotlib load only when a function that needs them is called.

The API reference is at https://mochizuki-tus.github.io/CrystOD/api/. Three Jupyter notebooks in tutorials/ walk through one workflow each, on the bundled example inputs and with the Python API and the command line side by side: 01_phonon_irrep_labeling.ipynb, 02_isotropy_subgroup_search.ipynb and 03_mo_diagram.ipynb.

MCP server

crystod-mcp/ in this repository packages the same analyses as the tools of a Model Context Protocol server, so that an LLM client can run CrystOD on local structure files; see the crystod-mcp page of the documentation for the setup.

Testing

python testsuite.py

Runs the full regression suite (35 sections) against the data in example/; a section can be run alone with python testsuite.py 27. The --pyscf checks are skipped when PySCF is not installed. GitHub Actions runs the suite on every push (test.yml) and ruff (lint.yml).

Contributing

Bug reports, questions and pull requests are welcome; CONTRIBUTING.md describes the development setup, the code style and the pull-request process.

Data sources and acknowledgements

  • Irrep tables: ISO-IR dataset of the ISOTROPY Software Suite, shipped as crystod/CIR_data.txt.gz — H. T. Stokes, B. J. Campbell and R. Cordes, Acta Cryst. A69, 388–395 (2013), https://iso.byu.edu.
  • Isotropy subgroups validated against ISOSUBGROUP — H. T. Stokes, S. van Orden and B. J. Campbell, J. Appl. Cryst. 49, 1849–1853 (2016).
  • Symmetry-mode analysis validated against AMPLIMODES — D. Orobengoa, C. Capillas, M. I. Aroyo and J. M. Perez-Mato, J. Appl. Cryst. 42, 820–833 (2009).
  • Built on phonopy, spglib, spgrep, ASE, seekpath and pymatgen, and optionally on PySCF.

Contributors

  • Yasuhide Mochizuki — Tokyo University of Science (mochizuki@rs.tus.ac.jp)
  • Hiroki Koiso — Institute of Science Tokyo

Citation

If you use CrystOD in your research, please cite:

H. Koiso, S. Yoshida, T. Nagai, T. Isobe, A. Nakajima, and Y. Mochizuki, "Thermal expansion and phase stability of BF3 (B = Sc, Y, La, Al, Ga, In) from first principles", Physical Review B 110, 064104 (2024).

@article{CrystOD,
  title   = {Thermal expansion and phase stability of $B$F$_3$ ($B$ = Sc, Y, La, Al, Ga, In) from first principles},
  author  = {Koiso, Hiroki and Yoshida, Suguru and Nagai, Takayuki and Isobe, Toshihiro and Nakajima, Akira and Mochizuki, Yasuhide},
  journal = {Phys. Rev. B},
  volume  = {110},
  pages   = {064104},
  year    = {2024},
  doi     = {10.1103/PhysRevB.110.064104},
}

License

MIT License — see LICENSE.

Metadata

Release files for CrystOD 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for CrystOD 0.4.0
File Size Uploaded
crystod-0.4.0.tar.gz 1.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for CrystOD 0.4.0
File Interpreter ABI Platform
crystod-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 3.2 MB

Release files / crystod-0.4.0.tar.gz

Download URL crystod-0.4.0.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
62010dc59ff3f9735b3f62ad92b3e4229787cdad8828df36f65234b61cc194f9
BLAKE2b-256 checksum
How to use checksums
41f0fb1b406640668273ec950a78a2898a562dc71c259aa05b7cb9a32d267fff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / crystod-0.4.0-py3-none-any.whl

Download URL crystod-0.4.0-py3-none-any.whl
Size 1.6 MB
Tags Python 3
SHA-256 checksum
How to use checksums
9907726b1486677d73013a647de6bbe7526f19feaa20047887b57b20c68da684
BLAKE2b-256 checksum
How to use checksums
4ae119568e47c75582f30029142b370b229758dff016983fcae2f75a204b078f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release history Release notifications | RSS feed

0.4.2

2 release files

0.4.1

2 release files

This release

0.4.0 This release

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page