Summary
Upgrade cavity/solvent-accessibility features from the current convex-hull proxy to a Hollow-based pore/cavity detection pipeline. This is Person 2 workplan task 1 (stretch goal). Can be started without Person 1's curated annotations, but binding-site residue definitions may be refined later when Josh delivers ligand/binding-site data.
Background
Current implementation (confostate/features/cavity.py):
cavity_volume — convex hull of binding-pocket atoms (approximate)
cavity_accessibility_in / cavity_accessibility_out — simple slab-based CA exposure proxy
Workplan calls for Hollow-style structural hole filling:
- Initialize from binding site (nearest-neighbor graph of cavity centers)
- Extract pore features: path count, caliber / transition path metrics
- Original Hollow is Python 2.7 — needs a Python 3 rewrite or alternative
Binding site is currently defined by LEUT_BINDING_SITE_RESIDUES in cavity.py (literature-based). Sufficient to start; Person 1 may refine later.
Goals
Replace or supplement convex-hull cavity metrics with geometry derived from detected internal cavities/pores, improving discrimination between inward-open, outward-open, and occluded LeuT conformations.
Tasks
Phase 1 — Research & spike
Phase 2 — Implementation
Phase 3 — Tests & docs
Acceptance criteria
Dependencies
| Dependency |
Blocking? |
Notes |
| Person 1 annotations |
No |
Uses PDB + hardcoded binding site |
| Person 1 binding-site refinement |
No (may require re-tuning later) |
Coordinate via Tier 2 sync |
| Person 1 OPM data |
No |
Orientation already computed separately |
| Tier 1 (domain deltas) |
No |
Recommended to land first |
Out of scope
- RCSB metadata fetch (Person 1)
- OPM integration (Person 1)
- Symmetry module (Tier 5)
- Full solvent-accessible surface area (SASA) unless trivial add-on
Risks
- Effort: Largest remaining Person 2 item (days, not hours)
- Rework: Binding-site definition may change when Person 1 curates ligand data
- Binary dependency: If Hollow can't be ported cleanly, fallback library needs team buy-in
Files likely touched
confostate/features/cavity.py (and/or new hollow.py)
confostate/features/pipeline.py
tests/test_features.py
docs/features.md
Plans/hollow-cavity-plan.md
pyproject.toml (if new dependency)
Test plan
pip install -e ".[dev]"
python scripts/download_structures.py --codes 3F3E 3F3A 3F4J --output-dir input
pytest tests/test_features.py -v -k cavity
python -c "
from confostate.features import extract_features
for pdb in ['3F3E', '3F3A', '3F4J']:
f = extract_features(f'input/{pdb}.pdb', reference_dir='input')
print(pdb, f.get('cavity_volume'), f.get('cavity_accessibility_in'), f.get('cavity_accessibility_out'))
"
Summary
Upgrade cavity/solvent-accessibility features from the current convex-hull proxy to a Hollow-based pore/cavity detection pipeline. This is Person 2 workplan task 1 (stretch goal). Can be started without Person 1's curated annotations, but binding-site residue definitions may be refined later when Josh delivers ligand/binding-site data.
Background
Current implementation (
confostate/features/cavity.py):cavity_volume— convex hull of binding-pocket atoms (approximate)cavity_accessibility_in/cavity_accessibility_out— simple slab-based CA exposure proxyWorkplan calls for Hollow-style structural hole filling:
Binding site is currently defined by
LEUT_BINDING_SITE_RESIDUESincavity.py(literature-based). Sufficient to start; Person 1 may refine later.Goals
Replace or supplement convex-hull cavity metrics with geometry derived from detected internal cavities/pores, improving discrimination between inward-open, outward-open, and occluded LeuT conformations.
Tasks
Phase 1 — Research & spike
fpocket, custom MDAnalysis + scipy)Plans/hollow-cavity-plan.md3F3EOF,3F3AIF,3F4Joccluded)Phase 2 — Implementation
cavity.pyorconfostate/features/hollow.py)LEUT_BINDING_SITE_RESIDUEScavity_volume(Hollow-based, or clearly named e.g.cavity_hollow_volume)cavity_accessibility_in/cavity_accessibility_out(path-based if possible)extract_features()viapipeline.pyPhase 3 — Tests & docs
docs/features.mdwith new cavity feature definitionsAcceptance criteria
pytestpasses including new cavity testsextract_features()returns Hollow-based metrics for LeuT structures ininput/Dependencies
Out of scope
Risks
Files likely touched
confostate/features/cavity.py(and/or newhollow.py)confostate/features/pipeline.pytests/test_features.pydocs/features.mdPlans/hollow-cavity-plan.mdpyproject.toml(if new dependency)Test plan