3. Vina命令行基础:最简对接命令结构、输入输出文件要求、常见报错处理

好,咱们正式开始动手了。

命令行是AutoDock Vina的灵魂。你配置再花哨、脚本再复杂,最后都得落到一行命令上。很多新手一上来就追求“全参数拉满”,结果跑出来一堆莫名其妙的错误。我的建议是——先把最简命令跑通。

这章咱们就聚焦三件事:命令怎么写、文件长什么样、报错怎么救。

3.1 最简对接命令结构

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

我来拆开给你看:

参数 含义 必须?
--receptor 受体文件路径(pdbqt格式) 是
--ligand 配体文件路径(pdbqt格式) 是
--out 输出文件路径 是
--center_x/y/z 搜索盒中心坐标(埃) 是
--size_x/y/z 搜索盒尺寸(埃) 是

别小看这五个参数。 我见过有人把 --center 拼成 --centers,或者忘了写 --out,结果Vina直接把结果打印到屏幕上——嗯,那画面,几千行文字刷过去,啥也没存下来。

还有一个常被忽略的点:参数顺序不影响结果。Vina的解析器是顺序无关的。你可以把 --ligand 写在第一行,也可以写在最后。我个人习惯按“受体→配体→输出→盒子”的顺序排,方便检查。

最简命令测试法

每次搭建新对接流程,我都会先用这行命令跑一个已知的小分子。如果跑通了,再慢慢加 --exhaustiveness、--num_modes 这些高级参数。如果基础命令都报错,别急着加参数——先找文件问题。

3.2 输入输出文件要求

Vina不认普通的PDB文件。它用的是PDBQT格式——简单说,就是在PDB基础上加了原子类型、电荷和旋转键信息。

受体文件(receptor.pdbqt)

必须包含:

  • 所有重原子(非氢)的坐标
  • AD4类型(如C、A、N、OA等)
  • Gasteiger电荷
  • 刚性原子标记(ROOT分支)

转换工具:prepare_receptor4.py(来自MGLTools)。

prepare_receptor4.py -r protein.pdb -o protein.pdbqt -A hydrogens

配体文件(ligand.pdbqt)

必须包含:

  • 所有原子坐标
  • 可旋转键定义(TORSDOF)
  • ROOT/BRANCH/ENDROOT/ENDBRANCH标记

转换工具:prepare_ligand4.py。

prepare_ligand4.py -l ligand.mol2 -o ligand.pdbqt -B -U None

一个坑

我曾遇到过一件怪事:同一个配体,用mol2转出来的pdbqt有8个旋转键,用sdf转出来的只有3个。后来才发现,prepare_ligand4.py在解析sdf时有时会丢失键序信息。所以,我建议优先用mol2格式作为配体输入。

输出文件(output.pdbqt)

Vina输出的是多模型PDBQT。每个模型(MODEL)代表一个对接姿势。默认输出9个模型。文件里还包含了每个姿势的对接分数(打分值),在REMARK行里。

MODEL 1
REMARK VINA RESULT: -8.5 0.0 0.0
ATOM      1  C   LIG     1      -1.234   2.345   3.456  0.00  0.00    C
...
ENDMDL
MODEL 2
REMARK VINA RESULT: -8.2 0.0 0.0
...

你看,评分就在REMARK行里,-8.5表示结合自由能(kcal/mol)。越负越好,别搞反了。

额外输出:如果加 --log log.txt,Vina会把运行时统计信息(每个姿势的分数、耗时)写进文本文件。这个在批量跑的时候很有用。

3.3 常见报错处理

说实话,Vina的报错提示不算友好。很多错误信息就是一行“Error: cannot open file”或者“Segmentation fault”。但别慌——90%的错误都集中在几个典型问题上。

报错信息 原因 解决
Error: cannot open file 文件路径不对,或文件不存在 检查路径,用绝对路径试试
Parse error PDBQT格式错误 重新用prepare_*脚本转换
Segmentation fault 多数是搜索盒设太小 增大 --size_x/y/z
Out of memory 受体太大或exhaustiveness太高 降低 --exhaustiveness 或裁剪受体
No torsions found 配体没有可旋转键 检查配体预处理是否成功

我曾经掉过的坑:段落错误(Parse error)

有一次我用obabel直接把sdf转成pdbqt,没走prepare_ligand4.py。结果Vina一运行就报Parse error in ligand,死活看不出来问题所在。查了半天,发现obabel没写ROOT和ENDROOT标记。我的教训是:别跳过MGLTools的预处理脚本,除非你非常确定格式的每个字节都对。

一个排查套路

如果你遇到Segmentation fault,先做两件事:

  1. 确认搜索盒能完全包住配体。盒子的尺寸至少要比配体轮廓大4-6埃。
  2. 检查受体和配体是否在同一个坐标系下。画图看一下——我曾见过有人把对接盒放在晶体结构里的另一个位点,结果配体根本不在盒子里。

另外,我建议你养成一个习惯:每次跑完,先看一眼STDERR。很多警告信息(比如“WARNING: too many flexible residues”)不会影响运行,但会影响结果质量。

3.4 本章知识结构

下面这张图帮你理清命令行调用的完整链条:

Vina 命令行基础 · 知识结构 受体 PDBQT 配体 PDBQT 搜索盒参数 vina --receptor ... --ligand ... --out --center --size output.pdbqt(含评分) log.txt(统计信息) 常见错误:文件缺失 | Parse error | Segfault | No torsions 💡 先跑通最简命令 → 再加高级参数 → 检查STDERR

从图中可以看到,整个流程分为三个大块:输入准备 → 核心命令 → 输出与调试。你只要顺着这条线走,基本不会迷路。

3.5 练习与思考

读完这一章,你可以动手试一下这几个小练习:

  1. 找一个现成的受体和配体PDB文件,用prepare_receptor4.py和prepare_ligand4.py分别转成pdbqt。
  2. 写一行最简Vina命令,故意漏掉--out参数,观察终端输出。
  3. 把搜索盒尺寸改成--size_x 1 --size_y 1 --size_z 1,看看会不会段错误。为什么会这样?

我的一点经验

别急着把所有参数都背下来。学会Vina命令行最快的方法就是——先跑通一个最小用例,然后故意制造错误,再修复它。我当年就是这么学的。跑通了第一个对接后,后面的事情就顺了。