Molecular dynamics
Protein-Ligand Docking with fpocket
Find the binding cavity on the receptor with fpocket, then dock the ligand with AutoDock Vina. Horus runs the biobb_vs stages in Docker and the rest in a native conda environment.
What this workflow does
This workflow docks one ligand against one protein target. It finds the docking box from the receptor itself. The target is p38-alpha MAP kinase (PDB 3HEC). The ligand is the kinase inhibitor Imatinib (PDB ligand code STI).
The workflow downloads the receptor and strips the ligands, the ions and the water. It then runs fpocket on the clean protein. fpocket reports every cavity on the surface. The workflow filters the cavities by volume and selects one pocket. It builds a docking box around that pocket.
The workflow prepares the receptor and the ligand as PDBQT files. It runs AutoDock Vina inside the box. It extracts the top pose and superposes that pose on the receptor. The final file is a complete protein-ligand complex.
The fpocket route is useful when you have no homolog cluster and no annotated binding site. You dock against the structure in front of you.
The compute problem
The workflow mixes tools with very different install profiles. fpocket and AutoDock Vina are compiled binaries. OpenBabel is a compiled library. The biobb wrappers are pure Python. A single environment must satisfy all of them.
The biobb_vs package has no osx-arm64 conda build. On an Apple Silicon machine,
the cavity detection stages and the box stage cannot install natively. The
download stage and the OpenBabel conversion stages install without a problem.
The stages also have different costs. The download stages need a network and one second. The fpocket run needs a CPU and a few seconds. The AutoDock Vina run needs several CPU cores and the largest share of the wall time. The exhaustiveness setting drives that cost.
How Horus solves it
Horus assigns an executor to each stage. The biobb_vs stages run inside the
quay.io/biocontainers/biobb_vs Linux image. The download stages, the OpenBabel
stages and the structure utility stages run in the native conda environment.
Docker pulls the image on the first run.
The runtime.command string never changes. Only the executor: field selects
where the stage runs. The same workflow file runs on an x86 Linux box with one
executor and on a Mac with two.
The AutoDock Vina stage is the stage you want to move. Point its executor:
field at an SSH host with many cores and raise the exhaustiveness. Horus moves
the receptor PDBQT and the ligand PDBQT to that host. Horus brings the poses
back. The cavity detection stages stay local, because they are cheap.
Without this routing, you install fpocket, AutoDock Vina and OpenBabel on every machine that must run the screen. You then copy the PDBQT files by hand.
Pipeline
fetch_pdb Download 3HEC structure from PDB
│
extract_protein Extract protein structure (remove ligands, ions, water)
│
├─ fpocket_run Compute protein cavities with fpocket
│ │
│ fpocket_filter Filter cavities by volume (800-2000 ų)
│ │
│ fpocket_select Extract selected pocket cavity (pocket 6)
│ │
│ box Generate docking box around cavity (offset 12 Å)
│
└─ str_check_add_hydrogens Prepare receptor protein for docking (PDB → PDBQT)
│
ideal_sdf Download Imatinib (STI) small molecule as SDF
│
babel_convert_sdf_to_pdb Convert small molecule from SDF to PDB format
│
babel_convert_pdb_to_pdbqt Prepare ligand for docking (PDB → PDBQT, partial charges)
│
autodock_vina_run Run AutoDock Vina docking
│
extract_model_pdbqt Extract docking pose (model 1) from Vina output
│
babel_convert_pdbqt_to_pdb Convert docking pose from PDBQT to PDB format
│
cat_pdb Superpose ligand docking pose onto target protein structure
Inputs and outputs
Inputs
This workflow has no file inputs. It fetches the 3HEC receptor and the Imatinib ligand at run time. It computes the candidate cavities on the receptor with fpocket.
Outputs land in results/:
download.pdb,pdb_protein.pdb: the fetched and cleaned receptor.fpocket_all_pockets.zip,fpocket_summary.json: every detected cavity.fpocket_filter_pockets.zip: the cavities that pass the volume filter.fpocket_cavity.pdb,fpocket_pocket.pqr: the selected pocket.box.pdb: the docking box around the selected cavity.prep_receptor.pdbqt,prep_ligand.pdbqt: the docking-ready structures.output_vina.pdbqt: every AutoDock Vina pose with its score.output_structure.pdb: the final protein-ligand complex.
To change the target, edit configs/fetch_pdb.yaml. To change the ligand, edit
configs/ideal_sdf.yaml. To change the pocket, edit configs/fpocket_select.yaml.
Run the workflow
Install the horus-runtime 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
The first run builds the conda environment. This takes a few minutes. Later runs
reuse the cached environment at ../.horus_conda_env.
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.