分子对接实战:用AutoDock Vina从零跑通第一个药物结合案例的完整教程
分子对接实战:用AutoDock Vina从零跑通第一个药物结合案例的完整教程
【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina
拿到一个蛋白质的结构文件,手头还有几个候选药物分子,你想知道它们会不会结合、以什么姿势结合——这是做药物设计的人几乎都会卡在的第一步。AutoDock Vina 正是为解决这个问题而生的开源分子对接引擎:给它一个受体、一个配体和一个搜索区域,它就能预测两者最可能的结合方式并给出结合亲和力分数。本文不堆参数,也不背概念,而是带你从零开始,完整跑通一个真实案例,并学会排查最常见的报错。
AutoDock Vina 由 Scripps 研究所开发,Apache 2.0 协议开源,是当前学术界和工业界使用最广泛的对接引擎之一。它有四个特别打动我的特点:计算速度快(比老一代工具明显更省时间)、完全免费、内置 Vina 与 AutoDock4.2 两套打分函数、还支持大环分子、水合对接、批量虚拟筛选以及 Python 3 脚本调用。下面我们就一步步把它"跑起来"。
为什么我选了 AutoDock Vina 而不是别的对接软件
先别急着装软件,花两分钟想清楚"选谁"的问题。市面上能做分子对接的工具不少,但 AutoDock Vina 对新手格外友好,原因有三个:
| 维度 | AutoDock Vina 的表现 |
|---|---|
| 上手成本 | 一条命令就能跑,配置文件用纯文本即可 |
| 计算速度 | 梯度优化 + 多线程,比传统算法快很多 |
| 生态配套 | 官方文档、示例案例、Python 接口一应俱全 |
从工作流程图里你也能看到,一次完整对接由三步组成:结构预处理 → 对接输入准备 → 对接计算与结果导出。预处理环节靠 Meeko 工具包完成,真正的计算则交给 Vina 引擎。这个分工很清晰,我们后面就按这个顺序走。
打个比方,对接就像帮两个陌生人找到最舒服的"牵手姿势":受体是那个不太动弹的人,配体是主动凑上去的那位,Vina 负责在给定范围内反复尝试各种角度和位置,最后把"最不别扭、能量最低"的几种姿势排好队递给你。
装好三样东西,十分钟完成环境准备
在开始之前,你需要三样东西:Python 3、AutoDock Vina 本体、以及负责文件格式转换的Meeko工具包。推荐用虚拟环境安装,避免污染系统自带的 Python。
如果你用 pip,一条命令就能装齐:
pip install -U numpy scipy rdkit vina meeko gemmi prody如果你习惯用 conda,可以专门建一个叫vina的环境:
conda create -n vina python=3 conda activate vina conda config --env --add channels conda-forge conda install -c conda-forge numpy scipy rdkit vina meeko gemmi autogrid安装成功后,在终端输入下面三个命令,应该都能找到它们:
mk_prepare_ligand.py --help mk_prepare_receptor.py --help vina --version然后获取官方示例数据。项目仓库里已经帮你准备好了全套输入文件、配置文件甚至预期输出,直接拿来练手:
git clone https://gitcode.com/gh_mirrors/au/AutoDock-Vina cd AutoDock-Vina克隆下来的项目结构大致是这样,example/目录是咱们今天的"训练场":
AutoDock-Vina/ ├── docs/ # 完整官方文档 ├── example/ # 各类对接示例 │ ├── basic_docking/ # 基础对接(本文主角) │ ├── flexible_docking/ # 柔性侧链对接 │ ├── hydrated_docking/ # 水合对接 │ └── python_scripting/ # Python 脚本示例 ├── src/ # C++ 源代码 └── data/ # 力场参数文件第一个实战:把抗癌药分子对接到 c-Abl 蛋白里
今天我们要复现的是官方文档 docs/source/docking_basic.rst 里的经典案例:把抗癌药伊马替尼(imatinib,Gleevec)对接到 c-Abl 激酶结构域上。c-Abl 是慢性粒细胞白血病治疗的重要靶点,这个例子数据完整、结果可预期,特别适合第一次上手。
先进入示例目录:
cd example/basic_docking/data你会看到两个文件:1iep_receptorH.pdb(含氢原子的受体)和1iep_ligand.sdf(配体 3D 结构)。所有步骤的预期输出都在solution/子目录里,跑完可以对照。
第一步:把受体收拾成 Vina 认识的格式
Vina 计算时用的是 PDBQT 格式,它比 PDB 多了原子类型和电荷信息。用 Meeko 的受体准备脚本一步到位:
mk_prepare_receptor.py -i 1iep_receptorH.pdb -o 1iep_receptor -p -v \ --box_size 20 20 20 --box_center 15.190 53.903 16.917这里每个参数都有讲究:
-i/-o:输入输出文件;-p:生成受体 PDBQT 文件;-v:同时生成对接盒子文件(后面要用的配置文件);--box_size/--box_center:以埃(Å)为单位指定搜索盒子的长宽高和中心坐标。
第二步:给配体也拍一张"证件照"
配体同样要转成 PDBQT。注意文档里有个贴心提醒:小分子尽量别用 PDB 格式当输入,因为它不含化学键连接信息,容易出错。我们用的是 SDF 格式:
mk_prepare_ligand.py -i 1iep_ligand.sdf -o 1iep_ligand.pdbqt做完这两步,你的目录下应该出现了1iep_receptor.pdbqt和1iep_ligand.pdbqt两个文件。
第三步:用配置文件圈出"活动场地"
对接不能在整个蛋白上瞎找,你得先圈出配体可能结合的活性口袋。刚才-v参数已经生成了一个现成的配置文件1iep_receptor.box.txt,内容长这样:
center_x = 15.190 center_y = 53.903 center_z = 16.917 size_x = 20.0 size_y = 20.0 size_z = 20.0翻译成人话就是:以坐标 (15.190, 53.903, 16.917) 为中心,划一个 20×20×20 Å 的立方体作为搜索区域。盒子划得越小越精准,但千万别把真正的作用位点划出去。
第四步:运行对接并等待结果
材料齐了,正式开工。用 Vina 力场(默认)跑一次对接:
vina --receptor 1iep_receptor.pdbqt --ligand 1iep_ligand.pdbqt \ --config 1iep_receptor.box.txt \ --exhaustiveness 32 --out 1iep_ligand_vina_out.pdbqtexhaustiveness是"搜得有多仔细"的旋钮,默认值是 8,改成 32 会得到更稳定的结果,代价是耗时变长。屏幕上会出现一条进度条,跑完后结果就写进了1iep_ligand_vina_out.pdbqt。
如果你的受体之前已经生成了 AutoGrid 的亲和力图(那些.map和.maps.fld文件),也可以换用 AutoDock4 打分函数,命令几乎一样,只是把输入换成 maps、加上--scoring ad4:
vina --ligand 1iep_ligand.pdbqt --maps 1iep_receptor --scoring ad4 \ --exhaustiveness 32 --out 1iep_ligand_ad4_out.pdbqt三分钟看懂对接结果:那一串数字到底在说什么
打开终端输出,你会看到类似下面这样的表格:
mode | affinity | dist from best mode | (kcal/mol) | rmsd l.b.| rmsd u.b. -----+------------+----------+---------- 1 -13.23 0 0 2 -11.29 0.9857 1.681 3 -11.28 3.044 12.41- mode:第几个结合构象,1 号是分数最好的;
- affinity:预测的结合亲和力,单位 kcal/mol。负值代表能结合,数值越小(负得越多)表示结合越强;
- rmsd:不同构象之间相差多大,帮你判断它们是不是同一个"姿势"的微小抖动。
按照官方文档的说明,用 Vina 力场跑这个案例,最佳分数应该在-13 kcal/mol 左右;如果刚才用的是 AutoDock4 力场,则约为-14 kcal/mol。这里有个新手常踩的坑:两套打分函数的分数不能互相比较,所以汇报结果时一定要注明用的哪套力场。
另外,想把结果拿到 PyMOL、ChimeraX 里做可视化,或者交给下游软件处理时,最好把 PDBQT 转回 SDF 格式,这样键级和电荷信息才不会丢:
mk_export.py 1iep_ligand_vina_out.pdbqt -s 1iep_ligand_vina_out.sdf到这里,你已经完整跑通了人生第一次分子对接。接下来看看这个工具还能玩出什么花样。
四个进阶玩法:批量筛选、柔性侧链、水分子和大环
玩法一:批量虚拟筛选。手里有一堆候选分子要逐个测试时,配合配置文件循环调用即可:
for ligand_file in *.pdbqt; do vina --receptor receptor.pdbqt --ligand $ligand_file \ --config config.txt --out results_${ligand_file} done玩法二:柔性对接。真实场景里蛋白的侧链也会动。Vina 允许你把受体拆成"刚体部分 + 柔性侧链",在 example/flexible_docking 里就有把 Thr315 设为柔性残基的完整案例,准备受体时加一个参数:
mk_prepare_receptor.py -i 1fpu_receptorH.pdb -o 1fpu_receptor -p -v \ --box_size 20 20 20 --box_center 15.190 53.903 16.917 \ -f A:315 -a对接时把柔性文件用--flex传进去:
vina --receptor 1fpu_receptor_rigid.pdbqt --flex 1fpu_receptor_flex.pdbqt \ --ligand 1iep_ligand.pdbqt --config ... --out ...玩法三:水合对接。水分子有时是结合的关键"配角"。参考 example/hydrated_docking 的案例,可以在对接中显式考虑水分子的影响,流程和基础对接一致,只是输入结构里多带了水。
玩法四:大环分子。大环配体的环状骨架不能按普通可旋转键处理,Vina 从 1.2 版本起专门支持柔性大环,示例见 example/docking_with_macrocycles。
隐藏彩蛋:Python 脚本。如果你会一点 Python,example/python_scripting/first_example.py 会给你惊喜。整个对接流程十几行就能写完:
from vina import Vina v = Vina(sf_name='vina') v.set_receptor('1iep_receptor.pdbqt') v.set_ligand_from_file('1iep_ligand.pdbqt') v.compute_vina_maps(center=[15.190, 53.903, 16.917], box_size=[20, 20, 20]) print('Score before minimization: %.3f (kcal/mol)' % v.score()[0]) v.optimize() v.dock(exhaustiveness=32, n_poses=20) v.write_poses('1iep_ligand_vina_out.pdbqt', n_poses=5, overwrite=True)这意味着你可以把对接放进自动化流程里,批量处理、批量打分,官方文档见 docs/source/docking_python.rst。
新手最容易翻车的六个坑,我替你踩过了
以下是 docs/source/faq.rst 里被问得最多的问题,加上我自己的血泪教训:
- 报错 "can not open conf.txt",文件明明存在?多半是文件被命名成了
conf.txt.txt(系统隐藏了扩展名),或者你不在文件所在目录。用ls确认一下。 - 提示搜索空间超过 27000 ų?这是把单位搞错了——Vina 的盒子尺寸单位是埃,不是 AutoDock4 里的"格点"(1 格点 = 0.375 Å)。
- 对接结果不对、和教程对不上?对接算法本质是随机的,每次结果都可能略有不同。想要可复现,就在命令里手动指定同一个
--seed。 - 配体没有质子化?成功与否常常就悬在一个氢原子上。输入结构里氢的数量和位置会影响氢键供体/受体的判定,务必先检查质子化状态。
- 用了旧教程的命令报 usage error?老版本里的
--all已经被--out取代了,跟着新文档走。 - 在集群上报 "boost thread resource" 错误?这是运行环境禁止了多线程,属于服务器配置问题,找管理员解决,不是你的命令写错了。
给你的一道动手挑战题 + 延伸阅读
理论知识到此为止,是时候自己动手了。给你留一个 15 分钟的小挑战:
把
example/basic_docking/data/里的1iep_ligand.sdf换成你自己的一个小分子(比如从 PubChem 下载的 SDF),重新走一遍"受体准备 → 配体准备 → 配置盒子 → 运行对接"的流程,看看分数和姿势有什么变化。盒子中心坐标可以从原配体所在位置推测,也可以用其他口袋预测工具辅助确定。
想继续深入,官方文档都在docs/source/目录下:安装细节看 docs/source/installation.rst,基础对接看 docs/source/docking_basic.rst,柔性、水合、批量对接各有独立章节。C++ 源码在src/里,比如src/lib/scoring_function.h定义了打分函数,src/main/main.cpp是命令行入口,好奇的同学可以翻一翻。
下一期我会带大家做一次真实的虚拟筛选实战:准备一个包含几十个配体的化合物库,用 Vina 批量对接后按分数排序,并教你如何结合 RMSD 与已知活性数据评估筛选质量。
核心要点速览
| 环节 | 关键命令/文件 | 一句话要点 |
|---|---|---|
| 安装 | pip install vina meeko | 用虚拟环境安装最省心 |
| 受体准备 | mk_prepare_receptor.py | 输出 PDBQT,可顺带生成盒子配置 |
| 配体准备 | mk_prepare_ligand.py | 别用 PDB 格式当小分子输入 |
| 搜索盒子 | config.txt的 center/size | 单位是埃,不是格点 |
| 运行对接 | vina --receptor --ligand --config | exhaustiveness 32结果更稳 |
| 结果解读 | affinity(kcal/mol) | 负得越多结合越强,ad4 与 vina 分数不可比 |
| 结果导出 | mk_export.py | 转 SDF 保键级,方便可视化 |
| 进阶 | flexible / hydrated / batch / Python | 所有示例都在example/目录 |
分子对接是一门"越跑越熟"的手艺,最好的学习方式就是把你手头那个分子丢进 Vina 里跑一次。现在就去试试吧,跑通了记得回来对照 solution 目录,看看你离官方结果有多近。
【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
