by Ari Wagen · August 20, 2026
Preparing proteins is tedious, time-consuming, and absolutely essential to working with experimental protein structures. Our protein-preparation workflow aims to turn it into a routine, callable function so human and AI scientists can spend their time on higher-level science instead.
To get there, we've been stress-testing it against crystal structures from the RCSB PDB to expose weaknesses in our pipeline. Since launching the protein preparation workflow last month, we've already made substantial progress.
Before getting into the results, we want to highlight two major changes we've made since announcing the workflow.
First, we've added PROPKA 3 as a protonation method, alongside our existing OpenMM and protonate_utils methods. PROPKA predicts the pKa values of ionizable sidechains, and we combine these predictions with the requested pH to assign protonation states to each residue. More information about PROPKA is available on GitHub.
Second, we've replaced our templated Boltz-2 method with an inpainting-based approach adapted from PATCHR. This approach better preserves the input crystal structure while generating more realistic structures for unresolved regions. More information about the original PATCHR program is available on GitHub.
We've also made performance improvements throughout the workflow, substantially reducing the cost of preparation.
We ran all of the systems below through Rowan's protein preparation workflow using PROPKA 3 protonation, ACE/NME caps, pH 7.4, and "Retain existing protonation?" enabled.
For 5FQD, we reduced the system from a dimer to a monomer; for 2E32, we kept the full system.
All ligands and ions were retained during preparation with one exception: the ligand with residue name AIJ1T in 9RR8. Our workflow currently cannot retain non-polymer residues with names that are five characters or longer, so this ligand was dropped and a warning was issued. (The PDB file format specification only allocates three characters for residue names, though some programs break this; OpenMM does not handle natively the five character case.)
We didn't run the old templated Boltz-2 method on 8HNC: we identified this test case after already retiring that pipeline in favor of Boltz-2 inpainting.
| PDB ID | Residues | Method | Backbone breaks | Heavy-atom RMSD (Å) | Credits | |
|---|---|---|---|---|---|---|
| Total | Missing | |||||
| 9RR8 | 138 | 0 | PDBFixer | 0 | 0.15 | 0.94 |
| Boltz-2 inpainting | 0 | 0.27 | 9.41 | |||
| Templated Boltz-2 | 0 | 0.53 | 48.85 | |||
| 1A42 | 259 | 0 | PDBFixer | 0 | 0.01 | 0.85 |
| Boltz-2 inpainting | 0 | 0.19 | 9.74 | |||
| Templated Boltz-2 | 0 | 0.61 | 50.91 | |||
| 1OTP | 440 | 0 | PDBFixer | 0 | 0.14 | 1.02 |
| Boltz-2 inpainting | 0 | 0.26 | 7.52 | |||
| Templated Boltz-2 | 0 | 0.75 | 36.53 | |||
| PDB ID | Residues | Method | Backbone breaks | Heavy-atom RMSD (Å) | Credits | |
|---|---|---|---|---|---|---|
| Total | Missing | |||||
| 8HNC | 711 | 141 | PDBFixer | 0 | 1.37 | 3.10 |
| Boltz-2 inpainting | 1 | 1.20 | 18.14 | |||
| 2E32 | 926 | 192 | PDBFixer | 2 | 0.15 | 3.88 |
| Boltz-2 inpainting | 0 | 0.45 | 11.68 | |||
| Templated Boltz-2 | 19 | 17.36 | 54.68 | |||
| 5FQD | 1623 | 163 | PDBFixer | 15 | 0.15 | 5.22 |
| Boltz-2 inpainting | 1 | 0.30 | 17.55 | |||
| Templated Boltz-2 | 18 | 0.87 | 70.40 | |||
For systems with no unresolved residues, PDBFixer and Boltz-2 inpainting perform similarly. For harder systems, PDBFixer and the old templated approach both start to fall apart. A few of these systems are particularly useful for showing where the workflow performs well and where there's still room to improve.
Here are three interesting and tricky cases:
The 8HNC crystal structure is a membrane protein with a bilirubin ligand bound in its transmembrane domain and two NAG protein adducts in its intracellular domain.

141 of this structure's 711 residues are unresolved. PDBFixer reconstructs this large extracellular region poorly, while Boltz-2 inpainting produces a much more plausible structure.

Both methods produce minor geometric issues, but neither prevents us from successfully building a force field for the resulting system:
Neither PDBFixer nor Boltz-2 inpainting is able to retain the covalent protein adducts.
Many proteins contain bound metal ions, and it's important to preserve local coordination geometry and protonate nearby sidechains in a metal-aware manner.
Our previous Boltz-2 preparation scheme (left) did not handle the mercury in 1A42 correctly. The combination of our new Boltz-2 inpainting scheme and updated protonation logic (right) handles this test case appropriately:

Finally, we wanted to push the new Boltz-2 inpainting approach beyond the scale of a typical protein-preparation job by preparing a 1,623-residue system derived from 5FQD. Inpainting completed 4x faster than our old templated co-folding method (17.55 vs. 70.40 credits) and produced a structure with fewer potential issues.
However, Boltz-2 can become less reliable beyond 1,000 residues, and this stress test did expose two lingering issues. The first was minor: a single C–CA bond with a length of 2.1 Å.
The more interesting issue involved the LVY ligand. Part of the ligand lost its expected ring geometry, leaving several floating atoms:

To further explore this strange behavior, we ran the same preparation twice more:
Each of the 3 runs cost between 17 and 22 credits. This suggests that Boltz-2 inpainting can be stochastic for these very large system sizes. For systems of this scale, we recommend inspecting the resulting structure and falling back to PDBFixer if needed.
With these improvements, protein preparation in Rowan is fast, automated, and robust across a wide range of experimental structures. Because preparation sits upstream of docking, MD, and FEP, we see making this step reliable and routine as a core part of the platform.
Our recommended starting point is to use Boltz-2 inpainting to add missing atoms and PROPKA 3 to assign protonation states. This entire process can also be run through Rowan's Python API, making it easy to incorporate protein preparation into larger automated workflows.
There are still a few known limitations we hope to address:
While we're quite happy with our work here, we'd love to keep improving. If you spot something that doesn't work well, please tell us!

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 →