我正在 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/