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,先做两件事:
- 确认搜索盒能完全包住配体。盒子的尺寸至少要比配体轮廓大4-6埃。
- 检查受体和配体是否在同一个坐标系下。画图看一下——我曾见过有人把对接盒放在晶体结构里的另一个位点,结果配体根本不在盒子里。
另外,我建议你养成一个习惯:每次跑完,先看一眼STDERR。很多警告信息(比如“WARNING: too many flexible residues”)不会影响运行,但会影响结果质量。
3.4 本章知识结构
下面这张图帮你理清命令行调用的完整链条:
从图中可以看到,整个流程分为三个大块:输入准备 → 核心命令 → 输出与调试。你只要顺着这条线走,基本不会迷路。
3.5 练习与思考
读完这一章,你可以动手试一下这几个小练习:
- 找一个现成的受体和配体PDB文件,用
prepare_receptor4.py和prepare_ligand4.py分别转成pdbqt。 - 写一行最简Vina命令,故意漏掉
--out参数,观察终端输出。 - 把搜索盒尺寸改成
--size_x 1 --size_y 1 --size_z 1,看看会不会段错误。为什么会这样?
我的一点经验
别急着把所有参数都背下来。学会Vina命令行最快的方法就是——先跑通一个最小用例,然后故意制造错误,再修复它。我当年就是这么学的。跑通了第一个对接后,后面的事情就顺了。