2. 受体结构准备:从PDB获取、修复、加氢到能量最小化
受体结构准备——说白了,就是给你的蛋白质“梳妆打扮”。
很多刚入门的朋友会问:PDB数据库里不是已经有现成的结构了吗?为什么还要折腾?
我刚开始做分子对接时也这么想。直到有一次,我用一个晶体结构直接跑对接,结果出来的结合模式全都不对……后来才发现,那个结构里的残基有缺失,质子化状态也是错的。
这一章,我们就来聊聊这个环节的四个关键步骤。
2.1 从PDB获取:不只是下载那么简单
PDB(Protein Data Bank)是最权威的蛋白质结构数据库。但下载结构时,有几个坑你要注意。
选择分辨率。我个人习惯只选分辨率 ≤ 3.0 Å 的结构。分辨率越高(数值越小),电子密度图质量越好,侧链位置的确定性就越高。
检查配体信息。一个结构文件里可能包含小分子配体、水分子、金属离子、辅因子等。你得确定这些是不是你需要的。
优先选择同源结构。如果目标蛋白有多个PDB条目,我会优先选与实验条件(pH、温度、突变状态)最接近的那个。
常用的获取方式有两种:通过PDB官网手动下载,或者用程序自动拉取。
# 使用 Biopython 下载 PDB 文件
from Bio.PDB import PDBList
pdbl = PDBList()
# 下载 4K24 这个结构
pdbl.retrieve_pdb_file("4K24", pdir="./pdb_files", file_format="pdb")
2.2 缺失残基修复:补全残缺的“手臂”
PDB结构里,缺失残基非常常见。
为什么会这样?因为某些区域(尤其是loop区)柔性太大,电子密度图看不清楚,实验人员就在建模时跳过了它们。
但这些缺失的残基如果位于结合位点附近,直接影响对接结果。我见过有人直接拿残缺结构跑对接,结果配体钻到了不该去的缝隙里。
修复方法主要有三种:
| 方法 | 原理 | 推荐场景 |
|---|---|---|
| MODELER | 基于空间约束的同源模建 | 缺失片段较长(大于5个残基) |
| SBROD | 基于loop数据库的快速替换 | 短loop缺失(1-5个残基) |
| SWISS-MODEL | 在线自动模建 | 需要快速获取模板 |
我用Chimera(UCSF Chimera)来做这件事,因为它集成了MODELER接口。你甚至可以写脚本批量处理。
# Chimera 中调用 MODELER 修复缺失残基的简化命令
chimera --nogui fixed_missing_residues.py
修复后,我会检查一下omega角度的顺反异构。有时候自动补全的残基二面角是错误的。
2.3 加氢与质子化状态:解决“看不见的原子”
X射线晶体学几乎看不到氢原子。所以在做对接前,我们必须手动加上。
但加氢不是简单的“H”原子。酸性残基(Asp、Glu)和碱性残基(Lys、Arg)的质子化状态取决于pH环境。
我曾经因为加氢策略不对,导致一个对接结果完全矛盾——配体本该结合在深槽里,结果却跑到了表面。排查才发现,某个His残基的质子化状态搞错了。
判断质子化状态的基本原则:
- His:pH 7.4 时,未配位的His通常以中性形式存在(Hid或Hie)。参与配位的His可能带正电(Hip)。
- Asp/Glu:通常去质子化(带负电)。但如果位于疏水口袋深处,可能以质子化形式存在。
- Lys:几乎永远带正电,除非环境极度疏水或pH>10。
- Cys:形成二硫键的Cys不带电,游离Cys在生理pH下以中性形式为主。
我推荐用PDB2PQR进行pKa预测,然后根据预测结果决定质子化状态。
# 使用 PDB2PQR 插件计算 pKa
python /path/to/pdb2pqr/pdb2pqr.py --ff=AMBER --ph=7.4 input.pdb output.pqr
加氢完成后,我还会做一步极性加氢,即只增加有极性的氢原子(N-H、O-H),非极性氢原子(C-H)留给对接引擎处理。
2.4 能量最小化:让结构“冷静”下来
加氢后的结构,原子之间有严重的空间冲突。尤其是人工添加的氢原子,可能跟附近的重原子靠得太近。
你想想看,当你把一个完整的三维结构构建出来,如果直接用它跑对接,配体碰到这些冲突位置就会报错。
能量最小化的目的,就是释放这些张力,让结构稳定下来。
常用的力场:
- AMBER ff14SB:适合生物大分子
- CHARMM36:适合膜蛋白
- OpenMM:适合GPU加速的大规模体系
最小化算法:
- 先做最速下降法(Steepest Descent)——快速从高能量区跑到低能量区。
- 再做共轭梯度法(Conjugate Gradient)——精细收敛到局部极小值。
我习惯的流程是:固定主链原子,只对侧链和氢原子做500步最速下降,然后解除约束再用共轭梯度做500步。
# GROMACS 中做能量最小化的基本命令
gmx grompp -f minim.mdp -c input.gro -p topol.top -o minim.tpr
gmx mdrun -deffnm minim
# minim.mdp 文件内容示例
integrator = steep
nsteps = 500
emtol = 10.0
nstxout = 50
最小化之后,我会检查一下体系的总能量有没有明显下降。如果下降幅度超过一个数量级,说明初始结构问题很大。
这张图总结了我们这一章的核心逻辑。我个人习惯把这四个步骤称为“受体的清洗与配置”。每一步都有独立的工具和方法,但它们之间是串联依赖关系——你跳过了其中任何一步,后续的对接结果都可能不可靠。