4.3.1. 氢键分析 MDAnalysis.analysis.hydrogenbonds.hbond_analysis

作者:

保罗·史密斯

:

2019

版权所有:

GNU公共许可证v3

在 1.0.0 版本加入.

本单元提供了在宇宙中寻找和分析氢键的方法。

这个 HydrogenBondAnalysis 类是原始版本的新版本 MDAnalysis.analysis.hbonds.HydrogenBondAnalysis 从模块中初始化 MDAnalysis.analysis.hbonds.hbond_analysis ,它本身就是以 VMD HBONDS plugin

4.3.1.1. 输入

要求:
  • 宇宙 :一个MDAnalyse宇宙对象

选项:
  • donors_sel [None] : Atom selection for donors. If None, then will be identified via the topology.

  • hydrogens_sel [None] : Atom selection for hydrogens. If None, then will be identified via charge and mass.

  • acceptors_sel [None] : Atom selection for acceptors. If None, then will be identified via charge.

  • d_h_cutoff (?) [1.2] :用于寻找施主-氢对的距离截止点

  • d_a_cutoff (?) [3.0] :氢键的距离截止。此截止距离指的是D-A距离。

  • d_h_a_angle_cutoff (度) [150] :D-H-氢键的截止角。

  • update_selections [True] : If true, will update atom selections at each frame.

4.3.1.2. 输出

  • 框架 :发现氢键的帧

  • 捐赠者ID :氢键施主原子的原子ID

  • 氢气ID :氢键氢原子的原子id

  • 接受者ID :氢键受体原子的原子ID

  • 距离 (?):氢键的长度

  • 角度 (度):氢键角度

氢键数据在 numpy.ndarray 在“一行一观察”的基础上,可以通过 HydrogenBondAnalysis.results.hbonds ::

results = [
    [
        <frame>,
        <donor index (0-based)>,
        <hydrogen index (0-based)>,
        <acceptor index (0-based)>,
        <distance>,
        <angle>
    ],
    ...
]

4.3.1.3. 的用法示例 HydrogenBondAnalysis

最简单的用例是允许 HydrogenBondAnalysis 要猜测受体和氢原子,并通过拓扑中的成键信息确定施主-氢对:

import MDAnalysis
from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA

u = MDAnalysis.Universe(psf, trajectory)

hbonds = HBA(universe=u)
hbonds.run()

还可以指定在分析中使用哪些氢和受体。例如,要查找水中的所有氢键::

import MDAnalysis
from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA

u = MDAnalysis.Universe(psf, trajectory)

hbonds = HBA(universe=u, hydrogens_sel='resname TIP3 and name H1 H2', acceptors_sel='resname TIP3 and name OH2')
hbonds.run()

或者, hydrogens_selacceptors_sel 可以通过 guess_hydrogensguess_acceptors 。然后可以在调用之前修改该选择字符串 run ,或者宇宙的一个子集可以用来猜测原子。例如,查找属于某个蛋白质的氢和受体::

import MDAnalysis
from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA

u = MDAnalysis.Universe(psf, trajectory)

hbonds = HBA(universe=u)
hbonds.hydrogens_sel = hbonds.guess_hydrogens("protein")
hbonds.acceptors_sel = hbonds.guess_acceptors("protein")
hbonds.run()

也可以使用稍微复杂一些的选择字符串。例如,要找到涉及蛋白质和蛋白质10?以内的任何水分子的氢键(这可能有助于随后确定蛋白质-水氢键的寿命或寻找水桥氢键路径):

import MDAnalysis
from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA

u = MDAnalysis.Universe(psf, trajectory)

hbonds = HBA(universe=u)

protein_hydrogens_sel = hbonds.guess_hydrogens("protein")
protein_acceptors_sel = hbonds.guess_acceptors("protein")

water_hydrogens_sel = "resname TIP3 and name H1 H2"
water_acceptors_sel = "resname TIP3 and name OH2"

hbonds.hydrogens_sel = f"({protein_hydrogens_sel}) or ({water_hydrogens_sel} and around 10 not resname TIP3})"
hbonds.acceptors_sel = f"({protein_acceptors_sel}) or ({water_acceptors_sel} and around 10 not resname TIP3})"
hbonds.run()

要计算不同基团之间的氢键,例如蛋白质和水,可以使用 between 关键字。下面将发现蛋白质-水氢键,但不会发现蛋白质-蛋白质或水-水氢键:

import MDAnalysis
from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import (
  HydrogenBondAnalysis as HBA)

u = MDAnalysis.Universe(psf, trajectory)

hbonds = HBA(
  universe=u,
  between=['resname TIP3', 'protein']
  )

protein_hydrogens_sel = hbonds.guess_hydrogens("protein")
protein_acceptors_sel = hbonds.guess_acceptors("protein")

water_hydrogens_sel = "resname TIP3 and name H1 H2"
water_acceptors_sel = "resname TIP3 and name OH2"

hbonds.hydrogens_sel = f"({protein_hydrogens_sel}) or ({water_hydrogens_sel})"
hbonds.acceptors_sel = f"({protein_acceptors_sel}) or ({water_acceptors_sel})"

hbonds.run()

还可以用来计算几个基团之间的氢键 between 。如果在上面的示例中, between=[['resname TIP3', 'protein'], ['protein', 'protein']] ,所有蛋白质-水和蛋白质-蛋白质氢键都存在,但没有水-水氢键。

人们还可以用原子类型定义氢键::

from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
hbonds = HBA(
             universe=u,
             donors_sel='type 2',
             hydrogens_sel='type 1',
             acceptors_sel='type 2',
            )

为了计算氢键寿命,在找到氢键后,可以使用 lifetime 功能::

...
hbonds.run()
tau_timeseries, timeseries = hbonds.lifetime()

它是 强烈推荐 使用具有键合信息的拓扑来生成宇宙,例如 PSFTPR ,或 PRMTOP 档案。这是唯一可以保证正确识别施主-氢对的方法。然而,如果,例如,一个 PDB 文件,则会使用一个 donors_sel 可随附 hydrogens_sel 并且将通过距离截断来识别施主-氢对, d_h_cutoff ::

import MDAnalysis
from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import (
  HydrogenBondAnalysis as HBA)

u = MDAnalysis.Universe(pdb, trajectory)

hbonds = HBA(
  universe=u,
  donors_sel='resname TIP3 and name OH2',
  hydrogens_sel='resname TIP3 and name H1 H2',
  acceptors_sel='resname TIP3 and name OH2',
  d_h_cutoff=1.2
)
hbonds.run()

4.3.1.4. 类及其方法

class MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis(universe, donors_sel=None, hydrogens_sel=None, acceptors_sel=None, between=None, d_h_cutoff=1.2, d_a_cutoff=3.0, d_h_a_angle_cutoff=150, update_selections=True)[源代码]

对宇宙中的氢键进行分析。

建立在宇宙中寻找氢键的原子选择和几何标准。

氢键选择与 donors_selhydrogens_sel ,以及 acceptors_sel 可以通过以下任一方式实现 resname ,Atom name 结合,或当那些不存在时,与原子结合 type 选择。

参数:
  • universe (Universe) -- MDAnalysis语义层对象

  • donors_sel (str) -- 氢键施主原子的选择字符串。如果宇宙拓扑包含绑定信息,请离开 donors_sel 作为 None 这样才能正确地识别施主-氢对。

  • hydrogens_sel (str) -- 氢键氢原子的选择字符串。保留为 None 猜测要在分析中使用的氢原子 guess_hydrogens 。如果 hydrogens_sel 保留为 None ,也离开 donors_sel 为无,因此可以正确地识别施主-氢对。

  • acceptors_sel (str) -- 氢键受体原子的选择字符串。保留为 None 猜测要在分析中使用哪些原子 guess_acceptors

  • between (List (optional),) -- 为要计算氢键的非更新原子基团指定两个选择字符串。例如,如果供体和受体的选择既包括蛋白质又包括水,通过指定介于=之间,可以只找到蛋白质-水氢键,而不是蛋白质-蛋白质或水-水。 [“蛋白质”、“溶胶”] 。如果通过一个二维列表,就会发现每对分子之间存在氢键。例如,BETWING= [[“蛋白质”,“溶胶”] , [“蛋白质”,“蛋白质”] 将计算所有蛋白质-水和蛋白质-蛋白质氢键,但不计算水-水氢键。如果 `None ,将计算所有施主和受主之间的氢键。

  • d_h_cutoff (float (optional)) -- 用于寻找施主-氢对的距离截止点。仅用于在宇宙拓扑不包含成键信息时寻找施主-氢对

  • d_a_cutoff (float (optional)) -- 氢键的距离截止点。此截止距离指的是D-A距离。

  • d_h_a_angle_cutoff (float (optional)) -- D-H-氢键的截止角,以度为单位。

  • update_selections (bool (optional)) -- 是否更新每一帧上的受主、施主和氢列表。

备注

强烈建议使用带有键信息的宇宙拓扑,因为这是确保正确识别施主-氢对的唯一方法。

在 2.0.0 版本加入: 已添加 between 关键字

在 2.4.0 版本发生变更: 在氢原子、键供体或键受体的选择字符串中增加了原子类型的使用

results.hbonds

A numpy.ndarray 其中包含所有观察到的氢键相互作用的列表。看见 Output 了解更多信息。

在 2.0.0 版本加入.

hbonds

的别名 results.hbonds 属性。

自 2.0.0 版本弃用: 将在MDAnalysis 3.0.0中删除。请使用 results.hbonds 取而代之的是。

count_by_ids()[源代码]

计算由给体、氢原子和受体原子的独特组合形成的氢键总数。

返回:

计数 --阵列的每一行包含施主原子id、氢原子id、受主原子id和观察到氢键的总次数。该数组按出现频率排序。

返回类型:

numpy.ndarray

备注

通过考虑氢键中的氢原子id和受体原子id来确定唯一的氢键。

count_by_time()[源代码]

计算每个时间步的氢键数量。

返回:

计数 --包含每个时间步发现的氢键总数。可以与一起使用 HydrogenBondAnalysis.times 绘制氢键随时间变化的数量图。

返回类型:

numpy.ndarray

count_by_type()[源代码]

统计每种唯一类型氢键的总数。

返回:

计数 --阵列的每一行包含施主重命名、施主原子类型、受主重命名、受主原子类型和发现氢键的总次数。

返回类型:

numpy.ndarray

备注

独特的氢键是通过考虑氢键中给体和受体原子的更名和原子类型来确定的。

guess_acceptors(select='all', max_charge=-0.5)[源代码]

猜测哪些原子可以被认为是分析中的接受者。

接受者的选择可以通过改名、原子名称组合来实现,或者当这些名称不存在时,可以通过原子类型来实现。

参数:
  • select (str (optional)) -- Selection string 对于将从中识别接受者的原子基团。(例如, (resname X and name O1)type 2 )

  • max_charge (float (optional)) -- 受主原子的电荷必须小于此值。

返回:

potential_acceptors --包含 resnamename 在所有可能形成氢键的原子中。

返回类型:

str

备注

接受者的选择可以通过改名、原子名称组合来实现,或者当这些名称不存在时,可以通过原子类型来实现。

这个函数利用和原子电荷来识别在氢键分析中哪些原子可以被认为是受主原子。如果一个原子的原子电荷小于 max_charge 那么它就被认为能够参与氢键。

如果 acceptors_selNone ,则调用此函数来猜测选择。

或者,此函数可用于快速生成 str 参与氢键的潜在受体原子。这 str 然后可以在用于设置属性之前进行修改 acceptors_sel

在 2.4.0 版本发生变更: 增加了使用原子类型的能力

guess_donors(select='all', max_charge=-0.5)[源代码]

猜测哪些原子可以被认为是分析中的供体。仅当宇宙拓扑不包含成键信息时才使用,否则可能会错误地指定施主-氢对。

参数:
  • select (str (optional)) -- Selection string 对于将从中确定捐赠者的ATOM组。(例如, (resname X and name O1)type 2 )

  • max_charge (float (optional)) -- 施主原子的电荷必须小于此值。

返回:

potential_donors --包含 resnamename 在所有可能形成氢键的原子中。

返回类型:

str

备注

给体选择可以通过更名、原子名称组合来实现,或者当这些名称不存在时,通过原子类型来实现。

这个函数利用和原子电荷来识别在氢键分析中哪些原子可以被认为是给体原子。如果一个原子的原子电荷小于 max_charge ,而且它在 d_h_cutoff 如果是氢原子,则认为它能够参与氢键。

如果 donors_selNone ,并且宇宙拓扑没有绑定信息,则调用此函数来猜测选择。

或者,此函数可用于快速生成 str 参与氢键的潜在施主原子。这 str 然后可以在用于设置属性之前进行修改 donors_sel

在 2.4.0 版本发生变更: 增加了使用原子类型的能力

guess_hydrogens(select='all', max_mass=1.1, min_charge=0.3, min_mass=0.9)[源代码]

猜测应该在分析中使用哪些氢原子。

参数:
  • select (str (optional)) -- Selection string 对于将从其中识别氢的原子基团。(例如, (resname X and name H1)type 2 )

  • max_mass (float (optional)) -- 氢原子的质量必须小于这个值。

  • min_mass (float (optional)) -- 氢原子的质量必须大于这个值。

  • min_charge (float (optional)) -- 氢原子的电荷必须大于这个值。

返回:

potential_hydrogens --包含 resnamename 在所有可能形成氢键的氢原子中。

返回类型:

str

备注

氢的选择可以通过重新命名、原子名称组合来实现,或者当这些名称不存在时,可以通过原子类型来实现。

这个函数利用原子质量和原子电荷来识别哪些原子是能够参与氢键的氢原子。如果一个原子的质量小于 max_mass 原子的电荷大于 min_charge 那么它就被认为能够参与氢键。

如果 hydrogens_selNone ,则调用此函数来猜测选择。

或者,此函数可用于快速生成 str 与氢键有关的潜在氢原子。然后,可以在使用该字符串设置属性之前对其进行修改 hydrogens_sel

在 2.4.0 版本发生变更: 增加了使用原子类型的能力

lifetime(tau_max=20, window_step=1, intermittency=0)[源代码]

计算并返回氢键的时间自相关(氢键寿命)。

在调用此方法之前,必须首先使用 run() 功能。相同 startstopstep 这里将使用寻找氢键时使用的参数来计算氢键寿命。也就是说,在分析中将使用相同的框架。

使用氢-受体对识别独特的氢键。这意味着受主从一帧到下一帧切换到不同的氢原子-具有相同的施主-被认为是不同的氢键。

请看 MDAnalysis.lib.correlations.autocorrelation()MDAnalysis.lib.correlations.intermittency() 函数以了解更多详细信息。

参数:
  • window_step (int, optional) -- 每个t(0)之间的帧数量。

  • tau_max (int, optional) -- 氢键寿命的计算范围为1<= tau <= tau_max

  • intermittency (int, optional) -- 债券可以消失但在下一帧返回时被视为存在的连续帧的最大数量。间歇性的 0 相当于连续的自相关,这不允许氢键消失。例如,对于 intermittency=2 ,任何给定的氢键可能在最多两个连续的帧中消失,但被视为在所有帧中都存在。默认值为连续(间歇=0)。

返回:

  • tau_timeseries ( np.array )--tau从1到 tau_max

  • 时装剧 ( np.array )--每个值的自相关值 tau