SMILES 基础:一行代码背后的化学语言
咱们做计算化学、结构生物学的人,每天打交道最多的东西,除了蛋白质 PDB,可能就是小分子了。你想想看,手动打开 ChemDraw 画一个苯环再保存成 mol2,一天能处理几个?几十个顶天了吧?
我早期做高通量虚拟筛选的时候,经常要处理几十万个小分子。要是每个都靠鼠标点,项目直接黄了。所以我个人习惯从源头抓起——SMILES 字符串。说白了,它就是化学结构的“身份证号”,一段紧凑的 ASCII 字符串,把分子结构描述得清清楚楚。
有了标准化的 SMILES,后续的 3D 生成、批次质控才能跑得动。这节课,我们就先把这个基础打牢。
1.1 SMILES 到底是什么
SMILES 的全称是 Simplified Molecular Input Line Entry System,1988 年由 David Weininger 提出。它的核心思路很简单:用深度优先的方式,把分子图遍历一遍,转换成一行字符串。
我记得有一次跟新来的同事对接,他抱怨 SMILES 看着像乱码。我让他把 CC(=O)O 拆开看:
- C — 第一个碳原子(甲基)
- C — 第二个碳原子(羰基碳)
- (=O) — 括号表示分支,这个碳上连了一个双键氧
- O — 分支结束后,继续写羟基
顺着这个逻辑走一遍,你就能在脑子里画出乙酸的骨架。这就是 SMILES 的底层逻辑。
1.2 原子与键的编码规则
原子符号直接用元素周期表缩写。但有几个“潜规则”,新手特别容易踩坑。
| 元素 | SMILES 写法 | 默认氢原子数 | 备注 |
|---|---|---|---|
| 碳 | C | 4 价补全 | 有机子集元素有默认价态 |
| 氮 | N | 3 价补全 | 注意芳香氮还是脂肪氮 |
| 氧 | O | 2 价补全 | 羰基氧必须显式写双键 |
| 卤素 | F, Cl, Br, I | 1 价补全 | 直接写元素符号即可 |
| 芳烃碳 | c | 1 价补全 | 小写字母表示芳香性 |
键的连接规则:
- 单键:可以省略不写,比如
CC就是乙烷 - 双键:用
=表示,比如C=C是乙烯 - 三键:用
#表示,比如C#C是乙炔 - 离子键/配位键:用
.连接,表示拆开的片段,比如[Na+].[Cl-]
[S+2] 或 [P+5],不然解析器会直接报错或生成错误结构。
1.3 常见官能团的 SMILES 写法
掌握几个基础模板,遇到复杂结构时直接往上套就对了。
| 官能团 | SMILES 示例 | 说明 |
|---|---|---|
| 羟基 | CCO | 乙醇,-OH 直接写在末尾 |
| 羰基 | CC(=O)C | 丙酮,括号表示分支 |
| 羧基 | CC(=O)O | 乙酸,先写双键氧,再写羟基 |
| 胺基 | CCN | 乙胺,伯胺直接连 |
| 苯环 | c1ccccc1 | 数字 1 表示成环位置 |
| 硝基 | [O-][N+](=O) | 电荷必须用方括号显式标明 |
手性中心的处理:
SMILES 用 @ 和 @@ 来表示手性。一个小技巧:@ 表示逆时针方向,@@ 表示顺时针方向。我个人习惯在写手性中心时,把四个取代基按照 CIP 优先规则排好顺序,这样基本不会出错。
# L-丙氨酸 (S-构型)
[NH3+][C@@H](C)C(=O)[O-]
# D-丙氨酸 (R-构型)
[NH3+][C@H](C)C(=O)[O-]
1.4 从 SMILES 到分子图的底层逻辑
咱们做批次转化的时候,解析器其实做了下面这几步。我把它画成了一张流程图,你对照着看会清楚很多:
解析器先从左边第一个字符开始看,遇到原子符号就创建节点,遇到括号就知道是分支,遇到数字就去找对应的环闭合位置。最后我们会得到一个完整的分子图——这个图里包含了所有原子和连接关系,接下来才能去做 3D 构象生成。
MolFromSmiles() 试解析一遍,能生成分子对象 mol 才往下走,解析不了的就直接过滤出来单独处理。这样可以避免在 3D 生成阶段因为一个坏结构导致整个批次卡死。
[M] 代表金属中心,然后用 . 把配体拆开写,最后在生成 3D 坐标时再用约束条件拼接。