Whether or not a molecule binds to a protein pocket depends not only on the interactions, but on the empty space surrounding the molecule. We need an algorithm for mapping out the empty space in a protein pocket. Here’s an outline of the python script we need:
- Load the coordinates of the protein and the coordinates of the ligand (Dr. Durrant will provide numpy arrays of these 3D coordinates).
- Calculate the convex hull of the alpha carbons of the atom. (Dr. Durrant will provide numpy array of the alpha-carbon coordinates.) I believe scipy has definitions for this purpose.
- Place “seed points” near the locations of the ligand atoms (coordinates snapped to the nearest 0.5 or 0.25 A, per user parameter).
- Recursively consider adjacent points on a 3D grid, spreading out from the seed points in all three cardinal directions. The recursion stops if the point goes outside the convex hull, or if it comes too close to one of the protein atoms.
- The function returns the 3D points that fill the negative space, as a numpy array.