原子表示:从元素符号到方括号与手性

各位同学,欢迎来到第二讲。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 字符串中解析一个原子时,我们应该如何判断:

SMILES 原子表示决策流程 SMILES 原子表示决策流程 解析单个原子标记 是否有方括号? 是 否 1. 解析同位素质量数(可选) 2. 读取元素符号 3. 解析 @/@@ 手性标记(可选) 4. 解析 H 个数 + 电荷 元素符号后直接读取 隐式加氢根据价态 结合键符号继续解析 提示:手性标记 @/@@ 必须在方括号内且紧跟在元素符号之后

你看,没有方括号就走隐式加氢的快速路,有方括号就走显式解析的精细路。实际工作中,80% 的原子都可以用隐式,但同位素、带电、复杂立体化学必须走方括号那条路。

5. 常见陷阱与个人建议

  • 方括号里不要忘记写 H:例如要表示一个甲基自由基,应写 [CH3] 而不是 [C],否则少三个氢。
  • 同位素质量数写在符号前:[13C] 正确,不是 [C13]。
  • 手性标记搞反方向:用 RDKit 的 Chem.MolFromSmiles 然后检查 Chem.AssignStereochemistry 可以保平安。
  • 分子含有多个手性中心时,每个中心都要独立标记:不能只写一个 @ 表示所有。

我的一个小技巧: 当你用 SMILES 生成器导出时,默认会尽可能用隐式表示。如果你想显式保留所有信息,可以设置参数 allBondsExplicit=False 但 allHsExplicit=True,这样氢都会写进方括号,方便核验。

好啦,原子表示这一块就这些。接下来你会碰到更复杂的键表示和分支结构,但打好原子层面的底子,后面的路就好走了。下节课咱们聊分支与环。