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 nine CLI commands — fully offline (apart from crystod-search, which fetches structures from the Materials Project), 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 nine commands

command what it gives you
crystod crystal-orbital / SALC irreps from atomic orbitals, orbital hybridization, crystal-orbital diagrams (extended Hückel, PySCF, or finished VASP runs), 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)
crystod-xrd powder X-ray diffraction patterns: Bragg peak list (hkl, d, 2θ, intensity) and the broadened pattern, for Cu/Mo/Ag/Co/Fe/Cr radiation
crystod-search Materials Project search by formula (SrTiO3), chemical system (Sr-Ti-O), elements or ID, listing space group, band gap, energy above hull and sites with the experimentally observed entries starred; --get mp-5532 downloads the POSCAR

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 nine 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, requests) are installed automatically. crystod-search also needs a free Materials Project API key, from https://next-gen.materialsproject.org/api: export MP_API_KEY=<your key>, or store it once with pmg config --add PMG_MAPI_KEY <your key>.

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+

# No POSCAR yet? Search the Materials Project and download one
crystod-search Sr-Ti-O            # the Sr-Ti-O compounds; * = experimentally observed
crystod-search --get mp-5532      # -> POSCAR_Sr2TiO4_I4mmm_mp-5532

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)
crystod-xrd --example ScF3        # powder XRD pattern of ScF3 for Cu K-alpha (table + PDF)

--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, crystod.xrd, crystod.search. Attribute access is lazy, so import crystod plus all nine 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 (37 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).
  • Structures and properties of crystod-search: the Materials Project — A. Jain et al., APL Mater. 1, 011002 (2013), https://doi.org/10.1063/1.4812323; the data are licensed under CC BY 4.0.
  • 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.2

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.2
File Size Uploaded
crystod-0.4.2.tar.gz 1.7 MB Details

Built distribution (wheel)

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

Total release size: 3.5 MB

Release files / crystod-0.4.2.tar.gz

Download URL crystod-0.4.2.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
758f4347d79fc3b81a75ce67782c03a2573b0d18bb49f5f3218e3d98c58192c2
BLAKE2b-256 checksum
How to use checksums
adf96b4467f57192ed0071054ef4552461b4babf252755e36c5105810749c5f0
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.2-py3-none-any.whl

Download URL crystod-0.4.2-py3-none-any.whl
Size 1.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
a9ba2c1a136c655200daad9ff24cf767bec6c8b58ddbcf176df3f3741a8587bf
BLAKE2b-256 checksum
How to use checksums
fe9291dcfd771b02c50edc53cb16e266b13abf93469d9a62f3210434c5c84472
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

This release

0.4.2 This release

2 release files

0.4.1

2 release files

0.4.0

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