我有一个 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.residues
或 u.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/