原子表示:从元素符号到方括号与手性
各位同学,欢迎来到第二讲。SMILES 里最基础的单元就是原子——你写的每个字母、每对方括号,都直接决定了分子长什么样。今天咱们就把原子表示这件事彻底讲透。
1. 元素符号:默认规则与潜规则
在 SMILES 里,元素符号沿用周期表的标准缩写。大写字母开头,后面跟小写。比如 C 是碳,N 是氮,O 是氧。规则很简单,但这里有个坑——默认的氢原子数是隐式的。
什么意思呢?你写个 C,SMILES 会认为它是一个饱和碳,带上 4 个氢。写 O,默认带 2 个氢。这种隐式加氢的机制,让我们写简单分子时非常省事。但我刚入行时就被坑过:
我曾经写了一个 CCO,心想这是乙醇吧?结果解析出来的结构里,O 上连了两个氢,等价结构却是水 + 乙烷?其实 CCO 是碳-碳-氧,氧确实带两个氢,但那个氧是羟基氧,结构是对的。我当时没注意打开 3D 检查,差点当成错误。
所以,你要清楚:隐式氢基于元素的标准价态。对于常见的有机元素,规则如下:
| 元素 | 默认价态 | 隐式氢数 |
|---|---|---|
| C | 4 | 4 - 连接的显式非氢原子数 |
| N | 3 | 3 - 连接的显式非氢原子数 |
| O | 2 | 2 - 连接的显式非氢原子数 |
| P | 3 或 5 | 需要显式指定 |
看到没?关键在“连接的显式非氢原子数”。如果你在分子里只写 C,它没有其他连接,那隐式氢就是 4。写 CC,中间的 C 连了 1 个 C,所以隐式氢是 3。这个逻辑其实很直观。
我个人的习惯是:在写骨架时尽量用隐式氢,但一旦遇到金属、卤素、或异常价态,必须用方括号显式写出来,否则解析器会给你惊喜。
2. 方括号表示:显式原子与同位素
当你要控制氢的个数、指定同位素、或表示带电原子时,就得用方括号把原子包起来。格式就像这样:
[原子符号]
[同位素质量数原子符号]
[原子符号氢个数]
[原子符号电荷]
[同位素质量数原子符号氢个数电荷]
举个例子,乙醇中的羟基氢如果不想隐式,可以写成 CCO[H]。但更常见的场景是同位素标记:
[13C] - 碳-13
[18O] - 氧-18
[2H] - 氘(重氢),有时也写 [D]
我曾在做代谢物鉴定项目时,需要标记 13C 葡萄糖,SMILES 里写成 O[13C@@H]([O-])[13C@@H](O)[13C@@H](O)[13C@@H](O)[13C@@H](O)[13C@@H](O)CO。每一项 [13C] 都明确是同位素碳,解析器才不会搞混。
另外,方括号还能处理非标准价态。比如一个三价碳自由基:
[C] - 不带氢的碳原子(三价碳自由基)
[CH] - 带 1 个氢的碳
[CH2] - 带 2 个氢的碳
[CH3] - 带 3 个氢的碳
注意:[C] 和 C 不一样。C 自动带 4 个氢(如果没连接其他东西),而 [C] 是显式不带氢的碳原子。这一点经常被新手搞反。我建议你记住一条原则:方括号里的氢数字是显式声明的,不会被自动补充。
3. 手性标记:@ 与 @@
说完了元素和同位素,咱们聊聊立体化学。SMILES 用 @ 和 @@ 来标记手性中心的方向。它附着在原子符号后面(一般在方括号内或紧跟在元素后)。
它的规则是:从手性中心向四个取代基看(按 SMILES 字符串里出现的顺序),如果排列方向是逆时针,则用 @;如果是顺时针,则用 @@。听起来简单,但实际应用有坑。
来看一个经典的例子——L-丙氨酸和D-丙氨酸:
L-丙氨酸: N[CH3][C@@H](C(=O)O)N
D-丙氨酸: N[CH3][C@H](C(=O)O)N
注意 [C@@H] 和 [C@H] 的区别。@ 和 @@ 需要配合 H 个数一起写。我习惯写成 [C@@H] 表示这个手性碳上还连了一个氢。你可能会问:为什么不用 [C@](H) ?不行,氢必须紧跟原子符号。
我的经验: 在画手性分子时,最好先用 ChemDraw 画好,导出 SMILES,然后手动检查 @ 的方向。因为手性标记非常容易写反。我曾经有一次把药物分子的手性写反,导致对接结果完全不对。从那以后,我每写一个手性中心,都会用 RDKit 验证一下。
另外,方括号内还可以写多个手性标记?不行,一个手性中心只能用一个 @ 或 @@。如果有更多立体化学信息(比如双键顺反),要用 / 和 \,那是下一章的内容。
4. 原子表示决策流程图
为了让你直观理解整个原子表示的逻辑,我画了张图。它展示了从 SMILES 字符串中解析一个原子时,我们应该如何判断:
你看,没有方括号就走隐式加氢的快速路,有方括号就走显式解析的精细路。实际工作中,80% 的原子都可以用隐式,但同位素、带电、复杂立体化学必须走方括号那条路。
5. 常见陷阱与个人建议
- 方括号里不要忘记写 H:例如要表示一个甲基自由基,应写
[CH3]而不是[C],否则少三个氢。 - 同位素质量数写在符号前:
[13C]正确,不是[C13]。 - 手性标记搞反方向:用 RDKit 的
Chem.MolFromSmiles然后检查Chem.AssignStereochemistry可以保平安。 - 分子含有多个手性中心时,每个中心都要独立标记:不能只写一个 @ 表示所有。
我的一个小技巧: 当你用 SMILES 生成器导出时,默认会尽可能用隐式表示。如果你想显式保留所有信息,可以设置参数 allBondsExplicit=False 但 allHsExplicit=True,这样氢都会写进方括号,方便核验。
好啦,原子表示这一块就这些。接下来你会碰到更复杂的键表示和分支结构,但打好原子层面的底子,后面的路就好走了。下节课咱们聊分支与环。