4、受体准备:去除水分子、加氢、修复缺失残基、PDBQT格式生成

说实话,做高通量对接这么多年,我见过最惨的失败案例,十有八九都是受体准备没做到位。你想想看,受体本身就是"靶心",如果靶心都歪了,后面打分筛得再漂亮也是白搭。这一章我就把受体准备的核心操作拆开揉碎来讲,每步都带点我实际踩过的坑。

核心观点:受体准备的本质,是把晶体结构或冷冻电镜结构"翻译"成对接程序能理解的语言。翻译错了,对接就是个笑话。

4.1 受体准备的四个关键步骤

整个流程可以归纳为下图。我习惯把它当作一条流水线,每个环节都有明确的输入和输出。千万别跳步,也别随意调换顺序。

受体准备全流程 原始 PDB 晶体/冷冻电镜 去除水分子 保留关键水 加氢处理 pH · 质子化 修复缺失残基 侧链 · loop PDBQT 生成 电荷 · 原子类型 QC ⚠ 关键说明 • 每一步的输出都会影响下一步的准确性,禁止跳步。 • 加氢前必须确认实验pH,质子化状态设错会直接毁掉对接结果。 • 修复缺失残基时,优先使用同源模板辅助,不要全靠算法瞎猜。 • PDBQT生成后,务必检查原子类型和电荷总和是否为整数。

4.2 去除水分子:哪些该留,哪些该删

晶体结构里通常有大量水分子。但对接时,大部分水是要删掉的。为什么呢?因为对接程序默认把受体当刚性或半刚性处理,水分子会占据本来配体可能结合的位置,限制搜索空间。

但有个例外:结合位点的保守水。 我在做激酶项目时遇到过,某个催化水如果删了,对接完全找不到活性构象。后来查文献才发现,那个水分子参与了氢键网络,是结合必需的一部分。

我建议保留以下几类水:

  • 与残基主链或侧链形成≥2个氢键的水
  • 在多个同源结构中保守出现的水
  • 文献明确提及参与结合或催化的水

实际操作中,我的做法是先用PyMOL或VMD把受体结构打开,手动查看结合位点周围5Å内的水。不确定的,跑一下 waterswap 或参考同源结构。别偷懒,这一步省不了。

我曾经犯过的错:有次做虚拟筛选,为了省事一键删了所有水。结果富集因子直接腰斩。后来花了两周重新跑才找到原因——催化水没了。从那以后,我每次去水都会单独列一个"保留水清单"。

4.3 加氢处理:质子化状态决定成败

蛋白质的加氢不是简单地把氢原子补上。关键在于质子化状态——也就是在当前的pH环境下,每个可电离残基到底带几个氢。

你想想看,His、Asp、Glu、Lys、Arg 这些残基的pKa不同,pH一变,电荷状态就全变了。对接程序需要知道正确的电荷分布才能算对静电作用。

我习惯用 reduce 或 PDB2PQR 做加氢。如果体系pH明确(比如7.4),我会直接设pH值,让工具自动推断。如果不确定,我会跑一下 PROPKA 预测pKa。

# 使用 reduce 加氢(经典做法)
reduce -Trim tmp.pdb > receptor_noH.pdb
reduce -HIS receptor_noH.pdb > receptor_addH.pdb

# 使用 PDB2PQR 加氢并指定 pH
pdb2pqr --ff=AMBER --ph=7.4 receptor.pdb receptor_pqr.pdb

重点:加氢后必须手动检查His的三种质子化状态(HID、HIE、HIP)。这是高频出错点。我见过很多人跑完对接才发现His电荷设反了,白白浪费算力。

还有个细节:水分子上的氢也要加对。如果保留了关键水,它的氢原子取向会影响氢键网络。我一般用 haddock 或 gromacs 的工具来优化水分子取向。

4.4 修复缺失残基:让结构完整起来

晶体结构里经常有缺失的残基——尤其是柔性loop区域。对接时如果结合位点附近有缺失,那结果基本没法用。为什么呢?因为缺失的主链会让局部结构变形,配体可能"钻"进不该去的空腔。

修复缺失残基分两种情况:

缺失类型 推荐工具 注意事项
侧链缺失(≤5残基) Modeller / SCWRL4 用同源模板做约束,避免过度优化
主链缺失(loop) Modeller / Rosetta 生成≥10个候选,选能量最低且结构合理的
大片段缺失(>10残基) 建议重新解析或找更好模板 算法修复的置信度极低,慎用

我个人的做法:对于结合位点5Å以内的缺失,我会用Modeller做多模板修复,然后跑一轮短能量最小化。对于远离结合位点的缺失,如果实在修复不了,我会在对接时把那个区域设为柔性,或者直接截掉。

小技巧:修复完跑一下 PROCHECK 或 MolProbity 检查立体化学质量。拉氏图里 outliers 太多的结构,对接结果不可信。

4.5 PDBQT格式生成:最后一道工序

PDBQT是AutoDock系列的专用格式。它在PDB的基础上加了原子类型、Gasteiger电荷和扭转信息。说白了,就是把受体"翻译"成AutoDock能算分的语言。

生成PDBQT最常用的工具是 prepare_receptor4.py(AutoDock Tools 自带的脚本)。基本命令如下:

# 生成受体 PDBQT
prepare_receptor4.py -r receptor_addH.pdb -o receptor.pdbqt

# 如果需要指定 pH 或保留水
prepare_receptor4.py -r receptor_addH.pdb -o receptor.pdbqt \
                     -p pH=7.4 -x waters.pdb

跑完命令后,千万别直接拿去用。打开PDBQT文件,检查以下几项:

  • 原子类型字段(第5列): 确保没有出现 "NA" 或 "Unknown" 的类型。
  • 电荷总和: 所有原子的部分电荷加起来应该是整数(或接近整数)。我见过有人拿到的受体电荷总和是 -0.83,明显有问题。
  • 根原子(ROOT)定义: 确认根原子选在合理的位置,通常是结合位点附近的骨架原子。

我曾经踩过的坑:有次处理一个金属蛋白,prepare_receptor4.py 把Zn²⁺的原子类型设成了 "A"(碳),电荷也完全不对。后来手动改成金属原子类型并重新分配电荷才解决。金属蛋白的PDBQT生成,一定要人工复核。

4.6 受体准备质控清单

最后,我把自己平时用的质控清单整理成表。每次准备完受体,按这个单子过一遍,能挡住90%的低级错误。

检查项 检查内容 通过标准
水分子 结合位点保守水是否保留 已确认并记录保留水清单
加氢状态 His、Asp、Glu 质子化是否与pH一致 His 已指定 HID/HIE/HIP
残基完整性 缺失残基是否修复,修复质量如何 拉氏图 outliers ≤ 2%
PDBQT格式 原子类型、电荷总和、ROOT位置 无 "NA" 类型,电荷总和为整数
金属离子 配位关系和原子类型是否正确 金属原子类型已手动核对

一句话总结:受体准备没有捷径。去水、加氢、修残基、转格式,每步都值得花时间做扎实。高通量对接的批次里,一个没准备好的受体,会让你整个筛选结果都脏掉。