ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

薛定谔虚拟筛选实战:受体格点生成的关键步骤与避坑指南

薛定谔虚拟筛选实战:受体格点生成的关键步骤与避坑指南 1. 格点定得好不好直接决定你这轮虚拟筛选是出活还是白跑做虚拟筛选的人十有八九都经历过这样的场景手里拿到一个靶标蛋白的PDB文件心里想着赶紧把受体处理一下格点一生成丢几千上万个分子进去跑Glide然后美滋滋等结果。结果对接分数出来一看排名靠前的分子要么形状诡异要么根本没法在口袋里摆出合理构象甚至有些分子的对接位点和已知活性化合物的结合模式完全对不上。这时候如果你回头检查大概率会发现问题不是出在筛选这一步而是出在最开始受体格点生成的那一刻。薛定谔Schrödinger的虚拟筛选流程里受体格点Receptor Grid是整个计算的“地基”。它的本质是在受体结合口袋周围预先计算好一系列能量网格包括空间位阻、氢键、疏水作用、静电作用等这样后续Glide在对接配体的时候就不必每来一个分子都重新计算一遍受体环境而是直接在这张预计算好的“势能地图”上找最优构象和结合模式。道理说起来很简单但实际操作里格点生成之前那几步结构处理才是真正决定成败的地方。这篇内容我准备抛开教科书式的步骤介绍只讲实战里那些真正会坑到你的环节从PDB文件下载之后该怎么“清洗”到格点盒子怎么放、尺寸怎么定再到哪些看似不起眼的选项其实最影响结果。这篇东西适合刚接触分子对接、准备用薛定谔做虚拟筛选的研究生也适合已经跑过几轮筛选但结果忽好忽坏、怀疑自己操作有问题的同学。里面提到的坑基本都是我在实际项目里一个个踩出来的有些问题当时折腾了几天才找到原因希望你看完之后能少走这些弯路。2. PDB文件没你想的那么“干净”下载之后的第一件事不是生成格点2.1 PDB数据库下载的结构和“适合做对接的结构”之间隔着好几道工序很多人拿到PDB ID之后第一件事就是去RCSB网站把结构文件下载下来然后就急着导入Maestro准备生成格点。但PDB数据库里存放的原始结构是晶体学家根据电子云密度解析出来的原子坐标它不是专门为分子对接准备的。换句话说PDB文件里除了蛋白本身往往还带着大量对接时用不到甚至有害的信息。最常见的几类“脏东西”包括结晶水分子、去垢剂分子、配体分子、金属离子、糖链、多构象残基、以及一些残余的缓冲液成分。这些杂质如果不处理干净轻则让格点计算区域覆盖到不想要的位置重则直接导致格点生成失败或者后续对接时配体被一些莫名其妙的原子挡住无法进入真正的结合口袋。我用一个比较直观的例子来说明。我记得有一次做某个激酶靶标的筛选从PDB下载了分辨率为2.3Å的结构晶体里在ATP口袋附近有四个结晶水分子其中两个直接占据了后来我定义的格点中心区域。当时我偷了个懒没把水分子删掉就直接生成了格点结果第一轮筛选出来的前20个分子有一半都和水分子形成了“假氢键”——在对接打分里表现为很好的氢键相互作用但实际上这些水分子在生理环境下根本不一定稳定存在。那批结果最后基本作废浪费了整整两天机时。所以第一步千万别省**蛋白准备Protein Preparation这两步走是连接PDB原始文件和可靠格点之间的必经桥梁。**在薛定谔里就是Maestro主界面下的Protein Preparation Wizard模块这一步会帮你做补全残基、分配键序、加氢、优化氢键网络、去除多余水分等工作。2.2 结晶水、配体、金属离子到底删不删判断标准是什么很多初学者最爱问的一个问题水分子到底删除还是保留金属离子要不要留共晶配体在生成格点之前要不要先拿掉我的经验是不能一刀切但可以给一套比较稳妥的判断逻辑水分子先看它是不是介导了蛋白和已知活性配体的关键相互作用。如果这个水分子被多个晶体结构都验证过是保守水、并且参与了氢键网络那可以考虑在格点生成时保留并设为“可旋转/可移动”的选项。但大部分情况下建议删除所有水分子等对接结束之后再做water map分析或MM-GBSA评估而不是一开始就带着水跑。因为对接时配体是“干”进来的口袋里一堆水只会增加大量不确定的假阳性。共晶配体如果这个配体体积较大占据了整个结合口袋那必须在蛋白准备之前将它删掉否则你生成的格点会把配体的位置当作受体的一部分后续对接的分子根本没有空间放进去。但如果共晶配体很小比如只是一个缓冲液分子或一个硫酸根离子它所在的位置又恰好在口袋边缘可以先删掉然后用格点里的“Ligand”或“Excluded volume”功能把那个区域标记为禁入区防止小分子往那个方向伸展。金属离子这是最容易出问题的地方。金属离子如果参与催化或稳定蛋白结构那么在格点生成的时候必须保留尤其是锌离子、镁离子这类常见于酶活性中心的金属。但保留离子意味着后续对接的打分函数里离子-配体的相互作用会按金属配位模型来评估这时候你需要确认薛定谔里有没有给该离子分配正确的配位几何参数。铁、铜这些可变价态金属更要小心它们在PDB里经常表现为不完整的配位环境直接保留可能会导致格点计算区域出现不合理的正电荷集中。糖链与去垢剂一般建议直接删掉。膜蛋白的PDB结构里经常带有去垢剂分子比如DDM、OG等这些分子和蛋白质没有特异的相互作用保留它们只会让Box区域额外膨胀增加无效计算量。我当时在准备一个蛋白-蛋白相互作用界面上的小分子结合位点时就吃过亏那个结构是共晶了两个多肽片段我删掉了大片段却忘了删掉一个小片段结果格点生成时系统把那个小片段当作受体的一部分全部对接分子都被死死挡在真正的浅槽外面。后来检查的时候才发现蛋白准备阶段直接把那个多余链标注为“保留”格点里硬生生多了一堵墙。所以口诀很简单结合口袋里所有非蛋白组分除了金属离子和经过确认的保守水一律删干净。2.3 二硫键、末端封端、缺失残基最容易忽略的预处理细节PDB结构里还有一个隐蔽的问题——缺失残基。X射线晶体结构里部分loop区域电子云密度太低解析不出来常常出现某一段残基完全缺失、只在序列文件里标注为“gap”的情况。如果用这种缺失结构直接生成格点会出现两个问题第一如果缺失的loop刚好在口袋附近那么口袋的边界形状就和真实情况有偏差计算出的体积和形状分布都不准。第二如果缺失的loop位于蛋白表面但不参与口袋形成虽然不会直接影响格点但后续如果你做结构完整性的分子动力学模拟这也会成为隐患。所以蛋白准备阶段一定记得做“Loop补全”。薛定谔的Prime模块里可以用同源建模的方式把缺失的残基补回去补全之后再检查一遍有没有不合理的原子距离冲突必要时做一轮最小化。还有两个小细节二硫键不要凭记忆判断哪些Cys形成了二硫键。蛋白准备工具会自动根据距离和几何条件分析Cys-Cys之间的连接状态自动分配二硫键。但偶尔也会出现误判比如两个Cys之间距离足够近但不是真的成键系统却给它们加上了二硫键。所以生成完结构之后随手检查一下二硫键列表看有没有不合理的连接。N端和C端的封端处理对于只取了一个结构域或一个亚基的情况如果N端或C端正好暴露在口袋附近残基末端的带电基团会严重干扰静电势计算。建议用ACE/NME对末端进行封端capping或者至少检查一下末端残基是否远离口袋区域避免它在格点边缘产生虚假的强静电作用。3. 受体格点生成实操从选蛋白到设盒子的完整流程3.1 选结构不是“解析度越低越不能用”但链和残基的选择一定要干净结构预处理完成之后进入Glide的Receptor Grid Generation面板。这里面的操作看似简单——选蛋白、定中心、设尺寸、点生成——但每一步都有玄机。先说选蛋白。很多教程会说“选一个解析度好的结构”这话没错但“好”不只是看分辨率一个维度。我个人的选择优先级是这样的优先选有共晶活性配体的结构且配体结合模式已通过文献或生化实验验证。在满足第一条的基础上选分辨率高于2.5Å的结构越低越好。检查这个结构的口袋区域有没有异常的B-factor过高区域如果关键残基的电子云密度很模糊即使分辨率数字好看口袋构象也可能不可靠。检查蛋白序列覆盖度不要选一个关键loop严重缺失的结构除非那个loop离口袋很远。选定了PDB文件之后在Maestro里需要手动选择定义受体格点的“受体”——你可以选整个蛋白分子也可以只选一条链、一个结构域甚至只选一小段残基。这时就要注意了Maestro的默认行为有时候会把所有导入的链都视为受体的一部分如果你导入了多聚体结构而你想针对其中一条链的某口袋做筛选就得手动把其他链排除掉。不过这里也有一个要权衡的点如果结合口袋恰好位于两个亚基的界面上那么两个亚基的相关残基都应该保留作为受体否则口袋的一侧边界会凭空消失格点会错误地允许配体从本不该开放的方向逸出。我做过一个二聚体界面的虚拟筛选项目当时只选了A链作为受体结果是格点盒子有一半悬在真空中对接时分子可以直接从暴露侧往外跑得分还特别低——因为朝向溶剂的一侧没有原子阻碍配体在那边“自由飞翔”时疏水项几乎为零但Glide的Score里其他项又没法约束它。那批结果全部作废重新用AB链生成格点之后问题才消失。3.2 格点中心定位用共晶配体定义中心没有共晶配体就靠“残基质心脚标”格点中心怎么定这是虚拟筛选里最容易被低估的变量。最理想的情况结构里带有已知活性共晶配体直接用配体的质心作为格点中心。薛定谔的Grid Generation面板里有一个选项就是基于“Ligand”自动计算中心你只需要指定这个配体所在的条目即可。这样做的好处是中心位置一定是结合口袋的核心位置不会偏。但如果没有共晶配体或者共晶配体是一个大肽段怎么办我的做法是这样的先在文献里找到这个靶标的关键残基。一般可以从突变实验、光交联实验、或者同源结构比对里确定哪些残基是底物结合或催化必需残基。在Maestro里用“Residues”选择这些关键残基然后把格点中心设置为这些残基的质心。如果文献信息不足可以用PDBsum、CASTp这类在线工具预测口袋位置然后把预测到的口袋质心坐标作为中心输入。这里有一个细节**格点中心是Box的核心位置而不是Box的起点。**Glide里的GridBox是一个三维盒子它以中心为原点向各方向扩展所以你设定的中心坐标差个1-2Å结果可能天差地别。我建议在设定中心之后用Grid面板里的可视化窗口仔细检查一下把受体表面显示出来看看Box是否完整包裹住了口袋内部空间边缘有没有在蛋白骨架内部这样会导致部分格点空间被蛋白占据配体体积可用区域变小。3.3 Box尺寸与Docking Ligand length不是越大越好在Receptor Grid Generation面板里有一个“Docking ligand length cutoff”参数。默认情况下是20Å左右意思是配体分子从格点中心出发最远允许伸展到20Å的立方体空间里。很多新手喜欢把Box调到最大觉得这样“什么分子都能接进来”但这真的是一个误区。Box越大格点涵盖的非口袋区域就越多。而这些区域大多是蛋白表面甚至是溶剂暴露区疏水项、静电项在那些地方计算出来的梯度微弱且不可靠很容易让配体“漂”到口袋之外的蛋白表面去寻找低能态导致对接结果非常离谱。我在实际项目中通常这样设置口袋类型Docking ligand length建议值说明深口袋激酶ATP位点等10-14Å口袋深度较大配体结合模式通常较紧凑浅槽蛋白-蛋白界面16-20Å浅槽需要额外空间容纳配体伸展方向未知口袋需探索18-20Å首次探索可以适当放大但后续要检查结果分布还有一个容易被忽略的参数是“Rotation”相关选项。薛定谔的格点面板里默认允许配体在对接时旋转但如果你的结合口袋空间很窄比如只有一条狭缝建议在Glide对接设置里限制可旋转键的自由度或者打开“Posix”约束位置约束否则配体容易在格点里“打滚”找到一些不符合真实结合姿势的低能态。3.4 Grid文件生成之后不要急着用先做一次“秒看五步检查”生成格点文件.grid之后我有几个固定动作叫作“秒看五步检查”每次做虚拟筛选之前都过一遍加起来不到五分钟却帮我挡掉过无数个低级错误**打开格点的体积视图确认Box和口袋之间没有错位。**如果Box中心偏移你会看到口袋的一半暴露在Box外部。**检查受体表面是否完全覆盖口袋入口。**用Connolly Surface显示一下如果入口处有大的空洞说明曾有水分子或配体残基没删干净。**查看静电势分布确认口袋内部正负电荷分布是否符合你对该靶标的认知。**比如激酶ATP口袋的铰链区通常有一排氢键供受体金属中心附近应该是高正静电。**把一个已知活性分子或者共晶配体的重对接版本丢进去试跑5个构象。**看它能不能顺利进入口袋并重现文献报道的结合姿势。如果这个基本检查都过不了说明格点有问题。**检查log文件里有没有警告信息特别是“WARNING: Missing partial charges”这类。**这通常表示部分原子没有正确分配力场参数可能导致格点势能计算出现空洞。这五步做完基本上能确保格点本身是靠谱的接下来再跑大规模的虚拟筛选才敢说结果有可信度。4. 实测踩坑复盘这五个坑我当年都连续踩过提前排掉4.1 坑一共晶配体没删干净格点中心飘到配体“残骸”上这个坑我在前面已经提到过了。有一次我拿了一个共晶了变构抑制剂的结构准备做同一个变构位点的筛选。蛋白准备时我用Ligand删除功能把配体删了但那个配体分成了A、B两个构象两个构象在不同的altloc里分别存了一部分原子。结果我只删掉了第一个构象第二个构象的原子全部保留了下来。等到格点生成时系统自动把“保留的配体原子”当作定义中心的参考格点中心直接定在口袋偏外侧的一个碳原子上整个Box歪了大概4Å。后来排查问题时我反复检查逻辑觉得不应该有什么问题直到我把所有杂原子显示出来才发现在口袋边缘还有一个孤零零的配体碎片。那次之后我养成了一个习惯**彻底检查所有残留原子用“Display Atoms”面板筛选所有非蛋白原子并逐个确认是否删除。**对于altloc双构象的问题还要记得把两个构象都选择上再删除。4.2 坑二组氨酸的质子化状态默认合理但实际可能毁掉氢键网络组氨酸的质子化状态可能是整个蛋白准备过程中最容易被忽视却又最关键的细节之一。组氨酸有三态HIDδ位质子化、HIEε位质子化、HIP双质子化带正电。PDB文件本身不包含氢原子坐标蛋白准备工具会根据pH环境自动分配但自动分配算法大部分时候合理偶尔会在关键残基上出问题。我曾经处理过一个丝氨酸蛋白酶靶标活性中心有一个组氨酸它和天冬氨酸形成催化二联体同时还需要作为氢键供体向底物提供氢键。蛋白准备默认给它分配了HID状态但在这个环境下实际应该是HIP。结果我生成的格点在那个区域少了一个氢键供体对接出来的分子全都没法和这个组氨酸形成预期的相互作用。因为那个分子的对接排名很差我一度以为是化合物库有问题折腾了好几天最后同事提醒检查组氨酸质子化状态一改过来排名立刻合理了。判断关键组氨酸质子化状态的方法很简单看它周围的环境——如果His旁边有一个带负电的残基Asp/Glu贴近它的Nδ或Nε并且距离在2.5-3.5Å之间它很可能是带正电的HIP如果His在一个疏水环境里且只作为氢键供体大部分时候是HID或HIE。这种情况不能完全依赖自动分配要结合pH环境和你对催化机制的理解来判断。4.3 坑三缺失loop补全之后没有做能量最小化格点里出现一堵“弹簧墙”这个坑比较隐蔽也是很多初用Prime补loop的人容易踩的。Loop补全的本质是在缺失区域插入一段氨基酸序列然后用loop搜索和构象采样去生成候选结构。但补出来的loop只是“结构合理”不一定和周围的氨基酸侧链完全避让。如果没有对补全后的结构做一轮限制性最小化补进去的残基常常和一些原有残基存在原子冲突也就是范德华斥力极大。这样的结构直接生成格点会怎样格点计算时候会在冲突区域出现一个巨大的正能量“尖峰”。对接时配体一旦靠近那一段能量会瞬间飙升于是配体全都被弹开看起来像是口袋里有一堵看不见的墙。更阴的是因为这个尖峰只出现在局部极小区域大部分配体可能根本碰不到它所以你未必会看到对接全部失败只是感觉结果不太好。我的处理流程是补全Loop之后在Protein Preparation Wizard里做一次基于OPLS4力场的限制性最小化约束重原子位置只允许氢原子和侧链柔性部分调整。然后把最小化前后的口袋体积对比一下如果发现口袋突然变小了说明之前确实存在冲突。4.4 坑四晶体结构里的配体-蛋白复合物配体删除方法选错了薛定谔里删除配体的方式直接决定了格点生成之后的“禁入区”设置。很多人会在Maestro图形界面里手动选中配体按Delete键删除。看起来操作没问题但其实还有一个更精细的做法在Glide Grid面板里有一个选项叫“Ligand”标签页这里可以把你删掉的共晶配体设置为“None”或者“Excluded volume”。正确做法是保留这个配体的体积信息但把它标记为“不在格点受体体积之中”。这样格点计算时配体原位置周围会被挖出一个禁入区防止对接分子伸展到原本由共晶配体占据的空间里。如果你直接把配体从结构里删除那么原配体占据的位置就空了出来变成“可进入的空腔”这可能会改变口袋的体积形状和边界。本来有些分子不该伸到那个方向去的现在因为那里空了就获得了额外的构象空间对接结果可能找到一些假阳性姿势。所以我的建议是**不要直接用Delete键删除共晶配体而是在Protein Preparation里定义“保留配体但仅用于定义口袋”或者在Grid面板里把配体设置为“Ignore”但保留坐标信息。**这样既得到了正确的中心定义又排除了配体体积对格点的影响。4.5 坑五把膜蛋白的脂质分子当普通配体删掉结果口袋边缘完全走样膜蛋白的PDB结构尤其是某些转运蛋白和受体通常带有大量膜脂质分子比如胆固醇、磷脂的尾巴片段等。这些脂质分子在结构中往往和蛋白表面疏水残基紧密结合填补了蛋白跨膜区域的疏水缝隙。如果你把这些脂质分子也统统删掉那等于把蛋白表面某些区域的天然形状破坏了。格点生成后配体在跨膜区那些本该被脂质堵住的位置会被错误认为是可以穿过的开放空间。这在对接跨膜位点抑制剂的时候特别致命因为配体的长尾巴可能会从膜中部直接“戳”到外面去看起来还能得到不错的能量分实际上在真实膜环境里根本没有这种可能性。对有膜蛋白的项目我建议在蛋白准备阶段把那些已经解析出来的脂质分子保留下来至少保留第一层壳的脂质并在定义受体的时候把它们包括进去。这样格点才算真正模拟了膜环境里的受体表面。5. 格点生成之后的验证一个5分钟的小测试比任何打分都靠谱前面说的都是“怎么避免出错”但即使你每一步都做得对格点生成之后到底好不好还是要靠验证说话。我的验证流程其实很简单就是做一次“共晶配体重对接”实验。具体操作是从你自己的化合物库里或者直接从ChEMBL、ZINC下载一些已知活性分子挑出那些已经通过实验验证过IC50或Ki值的化合物作为验证数据集。数量不需要多10-20个分子就够。用Glide的SP模式标准精度把它们对接进你刚才生成的格点里然后看这些已知活性分子能不能拿到一个“相对前沿”的排名以及它们预测的结合构象能不能和文献里报道的结合机制对上。如果这批已知活性分子里有超过70%都能排在最前面或接近最前面的位置说明你的格点和整个对接流程是靠谱的可以放心扩大规模跑HTVS预筛选。如果这些分子得分普遍很差或者排名分布随机那么先别急着跑万级库回头检查格点。另外还有一个更细的验证方法适合有共晶结构的靶标把共晶配体从结构中抽取出来重新对接回去计算重对接构象与原始共晶构象的RMSD。一般来说如果格点和蛋白准备没有问题Glide SP重对接出来的构象与原始构象的RMSD应该小于2.0Å。大于这个阈值就说明你在蛋白准备或格点生成的某个环节有系统性偏差。这个5分钟的小测试成本极低但回报极高。我后来几乎每次做筛选之前都跑一遍已经成了习惯很难想象没有它我会浪费多少机时。6. 从格点生成到大规模筛选中间还有几道工序别急着撒开跑前面说的都是聚焦格点生成这个环节但格点只是整个虚拟筛选流程的第一个节点。在新手阶段很多人容易把格点生成和虚拟筛选画等号觉得格点弄好了就直接对接就完事。其实中间还有几个衔接步骤做不好同样会让格点白做。第一道工序是配体库的准备。不管是自建库还是从公共库里筛配体分子进入Glide对接之前都要做LigPrep处理包括3D结构生成、质子化状态分配、立体化学枚举等。如果一个化合物库里有大量无法成功生成3D结构的分子那它们在对接时会被自动跳过你都不知道自己筛掉了什么。第二道工序是对接参数的选择。Glide对接有三个精度档位HTVS高通量、SP标准精度、XP额外精度。一般流程是先HTVS粗筛几万到几十万分子取前5%-10%再做SP再取前10%做XP精筛最后再做MM-GBSA或FEP计算。如果你一上来就直接用XP跑几万个分子时间成本和计算资源都会爆炸。而如果你只用HTVS出结果精度又不够。合理的流程设计比调任何参数都重要。第三道工序是结果评估和化学可及性检查。对接分数只是一个起点还要检查排名靠前的分子是不是真的可合成、可购买有没有明显的不良结构特征比如过度的芳香环、过多的可旋转键等。这些检查在薛定谔的QikProp模块里可以快速完成也可以在后续用SwissADME之类的工具做ADME预测。所以如果你正准备开始一个虚拟筛选项目我的建议是不要把时间全花在让“格点生成”这一个步骤上而是把格点质量验证放在首位把配体库准备和流程设计放在同等重要的位置。格点只是地基地基稳了上面盖的楼才叫楼地基松了什么对接算法都救不回来。这套流程我反反复复用了几十次至今为止每次出现“筛出来的分子没法验证”的情况追根溯源几乎都能回到格点或配体准备这两个环节上。从PDB文件下载到最后拿到一批可信的候选分子中间每一步都有它的门道但只要你在格点生成这一步上严格按照“清洗结构—检查质子化—定位中心—设尺寸—验证重对接”这一条线走下来整个筛选项目的成功率会肉眼可见地往上走。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进