7.3. RDKit拓扑解析器 MDAnalysis.converters.RDKitParser

转换为 RDKit rdkit.Chem.rdchem.Mol 变成一个 MDAnalysis.core.Topology

7.3.1. 班级

class MDAnalysis.converters.RDKitParser.RDKitParser(filename)[源代码]

对于RDKit结构

创建以下属性:
  • 原子团

  • 原子名称

  • 芳香性

  • 元素

  • 群众

  • 债券

  • Resids

  • 重新编号

  • RSChirality

  • 塞吉斯

猜测如下:
  • 原子类型

根据RDKit的输入,可能会出现以下属性:
  • 收费

  • 重命名

  • AltLocs

  • ChainIDs

  • ICodes

  • 占有率

  • 暂时性因素

属性表:

RDKit属性

MDAnalysis等效项

Atom.GetMonomerInfo().GetAltLoc()

AltLocs

Atom.GetIsAroma()

芳香性

Top.GetMonomerInfo().GetChainId()

链ID

ATOM.GetDoubleProp(‘_GasteigerCharge’)ATOM.GetDoubleProp(‘_TriposPartialCharge’)

收费

原子.GetSymbol()

元素

Atom.GetMonomerInfo().GetInsertionCode()

金龟子

Top.GetIdx()

指数

Atom.GetMasse()

群众

Tom.GetMonomerInfo().GetName()tom.GetProp(‘_TriposAir Name’)

姓名

ATOM.GetProp(‘_CIPCode’)

手性

Top.GetMonomerInfo().GetOccuancy()

占有率

Aom.GetMonomerInfo().GetResidueName()

更名

Atom.GetMonomerInfo().GetResidueNumber()

重新编号

Atom.GetMonomerInfo().GetTempFactor()

诱因

ATOM.GetProp(‘_TriposAir Type’)

类型

抛出:

ValueError -- 如果只有一部分原子具有可用的单体信息

在 2.0.0 版本加入.

在 2.1.0 版本发生变更: 添加了R/S手性支持

close()

关闭轨迹文件。

convert_forces_from_native(force, inplace=True)

力阵的换算 从原生单位到基本单位

参数:
  • force (array_like) -- 转型的力量

  • inplace (bool (optional)) -- 是否就地修改数组,覆盖以前的数据

备注

默认情况下,输入 被就地修改并也被返回。就地操作提高了性能,因为避免了分配新阵列。

在 0.7.7 版本加入.

convert_forces_to_native(force, inplace=True)

力阵的换算 从基本单位到原生单位。

参数:
  • force (array_like) -- 转型的力量

  • inplace (bool (optional)) -- 是否就地修改数组,覆盖以前的数据

备注

默认情况下,输入 force 被就地修改并也被返回。就地操作提高了性能,因为避免了分配新阵列。

在 0.7.7 版本加入.

convert_pos_from_native(x, inplace=True)

坐标数组x从原生单位到基本单位的转换。

参数:
  • x (array_like) -- 要转型的职位

  • inplace (bool (optional)) -- 是否就地修改数组,覆盖以前的数据

备注

默认情况下,输入 x 被就地修改并也被返回。就地操作提高了性能,因为避免了分配新阵列。

在 0.7.5 版本发生变更: 关键字 inplace 可以设置为 False 以便返回修改后的副本 除非 不会发生转换,在这种情况下,对未修改的 x 返回。

convert_pos_to_native(x, inplace=True)

坐标数组的转换 x 从基本单位到本地单位。

参数:
  • x (array_like) -- 要转型的职位

  • inplace (bool (optional)) -- 是否就地修改数组,覆盖以前的数据

备注

默认情况下,输入 x 被就地修改并也被返回。就地操作提高了性能,因为避免了分配新阵列。

在 0.7.5 版本发生变更: 关键字 inplace 可以设置为 False 以便返回修改后的副本 除非 不会发生转换,在这种情况下,对未修改的 x 返回。

convert_time_from_native(t, inplace=True)

转换时间 t 从原生单位到基本单位。

参数:
  • t (array_like) -- 要转换的时间值

  • inplace (bool (optional)) -- 是否就地修改数组,覆盖以前的数据

备注

默认情况下,输入 t 被就地修改并返回(尽管请注意标量值 t 在Python中通过值传递,因此就地修改对调用方没有任何影响。)就地操作提高了性能,因为避免了分配新阵列。

在 0.7.5 版本发生变更: 关键字 inplace 可以设置为 False 以便返回修改后的副本 除非 不会发生转换,在这种情况下,对未修改的 x 返回。

convert_time_to_native(t, inplace=True)

转换时间 t 从基本单位到本地单位。

参数:
  • t (array_like) -- 要转换的时间值

  • inplace (bool, optional) -- 是否就地修改数组,覆盖以前的数据

备注

默认情况下,输入 t 被就地修改并也被返回。(另请注意,标量值 t 在Python中通过值传递,因此就地修改对调用方没有任何影响。)

在 0.7.5 版本发生变更: 关键字 在位 可以设置为 False 以便返回修改后的副本 除非 不会发生转换,在这种情况下,对未修改的 x 返回。

convert_velocities_from_native(v, inplace=True)

速度阵的换算 v 从原生单位到基本单位

参数:
  • v (array_like) -- 转型的速度

  • inplace (bool (optional)) -- 是否就地修改数组,覆盖以前的数据

备注

默认情况下,输入 v 被就地修改并也被返回。就地操作提高了性能,因为避免了分配新阵列。

在 0.7.5 版本加入.

convert_velocities_to_native(v, inplace=True)

坐标数组的转换 v 从基本单位到原生单位

参数:
  • v (array_like) -- 转型的速度

  • inplace (bool (optional)) -- 是否就地修改数组,覆盖以前的数据

备注

默认情况下,输入 v 被就地修改并也被返回。就地操作提高了性能,因为避免了分配新阵列。

在 0.7.5 版本加入.

parse(**kwargs)[源代码]

将RDKit解析为拓扑

返回类型:

MDAnalysis Topology object

units = {'length': None, 'time': None, 'velocity': None}

带有以下单位的词典 time长度 (及 速度 ..用于支持它的格式)

7.4. RDKit分子I/O MDAnalysis.converters.RDKit

从读取坐标数据 RDKit rdkit.Chem.rdchem.Mol 使用 RDKitReader 进入一个多维分析宇宙。将其转换回 rdkit.Chem.rdchem.Mol 使用 RDKitConverter

示例

要读取RDKit分子,然后将原子组转换回RDKit分子:

>>> from rdkit import Chem
>>> import MDAnalysis as mda
>>> mol = Chem.MolFromMol2File("docking_poses.mol2", removeHs=False)
>>> u = mda.Universe(mol)
>>> u
<Universe with 42 atoms>
>>> u.trajectory
<RDKitReader with 10 frames of 42 atoms>
>>> u.atoms.convert_to("RDKIT")
<rdkit.Chem.rdchem.Mol object at 0x7fcebb958148>

警告

RDKit转换器当前 实验性的 而且可能并不是所有的分子都能像预期的那样工作。目前,转换器准确地推断出大约99%的 ChEMBL27 数据集。目前正在进行进一步改进这一点的工作,预计在MDAnalysis的未来版本中将更新该转换器。请看 Issue #3339 以及 RDKitConverter benchmark 了解更多详细信息。

7.4.1. 班级

class MDAnalysis.converters.RDKit.RDKitReader(filename, **kwargs)[源代码]

RDKit的坐标读取器。

在 2.0.0 版本加入.

从RDKit分子读取坐标。原始RDKit分子中的每个构象都将被解读为结果宇宙中的一个框架。

参数:

filename (rdkit.Chem.rdchem.Mol) -- RDKit分子

units = {'length': 'Angstrom', 'time': None}

带有以下单位的词典 time长度 (及 速度 ..用于支持它的格式)

class MDAnalysis.converters.RDKit.RDKitConverter[源代码]

转换MDAnalysis AtomGroupUniverse 至RDKit Mol

MDanalysis属性存储在每个RDKit中 Atom 以两种不同的方式生成的分子:

支持的属性:

MDAnalysis属性

RDKit

AltLocs

Atom.GetMonomerInfo().GetAltLoc()

链ID

Top.GetMonomerInfo().GetChainId()

金龟子

Atom.GetMonomerInfo().GetInsertionCode()

姓名

Tom.GetMonomerInfo().GetName()tom.GetProp(“_MDAnalysis_Name”)

占有率

Top.GetMonomerInfo().GetOccuancy()

更名

Aom.GetMonomerInfo().GetResidueName()

居留

Atom.GetMonomerInfo().GetResidueNumber()

段索引

Atom.GetMonomerInfo().GetSegmentNumber()

诱因

Atom.GetMonomerInfo().GetTempFactor()

收费

ATOM.GetDoubleProp(“_MDAnalysis_Charge”)

指数

Tom.GetIntProp(“_MDAnalysis_INDEX”)

塞吉斯

ATOM.GetProp(“_MDAnalysis_segid”)

类型

ATOM.GetProp(“_MDAnalysis_TYPE”)

示例

要访问MDAnalysis属性,请执行以下操作:

>>> import MDAnalysis as mda
>>> from MDAnalysis.tests.datafiles import PDB_full
>>> u = mda.Universe(PDB_full)
>>> mol = u.select_atoms('resname DMS').convert_to('RDKIT')
>>> mol.GetAtomWithIdx(0).GetMonomerInfo().GetResidueName()
'DMS'

要为轨迹的每一帧创建分子,请执行以下操作:

from MDAnalysisTests.datafiles import PSF, DCD
from rdkit.Chem.Descriptors3D import Asphericity

u = mda.Universe(PSF, DCD)
elements = mda.topology.guessers.guess_types(u.atoms.names)
u.add_TopologyAttr('elements', elements)
ag = u.select_atoms("resid 1-10")

for ts in u.trajectory:
    mol = ag.convert_to("RDKIT")
    x = Asphericity(mol)

备注

该转换器需要 Elements 属性出现在拓扑中,否则它将失败。

它还要求 bonds 属性,但如果它们不存在,则会被自动猜中。

氢在拓扑文件中应该是显式的。如果不是这样,请使用参数 NoImplicit=False 当使用转换器以允许隐式氢气并禁用推断键合顺序和电荷时。

由于转换器的主要用例之一是转换轨迹,而不仅仅是拓扑,因此为每一帧从头开始创建新分子将太慢,因此转换器使用缓存系统。缓存只存储最近转换的2个原子组,并且对传递给转换器的参数非常敏感。可以使用函数更改缓存的对象数量 set_converter_cache_size() 。然而, ag.convert_to("RDKIT") 紧随其后的是 ag.convert_to("RDKIT", NoImplicit=False) 将不使用缓存,因为给出的参数不同。您可以传递一个 cache=False 参数设置为转换器以绕过缓存系统。

这个 _MDAnalysis_index 得到的分子的性质对应于特定分子的指数 AtomGroup 这可能并不总是与 index 财产。

要更好地了解转换器的幕后工作原理,请参考以下RDKit UGM演示文稿:

有一些包含特定图案的分子目前无法正确处理。看见 Issue #3339 了解更多信息。

在 2.0.0 版本加入.

在 2.2.0 版本发生变更: 提高了转换器的精度。得到的分子中的原子现在遵循与原子组中相同的顺序。的输出 atom.GetMonomerInfo().GetName() 现在遵循PDB文件的指导原则,而原始名称仍可通过 atom.GetProp("_MDAnalysis_name")

convert(obj, cache=True, NoImplicit=True, max_iter=200, force=False)[源代码]

将当前轨迹帧上的选择写入 Mol

参数:
  • obj (AtomGroup or Universe) --

  • cache (bool) -- 使用分子拓扑的缓存副本(如果可用)。要使用,缓存的分子和新的分子必须来自相同的原子组选择,并且具有传递给转换器的相同参数

  • NoImplicit (bool) -- 防止在分子中添加氢

  • max_iter (int) -- 使共轭系统标准化的最大迭代次数。看见 _rebuild_conjugated_bonds()

  • force (bool) -- 未检测到氢气时强制转换,但 NoImplicit=True 。主要用于无机分子。

units = {'length': 'Angstrom', 'time': None}

带有以下单位的词典 time长度 (及 速度 ..用于支持它的格式)

MDAnalysis.converters.RDKit._infer_bo_and_charges(mol)[源代码]

从分子中推断出键级和形式电荷。

由于大多数MD拓扑文件没有显式地保留有关键顺序或电荷的信息,因此必须从拓扑中进行猜测。这是通过在每个原子上循环,并将其预期价态与当前价态进行比较以获得未配对电子的数量(NUE)来完成的。如果一个原子有一个负的NUE,它需要一个正的形式电荷(-NUE)。如果两个相邻的原子有UE,它们之间的键很可能必须以最小的NUE的值增加。如果在这个过程之后,一个原子仍然有UE,它需要一个负的形式电荷-NUE。

参数:

mol (rdkit.Chem.rdchem.RWMol) -- 分子被就地修饰,并且必须添加所有的氢

备注

该算法依赖于顺序。例如,对于羧酸基R-C(-O)-O,第一个氧读数将获得双键,而另一个将带电。它还会影响更复杂的共轭体系。

MDAnalysis.converters.RDKit._standardize_patterns(mol, max_iter=200)[源代码]

使功能团体标准化

用途 _rebuild_conjugated_bonds() 以标准化共轭体系,并为其他官能团进行智能反应。由于反应的方式,我们首先必须将分子分成碎片。然后,对于每个片段,我们应用标准化反应。最后,片段被重组。

参数:
返回:

mol --标准化分子

返回类型:

rdkit.Chem.rdchem.Mol

备注

以下官能团按此顺序转换:

名字

反应

共轭的

[*-:1]-[*:2]=[*:3]-[*-:4]>>[*+0:1]=[*:2]-[*:3]=[*+0:4]

共轭N+

[N;X3;v3:1]-[*:2]=[*:3]-[*-:4]>>[N+:1]=[*:2]-[*:3]=[*+0:4]

共轭O-

[O:1]=[#6+0,#7+:2]-[*:3]=[*:4]-[*-:5]>>[O-:1]-[*:2]=[*:3]-[*:4]=[*+0:5]

共轭。S=O

[O-:1]-[S;D4;v4:2]-[*:3]=[*:4]-[*-:5]>>[O+0:1]=[*:2]=[*:3]-[*:4]=[*+0:5]

CTerm

[C-;X2;H0:1]=[O:2]>>[C+0:1]=[O:2]

NTerm

[N-;X2;H1;$(N-[*^3]):1]>>[N+0:1]

酮基烯醇型

[#6-:1]-[#6:2]=[O:3]>>[#6+0:1]=[#6:2]-[O-:3]

精氨酸

[C-;v3:1]-[#7+0;v3;H2:2]>>[#6+0:1]=[#7+:2]

组氨酸

[#6+0;H0:1]=[#6+0:2]-[#7;X3:3]-[#6-;X3:4]>>[#6:1]=[#6:2]-[#7+:3]=[#6+0:4]

砜酮

[S;D4;!v6:1]-[*-:2]>>[S;v6:1]=[*+0:2]

带电N

[#7+0;X3:1]-[*-:2]>>[#7+:1]=[*+0:2]

MDAnalysis.converters.RDKit._rebuild_conjugated_bonds(mol, max_iter=200)[源代码]

在共轭体系的开始和结束没有带负电荷的原子的情况下重建共轭键

根据在转换过程中读取原子的顺序, _infer_bo_and_charges() 函数可以将具有双键的共轭体系写成阴离子,而不是通常交替的单键和双键。此函数通过使用迭代过程纠正此行为。有问题的分子总是遵循相同的模式: anion[-*=*]n-anion 而不是 *=[*-*=]n* ,在哪里 n 是连续的单键和双键的数目。迭代过程的目标是使 n 通过连续变换使其尽可能小 anion-*=* 变成 *=*-anion 直到它达到最小的图案 n=1 。然后,将最后一个模式从 anion-*=*-anion*=*-*=* 。因为 anion-*=* 是否与 *=*-anion 就智能而言,我们可以控制不会通过将原子的索引添加到列表来来回转换相同的三元组原子。此函数还处理具有三键的共轭体系。分子需要首先进行键合,才能覆盖带有芳香环的体系。

参数:

备注

分子被就地修饰。