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

A widget similar to the following will be shown:

LigandSet with 15 poses

SMILES: Cc1[nH]c2cc(Cl)cc(Cl)c2c1CCN

Properties: Binding Energy, POSE SCORE, SMILES, initial_smiles

Use .to_dataframe() to convert to a dataframe, .show_df() to view dataframewith structures, or .show() for 3D visualization

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

Under development

Constrained Docking is under active development and is not generally available.

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 (similar) Ligand, using a Maximum Common Substructure (MCS) shared across Ligands.

Assuming we have a docked a Ligand to a Protein, and picked a pose to be the "reference". If we want to dock a Ligand to that protein, constrained by reference_pose, we use:

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

# view poses
protein.show(poses=poses)

To view the poses from constrained docking together with the reference pose, use:

protein.show(poses=reference_pose + constrained_poses)