syndirella.slipper.intra_geometry ================================= .. py:module:: syndirella.slipper.intra_geometry .. autoapi-nested-parse:: slipper/intra_geometry.py This module was directly sourced from the PoseBusters repository, which is open source code under the BSD-3-Clause license. The original code is found at: https://github.com/maabuu/posebusters/blob/3c467ab82bdbae5b71f80a286bb49ecc011be529/posebusters/modules/distance_geometry.py It is used to check bond lengths, bond angles, and the internal clash of ligand conformations. Attributes ---------- .. autoapisummary:: syndirella.slipper.intra_geometry.logger syndirella.slipper.intra_geometry.col_lb syndirella.slipper.intra_geometry.col_ub syndirella.slipper.intra_geometry.col_pe syndirella.slipper.intra_geometry.col_bpe syndirella.slipper.intra_geometry.col_bape syndirella.slipper.intra_geometry.bound_matrix_params syndirella.slipper.intra_geometry.col_n_bonds syndirella.slipper.intra_geometry.col_shortest_bond syndirella.slipper.intra_geometry.col_longest_bond syndirella.slipper.intra_geometry.col_n_short_bonds syndirella.slipper.intra_geometry.col_n_long_bonds syndirella.slipper.intra_geometry.col_n_good_bonds syndirella.slipper.intra_geometry.col_bonds_result syndirella.slipper.intra_geometry.col_n_angles syndirella.slipper.intra_geometry.col_extremest_angle syndirella.slipper.intra_geometry.col_n_bad_angles syndirella.slipper.intra_geometry.col_n_good_angles syndirella.slipper.intra_geometry.col_angles_result syndirella.slipper.intra_geometry.col_n_noncov syndirella.slipper.intra_geometry.col_closest_noncov syndirella.slipper.intra_geometry.col_n_clashes syndirella.slipper.intra_geometry.col_n_good_noncov syndirella.slipper.intra_geometry.col_clash_result syndirella.slipper.intra_geometry._empty_results Functions --------- .. autoapisummary:: syndirella.slipper.intra_geometry.check_geometry syndirella.slipper.intra_geometry._bond_check syndirella.slipper.intra_geometry._angle_check syndirella.slipper.intra_geometry._clash_check syndirella.slipper.intra_geometry._get_bond_atom_indices syndirella.slipper.intra_geometry._get_angle_atom_indices syndirella.slipper.intra_geometry._two_bonds_to_angle syndirella.slipper.intra_geometry._sort_bond syndirella.slipper.intra_geometry._pairwise_distance syndirella.slipper.intra_geometry._has_hydrogen syndirella.slipper.intra_geometry._is_hydrogen Module Contents --------------- .. py:data:: logger .. py:data:: col_lb :value: 'lower_bound' .. py:data:: col_ub :value: 'upper_bound' .. py:data:: col_pe :value: 'percent_error' .. py:data:: col_bpe :value: 'bound_percent_error' .. py:data:: col_bape :value: 'bound_absolute_percent_error' .. py:data:: bound_matrix_params .. py:data:: col_n_bonds :value: 'number_bonds' .. py:data:: col_shortest_bond :value: 'shortest_bond_relative_length' .. py:data:: col_longest_bond :value: 'longest_bond_relative_length' .. py:data:: col_n_short_bonds :value: 'number_short_outlier_bonds' .. py:data:: col_n_long_bonds :value: 'number_long_outlier_bonds' .. py:data:: col_n_good_bonds :value: 'number_valid_bonds' .. py:data:: col_bonds_result :value: 'bond_lengths_within_bounds' .. py:data:: col_n_angles :value: 'number_angles' .. py:data:: col_extremest_angle :value: 'most_extreme_relative_angle' .. py:data:: col_n_bad_angles :value: 'number_outlier_angles' .. py:data:: col_n_good_angles :value: 'number_valid_angles' .. py:data:: col_angles_result :value: 'bond_angles_within_bounds' .. py:data:: col_n_noncov :value: 'number_noncov_pairs' .. py:data:: col_closest_noncov :value: 'shortest_noncovalent_relative_distance' .. py:data:: col_n_clashes :value: 'number_clashes' .. py:data:: col_n_good_noncov :value: 'number_valid_noncov_pairs' .. py:data:: col_clash_result :value: 'no_internal_clash' .. py:data:: _empty_results .. py:function:: check_geometry(mol_pred: rdkit.Chem.rdchem.Mol, threshold_bad_bond_length: float = 0.2, threshold_clash: float = 0.2, threshold_bad_angle: float = 0.2, bound_matrix_params: dict[str, Any] = bound_matrix_params, ignore_hydrogens: bool = True, sanitize: bool = True) -> dict[str, Any] Use RDKit distance geometry bounds to check the geometry of a molecule. :param mol_pred: Predicted molecule (docked ligand). Only the first conformer will be checked. :param threshold_bad_bond_length: Bond length threshold in relative percentage. 0.2 means that bonds may be up to 20% longer than DG bounds. Defaults to 0.2. :param threshold_clash: Threshold for how much overlap constitutes a clash. 0.2 means that the two atoms may be up to 80% of the lower bound apart. Defaults to 0.2. :param threshold_bad_angle: Bond angle threshold in relative percentage. 0.2 means that bonds may be up to 20% longer than DG bounds. Defaults to 0.2. :param bound_matrix_params: Parameters passe to RDKit's GetMoleculeBoundsMatrix function. :param ignore_hydrogens: Whether to ignore hydrogens. Defaults to True. :param sanitize: Sanitize molecule before running DG module (recommended). Defaults to True. :returns: PoseBusters results dictionary. .. py:function:: _bond_check(df: pandas.DataFrame) -> pandas.DataFrame .. py:function:: _angle_check(df: pandas.DataFrame) -> pandas.DataFrame .. py:function:: _clash_check(df: pandas.DataFrame) -> pandas.DataFrame .. py:function:: _get_bond_atom_indices(mol: rdkit.Chem.rdchem.Mol) -> list[tuple[int, int]] .. py:function:: _get_angle_atom_indices(bonds: list[tuple[int, int]]) -> list[tuple[int, int, int]] Check all combinations of bonds to generate list of molecule angles. .. py:function:: _two_bonds_to_angle(bond1: tuple[int, int], bond2: tuple[int, int]) -> None | tuple[int, int, int] .. py:function:: _sort_bond(bond: tuple[int, int]) -> tuple[int, int] .. py:function:: _pairwise_distance(x) .. py:function:: _has_hydrogen(mol: rdkit.Chem.rdchem.Mol, idcs: Iterable[int]) -> bool .. py:function:: _is_hydrogen(mol: rdkit.Chem.rdchem.Mol, idx: int) -> bool