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

标签 python mdanalysis

查看 documentation 后几次并花了几个小时尝试各种想法后,我决定需要帮助。我正在编写 Python 软件,该软件逐步完成 RADA 蛋白质的 NAMD 模拟,计算我们感兴趣的不同值。

目前,我的代码逐步执行每个时间步骤,然后逐步执行系统中的每个原子,执行各种分析步骤。

我需要做的是将每个氨基酸合并成它自己的“原子”(氨基酸的单位点表示,位于残基的质心)。

我是否能够实例化新的 Atom,并将它们添加到 MDAnalysis Universe 中?我可以用氨基酸的质心、人类可读的名称等数据填充这些新原子吗?

类似于:

u = MDAnalysis.Universe(psf, coordDcd)
ag = u.selectAtoms(" the atoms in my amino acid ")
amino_acid = MDAnalysis.Atom
amino_acid.pos = ag.centerOfMass()

我知道如何读取 NAMD 模拟(.dcd 文件)并且所有原子都可以很好地表示,但最终,我需要将大约 20 个原子转换为一个“平均”原子(为了计算简化)。

最佳答案

您可以使用Universe.empty()创建一个具有空原子的新宇宙。方法。在下面的示例中,我使用测试中的示例文件(data.PSFdata.DCD,但您可以使用自己的文件)。

import MDAnalysis as mda
from MDAnalysis.tests import datafiles as data   # only needed for the example files

u = mda.Universe(data.PSF, data.DCD)

# create the "coarse grained" universe with one Atom per Residue
cg = mda.Universe.empty(n_atoms=u.residues.n_residues, n_residues=u.residues.n_residues, 
                        atom_resindex=u.residues.ix, trajectory=True)

# add total mass for each residue
cg.add_TopologyAttr("masses", u.residues.masses)

# add total charge per residue
cg.add_TopologyAttr("charges", u.residues.charges)

# add names etc... so that cg.select_atoms("protein") works
cg.add_TopologyAttr("resnames", u.residues.resnames)
cg.add_TopologyAttr("resnums", u.residues.resnums)

# use the residue center of mass for each residue as the position of the CG particle
centers = u.residues.center_of_mass(compound="residues")
cg.atoms.positions = centers

空虚的宇宙只剩下骨头;使用Universe.add_TopologyAttr(),我们可以添加拓扑属性,例如质量和电荷,这对于粗粒度粒子可能有意义。我们使用聚合的每个残基值初始化这些属性(u.residues.masses 包含每个残基的质量,而 u.atoms.masses 包含每个原子的质量)。添加残基名称可以进行如下选择

protein = cg.select_atoms("protein")

也可以在cg宇宙上工作。可以以类似的方式添加其他拓扑属性。 (目前可用属性的文档还不是很好,因此也许可以在 user mailing list 上询问或查看 User Guide: Topology System (截至 2019 年 11 月正在进行中)。

我们还可以为 CG“原子”分配位置(因为我们使用 trajectory=True 添加了一个空的单帧轨迹),以便进行典型的分析,例如,我们选择的蛋白质残基:

rgyr = protein.radius_of_gyration()

以上内容应该回答最初发布的问题。

<小时/>

但是,请注意,为轨迹中的每个时间步创建一个宇宙可能效率很低。创建粗粒度的 Universe with a in-memory trajectory attached 会很方便但当前的 Universe.empty() 方法 (MDAnalysis 0.20.1) 不支持此功能 - 主要是因为没有人要求它。实现起来很简单,因此如果需要它,请在我们的问题跟踪器 https://github.com/mdanalysis/mdanalysis/issues 中提出问题并建议该功能。

关于python - 如何使用 MDAnalysis 实例化 Atom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582128/

相关文章:

python - 如何在我的主项目中添加 setuptools entry_point 作为示例?

javascript - 如何从请求库中获取在浏览器中看到的准确页面

python - 通过 std::system 调用 python 时出错

python - 将列表中的项目拆分为两个并将其中一个附加到另一个列表

python - 删除某个版本的 python 包

python - 如何使用 MDAnalysis 分析一组原子的principal_axes 和 moment_of_inertia?

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

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

python - 尝试访问矩阵外部时获取特定值

mdanalysis - 如何使用 MDAnalysis 计算蛋白质的质心?