Source code for megnet.utils.molecule
"""
Molecule utility, mainly using openbabel
"""
import logging
from monty.dev import requires
from pymatgen.core import Molecule
try:
from openbabel import pybel as pb # type: ignore
from openbabel import openbabel as ob # type: ignore
except ImportError:
logging.warning(
"Openbabel is needed for molecule models, " "try 'conda install -c openbabel openbabel' " "to install it"
)
pb = None
ob = None
[docs]@requires(pb is not None, "openbabel is needed to run convert smiles")
def get_pmg_mol_from_smiles(smiles: str) -> Molecule:
"""
Get a pymatgen molecule from smiles representation
Args:
smiles: (str) smiles representation of molecule
Returns:
pymatgen Molecule
"""
b_mol = pb.readstring("smi", smiles) # noqa
b_mol.make3D()
b_mol = b_mol.OBMol
sp = []
coords = []
for atom in ob.OBMolAtomIter(b_mol):
sp.append(atom.GetAtomicNum())
coords.append([atom.GetX(), atom.GetY(), atom.GetZ()])
return Molecule(sp, coords)