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

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

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

我可以实例化新的Atom并将其添加到MDAnalysis Universe吗?我可以用诸如氨基酸的质心,人类易读的名称等数据填充这些新的Atom吗?

就像是:

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()方法创建一个包含空原子的新Universe。在以下示例中,我使用测试中的示例文件(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 Universe上工作。可以类似的方式添加其他拓扑属性。 (目前可用属性的文档还不多,因此也许可以在user mailing list上询问或查看User Guide: Topology System(截至2019年11月在进行中的工作))。
我们还可以为CG“原子”分配位置(因为我们使用trajectory=True添加了一个空的单帧轨迹),因此典型的分析有效,例如,我们选择的蛋白质残基的回转半径:
rgyr = protein.radius_of_gyration()
以上应该回答最初发布的问题。

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

09-10 14:37