第3章:输入文件准备——从PDB到PDBQT

做分子对接,第一步不是调参数,而是伺候好输入文件。我见过不少新手卡在这一步,明明命令没问题,Vina跑起来却报错。说白了,程序不认识你手上的原始PDB文件,它要的是PDBQT。

这章我们就解决两件事:搞懂PDB和PDBQT的差别,然后学会怎么把文件转成Vina能吃的格式。

3.1 受体与配体的PDB文件

PDB文件长什么样?你从PDB数据库(比如PDB ID: 4DKO)下载的那个`.pdb`文件,其实就是一个记录原子坐标的文本。每一行叫一条记录,格式固定。

举个例子,一个典型的ATOM记录长这样:

ATOM      1  N   ALA A   1       5.342   2.152  14.239  1.00  0.00           N
ATOM      2  CA  ALA A   1       4.443   2.338  13.097  1.00  0.00           C

看懂了吗?第1列是“ATOM”或“HETATM”标记,第2列是序号,第3列是原子名,第5列残基名,第6-8列是x/y/z坐标。Vina其实不需要你去解析PDB的细节,但你必须保证文件是完整的、干净的。

接收体PDB文件的要求:

  • 必须包含所有重原子(N、C、O、S、P等)。
  • 最好提供最终构象,不要有多余的模型或晶体学对称副本。
  • 我建议先删除水分子、金属离子和辅因子——除非你知道自己在做什么。
  • 检查是否缺失侧链或环区。缺失结构会导致对接结果不可靠。
我的习惯:拿到PDB文件,先用PyMOL或Chimera看一眼。如果发现c-末端断链、侧链缺失,就去PDB数据库找完整结构,或者用同源建模补上。我不信任自动化工具自动填补缺失原子——它们经常搞错环的取向。

配体PDB文件的要求:

  • 配体必须作为一个完整的HETATM组存在。
  • 确认原子类型正确(比如C、N、O、Cl、Br、P、S、F等)。
  • 如果有手性中心,确认立体化学正确。
  • 电荷状态和互变异构体要合理。我一般用ChemDraw或者OpenBabel生成中性形式,再根据pH调整质子化状态。

嗯,这里要注意:有些PDB文件里配体的原子名被改成了奇怪的名字,比如“UNK”。如果你遇到这种情况,Vina会直接跳过去。我建议手动检查原子名与类型是否匹配。

3.2 为什么需要PDBQT格式?

PDBQT的全称是“Protein Data Bank, Partial Charge (Q) & Atom Type (T)”。说白了,就是在PDB基础上加了三样东西:

  • 原子类型(Atom Type):Vina自己定义了一组原子类型(比如C、A、N、OA、HD等),每个原子必须归到其中一类。
  • 部分电荷(Partial Charge):让程序知道电荷分布。
  • 可旋转键信息:告诉Vina哪些键可以旋转,哪些是刚性片段。

你想想看,如果只给Vina一个PDB文件,它得自己去猜原子到底带多少电荷、哪些键能转。这步不明确,最终打分就乱了。所以必须转成PDBQT。

PDB与PDBQT对比:

特性PDBPDBQT
原子类型标准元素符号(C、N、O)Vina自定义类型(C、A、N、OA等)
部分电荷无有,通常在倒数第2列
可旋转键无有,用ROOT/BRANCH/ENDROOT标记
原子坐标结构坐标修改后的坐标(可能去除水、加氢)
适用程序大多数可视化/分析软件AutoDock系列程序
我曾经栽过的一个坑:有一次我在准备配体PDBQT时,忘记加氢,结果Vina一直报“无法分配原子类型”。折腾了半小时才发现配体是缺氢的。记住:PDBQT要求所有氢原子显式存在——除了非极性氢,但Vina的规则比较特殊,它推荐加氢并且合并非极性氢,所以一定要用MGLTools或OpenBabel的正确模式加氢。

3.3 使用AutoDock Tools(ADT)准备文件

ADT是MGLTools套件的一部分。它给你一个图形界面,点几下鼠标就能转换。我个人更习惯用命令行的方式,但新手从ADT入手更容易理解概念。

步骤:

  1. 启动ADT:打开终端输入 adt(如果你装的是MGLTools包)。
  2. 载入受体:File → Read Molecule → 选择你的受体PDB文件。
  3. 加氢并合并非极性氢:Edit → Hydrogens → Add → 选择“Polar Only”或“All”。我一般选“Polar Only”然后手动补非极性氢。
  4. 计算Gasteiger电荷:Edit → Charges → Compute Gasteiger。
  5. 分配原子类型:Edit → Assign AD4 Atom Type(Vina会自动识别)。
  6. 设置可旋转键(配体):Ligand → Torsion Tree → 选择要旋转的键。
  7. 保存为PDBQT:File → Save → Write PDBQT。

ADT会生成一个PDBQT文件,同时输出一些日志信息。你可以在文件末尾看到类似于这样的标记:

ROOT
ATOM      1  N   LIG A   1       5.342   2.152  14.239 -0.362      N
ATOM      2  CA  LIG A   1       4.443   2.338  13.097  0.124      C
...
ENDROOT
BRANCH   2   3
ATOM      3  CB  LIG A   1       3.456   1.213  12.935  0.071      C
...
ENDBRANCH

看到ROOT和BRANCH了吗?这一块就是可旋转键的动态定义。Vina利用这些信息在对接过程中调整配体的非刚性片段。

我的建议:如果你有大量配体需要准备,用ADT一个一个点太慢。我习惯把ADT的参数写成一个脚本,然后用prepare_receptor和prepare_ligand命令行工具批量处理。这部分我们在第8章详细讲,但你可以先记住:prepare_receptor -r receptor.pdb -o receptor.pdbqt。

3.4 使用OpenBabel转换格式

OpenBabel是跨平台的分子格式转换瑞士军刀。它支持100多种格式,PDB、SDF、MOL2、PDBQT都能处理。

基本用法:

# 从PDB转换为PDBQT(加氢并分配原子类型)
obabel receptor.pdb -O receptor.pdbqt -h --partialcharge gasteiger

# 从SDF转换为PDBQT(适合配体批量处理)
obabel ligand.sdf -O ligand.pdbqt -h --partialcharge gasteiger

参数解释:

  • -h:加氢(默认加极性氢和非极性氢)。
  • --partialcharge gasteiger:计算Gasteiger部分电荷。
  • -O:输出文件路径。

注意,OpenBabel生成的PDBQT与ADT生成的机制略有不同。第一,OpenBabel自动合并非极性氢,而ADT需要你手动指定。第二,OpenBabel分配原子类型时可能会对某些特殊基团(如磺酰基、磷酸基)处理不当。我遇到过不少案例,OpenBabel把S原子类型分配成了S而不是SA。你最好转换完检查一下。

需要特别注意:

OpenBabel在转换水分子时,O原子会被分配成OA,但这可能不是Vina期望的类型。如果是受体中的水分子,建议去除。对于配体中的水分子,我通常会删除再重新加氢处理,或者直接用PDB结构处理。

另外,OpenBabel不支持含有金属原子的PDBQT转换。如果你的受体含有Zn、Mg、Fe等离子,请使用ADT或MGLTools的prepare_receptor脚本。

检查转换结果:

无论用哪种工具,我都会写个小脚本来验证PDBQT文件的完整性:

# 检查PDBQT中的原子类型分布
grep "ATOM\|HETATM" receptor.pdbqt | awk '{print $13}' | sort | uniq -c

# 检查可旋转键定义是否完整
grep -c "BRANCH" receptor.pdbqt

# 检查是否有缺失电荷
grep "ATOM\|HETATM" receptor.pdbqt | awk '{print $12}' | grep "0.000" | wc -l

嗯,这些命令可以帮你快速定位非零电荷原子、旋转键数量。如果所有原子电荷都是0.000,说明电荷没计算对,Vina就会报错。

3.5 常见问题与避坑

我踩过的坑:

  1. 没加氢就转PDBQT:Vina会报原子类型无法分配。永远先用-h加氢。
  2. 错误使用原子类型:使用OpenBabel时,--pdbqt-opts选项要小心,尤其是--h或--partialcharge的冲突。我用过一次obabel test.pdb -O test.pdbqt -h --pdbqt-opts "-h",结果分子被加空,调试了一天。
  3. PDB中的异常记录:有些PDB文件含有CONECT或MASTER记录,Vina不认但ADT会报错。我一般在转换前先用grep -v "^CONECT\|^MASTER"过滤掉。
  4. 配体扩展名为.pdb但其实是SD格式:这个我遇到过好几次!下载的文件名是.pdb但内部是SDF格式。检查文件前几行,如果是<mol>开始,别转了,直接保存为.sdf再处理。

好了,到这里你就知道怎么把原始PDB文件变成Vina能吃的PDBQT格式了。接下来的事情就顺多了——准备好输入文件,才能进行对接参数的设置。但那是下一章的内容。先把这一步做扎实,你的对接结果才会靠谱。

本章总结:

  • PDB文件是原始结构,PDBQT加了原子类型、电荷和可旋转键信息。
  • ADT适合交互式准备,尤其对含金属的受体。
  • OpenBabel适合批量处理,但对特殊基团要谨慎。
  • 转换后务必检查原子类型、电荷和可旋转键定义。
  • 常见坑:没加氢、原子类型错配、异常PDB记录。
文件准备流程:PDB → PDBQT 原始PDB文件 检查完整性 区分受体/配体 受体分支 加氢/计算电荷 分配AD4原子类型 保存为PDBQT 配体分支 加氢/计算Gasteiger电荷 定义可旋转键 (设置ROOT/BRANCH) 保存为PDBQT 就绪:用于Vina对接 可选用工具:ADT / OpenBabel