Source code for crystal_builder_step.crystal_metadata

# -*- coding: utf-8 -*-

"""Non-graphical part of the Crystal Builder step in a SEAMM flowchart
"""

try:
    import importlib.metadata as implib
except Exception:
    import importlib_metadata as implib
import json

prototype_data = {}
spacegroups = []

common_prototypes = {
    "simple cubic (SC)": "A_cP1_221_a",
    "body-centered cubic (BCC)": "A_cI2_229_a",
    "face-centered cubic (FCC)": "A_cF4_225_a",
    "diamond": "A_cF8_227_a",
    "zincblende (ZnS)": "AB_cF8_216_c_a",
    "wurtzite (ZnS)": "AB_hP4_186_b_b",
}


[docs]def read_prototypes(): """Read data for the AFLOW prototypes""" global prototype_data global spacegroups # Read in the prototype metadata package = "crystal-builder-step" files = [p for p in implib.files(package) if "prototypes.json" in str(p)] if len(files) > 0: path = files[0] data = path.read_text() prototype_data = json.loads(data) else: raise IOError("Prototypes JSON file not found!") # get a list of the spacegroups, in order tmp = {} for _, data in prototype_data.items(): spno = int(data["spacegroup_number"]) spgrp = data["simple_spacegroup"] if spno in tmp: if spgrp != tmp[spno]: raise RuntimeError( f"Duplicate spacegroups for {spno}: {spgrp}, {tmp[spno]}" ) else: tmp[spno] = spgrp for spno in sorted(tmp.keys()): spacegroups.append(tmp[spno])
read_prototypes()