pdb - 使用 MDAnalysis 从 pdb 中提取数组中的坐标

标签 pdb mdanalysis

我有一个 pdb 文件,它是一个更大系统的子集。这个 pdb 很特别,因为我有一些基于该文件的坐标系的向量。我想将这些向量和该系统的基本向量绘制到 pdb 上。最终,我想可视化矢量和基矢量,因为它通过一些 MD 模拟移动,其中我根据随时间变化的轨迹更新矢量位置。

首先,我想读取一个 pdb,其中的坐标定义了基本向量,这些基本向量进一步定义了我想要可视化的其他向量。现在我在 MDAnalysis 中使用这个类: https://docs.mdanalysis.org/1.0.0/_modules/MDAnalysis/coordinates/PDB.html#PDBReader

molecule=mda.coordinates.PDB.PDBReader('molecule.pdb')

这有效,它可以很好地读取 pdb,但返回此变量类型

coordinates.PDB.Reader

我想这并不奇怪,但我希望能够打印这个变量并获取一些坐标位置和原子类型的数组。我也很想看到这些债券,但这不是必要的。现在当我打印时我得到

<PDBReader molecule.pdb with 1 frames of 60 atoms>

我想要看起来像这样的东西

[atomtype1,x1,y1,z1]...[atomtypen,xn,yn,zn]

谢谢,

最佳答案

加载数据:Universe

要在 MDAnalysis 中获取坐标,您首先加载一个 Universe(通常不直接使用坐标读取器):

import MDAnalysis as mda
u = mda.Universe('molecule.pdb')

宇宙包含“拓扑”(原子类型、键(如果可用)等)和“轨迹”(即坐标)。

访问每个原子数据:Universe.atoms

所有原子都存储在u.atoms中(它们形成一个AtomGroup)。有关原子的所有信息都可以从 AtomGroup 获得。例如,所有位置都可以作为 numpy 数组使用

u.atoms.positions

名字是

u.atoms.names

还有更多属性。 (对于残基也同样有效:u.residuesu.atoms.residues 给出残基。您还可以对 AtomGroup 进行切片/索引以获得新的 AtomGroup。例如,属于前 20 个原子的残基是 u.atoms[:20].residues...AtomGroups 是使用 MDAnalysis 的关键。)

提取原子名称和位置

要构建您要求的列表:

names_positions = [[at] + list(pos) for at, pos in zip(u.atoms.names, u.atoms.positions)]

例如,使用 MDAnalysisTests 包中包含的测试文件 PDB:

import MDAnalysis as mda
from MDAnalysisTests.datafiles import PDB
u = mda.Universe(PDB)
names_positions = [[at] + list(pos) for at, pos in zip(u.atoms.names, u.atoms.positions)]

# show the first three entries
print(names_positions[:3])

给出

[['N', 52.017, 43.56, 31.555], ['H1', 51.188, 44.112, 31.722], ['H2', 51.551, 42.828, 31.039]]

了解更多...

要快速了解 MDAnalysis,请查看 Quickstart Guide ,它更详细地解释了其中大部分内容。它还告诉您如何选择特定原子并形成新的原子组。

然后你可以看看 User Guide 的其余部分.

债券有点棘手(您可以使用 u.atoms.bonds 获得它们,但如果您想使用它们,您必须了解有关 MDAnalysis 如何表示拓扑的更多信息 - 我建议您首先询问用户邮件列表,请参阅 participating in MDAnalysis,因为这是 MDAnalysis 开发人员主要回答问题的地方。)

关于pdb - 使用 MDAnalysis 从 pdb 中提取数组中的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66660281/

相关文章:

python - 删除某个版本的 python 包

python - 如何使用 MDAnalysis 实例化 Atom?

python - 如何清除 Python pdb 屏幕?

python - 为什么字符串比较和标识在 pdb 和 python 控制台中的行为不同

python - 使用 pdb 附加进程

c++ - 调试到 MFC header 代码不适用于 Visual Studio 2019

c++ - Windows 转储文件 (hdmp) - 没有 pdb 文件的信息

python - 如何高效迭代MDAnalysis轨迹并保存残差属性时间序列?