fpocket

Open-source pocket-detection tool. Uses α-shape Voronoi tessellation (Edelsbrunner) to find concave protein cavities, ranks them by druggability descriptors (volume, polarity, hydrophobicity, depth). Distinct from Halgren SiteMap (commercial Schrödinger) but follows the same physical idea: enumerate cavities, score by druggability proxy.

Reference: Le Guilloux V et al. 2009 BMC Bioinformatics 10:168.

What It Does

  • Detects pockets via Voronoi-based α-spheres (radius 3.0–6.0 Å by default)
  • Outputs ranked pocket list with: volume, hydrophobic density, polarity score, druggability score, residue lining
  • Per-pocket PDBs and a global _info.txt summary
  • Companion mdpocket — pocket detection along an MD trajectory (we don’t use)

Install

brew install fpocket           # macOS arm64; package = fpocket 4.x

Verified 2026-04-26: installs cleanly via Homebrew at /opt/homebrew/bin/fpocket. The binary calls qvoronoi (qhull 2015.2) under the hood.

⚠ Status on M5 Max (2026-04-26)

BROKEN. Reproducible qhull error on every input file tested, including reference PDB 3GBI from RCSB:

QH6047 qhull input error: use upper-Delaunay('Qu') or infinity-point('Qz') with Delaunay('d') or Voronoi('v')
While executing: rbox D3 | qvoronoi p i Pp Qz Qt

The error occurs immediately at the qvoronoi pipeline stage, before fpocket even reads pocket descriptors. Likely a Homebrew packaging mismatch between the bundled qhull and fpocket’s expected qvoronoi flags. Not worth debugging — switched to a Python-side replacement.

Replacement: Halgren SiteMap-style Python grid burial estimator

When fpocket fails, we use ~/STRC/hypotheses/h01-pharmacochaperone/scripts/phase8h_lite/druggability_score.py — a 100-line grid scanner that reproduces the core SiteMap descriptors (V, hydrophobic enclosure, hydrophilic enclosure) by:

  1. Sampling a regular grid around a target residue NZ
  2. Excluding grid points inside protein (< 1.6 Å from any heavy atom) or in bulk solvent (> 4.0 Å from any heavy atom)
  3. Burial filter: keep only points with protein hits in ≥4/6 cardinal rays within 8 Å (drops surface concavity)
  4. Phobic / philic enclosure: nearest residue’s Eisenberg sign per pocket point

This reproduces what fpocket+druggability would compute, controllable, no qhull. ~15 s runtime on M5 Max for a 1k-residue protein.

Caveat: the absolute Halgren Dscore from this estimator is not Halgren-calibrated (his SiteMap algorithm caps grid points differently). The profile (V, phobic, philic) is comparable to Halgren’s published druggable-pocket benchmarks; the composite Dscore is not.

STRC Research Usage

Known Limitations

  • Homebrew binary on macOS arm64 fails on every input — tracked here, not in upstream issue tracker yet
  • Even when working, fpocket Dscore is calibrated against ~50-protein training set; tail behavior on disorder-rich or membrane-embedded proteins is uncertain
  • Replacement Python estimator does NOT include the burial-depth term that distinguishes deep druggable pockets from shallow surface concavities — the 4/6-ray heuristic is a rough proxy

Connections