4.2.6. 计算路径相似度 MDAnalysis.analysis.psa

作者:

肖恩·塞勒

:

2015

版权所有:

GNU公共许可证v3

在 0.10.0 版本加入.

该模块包含使用路径度量(如Hausdorff距离或Fréchet距离)计算轨迹几何相似性的代码 [Seyler2015] 。路径度量是两条路径的函数,并且返回非负数,即距离。如果两条路径的距离为零,则它们是相同的,距离越大表示不同。每个路径度量是组成每个路径的各个点(例如,坐标快照)的函数,并且不严格地说,标识路径偏离最大的两个点,路径对中的每个路径一个点。这些最大偏差点之间的距离通过均方根偏差(RMSD)来测量,即计算结构相似性。

人们通常计算路径集合的成对相似性以产生对称距离矩阵,该对称距离矩阵可以被聚类以一目了然地识别轨迹数据中的模式。为了适当地分析路径系综,必须选择适当的参考结构,其中所有路径(每条路径中的每个构象)都将使用由最适合的RMSD确定的旋转来通用地对齐。然后直接计算路径及其结构之间的距离,无需进一步对齐。这一预处理步骤对于保持Hausdorff和Fréchet度量的度量属性是必要的;在两两的基础上使用最佳拟合的RMSD通常不会保持三角不等性。

备注

这个 PSAnalysisTutorial 概述了PSA对一组轨迹的典型应用,包括进行适当的对齐、执行距离比较以及从层次聚类生成热图-树状图。

参考文献

[Seyler2015] (1,2,3,4,5,6,7,8,9,10,11,12)

Sean L. Seyler, Avishek Kumar, M. F. Thorpe, and Oliver Beckstein. Path similarity analysis: a method for quantifying macromolecular pathways. PLOS Computational Biology, 11(10):1–37, 10 2015. doi:10.1371/journal.pcbi.1004568.

4.2.6.1. 帮助器函数和变量

本模块中的其他函数使用以下便利函数。

MDAnalysis.analysis.psa.sqnorm(v, axis=None)[源代码]

计算沿指定轴线的元素平方和。

参数:
  • v (numpy.ndarray) -- 坐标

  • axes (None / int / tuple (optional)) -- 一条或多条轴,沿着这些轴进行求和。默认设置( axes = None )对输入数组的所有维度执行求和。的价值 axes 可以是负的,在这种情况下,它从最后一个轴到第零个轴进行计数。

返回:

的元素的平方和 v 沿着 axes

返回类型:

float

MDAnalysis.analysis.psa.get_msd_matrix(P, Q, axis=None)[源代码]

生成路径之间的成对均方差矩阵。

中所有点对之间的MSD PQ ,每对都有一个点,从 P 和一分来自 Q

P (Q) is a numpy.ndarray of \(N_p\) (\(N_q\)) time steps, \(N\) atoms, and \(3N\) coordinates (e.g., MDAnalysis.core.groups.AtomGroup.positions). The pairwise MSD matrix has dimensions \(N_p\) by \(N_q\).

参数:
返回:

msd_matrix --中的点之间的成对MSD矩阵 P 和点在一起 Q

返回类型:

numpy.ndarray

备注

我们计算MSD矩阵

\[M_{ij}=||p_i-q_j||^2\]

哪里 \(p_i \in P\)\(q_j \in Q\)

MDAnalysis.analysis.psa.get_coord_axes(path)[源代码]

返回与给定路径的原子和坐标对应的原子数和轴。

这个 path 被假定为 numpy.ndarray 其中,第0轴对应于一个帧(坐标的快照)。这个 \(3N\) (笛卡尔)坐标假定为:

  1. 都在第一个轴上,从第一个原子的x,y,z坐标开始,后跟 xyz 2号的坐标等。

  2. 在第一个月 and 第二个轴,其中第一个轴索引原子序数,第二个轴包含 xyz 每个原子的坐标。

参数:

path (numpy.ndarray) -- 表示一条路径

返回:

原子的数量和包含坐标的轴

返回类型:

(int, (int, ...))

4.2.6.2. 类、方法和函数

MDAnalysis.analysis.psa.get_path_metric_func(name)[源代码]

按名称选择路径度量函数。

参数:

name (str) -- 路径度量的名称

返回:

path_metric --由指定的路径度量函数 name (如果找到)。

返回类型:

function

MDAnalysis.analysis.psa.hausdorff(P, Q)[源代码]

计算两条路径之间的对称Hausdorff距离。

使用的度量是RMSD,而不是更传统的L2(欧几里得)范数,因为这对于比较蛋白质构型是方便的。

P (Q) is a numpy.ndarray of \(N_p\) (\(N_q\)) time steps, \(N\) atoms, and \(3N\) coordinates (e.g., MDAnalysis.core.groups.AtomGroup.positions). P (Q) has either shape \(N_p \times N \times 3\) (\(N_q \times N \times 3\)), or \(N_p \times (3N)\) (\(N_q \times (3N)\)) in flattened form.

请注意,反转路径不会更改Hausdorff距离。

参数:
返回:

路之间的Hausdorff距离 PQ

返回类型:

float

示例

计算轨迹两半之间的Hausdorff距离:

>>> import MDAnalysis as mda
>>> import numpy
>>> from MDAnalysis.tests.datafiles import PSF, DCD
>>> from MDAnalysis.analysis import psa
>>> u = mda.Universe(PSF,DCD)
>>> mid = int(len(u.trajectory)/2)
>>> ca = u.select_atoms('name CA')
>>> P = numpy.array([
...                ca.positions for _ in u.trajectory[:mid:]
...              ]) # first half of trajectory
>>> Q = numpy.array([
...                ca.positions for _ in u.trajectory[mid::]
...              ]) # second half of trajectory
>>> psa.hausdorff(P,Q)
4.778663899862152
>>> psa.hausdorff(P,Q[::-1]) # hausdorff distance w/ reversed 2nd trajectory
4.778663899862152

备注

scipy.spatial.distance.directed_hausdorff() 是对早期中断算法的优化实现 [Taha2015] ;后一个代码在这里用于计算具有RMSD度量的对称Hausdorff距离

引用

[Taha2015] (1,2,3)

Abdel Aziz Taha and Allan Hanbury. An efficient algorithm for calculating the exact hausdorff distance. IEEE Transactions on Pattern Analysis and Machine Intelligence, 37(11):2153–2163, 2015. doi:10.1109/TPAMI.2015.2408351.