Skip to main content

binderqc

Quality control and tag-site scoring for designed protein binders.

PyPI CI License: MIT Python 3.10+ DOI

From a predicted binder-target complex, binderqc reports interface, pose, grippability, tag site, and developability

Install

pip install binderqc

Python 3.10+. Pulls in biotite, numpy, and pandas. To develop from source, pip install -e ".[test]".

Usage

binderqc --binder-chains A --target-chains B --out out.csv complex.cif some_dir/
from binderqc import score_structure
rows = score_structure("complex.pdb", binder_chains=["A"], target_chains=["B"])

Inputs are PDB/CIF files, globs, or directories. Leave --binder-chains off to guess the binder as the shortest chain (20-250 aa, printed for each file). --target-chains defaults to the remaining chains.

flag default meaning
--binder-chains auto-guess comma-separated binder chain ids
--target-chains all non-binder comma-separated target chain ids
--interface-cutoff 5.0 heavy-atom contact distance (Å)
--exposure-cutoff 0.25 relSASA below which a terminus is buried
--out binderqc.csv output CSV path
-j, --jobs 1 worker processes to score a batch of files in parallel
--fasta off also write the QC-passing binders to this FASTA
--self-fold off predicted binder homodimer(s), a file or a directory matched by filename stem: adds where the binder self-associates relative to its paratope

Scoring is CPU-only: no folding, no GPU, no network. Files in a batch are independent, so -j scales near-linearly across cores on large directories.

Example output for the bundled LCB1 minibinder (a few of the columns):

recommended_tag binder_bsa epitope_planarity epitope_aromatic_n pi qc_pass
C 1021.4 3.21 11 4.17 True

Its warnings field reads "both termini ~equidistant from interface (ambiguous)", a tag-site advisory, so qc_pass stays True.

What it reports

Per binder chain:

  • Interface: buried surface area, interface residue count, hydrogen-bond and salt-bridge counts, and a contact-packing density (a lightweight proxy for contact molecular surface).

  • Self-association (with --self-fold): given a predicted binder homodimer, how much of the paratope the self-interface buries (self_paratope_overlap_frac) and whether it is more than a patch that size would bury sitting anywhere on the binder at random (self_paratope_enrichment). Interface PAE, ipTM and ipSAE say whether a self-interface is predicted; they cannot say where. Self-association away from the paratope is a formulation problem, self-association through it competes with target binding. self_verdict bands the buried fraction at 0.5 and 0.2 — a stated convention, not a calibrated cutoff, since no dataset of de-novo binders with measured self-association exists to fit one on.

  • Pose: approach angle (end-on vs. lying across the surface).

  • Grippability: epitope planarity, hydrophobic fraction, aromatic anchors, and a SASA-aware glyco-occlusion check (epitope_glyco_occluded, epitope_glyco_sites). The check flags N-glycosylation sequons (N-X-[S/T]) that are exposed on the free target and sit at or near the epitope, where an installed glycan would mask an otherwise grippable patch. grippability_consensus(row, iara_score) optionally cross-checks this physical read against a learned target-side score (for example an IARA epitope mean, computed by the caller so binderqc stays dependency-clean) and returns grippable, flat, or disagree. Pass --iara-score on the CLI to add it as a column.

  • Tag site: recommended terminus (N/C) and the numbers behind it: relative SASA, CA-CA distance to the paratope, orientation, and a terminal cysteine's SG SASA.

  • Developability: two complementary aggregation scores, an SAP-style spatial aggregation score (sap_score, sap_total, and sap_per_res = load per residue, since sap_total scales with chain length and the literature SAP < 35 bar was calibrated on 52-65 residue binders) and an Aggrescan3D score (a3d_score, a3d_total_positive, a faithful pure-Python port of Aggrescan3D 1.0.2's a3v scale and algorithm, Pearson r≈0.92 vs the reference tool). Plus TAP-style surface charge patches (Raybould et al. 2019): charge_patch_pos and charge_patch_neg are the strongest exposed clusters of like charge, which net charge and pI miss and which drive viscosity and self-association. Following TAP's actual insight, the same idea is also computed over the binding region: paratope_hydrophobicity and paratope_charge say whether the interface itself is sticky or charge-clumped. These are reported numbers, not gates: TAP's thresholds are calibrated on antibody Fv surfaces and do not transfer to minibinders. It also reports the ProtParam instability index (Guruprasad 1990), GRAVY, pI, MW, and ε₂₈₀. Sequence liabilities cover deamidation (N-[G/S/T]), Asp isomerization (D-[G/S/T/D/H]), unpaired cysteines, N-glycosylation sequons, and Met/Trp oxidation hotspots. The oxidation check is SASA-aware, so only surface-exposed residues count.

A warnings column flags problems: small, flat, anchorless, or glyco-occluded interfaces; buried, ambiguous, or interface-facing tag sites; hydrophobic sequences. qc_pass is true when there are no quality warnings (tag-site advisories like an ambiguous terminus do not count), and --fasta writes those binders.

Full column list

pdb, binder_chain, target_chains, n_interface_res, binder_bsa, n_hbonds, n_salt_bridges, interface_packing, approach_angle, epitope_planarity, epitope_hydrophobic_frac, epitope_aromatic_n, epitope_glyco_occluded, epitope_glyco_sites, nterm_resnum, nterm_resname, nterm_relsasa, nterm_dist_to_interface, nterm_orientation, nterm_sg_sasa, cterm_resnum, cterm_resname, cterm_relsasa, cterm_dist_to_interface, cterm_orientation, cterm_sg_sasa, recommended_tag, mw, gravy, pi, instability_index, ext_coeff_280, sap_score, sap_total, sap_per_res, a3d_score, a3d_total_positive, charge_patch_pos, charge_patch_neg, paratope_hydrophobicity, paratope_charge, paratope_res, sequence_liabilities, warnings, qc_pass, binder_sequence

With --self-fold, also self_fold, self_bsa, self_n_interface_res, self_paratope_overlap_n, self_paratope_overlap_frac, self_paratope_enrichment, self_verdict, residues_matched.

Tests

pip install -e ".[test]"
pytest

Tests run against a bundled example, PDB 7JZU (the LCB1 minibinder on the SARS-CoV-2 RBD). LCB1 comes from Cao et al. (2020), which frames the problem binderqc targets: the bottleneck is selecting good binders, not designing them.

"…not in the de novo design of proteins with shape and chemical complementarity to the target surface, but in recognizing the best candidates."

In that work LCB1 buries ~1,000 Ų and forms "multiple hydrogen bonds and salt bridges … consistent with the subnanomolar affinities". binderqc on 7JZU agrees: 1021 Ų buried area (Cao reports ~1,000 Ų), plus 2 salt bridges and 17 interface polar contacts. See Cao et al., De novo design of picomolar SARS-CoV-2 miniprotein inhibitors, Science 370, 426-431 (2020), doi:10.1126/science.abd9909.

tests/pisa_correctness.py is a separate script, not part of the unit tests. It downloads 18 public complexes from RCSB and PDBePISA and checks the interface area against PISA (r ~ 1.0, about 1% median error):

pip install -e ".[validation]"
python tests/pisa_correctness.py

Figures

The complex in the banner is a real render, not a drawing. docs/render_structure.py draws a cartoon under a translucent molecular surface (binder blue, target grey) from actual coordinates, using 3Dmol.js in headless Chromium. It works on any PDB/CIF, so you can reuse it for your own figures:

pip install -e ".[docs]" && python -m playwright install chromium
python docs/render_structure.py complex.pdb A B out.png   # structure, binder chain, target chain, output

License

MIT

Metadata

Release files for binderqc 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for binderqc 0.5.0
File Size Uploaded
binderqc-0.5.0.tar.gz 2.8 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for binderqc 0.5.0
File Interpreter ABI Platform
binderqc-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.8 MB

Release files / binderqc-0.5.0.tar.gz

Download URL binderqc-0.5.0.tar.gz
Size 2.8 MB
Tags Source
SHA-256 checksum
How to use checksums
f34f84f7075759fed3e9926c5b2d987d60112e5c3a65e0387a52d8c2b62fe462
BLAKE2b-256 checksum
How to use checksums
34d005723112d2e15694fc1cb19f8b8a21353a3ba8473334e1d2f26206d9881c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / binderqc-0.5.0-py3-none-any.whl

Download URL binderqc-0.5.0-py3-none-any.whl
Size 26.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
366bb62c07900ec0ebfe9d6e6da326a397f6a6f741d3b904bb82a8d0981f81c7
BLAKE2b-256 checksum
How to use checksums
f797f0677da0083d3d05796d67c8715f56412d1eb2b799841bc497496919e2ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page