从 PDB 下载的结构几乎从不能直接用于对接或模拟:缺失残基、缺失侧链原子、无氢原子、多构象、非标准残基——这些问题如果不处理,后续所有计算都建立在错误的结构上。PDBFixer 是处理这些问题最方便的开源工具。
PDB 结构的典型问题
| 问题 | 后果 | PDBFixer 能否处理 |
|---|---|---|
| 缺失氢原子 | 无法判断氢键;力场无法用 | 能 |
| 缺失侧链原子 | 口袋形状错误 | 能 |
| 缺失残基(loop) | 结构不完整 | 能(短 loop) |
| 非标准残基 | 力场无参数 | 能(替换为标准残基) |
| 多个 altloc | 原子重叠 | 能(保留占有率高的) |
| 结晶助剂分子 | 干扰对接 | 能(删除杂原子) |
| 质子化态错误 | 相互作用判断全错 | 部分(见下) |
| 翻转的 Asn/Gln/His | 氢键方向错误 | 不能(需 Reduce/PROPKA) |
标准流程
pip install pdbfixer # 或 conda install -c conda-forge pdbfixer
from pdbfixer import PDBFixer
from openmm.app import PDBFile
fixer = PDBFixer(filename="4xyz.pdb")
# 或直接从 PDB 下载:PDBFixer(pdbid="4XYZ")
# 1) 查找缺失残基
fixer.findMissingResidues()
print("缺失残基:", fixer.missingResidues)
# 重要:默认会补齐链末端的缺失残基,
# 但末端的 loop 通常远离结合位点且构象不可靠
# → 建议只补中间的缺失
chains = list(fixer.topology.chains())
keys = list(fixer.missingResidues.keys())
for key in keys:
chain = chains[key[0]]
if key[1] == 0 or key[1] == len(list(chain.residues())):
del fixer.missingResidues[key] # 删除末端缺失
# 2) 处理非标准残基
fixer.findNonstandardResidues()
print("非标准残基:", fixer.nonstandardResidues)
fixer.replaceNonstandardResidues()
# 3) 删除杂原子(水、离子、结晶助剂)
# keepWater=False 删掉所有水
# → 但结合位点的关键水可能需要保留!(见 091)
fixer.removeHeterogens(keepWater=False)
# 4) 补齐缺失的重原子
fixer.findMissingAtoms()
print("缺失原子:", fixer.missingAtoms)
fixer.addMissingAtoms()
# 5) 加氢(指定 pH)
fixer.addMissingHydrogens(pH=7.4)
# 6) 输出
with open("fixed.pdb", "w") as f:
PDBFile.writeFile(fixer.topology, fixer.positions, f)
质子化态:最容易出错的环节
# PDBFixer 的加氢基于「标准 pKa」,
# 但残基在蛋白环境中的 pKa 可能显著偏移
#
# 关键残基:
#
# His(组氨酸):pKa 约 6.0,接近生理 pH
# → 可能是中性(HID/HIE,两种互变异构)或质子化(HIP)
# → 中性时质子在 Nδ 还是 Nε?这决定了它是氢键供体还是受体
# → 【这是最常见的错误来源】
#
# Asp/Glu:标准 pKa 约 4,通常去质子化
# → 但埋在疏水环境中可能质子化
#
# Lys:标准 pKa 约 10.5,通常质子化
# → 埋藏时可能中性
#
# Cys:标准 pKa 约 8.3
# → 催化位点的 Cys 可能是硫醇盐(活性形式,见 379)
#
# 更好的工具:
# PROPKA: 预测蛋白中各残基的 pKa
# H++: 基于泊松-玻尔兹曼的质子化预测(网页服务)
# Reduce: 优化氢原子位置,并处理 Asn/Gln/His 的翻转
# PDB2PQR: 整合了 PROPKA,输出带电荷半径的 PQR 文件
# 推荐组合:
# PDBFixer 补原子 → PDB2PQR/PROPKA 定质子化态
# → Reduce 优化氢位置与翻转
#
# 验证:
# 检查结合位点残基的质子化态是否与已知的
# 相互作用模式一致(见 108)
Asn/Gln/His 翻转问题
- 问题根源:X 射线晶体学无法区分 N 与 O(电子数接近),因此 Asn/Gln 的酰胺基、His 的咪唑环可能被建模成翻转 180° 的错误取向;
- 后果:氢键供体与受体的角色互换——相互作用分析会完全错误;
- 发生频率不低:估计有相当比例的 PDB 结构存在这类问题;
- 解决:用
reduce -FLIP input.pdb > output.pdb,它会根据氢键网络优化判断正确的取向; - 这一步常被跳过,但对结合位点分析影响很大。
结构准备的完整检查清单
# 对接/模拟前的检查清单
#
# □ 分辨率是否足够?(< 2.5 Å 较可靠)
# □ 结合位点区域的电子密度是否清晰?
# → 看 PDB 条目的 validation report
# □ 结合位点附近有无缺失残基?
# → 如果有,补齐的 loop 构象不可靠
# □ 是否有 altloc?保留哪个?
# □ 辅因子(金属、血红素、NAD 等)是否保留?
# → 参与结合的必须保留
# □ 关键水分子是否保留?(见 091)
# □ 质子化态是否检查过?(尤其 His)
# □ Asn/Gln/His 是否做过翻转优化?
# □ 是否有结晶接触伪影?
# → 结合位点是否被相邻分子占据
# □ 蛋白是否有多条链?哪条是目标?
# □ 加氢后是否有明显的空间冲突?
#
# 最终验证:
# 用修复后的结构做重对接(见 096)
# 能复现原配体姿势 = 结构准备合格
与其它工具的关系
| 工具 | 擅长 |
|---|---|
| PDBFixer | 补缺失原子/残基、加氢;与 OpenMM 无缝衔接 |
| PDB2PQR + PROPKA | 质子化态预测 |
| Reduce | 氢位置优化 + Asn/Gln/His 翻转 |
| Modeller | 长 loop 建模;同源建模 |
| PyMOL / ChimeraX | 目视检查与手工编辑 |
| 商业工具(Schrödinger Protein Prep) | 整合流程,一步到位 |
关键要点
- PDB 结构几乎从不能直接使用——不修复就计算,结果不可信;
- His 的质子化态与互变异构是最常见的错误来源,PDBFixer 的默认处理不一定对;
- Asn/Gln/His 翻转问题常被跳过,但会让相互作用分析完全错误,用 Reduce 处理;
- 删水前先确认结合位点是否有关键水;补 loop 时不要补末端。
延伸资源
- 口袋与水分子:091《蛋白口袋 Protein Pocket》;Meeko:106《Meeko》;
- 相互作用分析:108《PLIP》;姿势验证:096《Binding Pose》;OpenMM:128《OpenMM 跑 10–100 ns MD》。