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

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
The "Charlotte's Web" of Density-Functional Theory

The "Charlotte's Web" of Density-Functional Theory

A layman's guide to cutting your way through the web of DFT functionals, explaining GGAs, mGGAs, hybrids, range-separated hybrids, double hybrids, and dispersion corrections.
Oct 27, 2025 · Jonathon Vandezande
How to Design Protein Binders with BoltzGen

How to Design Protein Binders with BoltzGen

Step-by-step guides on how to run the BoltzGen model locally and through Rowan's computational-chemistry platform.
Oct 27, 2025 · Corin Wagen and Ari Wagen
Pose-Analysis Molecular Dynamics and Non-Aqueous pKa

Pose-Analysis Molecular Dynamics and Non-Aqueous pKa

what to do after docking/co-folding; Rowan's approach to short MD simulations; what's next for SBDD and MD; new ML microscopic pKa models
Oct 23, 2025 · Corin Wagen, Ari Wagen, Eli Mann, and Spencer Schneider
How to Predict pKa

How to Predict pKa

Five different theoretical approaches for acidity modeling and when you should use each one.
Oct 16, 2025 · Corin Wagen
Structure-Based Drug Design Updates

Structure-Based Drug Design Updates

enforcing stereochemistry; refining co-folding poses; running PoseBusters everywhere; computing strain for co-folding; PDB sequence input; 3D visualization of 2D scans
Oct 14, 2025 · Ari Wagen and Corin Wagen