1. MDAnalysis概述

MDAnalysis 是一个Python包,提供了访问分子动力学轨迹中的数据的类。它是面向对象的,因此它将原子、原子组、轨迹等视为不同的对象。每个对象都在自身上定义了许多操作(也称为“方法”),并且还包含描述对象的值(“属性”)。例如,一个 AtomGroup 对象具有一个 center_of_mass() 返回原子组的质心的方法。它还包含一个名为 residues 它列出了属于该基团的所有残基。使用方法,例如 select_atoms() (它使用 CHARMM-style 原子 选择命令 )一个人可以创建新对象(在本例中是另一个 AtomGroup )。

典型的使用模式是遍历轨迹并分析每一帧的坐标。在下面的例子中,计算蛋白质的端到端距离和主链原子的回转半径:

import MDAnalysis as mda
from MDAnalysis.tests.datafiles import PSF,DCD  # test trajectory
import numpy.linalg
u = mda.Universe(PSF,DCD)  # always start with a Universe
nterm = u.select_atoms('segid 4AKE and name N')[0]  # can access structure via segid (s4AKE) and atom name
cterm = u.select_atoms('segid 4AKE and name C')[-1]  # ... takes the last atom named 'C'
bb = u.select_atoms('protein and backbone')  # a selection (a AtomGroup)
for ts in u.trajectory:  # iterate through all frames
    r = cterm.position - nterm.position  # end-to-end vector from atom positions
    d = numpy.linalg.norm(r)   # end-to-end distance
    rgyr = bb.radius_of_gyration()  # method of a AtomGroup; updates with each frame
    print(f"frame = {ts.frame}: d = {d} Angstroem, Rgyr = {rgyr} Angstroem")

1.1. 在Python语言中使用MDAnalysis

如果您已在标准的python模块位置安装了MDAnalysis,请从解释器::

from MDAnalysis import *

或:

import MDAnalysis as mda

MDAnalysis背后的想法是将轨迹数据放入 NumPy :class:`numpy.ndarray`数组,然后可以使用中的所有功能轻松地对其进行操作 NumPySciPy.

MDAnalysis在脚本和交互使用中都能很好地工作。开发人员强烈建议从 IPython Python Shell。它允许用户交互地探索对象(使用TAB完成和在线帮助)、进行分析并立即绘制结果。本手册中的示例通常从交互式 ipython 会议。

通常,MDAnalysis会话开始于将数据加载到 Universe 类(可以像这样访问 MDAnalysis.Universe ):

import MDAnalysis as mda
universe = mda.Universe(topology, trajectory)
  • 这个 拓扑学 文件列出了原子和残基(以及它们的连接性)。它可以是CHARMM/XploR/NAMD PSF文件或坐标文件,如蛋白质数据库Brookaven PDB文件、CHARMM卡坐标文件(CRD)或GROMOS/Gromacs Gro文件。

  • 这个 轨迹 中定义的顺序包含坐标列表。 拓扑学 。它可以是单个帧(PDB、CRD和GRO都是读取的),也可以是一系列坐标帧,例如CHARMM/NAMD/LAMMPS DCD二进制文件、Gromacs XTC/TRR轨迹或XYZ轨迹(可能用gzip或bzip2压缩)。

在本介绍的其余部分中,我们将使用一个简短的示例轨迹,该轨迹随MDAnalysis一起提供(作为 MDAnalysis test suite )。该轨迹加载有::

>>> from MDAnalysis import Universe
>>> from MDAnalysis.tests.datafiles import PSF,DCD
>>> u = Universe(PSF, DCD)

( >>> 符号是Python输入提示符,不需要输入;它们只是在示例中清楚地说明什么是输入,什么是输出。)

这个 Universe 包含许多重要属性,其中最重要的属性是 atoms ::

>>> print(u.atoms)
<AtomGroup with 3341 atoms>

Universe.atoms 是一种 AtomGroup 并且可以被认为是由以下内容组成的列表 Atom 物体。这个 Atom 是MDAnalysis中的基本和基本对象。

这个 MDAnalysis.Universe.trajectory 属性用于访问随时间变化的坐标::

>>> print(u.trajectory)
< DCDReader '/..../MDAnalysis/tests/data/adk_dims.dcd' with 98 frames of 3341 atoms (0 fixed) >

最后, MDAnalysis.Universe.select_atoms() 方法生成一个新的 AtomGroup 根据选择标准

>>> calphas = u.select_atoms("name CA")
>>> print(calphas)
<AtomGroup with 214 atoms>

如中所述 选择命令

1.2. 示例

开始使用MDAnalysis的最简单方法是阅读本简介和上的章节 拓扑系统选择命令 ,然后在中以交互方式浏览包 IPython 或者另一个交互式的Python解释器。

1.2.1. 包含的轨迹

MDAnalysis提供了许多真实的轨迹来进行测试。您还可以使用它们来探索功能并确保一切正常工作:

import MDAnalysis as mda
from MDAnalysis.tests.datafiles import PSF,DCD, PDB,XTC
u_dims_adk = mda.Universe(PSF,DCD)
u_eq_adk = mda.Universe(PDB, XTC)

PSF和DCD文件是腺苷酸激酶从封闭形式到开放形式转变(来自 [Beckstein2009]) 而PDB+XTC文件是来自Gromacs对ADK在TIP4P水中的模拟的十帧,以及OPLS/AA力场。

[Beckstein2009]

O. Beckstein, E.J. Denning, J.R. Perilla, and T.B. Woolf. Zipping and Unzipping of Adenylate Kinase: Atomistic Insights into the Ensemble of Open <--> Closed Transitions. J Mol Biol 394 (2009), 160--176, doi:10.1016/j.jmb.2009.09.009

1.2.2. 代码片段

源代码分发附带了一个目录 examples 其中包含许多代码片段,这些代码片段展示了如何使用MDAnalysis的某些方面。

例如,有一些代码显示如何

还有更多。