The Crystal Structure Prediction Network (CRYSPNet) project introduces an alternative way to perform fast prediction on Crystal Structure Information (Bravais Lattice, Space Group, and Lattice Parameter) with the power of neural networks.
Note: Python 3.6 or later is required. Since Fastai library does not support Windows, the following installation only works on a linux-based environment. We recommend using CONDA environment to create a new environment for this installation. To install the project with pip and git, run the following commands:
git clone https://github.com/auroralht/cryspnet.git
cd cryspnet
pip install -e .Pre-trained models are stored in google drive. Download the file learner.zip from the drive. After downloading the file, pls copy it to cryspnet/cryspnet and extract it. Five folders: BravaisEsmMetal, BravaisEsmOxide, BravaisEsmWhole, LatticeParam, and SpaceGroup should be in the cryspnet/cryspnet/learner directory after the extraction is completed.
The library has moved from fastai v1 to fastai v2; thus Bravais Lattice, Lattice Parameters and Space Group models are retrained. Please download the latest models from here. The link to the old version.
To update the library itself:
cd cryspnet
git pull
pip install -r requirements.txtIf you are not interested in training your model, then you can skip this part
This section would be removed after they fixed this issue in the next release version
The current fastai v2 tabular modulus has data leakage issues when trying to export the learner. The fix is only made in the development repository. To install:
pip uninstall fastai
git clone https://github.com/fastai/fastai
pip install -e "fastai[dev]"fastai, pytorch, and Matminer are three major package used heavily in this project. Please go to their GitHub/documentation site for more information if these packages cannot be installed.
(optional) We recommend using JupyterLab to execute our Notebook example. Running with Jupyter Notebook is extremely fine also. To install:
conda install -c conda-forge jupyterlab pip install jupyterlab(
conda install -c conda-forge ipywidgets pip install ipywidgetsInput requirement: The input would be stored in a csv file with a column name called formula.
Here is an example of predicting the Bravais, space group, and lattice parameter of formula listed in demo.csv
cd cryspnet
python predict.py -i demo/demo.csv -o output/output.csv You can also use the Bravais lattice model trained on Metal or Oxide compounds by:
python predict.py -i demo/demo.csv -o output/output.csv --use_metal
python predict.py -i demo/demo.csv -o output/output.csv --use_oxide You could also change the topn_bravais and topn_spacegroup to see more or less top-N prediction from the Bravais lattice and space group models.
python predict.py
-i demo/demo.csv \
-o output/output.csv \
--topn_bravais 2 \
--topn_spacegroup 3 \The output is stored in .csv format with the first two rows as headers. The layout of output is shown by this example:
| formula | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais | Top-1 Bravais |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| - | Bravais | Bravais prob | a | b | c | alpha | beta | gamma | v | Top-1 SpaceGroup | Top-2 SpaceGroup | Top-1 SpaceGroup prob | Top-2 SpaceGroup prob |
| Co15Ga2Pr2 | rhombohedral (P) | 0.847 | 6.50 | 6.50 | 6.50 | 86.4 | 86.4 | 86.4 | 274 | 166 | 160 | 0.98 | 0.01 |
The first row is the major index that groups various predictions of one Bravais Lattice type together. The first column, "formula" like its name said, shows the chemical formula. "Top-n Bravais" shows this part of the prediction is from the n-th most likely Bravais Lattice. In the second row, "Bravais" and "Bravais prob" shows the Bravais Lattice and its predicted probability. "a", "b", "c", "alpha", "beta", "gamma" show the predicted lattice parameters and "v" shows the unit cell volume. "Top-k Spacegroup" and "Top-k Spacegroup prob" show the k-th most likely spacegroup number and its predicted probability.
To open this .csv in python, consider using these lines:
import pandas as pd
pd.read_csv("output/output.csv", header=[0,1])The package is a wrapper of fastai learner, and is easy to use. The following example shows the basic workflow:
import pandas as pd
from cryspnet.models import *
formula = pd.read_csv("demo/demo.csv")
BE = load_Bravais_models()
LPB = load_Lattice_models()
SGB = load_SpaceGroup_models()
featurizer = FeatureGenerator()
predictors = featurizer.generate(formula)
bravais_probs, bravais = BE.predicts(predictors, topn_bravais=1)
predictors['bravais'] = bravais
spacegroup_probs, spacegroup = SGB.predicts(predictors, topn_spacegroup=1)
latticeparameter = LPB.predicts(predictors)More examples could be finded in Notebook.
We provide three notebooks: TrainBravais, TrainSpaceGroup, and TrainLattice to showcase the training process of each component.
PyXtal is an open-source library that could generate structures from chemical formulas and space group inputs. Combining with this library, here we demonstrate a workflow to create candidate crystal structures for only chemical formula input. To install PyXtal:
pip install pyxtal==0.0.8Here is an example of using PyXtal in conjunct with the prediction from CRYSPNet:
python predict.py -i demo/demo.csv -o output/output.csv
python random_crystal.py \
-i output/output.csv \
-o output/random_crystal \
--topn_bravais 1 \
--topn_spacegroup 1 \
--n_workers 4 \
--n_trails 100