- gpu/modal_app.py: add the `pose` local entrypoint used for the HDAC2
pose-RMSD validation (run: `modal run gpu/modal_app.py::pose`).
- pyproject [structure] extra: add the deps we actually use locally
(gemmi, spyrmsd, meeko, modal) for reproducibility; document the non-pip
tools (Vina binary, open-babel) and that Boltz/cuequivariance are
Modal-image-only.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Start the structure-based binding branch (PLAN §12), baseline-first.
- src/binding.py: validated RDKit ligand retrieval (morgan_fp, tanimoto,
retrieve_nearest = the §12.9 engine) + dock() stub documenting the
blocked ARM-Mac toolchain
- scripts/binding_ligand_baseline.py: 300 drugs vs known binders
- docs/structure_binding_notes.md: status, toolchain blocker, next steps
- pyproject: [structure] extra (rdkit); data/raw/structures/ for PDBs
Step-0 finding: retrieval engine VALIDATED on in-set classes
(decitabine->azacitidine 0.62; vorinostat->scriptaid/belinostat) but the
distinctive binders voxelotor/mitapivat have no analog in our 300-drug
set (Tanimoto ~0.2). Needs (a) bigger library, (b) real docking (§12.3),
which is blocked on the ARM-Mac docking toolchain (§12.6 pitfall 4).
Structures 5E83 (Hb+voxelotor) and 8XFD (PKR+mitapivat) fetched.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>