如何使用 MDAnalysis 实例化原子?
How to instantiate Atoms using MDAnalysis?
在查看 documentation 几次并花了几个小时尝试各种想法后,我决定需要帮助。我正在编写 Python 软件,逐步完成 RADA 蛋白质的 NAMD 模拟,计算我们感兴趣的不同值。
目前,我的代码遍历每个时间步,然后遍历系统中的每个原子,执行各种分析步骤。
我需要做的是将每个氨基酸合并成它自己的 "atom"(氨基酸的单位点表示,位于残基的质心)。
我能否实例化新的 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 个原子变成一个 "averaged" 个原子(用于计算简化)。
您可以使用 Universe.empty() 方法创建一个包含空原子的新宇宙。在下面的示例中,我使用了测试中的示例文件(data.PSF
和 data.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 or check out the User Guide: Topology System 上询问(截至 2019 年 11 月仍在进行中))。
我们还可以为 CG“原子”分配位置(因为我们添加了带有 trajectory=True
的空单帧轨迹)以便进行典型分析,例如,蛋白质残基的回转半径我们选择了:
rgyr = protein.radius_of_gyration()
以上应该回答最初发布的问题。
但是,请注意,为轨迹中的每个时间步长创建一个 Universe 可能效率不高。创建粗粒度 Universe with a in-memory trajectory attached but the current Universe.empty()
method (MDAnalysis 0.20.1) does not support this functionality — mainly because no-one asked for it. It would be trivial to implement so if you need it, please raise an issue in our issue tracker https://github.com/mdanalysis/mdanalysis/issues 并建议该功能会很方便。
在查看 documentation 几次并花了几个小时尝试各种想法后,我决定需要帮助。我正在编写 Python 软件,逐步完成 RADA 蛋白质的 NAMD 模拟,计算我们感兴趣的不同值。
目前,我的代码遍历每个时间步,然后遍历系统中的每个原子,执行各种分析步骤。
我需要做的是将每个氨基酸合并成它自己的 "atom"(氨基酸的单位点表示,位于残基的质心)。
我能否实例化新的 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 个原子变成一个 "averaged" 个原子(用于计算简化)。
您可以使用 Universe.empty() 方法创建一个包含空原子的新宇宙。在下面的示例中,我使用了测试中的示例文件(data.PSF
和 data.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 or check out the User Guide: Topology System 上询问(截至 2019 年 11 月仍在进行中))。
我们还可以为 CG“原子”分配位置(因为我们添加了带有 trajectory=True
的空单帧轨迹)以便进行典型分析,例如,蛋白质残基的回转半径我们选择了:
rgyr = protein.radius_of_gyration()
以上应该回答最初发布的问题。
但是,请注意,为轨迹中的每个时间步长创建一个 Universe 可能效率不高。创建粗粒度 Universe with a in-memory trajectory attached but the current Universe.empty()
method (MDAnalysis 0.20.1) does not support this functionality — mainly because no-one asked for it. It would be trivial to implement so if you need it, please raise an issue in our issue tracker https://github.com/mdanalysis/mdanalysis/issues 并建议该功能会很方便。