Source code for dftbplus_step.computational_models

import json
from pathlib import Path
import pkg_resources

from seamm_util import element_data


atno = {symbol: d["atomic number"] for symbol, d in element_data.items()}


[docs] def computational_models_metadata(): """Create the metadata for the computational models from the paramater metadata.""" data_path = Path(pkg_resources.resource_filename(__name__, "data")) path = data_path / "metadata.json" with open(path) as fd: package_data = json.load(fd) models = {} for base_model, base_model_data in package_data.items(): models[base_model] = {} model_data = models[base_model]["models"] = {} for tmp, data in base_model_data["datasets"].items(): dataset = tmp.split(" - ")[1] if "element sets" in data: symbols = set() for element_set in data["element sets"]: symbols |= set(element_set) elements = [f"{z}" for z in sorted([atno[s] for s in symbols])] if "parent" not in data or data["parent"] is None: if dataset not in model_data: model_data[dataset] = {"parameterizations": {}} name = dataset else: parent = data["parent"] if parent not in model_data: model_data[parent] = {"parameterizations": {}} name = parent pdata = model_data[name]["parameterizations"][dataset] = {} pdata["code"] = "dftb+" pdata["periodic"] = True pdata["reactions"] = True pdata["optimization"] = True pdata["elements"] = ",".join(elements) elif "elements" in data: elements = data["elements"] if dataset not in model_data: model_data[dataset] = {"parameterizations": {}} pdata = model_data[dataset]["parameterizations"][dataset] = {} pdata["code"] = "dftb+" pdata["periodic"] = True pdata["reactions"] = True pdata["optimization"] = True pdata["elements"] = elements return models