nuget server logo nuget api documents
↑

API Docs / SMRUCC.genomics.Analysis.RetroPath / Molecule

Molecule

Full name SMRUCC.genomics.Analysis.RetroPath.Chem.Molecule Assembly SMRUCC.genomics.Analysis.RetroPath Members 29

分子图模型:以原子数组 + 键列表描述的共价分子(可含多个连通分量)。

00 Remarks

  • 原子以 0 基索引标识,四个平行数组 、、 与键列表 共同构成分子;
  • 氢以"隐式 + 显式"两段表示:隐式氢由价态与已用键级反推(见 ),

显式氢用于括号内写出的 [NH3+] 之类记号;

  • 不感知芳香性——芳香体系一律以 Kekulé 式的单/双键表达;不感知立体化学。

该模型是整个搜索的化学基座:Molecule.MolKey() 提供同构无关的规范指纹, 用于搜索去重与汇集合判定。

01 Syntax

SMRUCC.genomics.Analysis.RetroPath.Chem.Molecule

02 Methods

NameOverloadsSummary
.ctor 1 创建一个不含任何原子与键的空分子。
InvalidateStructure 1 作废全部派生缓存(邻接表 / Morgan 秩 / 分子指纹)。 任何改动元素、电荷、显式氢或键表的操作都必须调用它。
Adjacency 1 邻接表(惰性构建,O(键数)):每个原子一个 (邻居索引, 键级) 列表。
NumAtoms 1 分子中的原子总数(含氢以外的全部显式原子)。
Neighbors 1 取某原子的全部邻接原子及其键级。
Degree 1 某原子的重原子度(与之成键的原子个数,键级不参与计数)。
BondOrder 1 查询两个原子之间的键级。
SetBondOrder 1 修改已存在键的键级(如单键改双键);键不存在时静默忽略。
RemoveBond 1 删除两个原子之间的键(若存在)。断键后两者可能落入不同连通分量。
AddBond 1 追加一条键(唯一推荐的"加键"入口,会自动作废派生缓存)。
SetElement 1 修改某个原子的元素符号(会作废派生缓存)。
SetCharge 1 修改某个原子的形式电荷(会作废派生缓存)。
SetExplicitH 1 修改某个原子的显式氢数(会作废派生缓存)。
AddAtom 1 向分子追加一个原子(不带任何键),返回其索引。
Copy 1 深拷贝当前分子(元素/电荷/显式氢/键均为新列表,改动互不影响)。
ImplicitH 1 计算某原子的隐式氢数:max(0, 价态 − Σ键级 − 显式氢)。
TotalH 1 某原子上的氢总数 = 显式氢 + 隐式氢(模式匹配中的 Hn 约束即与此值比较)。
ValenceViolations 1 价态校验:返回价态超限(已成键级 + 显式氢 > 容许价态)的原子列表。
Components 1 计算连通分量,即把多组分分子(如 "A.B.C")拆成若干个独立片段的原子集合。
SplitComponents 1 把每个连通分量提取成独立的 Molecule 实例(原子索引重新编号)。
MorganRanks 1 计算 Morgan/扩展连通性(EC)迭代精化标签:以原子化学环境为初值反复用邻居 标签精化,直到分区数不再增长(或达到轮数上限)。
MolKey 1 分子规范指纹:同构的分子必然得到相同字符串,异构分子(几乎必然)得到不同字符串。

03 Properties

NameOverloadsSummary
Elements 1 各原子的元素符号(如 "C"、"N"、"O"、"Cl")。
Charges 1 各原子的形式电荷(如羧基氧为 -1、铵根氮为 +1)。
ExplicitH 1 各原子的显式氢数目(来自 [NH3+] 这类括号记号;隐式氢不计入此处)。
Bonds 1 化学键列表,每项为 (a, b, order),其中 order 取 1/2/3(单/双/三键)。

04 Fields

NameOverloadsSummary
_adjacency 1 邻接表缓存(惰性构建):每个原子一个 (邻居索引, 键级) 列表。
_morgan 1 Morgan 秩缓存(惰性构建)。
_molKey 1 Molecule.MolKey() 结果缓存(惰性构建)。

05 Members

method .ctor #
#ctor

创建一个不含任何原子与键的空分子。

method InvalidateStructure #
InvalidateStructure

作废全部派生缓存(邻接表 / Morgan 秩 / 分子指纹)。 任何改动元素、电荷、显式氢或键表的操作都必须调用它。

method Adjacency #
Adjacency

邻接表(惰性构建,O(键数)):每个原子一个 (邻居索引, 键级) 列表。

Remarks

原先 Molecule.Neighbors() 每次调用都要扫描整张键表并新建一个列表, 在 Morgan 迭代(每原子 × 多轮)、价态校验、连通分量里被反复调用, 实际复杂度退化到 O(原子数 × 键数 × 轮数)。热路径统一走这里。

Returns

长度等于原子数的邻接表。

method NumAtoms #
NumAtoms

分子中的原子总数(含氢以外的全部显式原子)。

Returns

原子个数。

method Neighbors #
Neighbors(Int32)

取某原子的全部邻接原子及其键级。

Parameters
NameTypeDescription
aInt32

原子索引。

Returns

邻居列表,每项为 (邻接原子索引, 键级);无邻居时返回空列表。

method Degree #
Degree(Int32)

某原子的重原子度(与之成键的原子个数,键级不参与计数)。

Parameters
NameTypeDescription
aInt32

原子索引。

Returns

邻居原子个数。

method BondOrder #
BondOrder(Int32, Int32)

查询两个原子之间的键级。

Parameters
NameTypeDescription
aInt32

第一个原子索引。

bInt32

第二个原子索引。

Returns

键级 1/2/3;两原子间无键时返回 0。

method SetBondOrder #
SetBondOrder(Int32, Int32, Int32)

修改已存在键的键级(如单键改双键);键不存在时静默忽略。

Parameters
NameTypeDescription
aInt32

键一端原子索引。

bInt32

键另一端原子索引。

newOrderInt32

新的键级(1/2/3)。

method RemoveBond #
RemoveBond(Int32, Int32)

删除两个原子之间的键(若存在)。断键后两者可能落入不同连通分量。

Parameters
NameTypeDescription
aInt32

键一端原子索引。

bInt32

键另一端原子索引。

method AddBond #
AddBond(Int32, Int32, Int32)

追加一条键(唯一推荐的"加键"入口,会自动作废派生缓存)。

Parameters
NameTypeDescription
aInt32

键一端原子索引。

bInt32

键另一端原子索引。

orderInt32

键级 1/2/3。

method SetElement #
SetElement(Int32, String)

修改某个原子的元素符号(会作废派生缓存)。

method SetCharge #
SetCharge(Int32, Int32)

修改某个原子的形式电荷(会作废派生缓存)。

method SetExplicitH #
SetExplicitH(Int32, Int32)

修改某个原子的显式氢数(会作废派生缓存)。

method AddAtom #
AddAtom(String, Int32)

向分子追加一个原子(不带任何键),返回其索引。

Parameters
NameTypeDescription
elString

元素符号,须能被价态模型识别(如 "C"、"N"、"O"、"P"、"S")。

chargeInt32

形式电荷。

Returns

新原子的索引(等于追加前的原子总数)。

method Copy #
Copy

深拷贝当前分子(元素/电荷/显式氢/键均为新列表,改动互不影响)。

Returns

与当前分子结构相同的新 Molecule 实例。

method ImplicitH #
ImplicitH(Int32)

计算某原子的隐式氢数:max(0, 价态 − Σ键级 − 显式氢)。

Parameters
NameTypeDescription
aInt32

原子索引。

Returns

隐式氢个数。

method TotalH #
TotalH(Int32)

某原子上的氢总数 = 显式氢 + 隐式氢(模式匹配中的 Hn 约束即与此值比较)。

Parameters
NameTypeDescription
aInt32

原子索引。

Returns

氢总数。

method ValenceViolations #
ValenceViolations

价态校验:返回价态超限(已成键级 + 显式氢 > 容许价态)的原子列表。

Remarks

这是规则应用的"化学合理性闸门"——变换后价态非法的产物一律被丢弃。

Returns

违规原子索引列表;为空表示全分子价态合法。

method Components #
Components

计算连通分量,即把多组分分子(如 "A.B.C")拆成若干个独立片段的原子集合。

Returns

每个分量一个原子索引列表(内部已按索引升序排列)。

method SplitComponents #
SplitComponents

把每个连通分量提取成独立的 Molecule 实例(原子索引重新编号)。

Returns

独立分子列表;单组分分子返回仅含自身的列表。

method MorganRanks #
MorganRanks(Int32)

计算 Morgan/扩展连通性(EC)迭代精化标签:以原子化学环境为初值反复用邻居 标签精化,直到分区数不再增长(或达到轮数上限)。

Remarks

初值为 (元素, 电荷, 氢总数, 重原子度, 邻接键级多重集);迭代式为 (旧标签, 邻居(标签, 键级) 多重集)。这是 Molecule.MolKey() 与 SMILES 确定性写出的排序依据。

Parameters
NameTypeDescription
roundsInt32

最大迭代轮数;分区数收敛时会提前退出。

Returns

每个原子一个标签字符串;标签相同表示化学环境等价(用于规范化排序与指纹)。

method MolKey #
MolKey

分子规范指纹:同构的分子必然得到相同字符串,异构分子(几乎必然)得到不同字符串。

Remarks

搜索用它做三件事:状态去重、循环消除、以及判定某个化合物是否属于底盘汇集合。 注意它并非严格的规范 SMILES——正则图的极端情形下理论上存在碰撞,但在代谢物 尺度可忽略。

指纹一律采用"氢总数"(Molecule.TotalH() = 显式 + 隐式)而非"显式氢":对价态合法的 原子,氢总数由元素、电荷与键级唯一决定,而显式氢数只反映 SMILES 的书写方式。若用 显式氢,同一个分子写成 N 还是 [NH3+] 会得到两个不同的指纹,导致规则 逆向生成的化合物与库里的同一化合物对不上(通路无法在起点 A 处收束)。

Returns

由 Morgan 秩编号后的原子不变量与键三元组拼成的确定性字符串。

property Elements #
Elements

各原子的元素符号(如 "C"、"N"、"O"、"Cl")。

Returns

长度等于 Molecule.NumAtoms() 的元素符号列表,下标即原子索引。

property Charges #
Charges

各原子的形式电荷(如羧基氧为 -1、铵根氮为 +1)。

Returns

长度等于 Molecule.NumAtoms() 的电荷列表。

property ExplicitH #
ExplicitH

各原子的显式氢数目(来自 [NH3+] 这类括号记号;隐式氢不计入此处)。

Returns

长度等于 Molecule.NumAtoms() 的显式氢计数列表。

property Bonds #
Bonds

化学键列表,每项为 (a, b, order),其中 order 取 1/2/3(单/双/三键)。

Remarks

请优先使用 Molecule.AddBond()、Molecule.SetBondOrder()、Molecule.RemoveBond() 修改键表:直接改这个列表会让下面几个派生缓存失效不了,从而读到陈旧结果。

Returns

分子内全部共价键。

field _adjacency #
_adjacency

邻接表缓存(惰性构建):每个原子一个 (邻居索引, 键级) 列表。

field _morgan #
_morgan

Morgan 秩缓存(惰性构建)。

field _molKey #
_molKey

Molecule.MolKey() 结果缓存(惰性构建)。