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

Using MDAnalysis to extract coordinates in an array from pdb

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

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

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

这有效,它读取 pdb 很好,但是 returns 使用此变量类型

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给出残基。你也可以slice/index一个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,其中更详细地解释了其中的大部分内容。它还会告诉您如何 select 特定原子并形成新的原子组。

那你可以看看剩下的User Guide.

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