我正在尝试使用 MDAnalysis ( MDAnalysis.__version__ == 0.17.0
) API 函数principal_axes()
并moment_of_inertia()
为一组选定的原子计算这些矩阵,如文档中所述:
import MDAnalysis
from MDAnalysis.tests.datafiles import PSF, DCD
import numpy as np
u = MDAnalysis.Universe(PSF, DCD)
CA = u.select_atoms("protein and name CA")
I = np.matrix(CA.moment_of_inertia())
U = np.matrix(CA.principal_axes())
print("center of mass", CA.center_of_mass())
print("moment of inertia", I)
print("principal axes", U)
print("Lambda = U'IU", np.transpose(U)*I*U)
输出:
center of mass [ 0.06873595 -0.04605918 -0.24643682]
moment of inertia [[ 393842.2070687 -963.01376005 -6050.68541811]
[ -963.01376005 474434.9289629 -3902.61617054]
[ -6050.68541811 -3902.61617054 520207.91703069]]
principal axes [[-0.04680878 -0.08278738 0.99546732]
[ 0.01813292 -0.9964659 -0.08201778]
[-0.99873927 -0.01421157 -0.04814453]]
Lambda = U'IU [[ 519493.24344558 -4093.3268841 11620.96444297]
[ -4093.3268841 473608.1536763 7491.56715845]
[ 11620.96444297 7491.56715845 395383.6559404 ]]
这看起来不对,原因之一是它U'IU
不是文档中提到的对角线:
也许我需要将蛋白质与质心对齐,以计算相对于它的惯性矩。