把立体异构体从结构数据库交给另一个分析工具,需要同时传递原子的连接关系和立体构型。chematic v1.1.7 改进了 MOL 文件中硫原子立体构型的写出方式,以及从三维坐标读取环状分子和双键构型的处理。
下面用甲基苯基亚砜的 S、R 构型展示这次版本的进展。你可以在文章中切换结构,将 SMILES 转为 V3000 格式的 MOL,再比较读回后的结构。
将硫原子的立体构型传递到输出文件
甲基苯基亚砜的硫原子连接着甲基、苯基和氧。结合硫上的孤对电子,其空间排列形成两种互为镜像的构型。这里使用按 CIP 优先次序规则确定的 S、R 标记区分它们。
SMILES 用 @、@@ 等符号表示局部立体信息;MOL 文件则使用坐标和楔形键等标注。转换时,需要对应好两种记法中用于定义方向的邻接原子顺序。Daylight 的 SMILES 规范和 RDKit 的立体化学说明介绍了这些表示方式。
v1.1.7 统一了 SMILES 与 MOL 读写中包含硫孤对电子的邻接位置顺序。因此,在本文示例中,S 构型读回后仍为 S,R 构型仍为 R。实现和测试样例见硫原子立体构型的开发记录。
切换 S、R 构型进行比较
下方可以选择构型和表示方式,包括 S=O,以及显式标出电荷的 [S⁺][O⁻]。左侧为输入 SMILES 的结构,右侧为写出 V3000 后再读回的结构。
甲基苯基亚砜的转换结果:S → S,R → R。
转换和 CIP 标记计算由浏览器中的 npm 发布版 chematic 1.1.7 完成。你可以展开生成的 MOL 文本,也可以下载文件。带颜色的圆圈标出了正在比较构型的硫原子。
@ 和 @@ 取决于 SMILES 中邻接原子的书写顺序。书写顺序改变时,符号可能改变,而立体构型保持相同。因此,示例同时显示输入、输出字符串和硫原子的 CIP 标记。
在 Python 中运行相同的转换
保存 roundtrip.py,然后运行:
python -m pip install "chematic==1.1.7"
python roundtrip.py
脚本内容如下:
import chematic
for smiles in ["C[S@](=O)c1ccccc1", "C[S@@](=O)c1ccccc1"]:
original = chematic.from_smiles(smiles)
block = original.to_mol_v3000(original.rdkit_2d_coords())
restored = chematic.from_mol_v3000(block)
before = original.cip_stereo(mode="accurate")[0]["descriptor"]
after = restored.cip_stereo(mode="accurate")[0]["descriptor"]
print(f"{smiles}: {before} -> {after}")
C[S@](=O)c1ccccc1: S -> S
C[S@@](=O)c1ccccc1: R -> R
rdkit_2d_coords() 提供写出 V3000 所需的二维坐标,from_mol_v3000() 读回生成的文本,cip_stereo(mode="accurate") 为相应结构计算 CIP 标记。示例中的每个分子都只有一个位于硫原子的立体中心。
读取三维结构时,把深度信息也纳入判断
三维 MOL 文件保存每个原子的 x、y、z 坐标。对于适用的结构,即使没有楔形键等显式立体标注,也能从坐标中读取构型。
例如,双键连接的环可能呈非平面构象。仅取 x、y 坐标投影到平面上,会改变取代基看起来位于双键哪一侧。对相应的三维输入,v1.1.7 会同时使用 z 坐标判断双键构型。环内相关立体中心,以及取代金刚烷等笼状骨架的识别也得到了改进。
本文读取了三类去除显式立体标记的三维回归测试结构:含多个环内立体中心的分子、含环外双键的分子和取代金刚烷。每类各有 V2000、V3000 两种格式,共 6 个文件,读回结果均与测试预期的立体结构一致。可查看输入与结果及三维读取回归测试。
再用 RDKit 读取输出结构
我们在交互示例的 4 个输入之外,加入了 12 个带不同取代基的结构,共检查了 16 个以硫为立体中心的结构。Python 和 npm 包均固定为发布版 1.1.7,并使用 RDKit 2026.09.1 分别读取它们生成的 V3000。
| 检查的操作 | 结果 |
|---|---|
| Python 版写出 V3000,再由 chematic 读回 | 16/16 保留硫原子的 CIP 标记 |
| npm 版写出 V3000,再由 chematic 读回 | 16/16 保留硫原子的 CIP 标记 |
| RDKit 读取两个版本生成的 V3000 | 各自 16/16 与输入的立体结构一致 |
RDKit 比较使用了 CIP 标记和包含立体信息的规范 SMILES。这些结果对应本文选取的 16 个输入。运行日期为 2026 年 10 月 18 日,Python 环境为 macOS arm64、Python 3.13.6。Python 结果、npm 结果以及软件包和输入文件记录列出了各次转换。
把立体异构体交给其他工具时,输出格式也需要保留输入中的构型区别。v1.1.7 改进了硫立体中心和三维分子结构在这一过程中的处理。发布说明还汇总了同一版本新增的文件读写与计算功能。