pub struct AtomData {
pub atomic_num: u8,
pub formal_charge: i8,
pub isotope: u16,
pub num_explicit_hs: u8,
pub num_implicit_hs: u8,
pub num_radical_electrons: u8,
pub atom_map: u16,
pub chiral_tag: ChiralTag,
pub stereo_perm: u8,
pub hybridization: Hybridization,
pub flags: AtomFlags,
}Expand description
单个原子的可变数据。
字段与 MolBatch 的列一一对应 —— 增加字段时两处必须同步。
Fields§
§atomic_num: u8原子序数。0 表示 SMILES 通配原子 *。
formal_charge: i8形式电荷
isotope: u16同位素质量数。0 表示未指定(即天然丰度)。
num_explicit_hs: u8方括号中显式书写的氢数。仅当 AtomFlags::NO_IMPLICIT 置位时有意义。
num_implicit_hs: u8隐式氢数。由 L2 的价键计算填充,解析阶段恒为 0。
num_radical_electrons: u8自由基电子数。由 L2 第 6 步 FINDRADICALS 填充,在那之前恒为 0。
隐式氢推断会读它,所以两者的先后顺序有实际后果 —— 净化管线里第 6 步排在第 3 步之后,故第 3 步看到的必然是 0。
atom_map: u16反应原子映射号(SMILES 中的 :n)。0 表示无映射。
chiral_tag: ChiralTag立体标记的几何类别
stereo_perm: u8立体标记的类内排列序号,与 chiral_tag 配套。
0 表示未指定。四面体的两种排列由 chiral_tag 自身表达,此处恒为 0 ——
两处都记就有了两个可以互相矛盾的真相来源。
§这是书写时的字面值,尚未归一到存储序
@TB15 存 15。序号的含义依赖“配体按什么顺序排列“,而解析会重排邻居
(环闭合键统一追加到末尾),方括号里的氢也占一个配体位 —— 两件事都会
让同一个几何构型对应到不同的序号。
把序号换算到存储序的参照系需要一张查找表:序号枚举的是配体在多面体 位置上的排法(模掉该多面体的转动群),邻居每做一次对换,序号就按表 跳到另一个值。这张表尚未实现,所以本字段只是原样保管书写值, 不声称它相对任何其它顺序成立;写出时这类标记直接丢弃。
不做的理由是实测的:8839 条真实语料里含配位几何的分子 0 条。
(同属立体化学的双键顺反已经做了,见 BondData::stereo。)
也因此,拿这个字段与任何“已归一“的表示逐值比对都没有意义 —— 两者只在 “没有重排且配体齐全“时才碰巧相等。
hybridization: Hybridization杂化状态。由净化第 9 步填充,在那之前为 Unspecified。
flags: AtomFlags标志位