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 命令行工作流
下面这张图总结了我们刚才讲的全部过程,从输入到命令行,再到输出结果。每次新项目开始前,我都会看一遍这个流程,确保没漏掉什么。
流程总结:三个输入(受体 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 时,路径名里不要有空格和中文。我试过一次就放弃了,直接改用纯英文路径。