第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文件的要求:
- 配体必须作为一个完整的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对比:
| 特性 | PDB | PDBQT |
|---|---|---|
| 原子类型 | 标准元素符号(C、N、O) | Vina自定义类型(C、A、N、OA等) |
| 部分电荷 | 无 | 有,通常在倒数第2列 |
| 可旋转键 | 无 | 有,用ROOT/BRANCH/ENDROOT标记 |
| 原子坐标 | 结构坐标 | 修改后的坐标(可能去除水、加氢) |
| 适用程序 | 大多数可视化/分析软件 | AutoDock系列程序 |
3.3 使用AutoDock Tools(ADT)准备文件
ADT是MGLTools套件的一部分。它给你一个图形界面,点几下鼠标就能转换。我个人更习惯用命令行的方式,但新手从ADT入手更容易理解概念。
步骤:
- 启动ADT:打开终端输入
adt(如果你装的是MGLTools包)。 - 载入受体:File → Read Molecule → 选择你的受体PDB文件。
- 加氢并合并非极性氢:Edit → Hydrogens → Add → 选择“Polar Only”或“All”。我一般选“Polar Only”然后手动补非极性氢。
- 计算Gasteiger电荷:Edit → Charges → Compute Gasteiger。
- 分配原子类型:Edit → Assign AD4 Atom Type(Vina会自动识别)。
- 设置可旋转键(配体):Ligand → Torsion Tree → 选择要旋转的键。
- 保存为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利用这些信息在对接过程中调整配体的非刚性片段。
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 常见问题与避坑
我踩过的坑:
- 没加氢就转PDBQT:Vina会报原子类型无法分配。永远先用
-h加氢。 - 错误使用原子类型:使用OpenBabel时,
--pdbqt-opts选项要小心,尤其是--h或--partialcharge的冲突。我用过一次obabel test.pdb -O test.pdbqt -h --pdbqt-opts "-h",结果分子被加空,调试了一天。 - PDB中的异常记录:有些PDB文件含有
CONECT或MASTER记录,Vina不认但ADT会报错。我一般在转换前先用grep -v "^CONECT\|^MASTER"过滤掉。 - 配体扩展名为.pdb但其实是SD格式:这个我遇到过好几次!下载的文件名是.pdb但内部是SDF格式。检查文件前几行,如果是
<mol>开始,别转了,直接保存为.sdf再处理。
好了,到这里你就知道怎么把原始PDB文件变成Vina能吃的PDBQT格式了。接下来的事情就顺多了——准备好输入文件,才能进行对接参数的设置。但那是下一章的内容。先把这一步做扎实,你的对接结果才会靠谱。
本章总结:
- PDB文件是原始结构,PDBQT加了原子类型、电荷和可旋转键信息。
- ADT适合交互式准备,尤其对含金属的受体。
- OpenBabel适合批量处理,但对特殊基团要谨慎。
- 转换后务必检查原子类型、电荷和可旋转键定义。
- 常见坑:没加氢、原子类型错配、异常PDB记录。