Expand description
按反应模板生成产物。
§映射号定义了一切
反应物模板与产物模板之间只有映射号这一条纽带:
| 原子在哪 | 有映射号 | 无映射号 |
|---|---|---|
| 只在反应物模板 | 不可能(号在两侧都要找得到才叫“有“) | 删掉匹配到的那个原子 |
| 两侧都有 | 保留匹配到的原子,按产物模板改写属性 | |
| 只在产物模板 | 同上,视作新建 | 新建一个原子 |
键同理:产物模板里有的键就建,反应物模板里有而产物模板里没有的键就断。
§产物分子数由连通性决定
产物模板描述的是反应中心的片段,不是一个片段一个分子。所有产物模板建进 同一张图,模板之外的原子只搬一次,最后按连通分量切开。
逐产物各建一张图会出大问题:两个片段的锚点若仍通过未匹配的原子相连 (分子内反应、断环键),那批原子会被复制进每一个产物,质量当场不守恒 而没有任何东西报错。
§模板之外的部分原样带过来
反应物分子里没被模板匹配到的原子和键要照原样搬进产物。这一条决定了
反应模板可以写得很小 —— [C:1][OH:2]>>[C:1][Cl:2] 只描述羟基变氯,
分子其余部分自动跟着走。
§产物不做净化
产物是“按模板改写出来的图“,可能价键不合法(模板本身就能写出不合法的东西)。 净化与否交给调用方 —— 在这里净化会把“模板写错了“和“这条反应本来就不该 用在这个底物上“混成同一种失败。
§原子映射号是可选产出
模板里的映射号只在模板内部成立,它连的是“反应物模板的这个原子“与 “产物模板的那个原子”,与底物无关。底物上真正的原子对应关系是运行时才 产生的:模板匹配定下一部分,模板之外原样搬运的部分定下其余的。
run_reactants 的 atom_mapping 参数控制要不要把这份运行时对应关系
固化成映射号。开启时返回的 Outcome 里反应物与产物两侧都带号,
同一个号出现在两侧就表示是同一个原子。
Structs§
- Outcome
- 一个匹配组合跑出来的结果。
Functions§
- run_
on_ substrate - 把整个反应物侧当作一张图上的查询来跑,而不是按位置配对。
- run_
reactants - 对一组反应物跑反应,返回所有结果组。
Type Aliases§
- Product
Set - 一次反应的产物。