Source code for mlcalcdriver.interfaces.ase_interface

import ase
import numpy as np


[docs]def posinp_to_ase_atoms(posinp): r""" Converts a :class:`Posinp` instance to an :class:`ase.Atoms` instance. """ symbols, positions, masses = "", [], [] for atom in posinp.atoms: symbols += atom.type positions.append(atom.position) masses.append(atom.mass) pbc = [False if dim == 0.0 else True for dim in posinp.cell.lengths()] atoms = ase.Atoms( symbols=symbols, positions=positions, masses=masses, cell=posinp.cell, pbc=pbc ) return atoms
[docs]def ase_atoms_to_pos_dict(atoms): r""" Converts an :class:`ase.Atoms` instance to a :class:`dict` that can be used to create a :class:`Posinp` instance. """ pos_dict = {"units": "angstrom"} positions = [] for at in atoms: positions.append({at.symbol: at.position}) cell = atoms.get_cell() pos_dict["positions"] = positions pos_dict["cell"] = cell return pos_dict