Predicted ligand binding sites in interaction interface

If you have a protein of interest and want to know the predicted ligand binding sites of it which are also in a protein-protein interaction, you can first make use of the annotations API for a UniProt accession to get all annotations from PDBe-KB partners for the protein.

The predicted ligand site annotations are provided by p2rank and 3dligandsite. Post process this response to filter the accession field for these providers. This gives all UniProt residues which are annotated as a predicted ligand binding site.


1) Get the annotations data for UniProt accession P61626

import requests
from pprint import pprint

accession = "P61626"
annotations_url = f"{accession}"

annotations_data = requests.get(annotations_url).json()

2) Filter the data for providers p2rank and 3dligandsite

all_ligand_binding_residues = list()

for provider_data in annotations_data[accession]["data"]:
    if provider_data["accession"] in ["p2rank", "3dligandsite"]:
        residues = [x["startIndex"] for x in provider_data["residues"]]

3) Get interacting residues for the UniProt accession

Use the interface residues for a UniProt accession API call to get this data.

interface residues

interface_url = f"{accession}"

interface_data = requests.get(interface_url).json()

4) Filter interface_data on common residues

all_interface_residues = list()

for item in interface_data[accession]["data"]:
    interacting_residues = [x["startIndex"] for x in item["residues"] if x["startIndex"] in all_ligand_binding_residues]
print(f"Residues of {accession} which is predicted ligand binding site and part of protein-protein interaction are {all_interface_residues}")
Residues of P61626 which is predicted ligand binding site and part of protein-protein interaction are [53, 64, 67, 71, 76, 78, 82, 122, 126, 128, 40, 42, 45, 96, 115, 53, 62, 96]