예제 #1
0
    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
예제 #2
0
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
예제 #3
0
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)