APBS
Adaptive Poisson-Boltzmann Solver — the reference open-source tool for continuum electrostatics on biomolecules. Computes the electrostatic potential φ(r) around a protein by solving the nonlinear Poisson-Boltzmann equation on a finite-difference grid with ion-exclusion regions and dielectric discontinuity at the solvent boundary.
Reference: Jurrus E et al. 2018 Protein Science 27:112 (DOI 10.1002/pro.3280).
What It Does
- Solves NLPBE / LPBE on a finite-difference grid around a molecule (PQR format with partial charges + radii)
- Outputs 3D potential map
.dx(OpenDX format) in units of kT/e at chosen temperature - Supports multigrid (mg-auto, mg-para), boundary methods (sdh, zero, focus), and solvation schemes (smooth molecular / spline-based charge mapping)
- Companion:
pdb2pqr— converts PDB → PQR with force-field charges + radii (PARSE, AMBER, CHARMM, swanson); handles protonation at user pH (propka) or default force-field rules
Install
conda create -n apbs -c conda-forge apbs pdb2pqr -yVerified 2026-04-24: apbs 3.4.1 + pdb2pqr 3.6.1 install cleanly; propka 3.5 broken on Python 3.14 (AttributeError Parameters.__annotations__) — workaround: omit --titration-state-method=propka and use force-field default pKa rules for pH 7-8 work. For finer pKa prediction, patch propka or use older Python.
How to Use
pdb2pqr (prep)
pdb2pqr --ff=PARSE --keep-chain input.pdb output.pqr
# Add --with-ph=7.4 --titration-state-method=propka if propka works in env.APBS (solve)
Requires a .in input file:
read
mol pqr input.pqr
end
elec
mg-auto
dime 129 129 129
cglen 120 120 120
fglen 64 64 64
cgcent 0 0 0
fgcent 0 0 0
mol 1
npbe # nonlinear PBE (lpbe for linear)
bcfl sdh # single Debye-Hückel boundary
pdie 2.0 # protein dielectric
sdie 78.54 # water dielectric at 298 K (use 74.2 at 310 K if needed)
srfm smol # smooth molecular surface
chgm spl2 # spline-2 charge mapping
sdens 10.0 # surface density
srad 1.4 # probe radius (Å)
swin 0.3 # Å
temp 310.0 # K
ion charge 1 conc 0.150 radius 2.0
ion charge -1 conc 0.150 radius 2.0
calcenergy no
calcforce no
write pot dx out # writes out.dx
end
quitThen: apbs input.in. Output is out.dx — readable in VMD / PyMOL for isosurface, or parse directly with Python (see pharmacochaperone_apbs_wt_mut_pocket.py).
Python-side dx parser
Skeleton:
with dx_path.open() as f: lines = f.readlines()
# Parse: "object 1 ... counts NX NY NZ" → dims
# "origin X Y Z" → grid origin
# "delta X Y Z" → three lines, grid spacing
# "object 3 ... array" → dims[0]*dims[1]*dims[2] float values in row-majorKey Units & Conversions
- Potential output is in kT/e at user temperature (not SI units)
- At 310 K: 1 kT/e ≈ 0.616 kcal/mol per unit charge
- For a point charge q (in e units) at location r: Coulomb energy contribution = q × φ(r)
STRC Research Usage
- Phase 5j WT-vs-mutant pocket electrostatics (STRC h01 Phase 5j APBS WT vs Mutant Pocket Electrostatics 2026-04-24) — quantified +7.1 kT/e mean shift in E1659A pocket; explained Phase 4c-v3b Vina WT-bias as a Vina artefact at the force-field level.
- Future Phase 5g holo-MD per-frame APBS — expected to give distribution of pocket potentials over an ensemble, tightening the pharmacochaperone mechanism prediction.
Known Limitations
- Continuum solvent — does not capture discrete waters or specific H-bond networks
- Implicit ions via Debye-Hückel — saturated-salt / high-valent-ion regimes require explicit ion models (APBS does have
ionconcbut the screening is mean-field) propka 3.5is broken on Python 3.14 in the conda-forgeapbschannel (2026-04-24 verified) — use default force-field pKa until upstream fix- Requires PDB without waters / alt-confs / inconsistent chains —
strip_water_ions_to_pdbor equivalent cleanup first mg-autoperformance is fine for <10k atoms; for larger complexes usemg-para(MPI) or focusing
Connections
[applies]STRC h01 Phase 5j APBS WT vs Mutant Pocket Electrostatics 2026-04-24[see-also]STRC Computational Scripts Inventory[see-also]STRC Electrostatic Analysis E1659A — upstream literature-informed analysis, now superseded by a first-principles APBS run