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文件直接转PDBQT。Vina跑完死活没有结合能,结果发现水分子占了结合位点。从那以后我写了个脚本,一键删水。你们也养成这个习惯。

PDB文件预处理清单:

  • 删除所有HETATM开头的水分子(保留配体或特殊辅因子)
  • 删除所有TER、END记录
  • 检查并修复缺失的侧链原子
  • 处理交替位置(ALT LOC):只保留第一个位置
  • 添加氢原子(Vina需要全原子模型)
我个人习惯: 用PyMOL或ChimeraX直接打开PDB,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脚本。

标准转换流程:

  1. 从PDB数据库下载蛋白结构(PDB格式)
  2. 删除水分子、非标准残基
  3. 加氢(python prepare_receptor4.py -r protein.pdb -o protein.pdbqt -A bond_hydrogens)
  4. 如果是配体,还需要检测可旋转键

具体命令示例:

# 受体
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 知识体系结构图

我把本章的核心逻辑画成了一张图。你看完就全明白了。

输入文件准备:核心流程 ① 从PDB数据库下载 ② 预处理:删水/加氢/修复 ③ 转换工具→PDBQT格式 受体PDBQT(固定) 配体PDBQT(可旋转) 配置文件→Vina运行 💡 核心工具 prepare_receptor4.py prepare_ligand4.py openbabel → obabel

看到没?流程就是一条线:从数据库下载 → 预处理 → 转换格式 → 写配置 → 开跑。哪个环节出问题,后面全白干。


3.6 实战避坑指南

最后,我把这几年碰到的文件准备相关坑写出来。

  • PDB文件里残基名不标准:比如组氨酸有时写HIS,有时写HIE/HID/HIP。Vina不认。我统一用HIS。
  • 配体文件里有电荷:有的数据库配体PDB文件里就带了形式电荷,比如+1。转PDBQT时电荷和原子类型会全乱。我习惯用openbabel先重做一遍电荷。
  • 配置文件路径错了:路径里绝对不能有中文和空格。这是Windows用户的通病。
  • 盒子太大:我见过有人把盒子设成50x50x50,小配体在里头乱飞。合理范围是配体尺寸+4~6Å。
检查清单(每跑一次前过一遍):
  • 受体PDBQT是否有水分子残留?
  • 配体PDBQT的旋转键数量是否合理?(一般3-8个)
  • 盒子是否完全包裹配体?(至少每边留2Å)
  • 配置文件的路径是否使用英文且绝对正确?