1

我有一个 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]

谢谢,

4

1 回答 1

1

加载数据中: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)]

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

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 的快速介绍,请查看快速入门指南,其中更详细地解释了其中大部分内容。它还告诉您如何选择特定的原子并形成新的 AtomGroup。

然后您可以查看用户指南的其余部分。

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

于 2021-03-17T05:48:04.037 回答