software

check out my open-source projects at the repos below

maintained Developer

Python tool for cryptic binding pocket discovery. Generates conformational ensembles (NMA by default; optional OpenMM implicit-solvent MD and Boltz-2 diffusion sampling), detects pockets per conformer, clusters them across the ensemble, and ranks them with a learned model over 23 geometric and ensemble-derived features, with an optional PLM-assisted ranker. Evaluated with a size-robust (Jaccard ≥ 0.25) protocol on four independent datasets: 56% recovery on CryptoBench's designated test fold (n=180, the largest and most diverse), rising to 66% with the PLM-assisted ranker; 73% on PocketMiner (33/45); 45% on a curated apo/holo set (10/22); and 87% on COACH420 general binding sites (125/144). CryptoBench follows the dataset's own homology-separated folds, with the ranker's coefficients fitted on the train folds only. Outputs docking-ready Boltz YAML constraints, AutoDock Vina configs, and pseudoatom PDB files with hotspot-centered pocket localization. MIT licensed; v1.0.1 on PyPI as lacuna-pockets. Accompanying analysis: doi:10.64898/2026.08.11.743381.

Python Boltz-2 ESM-2 Structural Biology
in development Developer

AI-native biomolecular storage format (.ptt) for structural biology ML. Converts a protein, nucleic-acid, or protein-ligand structure - or a raw sequence - once and caches every training tensor: atomic coordinates, backbone geometry, bond graphs, MSA alignments, ESM2/ESM3 embeddings, dense or sparse pair features, and ligands with binding-site pockets - in a single Zarr/LZ4 container with memory-mapped lazy access and S3/GCS streaming. Generates native inputs for Boltz-2 (verified end-to-end), AlphaFold 3, Chai-1, OpenFold, and Nesso. On a 76-3,525 residue benchmark: 2-95x faster full loads, up to ~250x backbone-only loads vs re-parsing mmCIF, ~4x faster full feature assembly, and up to ~75x smaller pair storage via sparse radius graphs. PyTorch / JAX / NumPy.

Python Zarr PyTorch/JAX NumPy
More on GitHub →