3. 输入文件准备:PDB文件、PDBQT文件、配置文件格式、文件转换工具
各位同学,咱们今天聊点实在的。
做分子对接,90%的时间其实不是在跑Vina,而是在折腾输入文件。我刚开始用Vina那会儿,就因为文件格式不对,白白浪费了三天时间。debug到最后发现,就是把PDB文件里一个原子名写错了。你说冤不冤?
所以这一章,咱们把输入文件这事彻底搞明白。
3.1 PDB文件:分子对接的起点
PDB文件,说白了就是分子的三维坐标记录。每个原子的名字、位置、连的哪个键,都写得清清楚楚。
但别高兴太早。PDB数据库里直接下载的文件,几乎不能直接拿来用。为啥?
我给大家拆开看看典型的PDB结构:
ATOM 12 N ALA A 2 6.324 4.885 -10.243 1.00 0.00 N
ATOM 13 CA ALA A 2 6.211 3.458 -10.186 1.00 0.00 C
ATOM 14 C ALA A 2 5.303 2.859 -9.124 1.00 0.00 C
ATOM 15 O ALA A 2 5.079 3.458 -8.069 1.00 0.00 O
ATOM 16 CB ALA A 2 7.611 2.863 -10.008 1.00 0.00 C
HETATM 176 O HOH A 202 10.735 4.307 -4.011 1.00 0.00 O
TER 1778 HIE A 237
END
看到没?HETATM、TER、END,还有水分子。这些Vina都不认。
PDB文件预处理清单:
- 删除所有
HETATM开头的水分子(保留配体或特殊辅因子) - 删除所有
TER、END记录 - 检查并修复缺失的侧链原子
- 处理交替位置(ALT LOC):只保留第一个位置
- 添加氢原子(Vina需要全原子模型)
remove solvent一步搞定。比手动改文件快多了。
3.2 PDBQT文件:Vina专属格式
PDBQT是Vina的亲儿子格式。它把PDB文件里缺的信息全补上了——电荷、原子类型、可旋转键。
来看看PDBQT长什么样:
ATOM 12 N ALA A 2 6.324 4.885 -10.243 1.00 0.00 0.166 N
ATOM 13 CA ALA A 2 6.211 3.458 -10.186 1.00 0.00 0.016 C
ATOM 14 C ALA A 2 5.303 2.859 -9.124 1.00 0.00 0.516 C
ATOM 15 O ALA A 2 5.079 3.458 -8.069 1.00 0.00 -0.516 OA
ATOM 16 CB ALA A 2 7.611 2.863 -10.008 1.00 0.00 -0.182 C
ATOM 17 1HB ALA A 2 8.618 3.055 -9.994 1.00 0.00 0.060 H
ATOM 18 2HB ALA A 2 7.326 2.346 -9.117 1.00 0.00 0.060 H
ATOM 19 3HB ALA A 2 7.393 2.417 -10.951 1.00 0.00 0.060 H
END
对比一下PDB,PDBQT多了一列:电荷。最后一列的原子类型也变了,比如OA表示羰基氧,N表示酰胺氮。
受体和配体的PDBQT区别:
| 特性 | 受体PDBQT | 配体PDBQT |
|---|---|---|
| 可旋转键 | 固定,无旋转键 | 标记可旋转的键 |
| 电荷 | 加和极性&氢键计算 | 部分电荷计算(Gasteiger) |
| 原子类型 | AD4类型(如C、A、OA) | AD4类型 + 芳香碳等 |
| 柔性残基 | 可包含(柔性对接) | 全部柔性 |
你想想看,如果受体里出现了配体才有的旋转键标记,Vina会直接把整个蛋白当配体去转。算出来的结果?纯属瞎扯。
3.3 配置文件格式:写给Vina的任务清单
每次跑对接,我不想在命令行里敲一串参数。太容易出错了。
我的做法是写一个配置文件。Vina启动时直接--config config.txt,省心。
标准的配置文件长这样:
receptor = receptor.pdbqt
ligand = ligand.pdbqt
out = output.pdbqt
center_x = 15.00
center_y = 20.00
center_z = -5.00
size_x = 22
size_y = 22
size_z = 22
exhaustiveness = 8
num_modes = 9
energy_range = 3.0
cpu = 4
seed = 12345
我解释一下几个关键参数:
center_x/y/z:对接盒子中心坐标。我习惯从原始PDB文件里读配体坐标的平均值。size_x/y/z:盒子边长,单位Å。一般设成配体最大尺寸的1.5倍。exhaustiveness:搜索深度。我一般设8-16,太快的结果不靠谱。num_modes:输出多少个结合构象。不设默认9个。seed:随机数种子。调试时固定住,结果可复现。
刚学Vina的同学,先用手动写配置文件的方式跑几次。
熟悉了之后再用脚本批量生成。否则报错了你连查哪里都不知道。
3.4 文件转换工具:PDB → PDBQT
手动改PDBQT?不现实。
我靠的是MGLTools的prepare_receptor4.py和prepare_ligand4.py脚本。
标准转换流程:
- 从PDB数据库下载蛋白结构(PDB格式)
- 删除水分子、非标准残基
- 加氢(python prepare_receptor4.py -r protein.pdb -o protein.pdbqt -A bond_hydrogens)
- 如果是配体,还需要检测可旋转键
具体命令示例:
# 受体
prepare_receptor4.py -r protein.pdb -o protein.pdbqt -A bond_hydrogens
# 配体(小分子)
prepare_ligand4.py -l ligand.pdb -o ligand.pdbqt -F -U nphs_lip
-F:保留原有氢原子;-U nphs_lip:给非极性氢上电荷和脂溶性原子类型。嗯,这里要注意,-U参数用不好会丢原子。我吃过亏。
用prepare_ligand4.py转换一个带硝基的配体,结果硝基的氧直接被删掉了。
查了半天原因——默认的nphs_lip把极性氢全删了,而硝基的两个氧被当成了“非极性氢”的连位原子。后来我改成-U nphs,问题解决。
结论:转完后一定打开PDBQT检查一遍,特别是官能团。
3.5 知识体系结构图
我把本章的核心逻辑画成了一张图。你看完就全明白了。
看到没?流程就是一条线:从数据库下载 → 预处理 → 转换格式 → 写配置 → 开跑。哪个环节出问题,后面全白干。
3.6 实战避坑指南
最后,我把这几年碰到的文件准备相关坑写出来。
- PDB文件里残基名不标准:比如组氨酸有时写HIS,有时写HIE/HID/HIP。Vina不认。我统一用HIS。
- 配体文件里有电荷:有的数据库配体PDB文件里就带了形式电荷,比如+1。转PDBQT时电荷和原子类型会全乱。我习惯用openbabel先重做一遍电荷。
- 配置文件路径错了:路径里绝对不能有中文和空格。这是Windows用户的通病。
- 盒子太大:我见过有人把盒子设成50x50x50,小配体在里头乱飞。合理范围是配体尺寸+4~6Å。
- 受体PDBQT是否有水分子残留?
- 配体PDBQT的旋转键数量是否合理?(一般3-8个)
- 盒子是否完全包裹配体?(至少每边留2Å)
- 配置文件的路径是否使用英文且绝对正确?