资讯动态

AutoDock Vina分子对接完整实操:以7VU6为例做全流程解析

发布时间:2026/9/17 16:44:06 来源:尧图企业网站定制
AutoDock Vina算得上是我用得最多的分子对接工具了没有之一。之前有读者在后台问说自己跟着教程跑完一遍结果文件倒是生成了但根本不知道怎么看换个蛋白又重新懵了。这期我干脆拿一个完整的PDB编号7VU6当案例把从获取结构到最终解读结果的整条路走一遍顺带把我踩过的坑和平时的小习惯都交代清楚这篇文章会更适合还没完全打通对接全流程的初学者也适合跑完一两个案例但始终没搞懂参数含义的朋友。先说清楚这玩意儿到底是干嘛的。分子对接说白了就是预测一个小分子配体和一个蛋白受体结合时最可能出现的构象和结合姿态。AutoDock Vina是这里面非常流行的一个开源工具它用经验打分函数来评估配体跟受体的匹配程度算得又快精度在大多数药物筛选场景也够用。像7VU6这类PDB里解析出来的复合物结构正好可以用它自带的共晶配体当作“标准答案”有答案在手你就能反推整个流程里每一步做得对不对。特别提醒一句别把对接想成一个按钮就能出结果的黑盒。工具只是打分器你怎么准备结构、怎么圈定盒子、怎么设定搜索范围这些前置操作直接决定结果靠不靠谱。所以这篇文章不会只丢给你命令每个关键步骤后面我都会解释为什么这么干。1. 内容整体设计与思路拆解1.1 一次对接其实是一个多步骤管线很多人第一次接触Vina以为就是准备一个受体文件、一个配体文件然后一句命令跑完。实际上一次完整的分子对接应该拆成四个阶段结构准备、参数定义、对接运行、结果分析。这四个阶段里任何一个环节出问题结果都可能荒谬到让你怀疑人生。结构准备的目的是把PDB里粗糙的原始数据处理成Vina能读懂的格式。原始PDB文件里通常带着水分子、离子、其它链的杂项还缺氢这些都会干扰打分所以要先清理。配体的处理更麻烦一些需要判断哪些化学键可以旋转哪个原子是Root还要分配合适的电荷和原子类型。Vina 1.2.x版本之后对配体格式的容忍度高了很多但我不建议因此偷懒格式规范是结果可复现的底气。参数定义主要就是设置搜索盒子。盒子的位置和大小决定了Vina在哪儿找结合姿态盒子没盖住真正的结合口袋后面再怎么跑都是白费。接着是指定搜索精度就是exhaustiveness它控制的是这次搜索的彻底程度属于用时间换结果的参数。最后是结果分析。Vina会输出9个默认的对接构象每个都带一个结合能分数这个数值越负表示预测结合越强。但注意分数好看不等于结论正确还要结合实验信息、聚类情况和视觉检查一起判断。1.2 为什么拿7VU6来做教学案例选7VU6不是随手抓的。它的结构里带共晶配体意味着你不需要靠猜来确定活性位点直接拿原配体的坐标当盒子中心就行这对新手来说是最大的友好点。更重要的是有共晶配体等于有一个参照物。跑完对接后可以用对接姿态跟实验姿态做比对算一下RMSD这个指标是衡量对接方法是否靠谱的黄金标准。通常RMSD小于2埃说明你的对接流程是有效的后续做虚拟筛选才能有点底气。我把整个流程拆成下面几步这篇文章也会完全按这个顺序推进从PDB数据库获取7VU6结构用PyMOL或BioPython分离出受体和配体用Open Babel和MGLTools处理配体与受体的格式加氢、加电荷、转PDBQT用AutoDockTools生成配置文件确定盒子中心与尺寸用命令行运行AutoDock Vina并进行多轮参数调整读取输出结果分析打分与构象并用PyMOL做可视化验证1.3 方案选型为什么是Vina而不是其它对接程序市面上对接工具五花八门商业的如GOLD、MOE、Glide学术免费的如AutoDock 4、Dock、rDock。我把Vina当主力主要是三个原因。第一速度。Vina的对数搜索算法比AutoDock 4的遗传算法快一两个数量级一个普通复合物配体单次对接通常几分钟甚至几十秒就能跑完这在需要批量筛选上万个小分子时是决定性的。第二精度不差。在多个基准集上的测试里Vina的打分能力跟商业软件是能掰手腕的尤其是对结合姿态的预测它很少给你离谱的答案。第三就是生态成熟。从PDB到ChEMBL到ZINC几乎每个环节都有教程遇到问题搜一下基本能解决。当然Vina也不全是优点。它不太擅长处理柔性非常强的体系对水分子参与的介导结合也缺乏显式描述对金属蛋白的处理也一般。如果你面对的是这类复杂体系Vina只能算初筛工具不能当最终答案。2. 核心细节解析与实操基础2.1 分母对接的常见概念先用生活化的方式理解在实操之前有三组概念必须建立直觉不然你后面会非常难受。第一组是“打分函数”。Vina的打分函数长什么样不用管但你要明白它在干什么它评估的是一个配体构象在特定位置上的结合自由能。内部的物理项包包括空间位阻、氢键、疏水效应、静电作用和配体自身的构象张力。跟人一样好东西往往不是单一指标最好而是综合权衡的结果。Vina的输出数值kcal/mol越负代表预测的这种结合模式越稳定。第二组是“盒子”和“搜索空间”。Vina只在三维盒子内尝试摆放配体对你指定的空间做系统采样。这个可以理解为一个探宝游戏Vina拿着金属探测器只在你圈定的院子里搜索院子圈小了或圈歪了宝藏再大你也找不到。第三组是“exhaustiveness”和“num_modes”。前者是搜索的彻底程度越大则搜索越充分、结果越稳定但耗时会增加后者是输出多少种不同的结合构象默认是9。这两个参数决定了你是在打一次草稿还是在精修一幅画。2.2 文件格式从PDB到PDBQT到底发生了什么PDB格式你知道是生物大分子的教科书格式记录氨基酸、核酸、水分子的坐标。但Vina不认这个格式它需要的是PDBQT。PDBQT是在PDB基础上加了两个关键信息Q是电荷T是原子类型比如碳、氮、氧、氢键供体、氢键受体、芳香碳等同时把氢原子也显式加上去。为什么要这么处理因为Vina的打分函数需要知道每个原子的带电状态和类型来判断静电作用和氢键。原始PDB文件可能没有氢也可能没有合理分配电荷直接去跑Vina等于让一个戴着厚手套的人去做精细手术能做出结果但精细度不够。受体和配体的PDBQT准备还不完全一样。受体通常处理成刚性的也就是在对接过程中只有配体动受体不动。配体呢则需要标注哪些单键能够旋转这些可旋转键会作为配体的自由度参与搜索。2.3 关键工具的安装与环境检查我把这套流程需要的东西罗列一下这些都是开源或免费的不存在授权问题AutoDock Vina核心对接引擎。官方GitHub发布预编译版本建议直接下载1.2.5比老版本在搜索算法和PDBQT兼容上有明显改进MGLTools / AutoDockTools用来准备受体文件、配置盒子是ADT那套图形界面虽然界面有年代感但功能稳定Open Babel格式转换器能把SDF、MOL2转成PDBQT也能帮你加氢PyMOL不用说可视化的主力它几乎是你解读对接结果的眼睛Python环境用来跑脚本BioPython在某些环节能替代手工操作安装之后先用vina --version验证一下能不能执行再准备一个最简单的体系测一下能不能跑通再上真实项目。这个测试体系可以是网上随便下载一个PDB复合物不必用7VU6浪费测试时间。3. 7VU6案例实操完整分子对接过程详解3.1 获取并准备体系文件第一步去RCSB PDB官网检索7VU6下载结构文件。推荐下载.pdb格式因为别的格式反而要额外转换。下载完之后用文本编辑器打开看一眼或者用PyMOL加载。你要确认两件事一是结构中是否包含配体通常是HETATM开头的行二是配体的三维坐标是否完整。很多人拿到结构就急着处理结果发现配体的残基名跟论文里对不上或者配体本身是部分占据的坐标残缺到后面才发现就晚了。用PyMOL把蛋白和配体分离# 在PyMOL命令行中执行 fetch 7VU6 remove solvent select ligand, resn UNL # 如果配体残基名是UNL就按这个选择不对就换 save receptor.pdb, polymer and not ligand save ligand.sdf, ligand这里有一个细节我用了polymer and not ligand选受体因为PDB里可能还有其它非蛋白分子如金属离子做刚性受体对接时这些非蛋白组分如果是结合位点的一部分应该保留如果只是结晶缓冲液成分直接删掉。有的结构里配体的残基名不一定是UNL具体要看PDB文件里的HETATM记录。如果找不到可以先用PyMOL的iterate命令列出所有杂原子残基名再决定怎么选择。3.2 配体处理从原子坐标到可搜索的柔性分子配体处理的本质是让它从“只能静静躺着”变成“可以扭来扭去地尝试结合”。这个过程依赖Open Babel和MGLTools的配合。先用Open Babel给配体加氢并转换为MOL2obabel ligand.sdf -O ligand.mol2 --gen3d -p 7.4--gen3d是生成三维构象-p 7.4是设置生理pH7.4下质子化状态。这一步很重要因为晶体结构解析出的配体坐标往往没有考虑生理条件下的质子化形态。之后再转成PDBQTobabel ligand.mol2 -O ligand.pdbqt --partialcharge gasteiger如果你想要更精细地控制可旋转键还是建议用ADT的Ligand - Torsion Tree - Choose Torsions来手动检查。Vina对可旋转键的默认处理通常没问题但复杂的环系和酰胺键有时候需要你手工锁定否则搜索空间会被无效放大。3.3 受体处理删除水分子补上极氢受体的准备相对简单套路固定。打开ADT加载刚才存出来的receptor.pdb在菜单里选择Edit - Delete Water确认所有水分子都被删除选择Edit - Hydrogens - Add - All Hydrogens加上氢原子合并非极性氢选择Edit - Hydrogens - Merge Nonpolar这一步是把C-H上的氢并入碳原子减少计算量导出为PDBQTGrid - Macromolecule - Choose选择蛋白分子然后保存一个常见错误是忘记合并非极性氢。如果不合并受体里的氢数量会非常庞大Vina读取时可能报错或者计算速度骤降。更关键的是打分函数里对疏水作用的描述是基于碳原子类型来判定的非极性氢合并之后碳的疏水特性才不会被氢原子干扰。另外不要跳过加氢这一步。PDB里来自晶体学解析的蛋白通常没有氢因为氢原子电子密度太低肉眼看不见。但没有氢蛋白内部的氢键网络就是断裂的Vina打分时很多氢键项等于没参与结合能自然不准。3.4 确定对接盒子以共晶配体为锚点因为有共晶配体确定盒子中心就很简单了直接用原配体的几何中心作为搜索格子中心。用PyMOL获取配体的质心坐标# 在PyMOL中 from pymol import cmd cmd.centerofmass(ligand) # 输出类似 [x, y, z] 的坐标拿这个坐标填到Vina的--center_x、--center_y、--center_z参数里。盒子尺寸怎么定一般来说边长取配体最大尺寸向外扩展8到10埃。比如配体最长的两端距离大约15埃那盒子边长就设25埃左右。太大意味着搜索空间里大量是蛋白的空白区域浪费计算资源还可能让配体找到荒谬的外部结合位点太小则可能剪到配体的部分构象。如果面对没有共晶配体的全新靶标就需要自己找活性位点。常用的方法包括根据点突变实验信息确定关键残基跟同源蛋白做结构叠合推断保守口袋的位置或者直接用DoGSiteScore类似的口袋预测工具。这些方法各有各的坑后续有时间单独展开。3.5 编写配置文件并运行Vina写一个Vina配置文件好处是参数一目了然后面重复运行时不用敲一长串命令receptor receptor.pdbqt ligand ligand.pdbqt center_x 22.453 center_y 18.123 center_z -5.678 size_x 25.0 size_y 25.0 size_z 25.0 exhaustiveness 16 num_modes 9 energy_range 3.0 cpu 8然后运行vina --config config.txt --out docking_results.pdbqt --log docking_log.txt跑完之后你会看到一个docking_results.pdbqt文件里面包含Vina输出的多个模型每个模型都有对应的打分值。docking_log.txt里记录了每个mode的affinity分数这个文件比PDBQT文件更直观建议每次都保留。说一下参数选择的心得。exhaustiveness默认值是8一般案例我用16如果盒子特别大或者配体柔性特别强我会把exhaustiveness调到32甚至更高。这个参数的本质是让Vina的全局搜索更充分减少结果对随机初始条件的依赖。但注意它不是高出天际就一定好因为打分函数的误差本来就在那儿搜索再充分也没法超过模型的物理极限。3.6 结果解读分数、聚类与RMSD验证跑完Vina之后别急着截图写结论。先打开日志文件看每个构象的打分。比如ModeAffinity (kcal/mol)RMSD l.b.RMSD u.b.1-9.50.0000.0002-8.72.1233.5543-8.42.5004.000Mode 1总是打分最低的那个也就是Vina认为最稳定的姿态。但你注意RMSD l.b.和u.b.是相对于Mode 1计算的不是参考实验构象所以它们只能告诉你模式之间的结构差异有多大不能替代和真实结构比较。要跟实验结构做对比需要把对接输出转换成PDB并用PyMOL叠合# 用Open Babel提取第一个模型 obabel docking_results.pdbqt -O mode1.sdf -f 1 -l 1 # 然后在PyMOL里把共晶配体与对接姿态并排看叠合之后看不直观的可以用PyMOL的align命令算一下RMSD。RMSD小于2埃的流程基本靠谱如果在2到3埃之间结合姿态有可讨论空间如果大于3埃先别怀疑Vina回头检查你的盒子位置、质子化状态和可旋转键设置。还有一件事我特别想强调打分排名第一不一定就是最接近实验构象的那个。你去看一下很多cognate docking的benchmark结果就明白打分和RMSD之间不是简单线性关系。所以做项目时我会把前5个模式都扫一遍凡是打分在合理区间内、又能形成有益氢键的都有保留价值。4. 常见问题与排查技巧实录4.1 Vina常见报错速查我用一个表格总结一下这些年遇到的高频错误都是可以直接对着排查的报错信息常见原因解决办法Error: atom type ... not supportedPDBQT文件里出现了Vina不认识的原子类型检查配体是否含有B、Si等非标准元素改用Open Babel重新生成或手动转为AD类型Error: could not open ...输入文件路径错误或文件不存在核对路径确认当前工作目录Error: out of grid space配体初始构象超出了盒子范围或者盒子太小加大盒子尺寸检查盒子中心位置Error: ligand has too many torsions配体柔性过强搜索空间爆炸检查可旋转键设置固定芳香环或长链内的冗余键Segmentation fault多半是输入结构里存在非标准残基导致读取崩溃用Open Babel或PyMOL清理受体修复缺失原子多数报错不是Vina本身的Bug而是输入文件的锅。所以我的习惯是每生成一个PDBQT文件就先在文本编辑器里扫一眼看看元素符号、原子类型那几列是不是合理再拿去跑对接免得一次错误运行浪费几小时。4.2 常见的“分数高但结论错”原因Vina给出的分数很漂亮但结论却被审稿人或者同事质疑这个情况太常见了。我总结下来主要原因集中在三块。第一块是盒子定位不准。如果你的结合口袋是柔性的、诱导契合明显的静态蛋白结构可能跟对接时最理想的构象有偏差。第二块是配体质子化状态搞错。不同pH下羧酸可能是COO⁻胺基可能是NH₃⁺搞错了静电项完全失真。第三块是忽略了水分子的介导作用。有些配体实际上是靠水分子搭桥跟蛋白形成氢键的你把水全删了Vina就压根不可能找到那个结合模式。遇到这类情况我的建议是遇到重要项目正对接之后再做一次“加水对接”或者“柔性侧链对接”。Vina本身不支持残基柔性但AutoDock Vina的两步对接策略可以模拟一部分先粗扫找到合适构象再在固定残基集合内精修。而水分子的处理可以用AutoDock 4的显式水模型因为AutoDock 4支持水分子作为柔性分子参与对接。4.3 实操心得这套流程的可用边界在哪里坦率地讲Vina这套流程比较适合刚性的、单体蛋白上有一个明确的口袋、并且配体不涉及共价结合的场景。如果你做的是蛋白质-蛋白质相互作用界面上的小分子或者是一个高度柔性的无序区域Vina跑出来的结果只能算猜测。同时我不建议大家把对接分数做横向跨靶标比较。Vina打分能帮你在一个受体内部排序不同配体也可以初筛一个化合物库但你不能说A蛋白和配体的-9.5分就比B蛋白和配体的-8.0分更好因为不同体系的物理背景不一样打分函数有系统误差。真正想用好这套流程我的体会是把它们当筛选工具和科学假设的来源而不是最终结论的裁判。一个可靠的结论必须经过分子动力学模拟的进一步验证或者用实验测得的活性数据来反馈校正。做对接最大的乐趣在于它能给你一个可以在实验里验证的“猜测”但这个猜测对不对最终还是要靠湿实验回答。4.4 几个能提升效率的小脚本日常操作中我强烈建议准备一个简单的Python程序来处理批量任务。比如你要对一个化合物库做虚拟筛选目录里几百个配体文件不可能一个个运行Vina。可以用Shell脚本循环跑for f in ligands/*.pdbqt; do name$(basename $f .pdbqt) vina --receptor receptor.pdbqt --ligand $f \ --center_x 22.453 --center_y 18.123 --center_z -5.678 \ --size_x 25 --size_y 25 --size_z 25 \ --exhaustiveness 16 --out results/${name}_out.pdbqt \ --log results/${name}_log.txt done跑完之后再写个小脚本把日志里的打分提取到CSV里统一排序。这个环节不复杂十几行Python就能搞定但它能把你的效率提升十倍算是我每天在跑对接时最依赖的默契操作。5. 用PyMOL把对接结果做成漂亮图的实操跑完对接、验证完RMSD接下来就是把结果展示出来。不仅仅是发文章需要图日常组会汇报也需要画得清楚能省掉很多解释的口舌。用PyMOL打开受体蛋白和对接后的配体构象调整显示风格把关键的氢键用distance命令测出来# 在PyMOL命令中先加载受体和配体 load receptor.pdb load mode1.sdf, ligand hide everything show cartoon, receptor show sticks, ligand # 选择配体附近的残基 select pocket, receptor within 5 of ligand show sticks, pocket # 测氢键 distance hbond, ligand, pocket, mode2那几张漂亮的蛋白表面图、静电势图其实都是在PyMOL里面花几分钟调的。配体表面的半透明效果、口袋残基的疏水表面这些操作一动手就会有手感。有一点要提醒导出图片之前务必先把背景调白以免后续投稿白底图要重画。在PyMOL里bg_color white再用ray 1200, 1200渲染图片分辨率就是够用的。6. 最后分享一个实用技巧我在实际跑对接时有一个小习惯遇到复合物结构从来不只跑一次我会先把原配体从复合物中提出来做一遍“自对接”cognate docking确认对接结果能把原配体放回实验位置附近RMSD小于2埃然后再用这个参数去筛别的分子。这相当于在正式“考试”之前先做一次“模拟考”能暴露绝大多数参数设置问题非常值得推广给所有刚入手Vina的人。这类流程后续的扩展空间也很大。你可以把配体库换成ZINC或者ChEMBL里的真实分子库也可以用Vina的输出作为分子动力学模拟的起点。分子对接只是一个入口真正有意思的往往在后面。以后有机会我可以再拆一个虚拟筛选加MD验证的完整案例把这些工具的配合讲得更透。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价