3、Vina命令行基础:常用参数、输入输出格式、运行一个简单对接

说白了,Vina 就是个黑盒子。你把受体和配体丢进去,它给你一个打分和结合姿态。但黑盒子的好坏,取决于你怎么调它的参数。今天我们就来拆开这个盒子,看看它到底吃什么样的输入,吐什么样的输出,以及中间那些参数到底在干什么。

核心流程:准备好受体与配体的 PDBQT 文件 → 设定搜索盒子的位置与大小 → 调用 Vina 命令行 → 得到对接结果。

3.1 命令行基本调用

我刚开始学 Vina 时,最头疼的就是那一堆参数。其实 Vina 的命令行结构非常清晰:一个可执行程序,加上几个必需的参数。下面是最短的调用方式:

vina --receptor receptor.pdbqt \
     --ligand ligand.pdbqt \
     --out output.pdbqt \
     --center_x 0 --center_y 0 --center_z 0 \
     --size_x 20 --size_y 20 --size_z 20

你想想看,这个命令本质上是在告诉 Vina 三件事:
1. 受体和配体是谁?
2. 搜索区域在哪?
3. 结果写到哪?

我个人习惯在运行前先用 --help 检查一下版本:

vina --help

输出会列出所有参数及其默认值。嗯,这里要注意:不同版本的 Vina 参数可能会有细微差别。我踩过这个坑,Ubuntu 包管理器里的 Vina 版本比较老,和官网最新版对不上。

3.2 常用参数详解

Vina 的参数可以分成三类:必选参数、可选参数、以及影响精度的参数。下面这张表是我在实际项目中反复验证过的:

参数名 类型 默认值 建议范围 说明
--receptor 字符串 无 必选 受体的PDBQT文件路径
--ligand 字符串 无 必选 配体的PDBQT文件路径
--out 字符串 无 必选 输出文件的路径,通常为PDBQT格式
--center_x/y/z 浮点数 无 取决于口袋位置 搜索盒子的中心坐标,单位Å
--size_x/y/z 浮点数 无 15 ~ 30 搜索盒子的边长,单位Å
--exhaustiveness 整数 8 8 ~ 32 搜索的详尽程度,越大结果越稳定,耗时越长
--num_modes 整数 9 1 ~ 20 输出的对接模式个数
--seed 整数 随机 任意 随机数种子,设定了就可以复现结果

我记得有一次在项目里做虚拟筛选,跑了5万个配体,用的是默认的 --exhaustiveness 8。结果出了报告后,客户说结果不稳定,同样的配体跑两次打分差0.5 kcal/mol。后来我把 --exhaustiveness 提到 16,耗时长了一倍,但结果基本不再波动。

提示:--exhaustiveness 增加一倍,运行时间大约也增加一倍。对于快速筛选,8 就够用;对于需要高精度的项目,我建议至少 16。

你可能会问:--center_* 和 --size_* 该怎么设?我一般用两个方法:

  • 已知活性位点:直接查文献或者查看晶体结构中配体结合的坐标。
  • 不知道活性位点:用 AutoDockTools 或者 PyMOL 的测量工具估算。盒子要覆盖整个活性腔,但又不能太大,否则搜索空间过大,采样效率低。

我曾经碰到过一个问题:盒子设得太小,配体的一部分伸到了盒子外面,Vina 会直接报错。遇到这种情况,把盒子稍微扩大 2~3 Å 就好了。

3.3 输入输出格式

Vina 的输入文件必须是 PDBQT 格式。什么是 PDBQT?说白了就是 PDB 文件的扩展版本,在原始 PDB 的基础上额外包含了:

  • 原子电荷(Q)
  • 原子类型(T)
  • 旋转键信息(对于配体)

文件后缀就是 .pdbqt。下面是一个 PDBQT 文件的片段,你可以看到最后一列的 qt 信息:

ATOM      1  N   LIG A   1       0.000   0.000   0.000   0.00  0.00    0.00 N
ATOM      2  CA  LIG A   1       1.000   0.000   0.000   0.00  0.00    0.00 C
ATOM      3  C   LIG A   1       2.000   0.000   0.000   0.00  0.00    0.00 C
ATOM      4  O   LIG A   1       3.000   0.000   0.000   0.00  0.00    0.00 O
...
ROOT
ENDROOT
BRANCH   1   2
ENDBRANCH
TORSDOF 2

你怎么得到 PDBQT 文件?最常用的工具是 prepare_receptor4.py 和 prepare_ligand4.py,这两个脚本是 AutoDockTools 的一部分。个人习惯是配合 Open Babel 先做加氢、分配电荷,再转成 PDBQT。

警告:直接用原始的 PDB 文件运行 Vina 会报错。必须在运行前把受体的 PDBQT 和配体的 PDBQT 准备好。我曾经犯过这种错误,白等了一个小时。

输出文件也是 PDBQT 格式。如果指定了 --out output.pdbqt,结果文件中会包含多个对接模式,用 MODEL 和 ENDMDL 分隔:

MODEL 1
...
REMARK VINA RESULT:    -9.5      0.000      0.000
ATOM      1  N   LIG A   1       0.123   0.456   0.789   0.00  0.00    0.00 N
...
ENDMDL
MODEL 2
...
REMARK VINA RESULT:    -9.1      2.345      0.123
...
ENDMDL

每个模式前面的 REMARK VINA RESULT 行会记录:

  • 第一列:结合自由能(kcal/mol),越负越好
  • 第二列:与最优模式之间的均方根偏差(RMSD,Å)
  • 第三列:次优模式的均方根偏差(Å)

输出文件还包含所有的原子坐标,所以你可以直接把它拖进 PyMOL 或 Chimera 里看对接姿态。

3.4 运行一个简单的对接

光说不练假把式。接下来我们跑一个实际的例子。前提是你已经准备好了两个 PDBQT 文件:rec.pdbqt 和 lig.pdbqt。不知道活性位点?没关系,我先猜一个中心坐标。

完整的命令如下:

vina --receptor rec.pdbqt \
     --ligand lig.pdbqt \
     --out result.pdbqt \
     --center_x 10.0 \
     --center_y 20.0 \
     --center_z 15.0 \
     --size_x 22.0 \
     --size_y 22.0 \
     --size_z 22.0 \
     --exhaustiveness 16 \
     --num_modes 5 \
     --seed 42

运行后终端会输出类似这样的日志:

#################################################################
# If you used AutoDock Vina in your work, please cite:          #
#                                                               #
# O. Trott, A. J. Olson,                                        #
# AutoDock Vina: improving the speed and accuracy of docking    #
# with a new scoring function, efficient optimization and       #
# multithreading, J. Comput. Chem. 31 (2010) 455-461            #
#                                                               #
# DOI 10.1002/jcc.21334                                         #
#                                                               #
# Please see http://vina.scripps.edu for more information.      #
#################################################################

Center: 10.000 20.000 15.000
Size:   22.000 22.000 22.000
Exhaustiveness: 16
Number of modes: 5
Seed: 42

Output will be result.pdbqt

Detected 8 CPUs
Reading input ... done.
Setting up the scoring function ... done.
Analyzing the binding site ... done.
Using random seed: 42
Performing search ... done.
Refining results ... done.

mode |   affinity | dist from best mode
     | (kcal/mol) | rmsd l.b.| rmsd u.b.
----+------------+----------+----------
   1        -9.5       0.000      0.000
   2        -9.1       2.345      3.123
   3        -8.7       4.567      5.678
   4        -8.4       6.789      7.890
   5        -8.1       8.901      9.012

输出结果会直接告诉你们对接是否成功。记得检查日志里的 Performing search ... done.,如果那里出现 error,多半是文件格式或参数问题。

小技巧:我经常用 --seed 42 来保持结果可复现。调试阶段特别有用——你改了一个参数后,重新运行,能直接比较前后结果的差异,排除随机性的干扰。

3.5 一张图看懂 Vina 命令行工作流

下面这张图总结了我们刚才讲的全部过程,从输入到命令行,再到输出结果。每次新项目开始前,我都会看一遍这个流程,确保没漏掉什么。

Vina 命令行工作流程 受体 PDBQT receptor.pdbqt 配体 PDBQT ligand.pdbqt 搜索盒子参数 --center_* --size_* Vina 可执行程序 vina --receptor ... --ligand ... 可选参数 --exhaustiveness 结果控制 --out --num_modes 输出 PDBQT 结果 result.pdbqt + 终端日志 PDBQT 文件是 核心中间格式

流程总结:三个输入(受体 PDBQT + 配体 PDBQT + 盒子参数)汇聚到 Vina 命令行,可以加入可选参数调节精度,最终输出一个包含多个对接模式的 PDBQT 文件。

3.6 常见错误与避坑指南

说了这么多正确的用法,再聊几个我踩过的坑。

错误1:找不到原子类型。我以前拿了一个含金属离子的受体直接做 PDBQT,结果 Vina 报错“Unknown atom type”。后来才发现 prepare_receptor4.py 默认不处理金属离子,需要手动加上参数 -m。

错误2:盒子太小导致配体出界。Vina 会报“Error: ligand is outside the search box”。解决方案很简单,把 --size_* 增大 2~3 Å,或者重新确定盒子中心坐标。

还有一个我印象特别深的:在 Windows 上运行 Vina 时,路径名里不要有空格和中文。我试过一次就放弃了,直接改用纯英文路径。