我很难理解Density对象从DensityAnalysis类中到底产生了什么。文档在here中找到。
运行代码并不是问题所在,但要理解Density对象究竟生成了什么以及如何解释这些信息。
“(113,113,113)箱”是什么意思?我已经看到了MDAnalysis User guide的例子,但我仍然不明白这是什么,也不知道如何解释它。
from MDAnalysis.analysis.density import Density
from MDAnalysis.analysis.density import DensityAnalysis
from MDAnalysis import *
import numpy as np
PDB = '/Users/joveyosagie/Desktop/1vmd6lu7.pdb'
DCD = '/Users/joveyosagie/Desktop/1vmd6lu7.dcd'
u = Universe(PDB, DCD)
protein = u.select_atoms('protein')
OH2 = u.select_atoms('name OH2')
OH2 = u.select_atoms('name OH2') #select for water atoms
D = DensityAnalysis(OH2, delta = 1.0) # each bin in histogram has size of 1 Angstrom
D.run()
D.density
[Out]Density density with (113, 113, 113) bins
1条答案
按热度按时间unguejic1#
MDAnalysis.analysis.density.Density
对象保存使用DensityAnalysis
生成的3D直方图。生成密度的方法是计算粒子在一个小空间区域(体积元素或体素)中出现的频率(斜方盒子,例如,1 Å长,但是Density.delta
确切地告诉你体素尺寸)或称为"bin"。我们在轨迹的所有帧上求平均并归一化计数以获得密度形状为(num_bins_x, num_bins_y, num_bins_z)
的原始NumPy数组可作为Density.grid
访问密度与原始模拟的坐标系有关,因此,我们还需要知道体素网格的原点在哪里(
Density.origin
保存此信息)。使用origin
、delta
和数组的形状,我们现在可以计算每个bin在空间中的位置。Density.edges
属性提供了bin边缘沿x、y、例如,edges = [np.array(-2.5, -0.5, 1.5, 3.5]), np.array([0., 1., 2.]), np.array([2.5, 4.5])]
属于形状为(3, 2, 1)
且delta = np.array(2.0, 1.0, 2.0])
的网格。左下角的面元位于原点(-1.5, 0.5, 3.5)
(原点位于面元的 * 中心 *),并且包含坐标为-2.5 ≤ x〈-0.5、0 ≤ y〈1和2.5 ≤ z〈4.5的点。该类包含更改密度存储单位(即
Density.convert_density()
)的方法。此方法通过将grid
中存储的值乘以适当的因子来更改基础数据。其他方法继承自
gridData.core.Grid
类,Density
类是Density
的基础。请参阅GridDataFormats文档,了解这些类还能做什么。例如,可以将两个Density
对象视为numpy数组,并对它们执行算术运算,如将它们相减以获得差异密度。示例:比较水密度
如果密度是在同一坐标系上生成的(即,具有相同的边),则可以减去密度。
让我们比较两个模拟的水密度,看看配体对水做了什么:
u_apo
宇宙u_holo
首先将轨迹叠加到一个公共的参考结构上,使蛋白质处于相同的坐标系中。您可以使用
MDAnalysis.analysis.align.AlignTraj
,如Aligning a trajectory with AlignTraj中所述,或者查看用户指南中关于密度分析的更详细说明,如居中、对齐和使用动态转换使分子完整。然后我们需要确保我们的密度是在同一个坐标系中分析的。
更多帮助?
如果您有更多的问题,请看看如何参与MDAnalysis社区-我们有一个discord服务器和邮件列表,人们(用户和开发人员)很乐意帮助和讨论。