Per-seed OOD test rho_bar (TS-S2 8-target split cam/bcl2/era/mdm2/ran/a2a/pai1/integrin):
seed 1024: 0.5298
seed 5555: 0.5200
seed 789 : 0.5106
ensemble mean: 0.5201
These replace the older single-seed `checkpoints/Q_theta_phase2.pt` (v2 strict holdout, ~3.6 MB, 897k params) for reproducing paper numbers with rescore.py. The v2 checkpoint is left in place for backward compatibility but is not canonical β v5-S2 is bigger arch (~2.8M params, ~10.4 MB) and pooled-training on 51 train targets.
fix rescore.py bugs: missing holo->apo Kabsch (Q_apo=0 for all designs), residue-ID alignment on renumbered chains (PXDesign/Protenix), HETATM chain-A dropped, single-seed -> 3-seed ensemble, add .cif supportβ
Replaces old v2 rescore script with the paper's canonical v5-S2 3-seed ensemble pipeline (seeds 1024/5555/789). Fixes:
1. Adds second Kabsch (holo->apo) on binder coords so the binder sits next to the apo receptor slot; previously Q_apo=0 for every design because 1CFD sits ~34 A from 3CLN in world frame.
2. Sequence-anchored ordinal Kabsch instead of residue-ID intersection β the ID intersection paired the wrong CAs whenever chain A was renumbered from 1 (PXDesign, Protenix, Proteina).
3. HETATM-safe receptor extraction β PXDesign writes chain A as HETATM and get_residues(only_standard=True) dropped every one.
4. 3-seed ensemble (seeds 1024/5555/789) with per-seed and mean scores.
5. Accepts .cif in addition to .pdb.
6. --design_dir / --target CLI args instead of hardcoded internal paths.