3、输入文件准备:受体与配体PDB结构获取、加氢与合并非极性氢、准备PDBQT文件

做分子对接,最基础的一步就是准备输入文件。很多人一上来就急着跑Vina,结果跑出来的结果根本没法看。问题出在哪?说白了,就是输入文件没处理好。

我个人习惯把这一章叫做“地基工程”。地基没打好,上面盖的房子再漂亮也是危房。咱们今天就把这个地基讲透。

3.1 获取受体与配体的PDB结构

PDB(Protein Data Bank)文件是分子对接的起点。它描述了分子的三维坐标、原子类型、连接性等信息。你想想看,如果原始结构都有问题,后面的一切都是白搭。

3.1.1 受体的PDB结构获取

我建议你从以下几个途径获取受体结构:

  • PDB数据库(rcsb.org):最权威的来源。搜索你感兴趣的蛋白质ID,下载.pdb文件。
  • AlphaFold DB:如果目标蛋白没有实验结构,可以考虑使用AlphaFold预测的结构。记住,这只是预测,需要谨慎使用。
  • 自己建模:如果上述都没有,同源建模也是一个选择。不过精度会下降不少。
注意:下载的PDB文件可能包含多个构象、水分子、配体、或共结晶的小分子。你需要根据实验目的手动清理。我见过很多新手直接拿整个PDB文件去跑,结果受体上还挂着原来的配体,你说这能跑对吗?

3.1.2 配体的PDB结构获取

配体的来源就更多了:

  • ZINC数据库:商业化合物库,小分子种类齐全。
  • PubChem:美国国立卫生研究院维护的数据库。
  • ChEMBL:偏向药物化学的数据库。
  • 自己画:用ChemDraw画出结构,然后用Open Babel转成PDB格式。

获取到PDB文件后,记得检查一下结构是否完整。我曾经在处理一个配体时,发现它的一个苯环少了一个碳原子,结果跑出来的对接位点完全不对。后来发现是数据库下载时出了问题。

3.2 加氢与合并非极性氢

这一步非常重要,但很多人容易忽略。为什么?因为原始PDB文件中的氢原子很少。X射线晶体学在常规分辨率下很难确定氢原子的位置。所以我们需要用工具自动补全氢原子。

加氢有两个关键点:

  1. 加极性氢:与氮、氧、硫等电负性原子相连的氢,这些氢原子对对接精度影响很大。
  2. 合并非极性氢:也叫“合并氢”。就是把与碳原子相连的非极性氢合并到碳原子上。这样做是为了简化计算,因为非极性氢在氢键形成中不扮演重要角色。

3.2.1 为什么自动补全?

手动加氢?除非你疯了。我建议你使用MGLTools中的ADT来做这件事。ADT的加氢算法是基于pH值计算的,它会根据化学环境自动分配质子化状态。

在ADT中,加氢的步骤很直观:

ADT → Edit → Add Hydrogen → OK

加氢后,记住把非极性氢合并。ADT → Edit → Merge Non-Polar Hydrogens。就这么两步,别想复杂了。

小技巧:我通常会在加氢前先检查一下受体或配体的质子化状态。比如组氨酸(His)可能有三种存在形式:HID(δ位质子化)、HIE(ε位质子化)、HIP(双质子化)。如果对接环境的pH与生理pH不同,你需要手动调整。ADT提供了一个“Check Protonation”的功能,建议用一下。

3.3 准备PDBQT文件(使用MGLTools或ADT)

PDBQT是AutoDock系列的专用输入格式。它比PDB多了两部分信息:

  • 原子类型:比如CA(sp2碳)、HD(极性氢)等。
  • 电荷信息:基于Gasteiger-Marsili算法计算的部分电荷。

说白了,PDBQT就是你告诉程序:“嘿,这个原子是碳,带0.5个正电荷,位置在(x,y,z)。”

3.3.1 使用ADT生成PDBQT

准备好受体和配体的PDB文件后,我建议你按以下流程操作:

  1. 打开受体PDB:File → Read PDBS → 选择你的受体.pdb文件。
  2. 加氢:Edit → Add Hydrogens → 选择 pH=7.4(大多数情况)。
  3. 合并非极性氢:Edit → Merge Non-Polar Hydrogens。
  4. 计算电荷:Edit → Compute Gasteiger Charges。这一步会自动完成。
  5. 检查原子类型:在ADT的右侧面板,你会看到每个原子被分配的AD类型。比如C代表芳香碳,A代表非芳香碳。如果发现有异常(比如氧原子被标成了碳),你需要手动修正。
  6. 保存PDBQT:File → Save As → 选择 PDBQT 格式。

配体的操作步骤类似,不过要注意配体通常需要允许可旋转键。

避坑指南:我曾经遇到过一次很经典的错误。一个配体分子非常大,有50多个可旋转键。ADT默认把所有单键都设置成了可旋转。这样Vina的搜索空间会大得惊人,跑几天都算不完。正确做法是:在ADT中手动固定那些核心骨架的单键,只保留末端基团的旋转自由度。在ADT里,Ligand → Torsion Tree → Choose Torsion可以手动设置。

3.3.2 使用命令行的替代方案

如果你不想用ADT的图形界面,也可以用prepare_receptor4.py和prepare_ligand4.py这两个脚本来完成。这是MGLTools提供的工具。命令行操作的好处是快,适合批量处理。

# 准备受体PDBQT
prepare_receptor4.py -r receptor.pdb -o receptor.pdbqt

# 准备配体PDBQT
prepare_ligand4.py -l ligand.pdb -o ligand.pdbqt

3.4 知识结构总览

下面的SVG图展示了从原始PDB到最终PDBQT的完整流程。我把这个图画出来,方便你记在心里。

PDBQT文件生成流程图 PDB数据库 获取受体PDB (RCSB/AlphaFold) 获取配体PDB (ZINC/PubChem) 处理受体 加氢 + 合并非极性氢 计算Gasteiger电荷 处理配体 加氢 + 合并非极性氢 设置可旋转键 输出PDBQT文件

3.5 常见问题与避坑指南

问题 原因 解决方法
PDBQT文件中出现奇怪的原子类型 原始PDB的原子名称不规范 手动检查并修正原子类型数,必要时用ADT的Check AD4 type功能
加氢后结构异常(如键长改变) 原始结构中缺失某个原子导致立体化学错误 用Open Babel或PyMOL修复结构后再加氢
配体对接结果都是未结合状态 配体PDBQT的电荷或原子类型错误 重新计算电荷,检查是否有非标准原子
受体PDBQT文件太大,Vina报错 受体包含太多水分子或离子 在ADT中手动删除所有水分子和非关键离子

核心要点回顾:

  • 始终从可靠的PDB数据库获取原始结构。
  • 加氢和合并非极性氢是必须步骤,别偷懒。
  • 用ADT或命令行脚本准备PDBQT文件。
  • 手动检查原子类型和电荷,别完全依赖自动计算。

嗯,到这里,输入文件的准备工作就讲完了。你可能会觉得这一步很繁琐,但其实只要你按流程走一遍,后面跑Vina的时候会特别顺。我曾经帮一个师弟调试对接结果,他的PDBQT文件有问题,我花了半小时才调好。后来他学会了自己准备输入文件,再也没找过我。你看,前期工作做扎实了,后面能省多少事。