code/scripts/ — entry points
This public release ships only the inference and sampling code for Q_θ.
| File / dir | Purpose |
|---|---|
evaluate.py |
Score binders in a pre-built *.pkl test set with a Q_θ checkpoint; reports Spearman ρ, AUC, selectivity gap. |
rescore.py |
Re-score raw PDB designs (binder + holo + apo) with Q_θ. |
pxdesign_guidance/ |
PXDesign-prior guidance with Q_θ (Langevin / SMC / TDS / classifier). |
Training, baseline scoring (ProteinMPNN / ESM-IF / Rosetta / DFIRE / energy panel), guidance for RFdiffusion / Proteina-ComplexA, and paper-figure aggregation are not shipped; the inference path above is the only supported surface for the public release.
Deploying Q_θ with other base models
Q_θ provides two interfaces:
- Re-ranker (best-of-K). Given K candidate binders from any prior, score each with
S(Y) = Q_θ(X¹, Y) − Q_θ(X⁰, Y)and pick the top. No gradient signal needed; the prior is unmodified. - Gradient signal for guidance. Compute
∇_Y S(Y)viaDifferentiableQTheta(incode/models/differentiable_features.py) and inject into the prior's sampler (Langevin step, SMC weight, TDS twist, classifier guidance score).
The pxdesign_guidance/ subdir is a worked example of interface (2) wrapping PXDesign. To plug Q_θ into another prior, mirror that pattern:
RFdiffusion
- Clone RFdiffusion: https://github.com/RosettaCommons/RFdiffusion.
- Follow its install + checkpoint download.
- In RFdiffusion's diffusion loop, after each denoising step, materialize the predicted backbone, build the holo/apo graph inputs expected by
DifferentiableQTheta, and either:- Apply a Langevin nudge:
x ← x + η · ∇_x S(x). - Add a classifier-guidance term to the denoiser's
xt-1mean:μ' = μ + s · σ² · ∇_x log p(y|x), wherelog p(y|x) ≈ S(x)(Q_θ is treated as the log-likelihood of "is good binder").
- Apply a Langevin nudge:
- Reference template:
pxdesign_guidance/guided_pxdesign.py.
Proteina-ComplexA
- Clone Proteina: https://github.com/proteinabio/proteina-complexa (or the released artifact).
- Use its ComplexA mode that emits binder coords conditioned on a receptor.
- Same plug pattern as RFdiffusion — wrap the sampler with
DifferentiableQThetafor guidance, or run unguided and re-rank withevaluate.py/rescore.py.
Any backbone prior
The only contract Q_θ enforces:
- Receptor input is a PDB with holo and apo coordinates.
- Binder input is a PDB (or coords) with chain id distinct from receptor's.
- For guidance, expose differentiable Cα + backbone coordinates so
∇_x S(x)flows.
See code/models/differentiable_features.py:DifferentiableQTheta for the exact interface (load_receptor(holo_path, apo_path, …), score(design_path, binder_chain, state), .differentiable_score(coords, …)).
Why other guidance scripts aren't shipped
The RFdiffusion / Proteina guidance variants in our internal tree depend on those projects' un-released CIF formats and patched samplers; we don't want to ship modified third-party code. The PXDesign variants we do ship use only PXDesign's public API and are self-contained.
For citation / reproduction context, see the paper §4 (guidance methods).