Pocket Detection

Docking and other structure-based tools need a starting point: where on the protein should you even be looking? When little is known about a target, finding candidate binding sites has traditionally been a manual, time-consuming process—eyeballing a structure, cross-referencing the literature, or running clunky standalone software.

Rowan's pocket-detection workflow automates this step, generating ranked candidate binding sites directly from a protein structure.

Finding candidate pockets with Rowan

Rowan's pocket-detection workflow uses Pocketeer, a geometric pocket-finding algorithm that builds on ideas from the widely used fpocket. After a protein has passed through Rowan's automatic protein preparation (removing waters, rebuilding missing residues, and so on), Pocketeer:

  1. Places a dense set of spheres around the protein surface.
  2. Identifies which spheres sit in sufficiently buried, cavity-like regions.
  3. Clusters neighboring spheres into candidate pockets.
  4. Scores each pocket using geometric and volumetric features that correlate with druggability.

The whole process runs in seconds, returning a ranked list of pockets with a volume, a druggability score, a bounding box, and the residues that line each site.

Detected pockets are immediately useful downstream:

Python API

Pocket detection can also be run via Rowan's Python API, making it easy to screen many targets at once:

import rowan

folder = rowan.get_folder("examples")

protein = rowan.create_protein_from_pdb_id(
    "1OTP", name="thymidine phosphorylase", project_uuid=rowan.default_project().uuid
)

protein.prepare()

workflow = rowan.submit_pocket_detection_workflow(
    protein=protein,
    name="Pocket detection on thymidine phosphorylase",
    folder=folder,
)

result = workflow.result()

print(f"Detected {len(result.pockets)} pocket(s):")
for i, pocket in enumerate(result.pockets):
    print(f" Pocket {i}: score={pocket.score}, volume={pocket.volume} ų")
    print(f" center={pocket.pocket_center}")
    print(f" sides={pocket.pocket_sides}")
    print(f" residues={pocket.residue_numbers}")

print(f"View workflow privately at: https://labs.rowansci.com/pocket-detection/{workflow.uuid}")

For more examples, see our example scripts on GitHub.

Ready to try it out? Create a free Rowan account and find candidate binding sites on your target in seconds.