Source code for drsip.dist_restraints_filter

"""
=========================================================
Distance Restraints Filter (:mod:`drsip.dist_restraints`)
=========================================================

Module contains the function implementing the distance restraints (DR)
filter.

Functions
---------

.. autofunction:: dist_restraints_filter
"""
from scipy import stats
from MDAnalysis.analysis import distances


[docs]def dist_restraints_filter(static_coord, mobile_coord, dist_mat_idx, dist_rest_data, cutoff=0.3): """Distance restraints (DR) filter. Pearson and Spearman correlations between the given distance restraints and the distances between C-alpha atoms of the corresponding residue pairs in docking poses. Poses passes the filter when both correlations are >0.3. Parameters ---------- static_ori_coord, mobile_ori_coord : np.array Nx3 coordinate array of the static and mobile monomers, respectively, from the docking pose. Where N is the number of atoms. dist_mat_idx : list Contains 2 lists. The lists represents the row (first list) and column (second) indices (0-indexed) of the distance matrix that corresponds to the residue pairs involved in the distance restraints. dist_rest_data : np.array Array containing the distance restraints. The length of the dist_rest_data should be the same as the 2 lists in dist_mat_idx. cutoff : float, optional If the docking pose's Spearman and Pearson correlation are >cutoff, the docking pose passes the filter. Returns ------- list Contains the distances between the C-alpha atoms (np.array), Spearman correlation (float), Pearson correlation (float) and pass status (bool). The pass status is True when the docking pose passes the filter and vice versa. """ dist_mat = distances.distance_array(static_coord, mobile_coord) current_distances = dist_mat[tuple(dist_mat_idx)] spearman_correl = stats.pearsonr(stats.rankdata( dist_rest_data), stats.rankdata(current_distances))[0] pearson_correl = stats.pearsonr(dist_rest_data, current_distances)[0] pass_status = (spearman_correl > cutoff) and (pearson_correl > cutoff) return [current_distances, spearman_correl, pearson_correl, pass_status]
def dist_restraints_filter_pearson_only(static_coord, mobile_coord, dist_mat_idx, dist_rest_data, cutoff=0.3): dist_mat = distances.distance_array(static_coord, mobile_coord) current_distances = dist_mat[tuple(dist_mat_idx)] pearson_correl = stats.pearsonr(dist_rest_data, current_distances)[0] pass_status = pearson_correl > cutoff return [current_distances, pearson_correl, pass_status]