Source code for topo_metrics.io.conflink

from __future__ import annotations

from collections import defaultdict
from dataclasses import dataclass

import numpy as np
import numpy.typing as npt
from pymatgen.core.lattice import Lattice


@dataclass
[docs] class Configuration: """A configuration parsed from a conflink file."""
[docs] positions: npt.NDArray[np.float64]
[docs] box_size: float
[docs] connections: dict
[docs] def to_nodes_edges_lattice(self, node_type: str = "Si") -> dict: """Convert this configuration to a Topology object.""" lattice = Lattice.cubic(self.box_size) frac_coords = lattice.get_fractional_coords(self.positions) cart_coords = lattice.get_cartesian_coords(frac_coords) edges = [] for atom_id, conn_ids in self.connections.items(): conn_ids = sorted(conn_ids) frac1 = frac_coords[atom_id] for conn_id in conn_ids: frac2 = frac_coords[conn_id] _, im = lattice.get_distance_and_image(frac1, frac2) edges.append( np.array((atom_id + 1, conn_id + 1, *im), dtype=int) ) edges = np.array(edges, dtype=int) return { "cart_coords": cart_coords, "frac_coords": frac_coords, "edges": edges, "lattice": lattice, }