Molecular dynamics
Protein-Ligand Docking (Cluster90 Binding Site)
Dock Imatinib into p38-alpha MAP kinase with AutoDock Vina. A PDB Cluster90 analysis of homologous structures locates the binding site and defines the docking box.
What this workflow does
This workflow docks one ligand against one protein target with AutoDock Vina. The target is p38-α MAP kinase (PDB: 3HEC). The ligand is Imatinib, the FDA-approved kinase inhibitor with PDB ligand code STI.
The workflow does not assume the binding site. It downloads a PDB Cluster90 collection of structures that share at least 90% sequence identity with the target. It then finds where co-crystallized ligands cluster across those homologs. That consensus position becomes the binding site, and the workflow builds a cavity box around it.
The workflow then prepares both partners for docking. It converts the ligand from SDF to PDB to PDBQT with OpenBabel. It protonates the receptor and writes it as PDBQT. AutoDock Vina then docks the ligand into the box. The final stages extract the top pose and merge it with the receptor into one complex PDB.
The compute problem
Docking has an asymmetric cost profile that a single machine handles badly.
The setup stages are network bound. fetch_pdb, pdb_cluster_zip, and
ideal_sdf all wait on the RCSB. pdb_cluster_zip downloads a whole homolog
collection. The wall time here is latency, not FLOPs.
The bindingsite and box stages read the collection and do geometry. They need
one CPU core and a few seconds.
The autodock_vina_run stage is the compute. Vina is CPU-parallel. It scales
with core count and does not use a GPU. One ligand against one box takes seconds.
A screening library of 100,000 ligands against the same box is the real use case,
and it wants a many-core node or a cluster queue.
The conversion stages after the docking are trivial. They format text.
How Horus solves it
Horus assigns an executor per stage. Keep the download and conversion stages
local, where they cost nothing but network wait. Send autodock_vina_run to a
many-core node. You change one executor: field. The runtime.command string
does not change.
This routing matters more here than in an MD workflow. Vina wants cores, not a
GPU. So the right target for a docking screen is a large CPU node, not the GPU box
you use for mdrun. Horus lets the same collection of workflows use both, without
two different runtimes.
The biobb_vs package has no osx-arm64 conda package. On Apple Silicon, the
binding site, box, and Vina stages run inside a
quay.io/biocontainers/biobb_vs linux/amd64 image through the Docker executor.
Horus pulls the image on the first run. The OpenBabel and biobb_io stages keep
running natively in the conda environment, because those packages have arm64
builds.
Horus also caches finished stages. The Cluster90 download does not repeat when you change the ligand code and rerun.
Pipeline
create_results_folder Create results folder
│
fetch_pdb Download 3HEC structure from PDB
│
├─ extract_molecule Extract protein structure from downloaded PDB
│
└─ pdb_cluster_zip Download PDB Cluster90 collection for 3HEC
│
bindingsite Extract binding site from Cluster90 collection
│
box Generate cavity box around binding site
│
ideal_sdf Download Imatinib (STI) small molecule as SDF
│
babel_convert_sdf2pdb Convert small molecule from SDF to PDB format
│
babel_convert_pdb2pdbqt Prepare ligand for docking (PDB to PDBQT)
│
str_check_add_hydrogens Prepare receptor protein for docking (PDB to PDBQT)
│
autodock_vina_run Run AutoDock Vina docking
│
extract_model_pdbqt Extract top docking pose from Vina output
│
babel_convert_pdbqt2pdb Convert docking pose from PDBQT to PDB format
│
cat_pdb Combine protein and docked ligand into final structure
Inputs and outputs
Inputs
This workflow has no file inputs. It fetches the 3HEC receptor, its PDB Cluster90 collection, and the Imatinib (STI) ligand.
Outputs land in results/:
download.pdb,pdb_protein.pdb: the fetched receptor structure.pdb_cluster.zip: the Cluster90 collection used to locate the binding site.bindingsite.pdb,box.pdb: the inferred binding site and the docking box.ideal.sdf,ligand.pdb,prep_ligand.pdbqt: the ligand, ready to dock.prep_receptor.pdbqt: the receptor, ready to dock.output_vina.pdbqt,output_vina.log: all the Vina poses and their scores.output_model.pdbqt,output_model.pdb: the top-ranked pose.output_structure.pdb: the final assembled protein-ligand complex.
Set the target PDB code in configs/fetch_pdb.yaml and the ligand code in
configs/ideal_sdf.yaml. Set the box padding in configs/box.yaml.
Run the workflow
Install the horus-runtime and the plugins one time:
uv sync
If you do not have uv, install it first:
curl -LsSf https://astral.sh/uv/install.sh | sh
You can also install the packages with pip:
pip install horus-runtime horus-environments
Then run the workflow:
uv run horus run workflow.yaml
On Apple Silicon, start Docker before you run the workflow. Horus pulls the
biobb_vs image on the first run.
References
Run this workflow
The workflow is open source. Clone the pantheon repository and run it with the horus-runtime engine. To run it on managed compute without a cluster of your own, join the Temple Compute OS waitlist.