使用 MDAnalysis 获取径向分布函数

Obtaining Radial Distribution Functions using MDAnalysis

我正在 运行在 GROMOS54a7 中进行简单的苯模拟。 我想使用 MDAnalysis 1.0.0 计算每个苯分子质心的 RDF。

这可能吗?我在 Jupyter Notebook 中使用以下代码为 C 分子 g_cc(r) 创建了 rdf:

import MDAnalysis
import numpy as np
%matplotlib inline
import MDAnalysis.analysis.rdf as mda
import matplotlib.pyplot as plt

u = MDAnalysis.Universe("739-c6h6-MolDynamics.tpr","739-c6h6-MolDynamics_good-pbc.xtc")
s1 = u.select_atoms("resid 0 and type CAro")
s2 = u.select_atoms("not (resid 0) and type CAro")
rdf = mda.InterRDF(s1, s2)
rdf.run()

我想取每个苯分子(每个苯分子在我的模拟中都是一个残基),计算它的 COM 和 运行 一个类似上面的脚本。是否可以这样做?

一个关于 RDF 的一般性问题:我上面使用的方法是否使用我轨迹的每一帧构建一个 RDF?我不知道文档中是否明确说明了这一点,所以如果这是一个明显的问题,我深表歉意。

感谢您的宝贵意见!

为了在 MDAnalysis 中重用分析工具,可以使用 CG 组作为原生原子,这将很有用。

这是一个模仿 MDAnalysis 组的快速修复,并提供了一个新的 positions 属性。新的 positions 提供几何中心而不是实际位置。我还覆盖了 len 以传达 CG 元素仅使用一颗珠子。

import MDAnalysis as mda
import numpy as np
import MDAnalysis.analysis.rdf
import matplotlib.pyplot as plt

u = mda.Universe('sys_solv.pdb','prod.dcd')

class CG:
    def __init__(self, ag):
        self.ag = ag
        self.universe = self.ag.universe
        self.trajectory = self.ag.universe.trajectory

    @property
    def positions(self):
        return np.array([self.ag.center_of_geometry()])

    def __len__(self):
        return 1

cg_selection = u.select_atoms('resid 1')
cg_atom = CG(cg_selection.atoms)
waters = u.select_atoms('name O')

rdf = MDAnalysis.analysis.rdf.InterRDF(cg_atom, waters)
rdf.run() 
plt.plot(rdf.bins, rdf.rdf)

验证:我为CG珠子选择了一个原子,它再现了原始的RDF。

MDAnalysis 使用整个轨迹。您可能会在文档中找到 .运行() 函数的 start/stop/step 参数,它允许您缩小要具体使用的帧的范围。