Path B - Module 31: Proximity & Neighborhoods#

How does the PET substrate bind to your enzyme? To answer this, you need to identify the residues that form the Binding Pocket. These are the residues that are spatially close to the substrate, even if they are far apart in the sequence.

In this module, you will learn to extract interaction neighborhoods using MolSysMT.

import molsysmt as msm
from molsysmt import systems

# Load our engineered PETase and a BHET substrate molecule
petase = msm.convert('pdb:6EQE', to_form='molsysmt.MolSys', selection='molecule_type=="protein"')
bhet = msm.convert('C1=CC(=CC=C1C(=O)OCCO)C(=O)OCCO', from_form='string:smiles', to_form='molsysmt.MolSys')

# Merge them into a complex
molsys = msm.merge([petase, bhet])

1. Defining the Binding Pocket#

We can define the pocket as all protein residues within 0.4 nm of any atom of the BHET substrate.

# Find neighboring residues within 0.4 nm of the substrate
pocket_groups = msm.get_neighbors(molsys, selection='molecule_type=="small molecule"', 
                                 selection_2='molecule_type=="protein"', 
                                 threshold='0.4 nm', element='group')

print(f"The binding pocket is composed of {len(pocket_groups[0])} residues.")

2. Identifying the Actors#

Let’s see which residues are actually forming the pocket. This will tell us if our mutation I179F is part of the binding environment.

# Get the names and IDs of the pocket residues
names, ids = msm.get(molsys, element='group', selection=pocket_groups[0], group_name=True, group_id=True)

print("Binding Pocket Residues:")
for name, res_id in set(zip(names, ids)):
    print(f" - {name} {res_id}")

3. Visualizing the Complex#

It is always good to confirm your neighborhood analysis visually. We can highlight the pocket residues in the viewer.

msm.view(molsys, selection='molecule_type=="small molecule" or group_index=='+str(pocket_groups[0]))

🏆 Path B Challenge: The Pocket Auditor#

  1. Change the threshold to 0.6 nm and see how many new residues are added to the pocket.

  2. Use msm.get_contacts() to find the exact pair of atoms (one from protein, one from substrate) that are closest to each other.

  3. Check if the Catalytic Serine 160 is part of the 0.4 nm pocket.

Proximity is the first step of catalysis. In Module 32, we will learn to generate Interaction Matrices to see the full contact profile at a glance.