1. 课程导入与分子表示基础
《小分子化学信息处理与构象工程》这门课要解决的核心问题是:如何把一个小分子从“纸面上的结构式”变成“计算机能计算、能比较、能筛选的数据对象”,并在此基础上进一步研究它的三维构象与能量状态。整门课可以理解为一条从分子表示到构象生成再到构象分析与筛选的技术链路。本章作为导入,先建立这条链路的整体框架,再聚焦最基础的一环——分子表示。
一、课程整体框架:从结构到构象
小分子化学信息处理与构象工程大致包含四个层次。第一层是分子表示:用图、字符串或文件格式描述原子的连接关系。第二层是化学信息处理:包括读取、标准化、去重、子结构匹配、性质计算等操作。第三层是构象生成:把二维连接关系扩展为三维坐标,并搜索低能构象。第四层是构象工程:对构象集合做聚类、能量排序、药效团比对,服务于虚拟筛选或分子设计。
这四层之间存在明确的数据依赖:没有正确的分子表示,后续的标准化和构象生成都会出错。例如一个手性中心若在表示阶段丢失了立体信息,生成的三维构象就可能得到错误的对映体,进而导致对接结果完全失真。因此本课程把“表示”放在最前面,并非因为它简单,而是因为它决定了整条链路的上限。
二、分子图:最本质的表示
从化学信息学的角度看,一个分子首先是一张标记图。图的节点是原子,节点上的标记包括元素种类、电荷、同位素、手性标签等;图的边是化学键,边上的标记包括键级(单键、双键、三键、芳香键)和立体化学信息(如双键的顺反)。
分子图之所以重要,是因为它把化学问题转化成了图论问题。子结构匹配就是子图同构问题,分子相似性可以用图核方法计算,分子指纹本质上是对图中局部环境的哈希编码。理解这一点,就能理解为什么后续的标准化、去重、子结构搜索都可以用统一的算法框架处理。
需要特别注意的是,分子图默认不包含三维坐标。它描述的是“谁和谁相连”,而不是“在空间中如何摆放”。这正是构象生成要解决的问题:在保持图结构不变的前提下,为每个原子分配三维坐标。
三、SMILES:紧凑的线性表示
SMILES(Simplified Molecular Input Line Entry System)用一串字符描述分子图。它的核心规则并不复杂:原子用元素符号表示,有机子集(B、C、N、O、P、S、F、Cl、Br、I)可以省略方括号;相邻原子默认形成单键;分支用圆括号表示;环用数字标记闭合。
以几个常见分子为例:
乙醇 CCO
乙酸 CC(=O)O
苯 c1ccccc1
葡萄糖 OC[C@H]1O[C@@H](O)[C@H](O)[C@@H](O)[C@@H]1O
其中小写字母 c 表示芳香碳,@ 和 @@ 表示手性中心的立体构型。这里要强调一个容易出错的点:SMILES 的书写顺序会影响手性标记的含义。同一个分子如果从不同原子开始书写,@ 和 @@ 可能需要互换才能表示相同的绝对构型。因此在实际工作中,不应手工推断,而应依赖 RDKit 等工具进行解析和规范化。
SMILES 的优点是紧凑、便于存储和传输;缺点是字符串本身不直观,且存在多种等价写法。这就引出了“标准化”的需求:把不同来源的 SMILES 转换为统一的规范形式(Canonical SMILES),才能可靠地去重和比对。
四、SDF 与 Molfile:带坐标的块状表示
SDF(Structure-Data File)是化学信息学中最常见的文件格式之一。它由多个 Molfile 块组成,每个块描述一个分子。Molfile 的核心是三个部分:头部(分子名称、程序信息、注释)、计数行(原子数、键数)、原子块和键块。
原子块每行给出原子坐标(x, y, z)和元素符号;键块每行给出两个原子的索引和键级。如果 z 坐标全为 0,说明这是二维表示;如果 z 坐标有非零值,则携带三维构象信息。SDF 还支持在分子块之后附加属性字段(如分子量、logP、活性标签),这使它成为数据集存储和交换的常用格式。
五、工具链概览
本课程后续会反复使用以下工具,建议尽早安装并熟悉基本操作:
- RDKit:开源化学信息学库,支持 SMILES/SDF 读写、标准化、子结构匹配、构象生成、指纹计算。Python 接口友好,是本课程的主力工具。
- Open Babel:格式转换工具,支持大量化学文件格式互转,适合批量预处理。
- OpenMM / RDKit ETKDG:构象生成与分子力学优化。RDKit 内置的 ETKDG 方法可以在较短时间内生成合理的初始构象。
- PyMOL / VMD:三维结构可视化,用于检查构象质量和相互作用。
一个典型的最小工作流是:用 RDKit 读取 SMILES → 标准化 → 生成三维构象 → 用 MMFF94 力场优化 → 输出 SDF。这个流程会在后续章节逐步展开。
六、本章学习目标
学完本章,你应当能够:
- 用自己的话解释“分子表示—化学信息处理—构象生成—构象工程”这条链路,并说明各层之间的数据依赖关系。
- 读懂常见 SMILES 字符串,识别其中的分支、环、芳香性和手性标记。
- 理解 Molfile/SDF 的基本结构,知道原子块和键块分别存储什么信息。
- 安装 RDKit,并能用 Python 完成“SMILES → 分子对象 → 输出 SDF”的最小示例。
下面给出一个可直接运行的最小示例,用于验证环境是否配置正确:
from rdkit import Chem
from rdkit.Chem import AllChem
mol = Chem.MolFromSmiles('CCO')
mol = Chem.AddHs(mol)
AllChem.EmbedMolecule(mol, randomSeed=42)
AllChem.MMFFOptimizeMolecule(mol)
writer = Chem.SDWriter('ethanol_3d.sdf')
writer.write(mol)
writer.close()
print('原子数:', mol.GetNumAtoms())
如果运行后生成了 ethanol_3d.sdf,并且原子数为 9(乙醇 C₂H₆O 加氢后共 9 个原子),说明环境基本可用。注意 randomSeed 用于保证构象生成的可重复性,这在后续做对比实验时非常重要。
本章建立了整体框架和表示基础。接下来的章节会从分子图的标准化与去重开始,逐步深入到构象生成的算法细节和工程实践。