def add_conformer(rdkit_mol: Chem.Mol, conformer_coordinates: np.ndarray) -> Chem.Mol: """ Add a new conformation to the rdkit molecule :param conformer_coordinates: A numpy array of the coordinates to be added :param rdkit_mol: The rdkit molecule instance :return: The rdkit molecule with the conformer added """ conformer = Chem.Conformer() for i, coord in enumerate(conformer_coordinates): atom_position = Point3D(*coord) conformer.SetAtomPosition(i, atom_position) rdkit_mol.AddConformer(conformer, assignId=True) return rdkit_mol
def convert_molecule(molecule): from rdkit.Chem import Mol, EditableMol, Atom, Conformer mol = Mol() emol = EditableMol(mol) conformer = Conformer() atom_map = {} for atom in molecule.atoms: a = Atom(atom.element.number) atom_map[atom] = i = emol.AddAtom(a) conformer.SetAtomPosition(i, atom.coord().data()) for bond in molecule.bonds: a1, a2 = bond.atoms emol.AddBond(atom_map[a1], atom_map[a2]) mol = emol.GetMol() mol.AddConformer(conformer) return mol, atom_map
def add_conformers_to_rdmol(mol: Chem.Mol, conformer_coordinates: np.ndarray) -> None: """Add conformers to RDKit Mol object. :param mol: rdkit mol object :type mol: rdkit.Chem.Mol :param conformer_coordinates: list of conformers 3D coordinate arrays :type conformer_coordinates: np.ndarray """ conformer_coordinates = np.array(conformer_coordinates) if len(conformer_coordinates.shape) == 2: conformer_coordinates.reshape(-1, conformer_coordinates.shape[0], 3) for coordinates in conformer_coordinates: conformer = Chem.Conformer() for i, coord in enumerate(coordinates): point = Geometry.Point3D(*coord) conformer.SetAtomPosition(i, point) mol.AddConformer(conformer, assignId=True)