2. SMILES原子与键:原子符号、官能团表示、单双三键、芳香键
SMILES 说白了就是一套把分子结构"翻译"成字符串的规则。你得告诉程序:这里有个碳原子,那里有个双键,这个环是 aromatic 的。怎么表达?靠的就是原子符号和键符号的组合。我从最基础的原子符号说起。
2.1 原子符号:从 C 开始
有机分子离不开碳。SMILES 里碳直接用大写 C 表示。氢呢?自动补齐,你不用写。甲烷就是 C,乙烷就是 CC。简洁吧?
其他常见元素也直接用字母表示:
| 元素 | SMILES 写法 | 说明 |
|---|---|---|
| 碳 | C | 有机骨架,最常见 |
| 氧 | O | 羟基、羰基、醚键 |
| 氮 | N | 胺基、硝基、杂环 |
| 硫 | S | 巯基、噻吩 |
| 磷 | P | 磷酸酯、膦配体 |
| 氟 | F | 卤素家族 |
| 氯 | Cl | 卤素家族(两个字母) |
| 溴 | Br | 卤素家族(两个字母) |
| 碘 | I | 卤素家族 |
这里有个坑: 单个字母的元素直接写就行。但超过一个字母的元素,必须用方括号括起来。比如 Cl、Br 本身就是两个字母,不需要括号。而钠、铁、铜、金这些,必须写成 [Na]、[Fe]、[Cu]、[Au]。
我踩过的坑: 刚开始写含金属的分子时,我直接写了 Na,结果解析器报错。后来才反应过来——两个字母的卤素是特例,其他多字母元素都得加方括号。你想想看,如果不加括号,程序会把 Na 当成氮和... 不对,解析器会直接不认识。
另外,当原子带有同位素、电荷、手性信息时,也需要用方括号。比如羟基负离子是 [OH-],氘代甲烷是 [2H]C。这些后面章节会细讲,先记住这个原则。
2.2 官能团表示:组合的艺术
SMILES 没有给官能团设计什么"缩写符"。官能团就是原子按连接关系直接写出来。但它有一些固定的"写法模式",我总结了几种常见的:
| 官能团 | SMILES 写法 | 举例(分子) |
|---|---|---|
| 羟基 | O | 乙醇 CCO |
| 羧基 | C(=O)O | 乙酸 CC(=O)O |
| 氨基 | N | 甲胺 CN |
| 硝基 | N(=O)=O | 硝基甲烷 CN(=O)=O |
| 氰基 | C#N | 乙腈 CC#N |
| 羰基 | C=O | 丙酮 CC(=O)C |
| 醚键 | O | 甲醚 COC |
| 酯基 | C(=O)OC | 乙酸甲酯 CC(=O)OC |
你看,羧基其实就是羰基 + 羟基的连写。硝基是氮连两个双键氧。没什么玄乎的,就是原子连接关系的直接表达。
我个人习惯: 写复杂官能团时,先在纸上画一下结构,想清楚连接顺序,再转成字符串。尤其是羧基和硝基,初学者容易把括号位置搞错。
我以前帮同事 review 代码,发现他把乙酸写成了 CCOO。嗯,这表示的是过氧乙酸,不是乙酸。羧基的正确写法是 CC(=O)O,括号表示支链,这一点要牢记。
2.3 单双三键:连接的规则
原子之间怎么连?SMILES 用符号表示键的类型:
- 单键:不写任何符号。两个原子并列就表示单键。比如
CC就是 C-C 单键。 - 双键:用
=表示。比如乙烯是C=C,二氧化碳是O=C=O。 - 三键:用
#表示。比如乙炔是C#C,氰基是C#N。 - 立体键:用
/和\表示顺反异构。这个后面章节会细讲,先知道有这回事。
举个例子,把几种键放在一起看:
乙烯: C=C
乙炔: C#C
乙醇: CCO
乙酸: CC(=O)O
丙酮: CC(=O)C
乙腈: CC#N
有没有发现,CC(=O)O 里双键在括号里面?这表示双键连在第一个碳和氧之间,而不是连在碳链上。SMILES 用圆括号表示分支,这个后面章节也会细说。
我曾经搞错过的一件事: 写丙烯酸时,把双键位置写错了。丙烯酸是 C=CC(=O)O,结果我写成了 CC(=O)C=O,那成了丙酮醛。一个键的位置差,整个分子都变了。所以写完之后最好数一下每个原子的价键数,看是否合理。
2.4 芳香键:小写字母的魔力
苯环怎么表示?你可能会想,单双键交替呗。但 SMILES 有更优雅的方式——芳香键。
规则很简单:芳香原子用小写字母表示。苯环的六个碳都是芳香碳,所以写成 c1ccccc1。
关键点:
- 芳香碳写成
c(小写) - 芳香氮写成
n(小写),比如吡啶是n1ccccc1 - 芳香氧写成
o(小写),比如呋喃是o1cccc1 - 芳香硫写成
s(小写),比如噻吩是s1cccc1
数字是环的编号标记。第一个环用 1 标记起始和结束位置。如果有两个环,就用 1 和 2 区分。
为什么用小写? 大写 C 表示脂肪碳,小写 c 表示芳香碳。解析器看到小写字母,就知道这个原子参与芳香体系,会自动处理离域 π 键。这套设计很聪明,你想想看,一个字母的大小写就能区分两种完全不同的化学状态。
举一个对比的例子:
环己烷(脂肪): C1CCCCC1
苯(芳香): c1ccccc1
写法几乎一样,但一个用大写 C,一个用小写 c。解析器读到的完全是两个分子。
我记得有一次分析一个药物分子,它的核心是吲哚环。我一开始把它全写成了大写 C,结果生成的 3D 构型完全是乱的。后来才发现,芳香环必须用小写字母,否则力场参数都配不对。嗯,从那以后我每次写杂环都会检查一遍大小写。
2.5 综合实战:看一个完整的分子
把原子符号、官能团、键、芳香性放在一起,看一个真实药物分子片段——对乙酰氨基酚(扑热息痛):
CC(=O)Nc1ccc(O)cc1
来拆解一下:
CC(=O)— 乙基 + 羰基(乙酰基)N— 氮原子(酰胺键)c1ccc(O)cc1— 苯环,4 位连有羟基
你看,大小写混用、括号分支、双键标记、环编号,全在一条字符串里。这就是 SMILES 的表达力。
我建议: 学 SMILES 最好的方法就是多拆解、多写。拿你熟悉的分子,试着用 SMILES 写出来,然后用 RDKit 或 Open Babel 验证一下。写错了它会报错,或者生成奇怪的构型。多试几次就熟练了。