Source code for prolif.plotting.residues

"""
Plot residues --- :mod:`prolif.plotting.residues`
=================================================

.. versionadded:: 2.0.0

.. autofunction:: display_residues

"""

from typing import Any, Optional, Tuple

from rdkit import Chem
from rdkit.Chem import Draw

from prolif.molecule import Molecule


[docs]def display_residues( mol: Molecule, residues_slice: Optional[slice] = None, *, size: Tuple[int, int] = (200, 140), mols_per_row: int = 4, use_svg: bool = True, ) -> Any: """Display a grid image of the residues in the molecule. The hydrogens are stripped and the 3D coordinates removed for a clearer visualisation. Parameters ---------- mol: prolif.Molecule The molecule to show residues from. residues_slice: Optional[slice] = None Optionally, a slice of residues to display, e.g. ``slice(20)`` for the first 20 residues, or ``slice(<start>, <stop>, <step>)`` for a more complex selection. size: Tuple[int, int] = (200, 140) Size of each residue image. mols_per_row: int = 4 Number of residues displayed per row. use_svg: bool = True Generate an SVG or PNG image. """ frags = [] residues_iterable = ( mol if residues_slice is None else mol.residues.select(residues_slice).values() ) ipython_kwargs = ( {"maxMols": mol.n_residues} if hasattr(Chem.Mol, "_repr_svg_") else {} ) for residue in residues_iterable: resmol = Chem.RemoveHs(residue) resmol.RemoveAllConformers() resmol.SetProp("_Name", str(residue.resid)) frags.append(resmol) return Draw.MolsToGridImage( frags, legends=[mol.GetProp("_Name") for mol in frags], subImgSize=size, molsPerRow=mols_per_row, useSVG=use_svg, **ipython_kwargs, )