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

Start running calculations in minutes!

Our platform lets you submit, view, analyze, and share calculations using cutting-edge methods trusted by hundreds of leading scientists. We give every new user 500 free credits to start, plus more every week. Making an account and running your first calculation takes only seconds: start using Rowan today!

Start computing →

What to read next

Modeling Carbonyl–Olefin Metathesis with Neural Network Potentials

Modeling Carbonyl–Olefin Metathesis with Neural Network Potentials

Reproducing a tricky mechanistic result from grad school with LLMs and NNPs.
Nov 2, 2026 · Corin Wagen
Do Co-folding Models Notice When You Change the Pocket?

Do Co-folding Models Notice When You Change the Pocket?

Running published pocket-mutation tests on six co-folding models in Rowan.
Nov 2, 2026 · Spencer Schneider
Modeling Selectivity with Low-Cost Binding-Affinity Methods

Modeling Selectivity with Low-Cost Binding-Affinity Methods

Exploring whether Vina, Gnina, Boltz, Nesso, or UMA can capture trends in JAK1/JAK2 selectivity.
Oct 28, 2026 · Ari Wagen
Making FEP Better

Making FEP Better

RESP charges, per-ligand custom forcefields, & cofactors in FEP; natural transition orbitals and transition densities; probing LLM capabilities in folding proteins; design for nighthawks
Oct 20, 2026 · Corin Wagen, Eli Mann, Jonathon Vandezande, Ari Wagen, and Ishaan Ganti
Persistent Hydration Sites and Water Exchange in Daraxonrasib Simulations

Persistent Hydration Sites and Water Exchange in Daraxonrasib Simulations

A site can stay occupied even as individual water molecules come and go.
Oct 19, 2026 · Ishaan Ganti
Testing Binding-Affinity Prediction in Rowan

Testing Binding-Affinity Prediction in Rowan

Benchmarking single-point interaction energies and ML affinity models in Rowan's binding-affinity workflow on the JACS set, and how much pose optimization and pocket selection matter.
Oct 13, 2026 · Zachary Fried
Guided Inverse Folding with LLMs

Guided Inverse Folding with LLMs

Testing frontier LLMs on guided protein inverse folding, sequence diversity, and ligand-selective design.
Oct 7, 2026 · Ishaan Ganti
Organizations for Everyone

Organizations for Everyone

how organizations work; collaborating across teams; API keys; pricing
Oct 5, 2026 · Spencer Schneider and Ari Wagen
Binding Affinity Beyond Boltz-2

Binding Affinity Beyond Boltz-2

affinity vincit omnia; Rowan's new unified binding-affinity workflow; GNINA, AEV-PLIG, and Nesso-1; single-point interaction energies
Sep 25, 2026 · Zachary Fried and Corin Wagen
High-Throughput Virtual Screening

High-Throughput Virtual Screening

a new area for Rowan; expanding into HTVS through a new partnership with onepot; why we're excited, and how to get started
Sep 22, 2026 · Corin Wagen and Ari Wagen