free-energy

Use when computing free energy differences for drug discovery. Covers FEP/TI/BAR/MBAR theory, alchemical transformations with OpenMMTools, relative binding free energy (RBFE) protocols, absolute binding free energy (ABFE), pymbar analysis, convergence diagnostics, and standard state corrections.

Free Energy Calculations

Compute ΔG of binding, solvation, or mutation via alchemical transformations — coupling/decoupling atoms along a λ pathway. Gold standard for lead optimization in drug discovery: accuracy ~1 kcal/mol for congeneric series.

When to Use This Skill

  • Predict ΔΔG_bind between two ligands (RBFE / lead optimization)
  • Compute absolute ΔG_bind of a ligand to a protein (ABFE)
  • Calculate ΔG_solvation or ΔG_hydration for ADME
  • Rank compounds from a small congeneric series (~5-50 molecules)
  • Validate force field parameters against experimental affinities
  • Analyze convergence of FEP simulations (MBAR, overlap matrix)

Key Methods

MethodEstimatorWindowsNotes
FEP (Zwanzig)Exponential avgAnyHigh variance; avoid for large ΔG
TINumerical integration of ⟨∂H/∂λ⟩10-20Requires smooth integrand
BARBennett Acceptance RatioAdjacent pairsBetter than TI for same data
MBARMultistate BARAll pairsBest variance; recommended
RBFERelative: A→B via alchemical12-24 λLead optimization
ABFEAbsolute: ligand → unbound~20 λMore expensive, independent

Accuracy Expectations

SystemTypical errorSim. time per edge
Congeneric RBFE (neutral)0.5-1.5 kcal/mol5-10 ns/window
RBFE with charge change1-3 kcal/mol10-20 ns/window
ABFE1-3 kcal/mol20-50 ns/window
Solvation ΔG0.3-1.0 kcal/mol2-5 ns/window

Quick Start

# pymbar: MBAR from energy matrix (u_kln)
import numpy as np
from pymbar import MBAR

# u_kln[k, l, n] = u_l(x_n^k) / kBT
# k: state from which sample was drawn
# l: state at which energy is evaluated
# n: sample index

K = 12  # number of lambda windows
N_k = np.array([1000] * K)  # samples per window

# u_kln shape: (K, K, max(N_k))
mbar = MBAR(u_kln, N_k)
results = mbar.compute_free_energy_differences()

dG = results['Delta_f'][0, -1]           # ΔG (kBT units)
ddG = results['dDelta_f'][0, -1]         # uncertainty
kBT = 0.5961  # kcal/mol at 298 K

print(f"ΔG = {dG * kBT:.2f} ± {ddG * kBT:.2f} kcal/mol")

Router — What to Read

TaskReference
FEP/TI/BAR/MBAR theory, thermodynamic cycles, alchemical pathreferences/fep-theory.md
OpenMMTools: AlchemicalFactory, ThermodynamicState, MCMC samplingreferences/openmmtools-alchemical.md
RBFE protocol: edge network, protein-ligand, resultsreferences/rbfe-protocol.md
ABFE: restraints, double-decoupling, standard state correctionreferences/abfe-protocol.md
pymbar, overlap matrix, convergence, uncertainty, phase spacereferences/pymbar-analysis.md

Software Stack

PackageInstallRole
pymbarpip install pymbarMBAR/BAR/FEP estimators
openmmtoolsconda install -c conda-forge openmmtoolsAlchemical factories, MCMC
persesconda install -c conda-forge persesRBFE pipeline (OpenMM-native)
openfepip install openfeFE campaign management (Lomap + OpenMM)
alchemtestpip install alchemtestTest datasets for FE code
lomap2pip install lomap2Ligand network RBFE planning

Related Skills

  • force-fields — system parameterization; OpenFF Sage for ligands
  • docking — starting poses for ABFE; initial ranking before FEP
  • mdanalysis — trajectory analysis from FEP runs
  • scientific-skills:rowan — cloud FEP without local HPC