AutoDock-Vina分子对接实战:破解新手最容易栽的3个坑,跑通你的第一个药物筛选
AutoDock-Vina分子对接实战破解新手最容易栽的3个坑跑通你的第一个药物筛选【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina分子对接说白了就是让计算机模拟钥匙找锁孔的过程——小分子配体是钥匙蛋白质受体是锁。AutoDock-Vina就是这个领域最出名的开源引擎之一它来自Scripps研究所的Forli实验室免费开源速度快得离谱还能接Python做自动化。这篇文章不是给你念官方手册而是替你把新手期的雷区一个个踩一遍为什么你照着教程跑出来的结果对不上为什么同一个盒子、同一条命令结果总在变为什么明明装了vina却找不到命令我先把这些坑摆上台面再用一个真实的药物对接案例抗癌药伊马替尼对c-Abl激酶把它们逐个击破最后给你一套可以直接拿去复用的操作路径。上图是官方文档里的对接全流程结构预处理 → 对接输入准备生成PDBQT和盒子文件→ 对接计算。整篇文章就是沿着这条链路展开的。开篇先破案新手反复踩的3个坑先说结论绝大多数Vina跑不出来/结果不对的求助帖根子都在下面三件事上坑一配体用了PDB格式。PDB文件不含键连接信息小分子一进PDB基本等于散装零件对接必然翻车。官方文档的原话是你的成败有时就悬在一个氢原子上配体请认准SDF格式质子化状态务必检查。坑二对接盒子的单位搞错。从AutoDock4转过来的老用户特别容易犯AutoDock4用网格点1点0.375埃而Vina直接以**埃Angstrom**为单位。把27000立方埃当成了27000个网格点搜索空间瞬间爆表Vina会直接警告你。坑三追求完全一致的结果。Vina的搜索算法是随机的每次运行的种子不同输出构象就会有差异。这不是bug是特性。你要判断的不是这次和上次分毫不差而是统计上能不能稳定命中正确构象。下面这篇文章的实战主线会把这3个坑全部演示一遍正确的姿势是什么、出错长什么样、怎么补救。环境搭建3条路选最快的那条装Vina的方式不止一种按省事程度排序路线A预编译可执行文件最省事去官方发布页下载对应操作系统的二进制包解压就能跑。vina --help能弹出参数说明就算装好了。如果你只想命令行试水走这条路。路线BPython绑定做自动化的推荐pip install -U numpy vina注意Python绑定和命令行可执行文件是两套独立安装pip装完并不附带vina可执行文件反之亦然——这是文档里明确标注过的坑。路线CConda环境最干净科研向conda create -n vina python3 conda activate vina conda config --env --add channels conda-forge conda install -c conda-forge numpy swig boost-cpp libboost pip install vina除了Vina本体你还得装一个关键的辅助包Meeko它负责把受体和配体加工成Vina能吃的PDBQT格式pip install -U numpy scipy rdkit vina meeko gemmi prody装完验证一下终端能敲出这三个命令就算齐活mk_prepare_ligand.py --help mk_prepare_receptor.py --help mk_export.py --help提示如果你想让管线可复现、不污染系统环境就无脑选路线C。官方示例全部基于Conda环境。实战主线伊马替尼 × c-Abl一条命令一条命令跑通下面用官方基础示例example/basic_docking/里的真实数据走一遍。这套数据仓库里现成就有受体是data/1iep_receptorH.pdb配体是data/1iep_ligand.sdf全部示例输入输出在example/basic_docking/目录下可对照。第一棒受体预处理一条命令生成三个文件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指定输入PDB-o指定输出文件名前缀-p要求生成受体PDBQT-v配合盒子的中心坐标和尺寸额外写出盒子的TXT和PDB文件。跑完后你会看到目录里多出1iep_receptor.pdbqt受体对接文件只含极性氢和部分电荷1iep_receptor.box.txt盒子配置可以直接当Vina的配置文件用1iep_receptor.box.pdb盒子可视化文件扔进PyMOL里能直接看到搜索空间长啥样⚠️注意如果你的受体是刚从PDB数据库下载的原始结构里面通常带着水分子、配体、金属离子等杂物用--delete_residues参数把不需要的残基删掉别让杂物干扰对接。第二棒配体预处理认准SDF格式mk_prepare_ligand.py -i 1iep_ligand.sdf -o 1iep_ligand.pdbqt这段代码做什么把SDF格式的小分子转成Vina专用的PDBQT。这就是我们在坑一里强调的千万别用PDB格式喂小分子。如果起始结构缺氢先用scrub.py补氢再转格式。第三棒选力场两条路各跑一遍Vina支持两种力场对应两种不同的跑法用Vina力场默认最快无需预计算盒子配置文件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然后一条命令开跑vina --receptor 1iep_receptor.pdbqt --ligand 1iep_ligand.pdbqt \ --config 1iep_receptor.box.txt \ --exhaustiveness32 --out 1iep_ligand_vina_out.pdbqt这段代码做什么指定受体、配体、盒子配置把搜索强度exhaustiveness从默认的8提到32输出对接结果。伊马替尼这个体系比较刁钻默认参数下Vina偶尔找不到正确构象加大exhaustiveness能让结果更稳定。用AutoDock4力场需要先跑AutoGrid4算亲和图谱mk_prepare_receptor.py -i 1iep_receptorH.pdb -o 1iep_receptor -p -v -g \ --box_size 20 20 20 --box_center 15.190 53.903 16.917 autogrid4 -p 1iep_receptor.gpf -l 1iep_receptor.glg第一行多了个-g参数让Meeko额外生成AutoGrid4需要的GPF文件第二行用autogrid4根据GPF算出各原子类型的亲和力图谱会生成.maps.fld和一堆.map文件。之后对接命令就不需要受体和盒子了改用图谱vina --ligand 1iep_ligand.pdbqt --maps 1iep_receptor --scoring ad4 \ --exhaustiveness 32 --out 1iep_ligand_ad4_out.pdbqt第四棒结果导出SDF才是给人看的格式PDBQT是给机器看的键级信息不完整。要看结果转成SDFmk_export.py 1iep_ligand_vina_out.pdbqt -s 1iep_ligand_vina_out.sdf这段代码做什么用Meeko把对接结果转成SDF。Meeko的聪明之处在于它会读PDBQT头部里的SMILES字符串用RDKit重建分子这样键级和形式电荷不会丢。相比之下OpenBabel那种猜键级的做法在部分分子上会翻车。结果判读看懂那一张表格别被数字带偏对接跑完终端会输出一张这样的表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怎么读affinity结合能负值越大越稳。这个案例里Vina力场的最佳构象应该落在-13 kcal/mol 附近AutoDock4力场大约-14 kcal/mol。注意两个力场的分数不能互相比较这是官方反复强调的。RMSD第1行永远是0因为它以最优构象为参照后续构象的RMSD越小说明和最优构象越接近。mode数量exhaustiveness32时通常只给出1个高置信构象默认8时反而可能蹦出好几个能量较差、头尾翻转的构象——这是文档里明确描述的现象。怎么判断成功了把对接出的最佳构象和晶体结构里的配体叠一叠如果RMSD小于2埃基本可以认定复现成功。如果差得远先别怀疑人生往下看排查清单。怎么优化exhaustiveness默认8搜不准就提到16、32甚至更高代价是耗时线性上涨。盒子大小能小就小别超过30×30×30埃否则搜索算法会逛不完。结果带不动多跑几次看统计分布而不是盯着单次结果。改力场权重比如想加强氢键贡献可以在命令里加--weight_hydrogen -1.2文档里的现成例子把氢键强度翻倍。避坑手册5个高频事故现场还原事故1提示 can not open conf.txt但文件明明存在。十有八九是文件管理器把扩展名藏了——你建的其实是conf.txt.txt。用lsMac/Linux或dirWindows核实真实文件名。事故2搜索空间体积超27000立方埃的警告。你十有八九把网格点当成单位了。Vina的盒子单位是埃不是0.375埃的网格点。如果是故意设的大空间把exhaustiveness调大补偿。事故3结果和教程对不上。先确认是不是随机种子不同正常现象再看是不是配体/受体质子化状态错了。文档列了一长串为什么得不到正确构象的原因头两名就是单位搞错和质子化错误。事故4跑了很久一个构象都不出。检查exhaustiveness和盒子尺寸是否合理另外看看是不是把20×20×20埃误写成了以网格点计算的大盒子。事故5氢原子位置看起来怪怪的。这不是bug。Vina的评分函数是united-atom模型只关心重原子输出里的氢位置是任意摆的。但输入结构的质子化状态仍然重要——它决定了哪些原子算氢键供体/受体。进阶玩法从跑通一个到跑通一批玩法一柔性对接让侧链动起来刚性受体是这类方法最大的局限。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-f A:315指定链A、残基号315为柔性-a忽略那些部分解析、对不上模板的残基。运行后受体被拆成两个文件1fpu_receptor_rigid.pdbqt刚性部分和1fpu_receptor_flex.pdbqtThr315侧链对接命令里用--flex指过去即可。玩法二水合对接把水分子算进去真实生理环境里蛋白质泡在水里配体结合时会把大部分水挤走但少数水分子赖着不走相当于靶标的一部分。官方水合对接示例example/hydrated_docking/配体是尼古丁受体是AChBP的做法是先用scrub.py -w给配体挂上显式水分子再mk_prepare_ligand.py -w转格式最后用AutoDock4力场跑。官方测试表明对碎片级小分子水合对接的RMSD整体有明显改善。玩法三Python脚本批量对接最爽的玩法。仓库里example/python_scripting/first_example.py是现成模板from vina import Vina v Vina(sf_namevina) 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]) # Score the current pose energy v.score() print(Score before minimization: %.3f (kcal/mol) % energy[0]) # Minimized locally the current pose energy_minimized v.optimize() print(Score after minimization : %.3f (kcal/mol) % energy_minimized[0]) v.write_pose(1iep_ligand_minimized.pdbqt, overwriteTrue) # Dock the ligand v.dock(exhaustiveness32, n_poses20) v.write_poses(1iep_ligand_vina_out.pdbqt, n_poses5, overwriteTrue)这段代码做什么创建Vina对象 → 载入受体和配体 → 计算Vina网格 → 先给当前构象打分 → 局部能量最小化 → 正式对接保留20个构象、输出前5个。运行后会看到类似输出Score before minimization: -4.567 (kcal/mol) Score after minimization : -8.234 (kcal/mol)还有一个小技巧如果先调compute_vina_maps()再载入配体Vina会按力场里全部22种原子类型计算图谱这样批量对接不同配体时就不用每个都重算网格——这正是虚拟筛选管线的标准姿势。虚拟筛选的场景就是把这个脚本套上循环读化合物库 → 逐个对接 → 按分数排序。结合--num_modes、energy_range这些参数控制输出数量一套初筛管线就成型了。下一步行动清单这篇文章帮你打通了三层能力看懂Vina的定位与原理它是AutoDock4的新一代而非升级版评分函数和算法都是新的独立跑通一次完整对接受体预处理→配体预处理→选力场对接→结果导出全程真实命令具备排查和自动化的意识单位、格式、质子化、随机性四大雷区以及Python批量对接的入口。接下来你可以按这个顺序动起来从仓库拉取项目git clone https://gitcode.com/gh_mirrors/au/AutoDock-Vina照着example/basic_docking/跑通基础对接对照solution/目录里的预期输出验证自己换一个你自己的配体-受体体系从PDB下载结构重复本文流程跑熟之后尝试example/flexible_docking/和example/hydrated_docking/最后用Python脚本把你的流程自动化如果你觉得这篇实战笔记对你有用把它收藏起来——下次跑对接前翻一遍避坑手册能帮你省下半天排查时间也欢迎分享给身边刚入坑分子对接的朋友。祝你的第一个分子对接实验一次通过早日找到下一个潜力药物分子。【免费下载链接】AutoDock-VinaAutoDock Vina项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考