Docking Ligands to a Protein¶
This document describes how to dock ligands to a Protein.
Prerequisites¶
- You have a prepared Protein
- You have a Ligand or LigandSet
- You have found pockets in your Protein using the Pocket Finder
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, )