Source code for molsystem.cms_schema
# -*- coding: utf-8 -*-
"""Interface to the CMS schema."""
import logging
logger = logging.getLogger(__name__)
[docs]
class CMSSchemaMixin:
"""A mixin for handling CMS Schema."""
[docs]
def to_cms_schema(self, properties=None):
"""Create a dictionary compliant with CMS Schema."""
data = {}
# Symbols and coordinates
data["symbols"] = [*self.atoms.symbols]
data["periodicity"] = self.periodicity
data["charge"] = self.charge
data["multiplicity"] = self.spin_multiplicity
if self.periodicity == 3:
data["cell"] = self.cell.parameters
data["spacegroup"] = self.symmetry.group
coordinates = data["coordinates"] = {}
coordinates["coordinate system"] = self.coordinate_system
coordinates["units"] = "Å"
coordinates["coordinates"] = self.atoms.get_coordinates()
# Bonds, if any
bonds = []
for row in self.bonds.bonds():
bonds.append((row["i"], row["j"], row["bondorder"]))
if len(bonds) > 0:
data["bonds"] = bonds
data["name"] = self.name
if "name" in self.atoms:
data["atom labels"] = self.atoms.get_column_data("name")
result = {
"schema name": "cms_schema",
"schema version": "1.0",
"systems": [
{
"name": self.system.name,
"configurations": [data],
},
],
}
return result