durrantlab / binana

BINANA (BINding ANAlyzer) analyzes the geometries of predicted ligand poses to identify molecular interactions that contribute to binding. It is useful because accurately characterizing these interactions allows medicinal chemists to assess whether a predicted ligand merits further study. We have also created a BINANA web-browser application.
http://durrantlab.com/binana-download/
Apache License 2.0
13 stars 1 forks source link

Errors in detecting the interaction between pi pi and t-pi. #4

Open zephyrdhb opened 5 months ago

zephyrdhb commented 5 months ago

In the source code, first search for all aromatic ring distances that meet the requirements of pi_pi_general_dist_cutoff to obtain ligand_receptor_aromatic_dists, and traverse ligand_receptor_aromatic_dists to determine whether the aromatic ring pair is pi-pi. If not, then check if it is t-pi. This will result in the center distance of all t-pi being less than pi_pi_general_dist_cutoff, rather than the set _stacking_closest_dist_cutoff.

Source code:

# Calculate the distances.
ligand_receptor_aromatic_dists = _get_ligand_receptor_aromatic_dists(
    ligand, receptor, pi_pi_general_dist_cutoff
)

pi_interactions = {}
pdb_pistack = Mol()
pdb_pi_t = Mol()
pi_stacking_labels = []
t_stacking_labels = []

# "PI-Stacking Interactions ALIVE AND WELL IN PROTEINS" says distance of 7.5
# A is good cutoff. This seems really big to me, except that pi-pi
# interactions (parallel) are actuall usually off centered. Interesting
# paper. Note that adenine and tryptophan count as two aromatic rings. So,
# for example, an interaction between these two, if positioned correctly,
# could count for 4 pi-pi interactions.
for (
    ligand_aromatic,
    receptor_aromatic,
    dist,
    angle_between_planes,
) in ligand_receptor_aromatic_dists:

    (
        pi_interactions,
        pdb_pistack,
        pi_stacking_labels,
        pi_stacking_detected,
    ) = _pi_stacking(
        ligand,
        receptor,
        ligand_aromatic,
        receptor_aromatic,
        dist,
        angle_between_planes,
        pi_stacking_angle_tol,
        pi_padding,
        pi_interactions,
        pdb_pistack,
        pi_stacking_labels,
    )

    if not pi_stacking_detected:
        pi_interactions, pdb_pi_t, t_stacking_labels = _t_stacking(
            ligand,
            receptor,
            ligand_aromatic,
            receptor_aromatic,
            dist,
            angle_between_planes,
            t_stacking_angle_tol,
            t_stacking_closest_dist_cutoff,
            pi_padding,
            pi_interactions,
            pdb_pi_t,
            t_stacking_labels,
        )