python - 使用 MDAnalysis 获取径向分布函数

标签 python physics chemistry 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?我不知道文档中是否明确说明了这一点,所以如果这是一个明显的问题,我深表歉意。

感谢您的任何建议!

最佳答案

如果能够使用 CG 基团作为原生原子,以便在 MDAnalysis 中重用分析工具,将会非常有用。

这是一个模仿 MDAnalysis 组的快速修复,并提供了一个新的 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 使用整个轨迹。您可以在文档中使用 .run() 函数的开始/停止/步骤参数,这允许您缩小具体使用哪些帧的范围。

关于python - 使用 MDAnalysis 获取径向分布函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66340182/

相关文章:

c++ - Tilemap 2D 逼真的流体物理

python - RdKit 分子中原子的坐标

python - 蛋白质结构和网格的蒙特卡洛模拟

python - 为每条记录创建一个删除按钮

python - Pylab - 为一些子图调整 hspace

python - Pandas 中多列的逻辑与

python - 如何使用 Python 读取和写入 Visio 形状数据

java - 几帧后对象变量变为 NaN

java - 开源、纯 Java 物理/动力学库

regression - 如何从 SMILES 获取分子结构信息