Controlling the Speed of Rowan's Docking

by Corin Wagen · Sept 22, 2025

A painting of the canal in front of the Venetian arsenal

View of the Entrance to the Venetian Arsenal, by Canaletto (1732)

Rowan uses AutoDock Vina to run docking (with an exhaustiveness of 8 by default). Through Rowan’s Python API there are three readily accessible options that can be selected to tune how docking is run:

By default, docking calculations run through the web interface have all of these options enabled, which makes docking calculations more thorough but slower. This is ideal for cases in late-stage optimization when a thorough assessment of a given compound is desired, but makes Rowan’s docking too slow for many high-throughput screening contexts; for virtual screens it often makes sense to disable some or all of these steps.

To illustrate the effects that each of these settings can have, we ran a bunch of docking calculations. We selected PDE4 as our protein target (based on a sanitized 1XM6 structure) and docked the known PDE4 inhibitor rolipram against it.

Here’s the script we used, which takes a local sanitized PDB file with a known pocket and iteratively tries different combination of settings:

from pathlib import Path
import rowan
from rowan.protein import upload_protein
import stjames

rowan.api_key = "rowan-sk-your-secret-key-here"

protein = upload_protein("PDE4 cleaned from 1XM6", Path("pde4.pdb"))

pocket_specification = [[46.37, 1.64, -9.88], [19.2, 13.37, 17.72]]

ligand_smiles = "COc1ccc([C@@H]2CNC(=O)C2)cc1OC1CCCC1"
ligand = stjames.Molecule.from_smiles(ligand_smiles)

def run_docking(
    do_optimization: bool,
    do_conformer_search: bool,
    do_pose_refinement: bool,
) -> tuple[int, int, float, float]:
	"""
	Run a docking calculation through Rowan and return various metrics.
	"""
    workflow = rowan.submit_docking_workflow(
        protein,
        pocket_specification,
        initial_molecule=ligand,
        do_csearch=do_conformer_search,
        do_optimization=do_optimization,
        do_pose_refinement=do_pose_refinement,
    )

    workflow.wait_for_result()
    workflow.fetch_latest(in_place=True)

    num_conformers = len(workflow.data["conformers"])
    num_poses = len(workflow.data["scores"])
    best_score = min(s["score"] for s in workflow.data["scores"])
    total_time_s = workflow.elapsed

    return num_conformers, num_poses, best_score, total_time_s

for do_optimization in [True, False]:
    for do_conformer_search in [True, False]:
        for do_pose_refinement in [True, False]:
            num_confs, num_poses, best_score, time_s = run_docking(
              do_optimization,
              do_conformer_search,
              do_pose_refinement
            )

            print("Docking run finished:")
            print(f"\tOptimization? {do_optimization}")
            print(f"\tConformer search? {do_conformer_search}")
            print(f"\tPose refinement? {do_pose_refinement}")
            print(f"\t{num_confs} conformers, {num_poses} output poses")
            print(f"\tBest score: {best_score:.3f}")
            print(f"\tTotal elapsed time: {time_s:.1f} seconds")

Running the above script gave a clear comparison of each docking method’s performance, which we organized into the below table. (We excluded rows where do_csearch is set to True and do_optimization is False because optimization is automatically run in these cases—a message is printed in the logfile when this happens.) There are obviously slight run-to-run variations in timing and outputs, but we've found that the values shown below are pretty consistent, and that timings generally only vary by a second or two per run.

#Optimization?Conformer search?Pose refinement?ConformersPosesBest ScoreTime (s)
1YesYesYes520-6.842194.1
2YesYesNo519-6.828112.6
3YesNoYes14-6.63029.7
4YesNoNo14-6.63020.2
5NoNoYes14-6.72729.3
6NoNoNo14-6.72717.6

Looking at the above data, a few conclusions are apparent:

The fastest possible settings (row 6) allow a full protein–ligand docking calculation to be run in under 20 seconds, which is quick enough for most high-throughput screening applications.

Banner background image

What to Read Next

Screening Conformer Ensembles with PRISM Pruner

Screening Conformer Ensembles with PRISM Pruner

Guest blog post from Nicolò Tampellini, discussing efficient pruning of conformational ensembles using RMSD and moment of inertia metrics.
Nov 21, 2025 · Nicolò Tampellini
GPU-Accelerated DFT

GPU-Accelerated DFT

the power of modern GPU hardware; GPU4PySCF on Rowan; pricing changes coming in 2026; an interview with Navvye Anand from Bindwell; using Rowan to develop antibacterial PROTACs
Nov 19, 2025 · Jonathon Vandezande, Ari Wagen, Corin Wagen, and Spencer Schneider
Rowan Research Spotlight: Emilia Taylor

Rowan Research Spotlight: Emilia Taylor

Emilia's work on BacPROTACs and how virtual screening through Rowan can help.
Nov 19, 2025 · Corin Wagen
GPU-Accelerated DFT with GPU4PySCF

GPU-Accelerated DFT with GPU4PySCF

A brief history of GPU-accelerated DFT and a performance analysis of GPU4PySCF, Rowan's newest DFT engine.
Nov 19, 2025 · Jonathon Vandezande
A Conversation With Navvye Anand (Bindwell)

A Conversation With Navvye Anand (Bindwell)

Corin interviews Navvye about pesticide discovery, the advantages that ML gives them, and what areas of research he's most excited about.
Nov 18, 2025 · Corin Wagen
Ion Mobility, Batch Docking, Strain, Flow-Matching Conformer Generation, and MSA

Ion Mobility, Batch Docking, Strain, Flow-Matching Conformer Generation, and MSA

a diverse litany of new features: ion-mobility mass spectrometry; high-throughput docking with QVina; a standalone strain workflow; Lyrebird, a new conformer-generation model; and standalone MSAs
Nov 5, 2025 · Corin Wagen, Ari Wagen, Eli Mann, and Spencer Schneider
Using Securely Generated MSAs to Run Boltz-2 and Chai-1

Using Securely Generated MSAs to Run Boltz-2 and Chai-1

Example scripts showing how Boltz-2 and Chai-1 can be run using MSA data from Rowan's MSA workflow.
Nov 5, 2025 · Spencer Schneider and Ari Wagen
Lyrebird: Molecular Conformer Ensemble Generation

Lyrebird: Molecular Conformer Ensemble Generation

Rowan's new flow-matching conformer-generation model, with benchmarks.
Nov 5, 2025 · Eli Mann
Predicting Ion-Mobility Mass Spectra Through Rowan

Predicting Ion-Mobility Mass Spectra Through Rowan

An introduction to the field, how Rowan's approach works, and where it might be useful.
Nov 5, 2025 · Corin Wagen
BREAKING: BoltzGen Now Live on Rowan

BREAKING: BoltzGen Now Live on Rowan

a new foray into generative protein-binder design; what makes BoltzGen different; experimental validation; democratizing tools; running BoltzGen on Rowan
Oct 27, 2025 · Corin Wagen, Ari Wagen, and Spencer Schneider