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

Surface Energy

Surface Energy

cutting along Miller indices; Wulff constructions; nanoparticles; heterogeneous catalysis; CO dissociation reaction
Sep 3, 2026 · Jonathon Vandezande, Raphael Stone, and Ari Wagen
What We Learned from Our User Survey

What We Learned from Our User Survey

Results from our summer 2026 user survey: what's good & what we're excited to tackle next.
Aug 31, 2026 · Ari Wagen and Corin Wagen
2026 Intern Reflections

2026 Intern Reflections

Takeaways and other thoughts from each of our summer interns.
Aug 26, 2026 · Isaiah Sippel, Ishaan Ganti, Nick Casetti, and Raphael Stone
Excited States and UV-Vis with TDDFT

Excited States and UV-Vis with TDDFT

an extension of density-functional theory; modeling absorbance and fluorescence; excited-state optimization
Aug 25, 2026 · Jonathon Vandezande, Isaiah Sippel, and Ari Wagen
Predicting UV-Vis Spectra with TDDFT

Predicting UV-Vis Spectra with TDDFT

Comparing the experimental and predicted UV-Vis spectra of azo dyes and other compounds.
Aug 25, 2026 · Isaiah Sippel
Tricky Cases in Protein Preparation

Tricky Cases in Protein Preparation

How we're using Boltz-2 inpainting to improve protein preparation.
Aug 20, 2026 · Ari Wagen
Running a Full FEP Campaign in Python with Rowan

Running a Full FEP Campaign in Python with Rowan

Learn how to run an iterative FEP campaign programmatically with Rowan's Python SDK.
Aug 19, 2026 · Eli Mann
Phonons

Phonons

band structures and density of states; material waves; sound, light, and heat
Aug 18, 2026 · Raphael Stone and Jonathon Vandezande
Binder Optimization with LLMs and Specialized Models

Binder Optimization with LLMs and Specialized Models

Testing LLMs and specialized models on generating strongly binding ligands.
Aug 17, 2026 · Ishaan Ganti
Performance Optimization

Performance Optimization

or, how to get more Rowan for your dollar
Aug 10, 2026 · Corin Wagen and Eli Mann