Skip to content

Docking Ligands to a Protein

This document describes how to dock ligands to a Protein.

Prerequisites

Docking a single Ligand

A single Ligand can be docked to a Protein using:

poses = protein.dock(
    pocket=pocket,
    ligand=ligand,
)

where pocket is a Pocket object generated using the Pocket Finder Tool .

Viewing docked poses

Docked poses for that ligand can be viewed using:

protein.show(poses=poses)

You will see something similar to the following. Use the arrows to inspect individual poses.

Viewing pose scores and binding energy

Every pose is assigned a pose score and a binding energy. These can be viewed using:

poses

To work with a dataframe containing this data, use:

df = poses.to_dataframe()

Exporting poses to SDF

Poses can be saved to a SDF file using:

poses.to_sdf()

Docking a LigandSet

Using Batch Jobs

Tutorial

Follow the tutorial on how to dock ligands using Batch Jobs. This is best suited for large jobs with 100+ ligands.

Using Functions

Several ligands in a LigandSet can be docked to a Protein using:

poses = protein.dock(
    ligands=ligands,
    pocket=pocket,
)

poses contains all poses for all ligands in the LigandSet. To filter poses to keep only top poses, use:

poses = poses.filter_top_poses()

These poses can by visualized as before:

protein.show(poses=poses)

Constrained Docking

We can use constrained docking to dock a Ligand to a Protein while constraining certain atoms to certain locations.

Typically, these constraints are computed a reference docked pose for another Ligand, using a Maximum Common Substructure (MCS) shared across Ligands.

Assuming we have a reference pose in reference_pose and we want to dock a Ligand in ligand_to_dock to a protein, constrained by pose, we first compute constraints using:

```{.python notest}

ligands = LigandSet([reference_pose, ligand_to_dock])

constraints = ligands_to_dock.compute_constraints( reference=reference_pose, )