Source code for prolif.rdkitmol

"""
Reading RDKit molecules --- :mod:`prolif.rdkitmol`
==================================================
"""

from typing import TYPE_CHECKING

from rdkit import Chem
from rdkit.Chem.rdMolTransforms import ComputeCentroid

if TYPE_CHECKING:
    import numpy as np
    from numpy.typing import NDArray
    from rdkit.Geometry import Point3D


[docs]class BaseRDKitMol(Chem.Mol): """Base molecular class that behaves like an RDKit :class:`~rdkit.Chem.rdchem.Mol` with extra attributes (see below). The sole purpose of this class is to define the common API between the :class:`~prolif.molecule.Molecule` and :class:`~prolif.residue.Residue` classes. This class should not be instantiated by users. Parameters ---------- mol : rdkit.Chem.rdchem.Mol A molecule (protein, ligand, or residue) with a single conformer Attributes ---------- centroid : rdkit.Geometry.rdGeometry.Point3D XYZ coordinates of the centroid of the molecule xyz : numpy.ndarray XYZ coordinates of all atoms in the molecule """ @property def centroid(self) -> "Point3D": return ComputeCentroid(self.GetConformer()) # type: ignore[no-any-return] @property def xyz(self) -> "NDArray[np.float64]": return self.GetConformer().GetPositions() # type: ignore[no-any-return]