第2章:3D结构生成原理——从2D到3D的坐标生成算法、力场与能量最小化、常用工具概述
嗯,说到从SMILES生成3D结构,很多人第一反应就是直接调用一个工具,然后祈祷它吐出对的坐标。但说实话,如果你不理解背后那几步是怎么跑的,那你在做批次质控的时候,连问题出在哪都找不到。
这章我就掰开揉碎,跟你聊聊从2D到3D坐标到底经历了什么样的算法,力场能量最小化又在干什么,以及常用的工具有哪些。我个人习惯先把原理搞明白,再去碰工具,这样踩坑的时候心里不慌。
2.1 从2D到3D坐标的生成算法
SMILES本身只是线性编码,它没坐标。要生成3D坐标,第一步是把它变成结构图(比如RdKit的ROMol对象),然后再从这张图推断原子在三维空间里的摆放位置。这里面最核心的思路就是:先定一个合理的起始构象。
我常用的方法有下面这几种:
- 距离几何法(Distance Geometry):这是RDKit默认的方式。它利用原子间的键长、键角、范德华半径等约束条件,随机生成一组满足距离上下限的坐标。说白了,就是先定一堆距离约束,然后解一个坐标的线性方程组。
- 模板匹配法(Template Matching):对于常见片段(比如苯环、酰胺键),直接从预先构建的3D模板库里拿坐标。速度快,结果可重复。
- 系统搜索法(Systematic Search):对可旋转键进行步进式扭转,生成所有可能的构象,然后用能量函数筛选。慢,但有时能发现意想不到的低能构象。
- 随机扰动法(Random Perturbation):在已有坐标基础上加一点随机噪声,再快速优化。常用于构象搜索的初始阶段。
我曾经在批处理几万个分子时,用距离几何法生成了大量环状结构异常(比如环张力极大)的构象。后来发现是因为没有提供初始的“好”种子。解决方法是配合RDKit的EmbedMultipleConfs函数,并设置随机种子,多做几次尝试选出能量最低的。
2.2 力场与能量最小化
初始坐标通常很粗糙,原子间可能撞在一起,或者键角不合理。这就需要我们通过能量最小化来优化它。这个过程本质上是在势能面上找个局部极小点。
常用力场大致可以分为这几类:
| 力场类型 | 典型代表 | 适用场景 | 速度 |
|---|---|---|---|
| 经典分子力场 | UFF, MMFF94 | 有机分子、药物小分子 | 快 |
| 生物大分子力场 | AMBER, CHARMM | 蛋白质、核酸、配体-受体复合物 | 较慢 |
| 通用小分子力场 | MMFF94s, GAFF | 药物化学、虚拟筛选 | 中等 |
力场最小化,说白了就是通过梯度下降法(或共轭梯度法)降低系统的总能量。总能量通常包含下面这些项:
- 键伸缩能
- 键角弯曲能
- 二面角(扭转能)
- 非键相互作用(范德华 + 静电能)
- 收敛条件设置:一般用最大迭代次数和能量变化阈值来控制。我建议批次质控时用
maxIter=200、convergence=1e-6,平衡速度与精度。 - 小心“吹气球”现象:如果初始结构太离谱,力场优化可能把分子撑爆——能量不降反升。这时我一般先用约束势(restrained minimization)稳一手,再放开。
力场参数是有适用范围的好吧?比如UFF对金属有机配合物表现不错,但对含氟药物小分子经常出错。我曾经就因为这个踩过雷——生成的一批氟代分子能量死活降不下去。后来换成MMFF94s,问题就解决了。所以在做批次质控前,务必检查力场和分子的化学类型是否匹配。
2.3 常用工具概述
实际项目中,我不可能每次都手写力场优化代码。好在这个领域已经有不少成熟的工具。下面我拣几个常用的跟你说说:
- RDKit:Python生态里最常用的小分子库,内置距离几何生成、UFF/MMFF94最小化、构象搜索等功能。我用它做90%的初期质控工作。
- Open Babel:老牌通用化学格式转换工具,支持生成3D坐标(用Open Babel自己的力场),也支持调用其他工具(如MOPAC)。
- Avogadro / Open Babel:有图形界面,适合可视化检查。但批次质控我不推荐用它,太慢了。
- Gaussian / ORCA / Psi4:量子化学软件,可以用在DFT级别优化。精度极高,但计算成本爆炸。我一般只在需要参考结构时用来验证一下。
- PyTorch + ANI / SchNet:用深度学习势能面来做能量最小化,速度接近力场,精度逼近DFT。目前在工业界正在快速普及。我个人习惯把它当做“第二道防线”——先用传统力场过一遍,再用神经势场精修。
嗯,这张图可以帮你把整个流程串起来:
流程大致是这样的:从SMILES出发,经过距离几何或模板匹配生成粗糙的3D坐标,然后根据分子化学类型选择合适的力场,最后经过能量最小化得到可以用于下游任务的低能构象。每一步都有参数需要调优,也都有坑等着你踩。
在我主持的一个大型虚拟筛选项目中,我们要求所有候选分子必须生成至少5个不同的低能构象。做法很简单:对每个SMILES,用RDKit的EmbedMultipleConfs生成10个初始构象,然后用MMFF94最小化,最终保留能量最低的5个。这样既保证了多样性,又过滤掉了那些不合理的高能结构。对了,这一步其实才是批次质控的起点——如果初始3D结构就烂,后面所有计算都是白搭。
工具本身是死的,但参数是活的。不要指望一个默认配置能搞定所有分子。对含金属、含卤素、含大环的分子,我建议你先拿几个代表做一次单点测试,看看力场给出的能量和几何是否合理。感觉不对?那就换力场,或者加约束。批次质控的核心不是“跑得快”,而是“跑得稳”。
好,这会你心里应该有谱了:从SMILES到可以信赖的3D结构,不是一键完成的,而是经过了一条清晰的路径——坐标生成、力场选择、能量最小化。每个环节都有手段可以控制质量。掌握这些,才能为接下来的批量质控打好基础。