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`数组,然后可以使用中的所有功能轻松地对其进行操作 NumPy 和 SciPy.
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力场。
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的某些方面。
例如,有一些代码显示如何
使用中的QCP RMSD对齐代码将轨迹拟合到参考结构
MDAnalysis.core.qcprot
(rmsfit_qcp.py) ;进行块平均误差分析 (blocks.py) ;
计算跨膜的电势分布 (potential_profile.py) ;
使用执行本机接触分析
MDAnalysis.analysis.contacts
(nativecontacts.py)使用以下方法获得双层单叶的脂类成分
MDAnalysis.analysis.leaflet
(membrane-leaflets.py) ;通过聚类法确定多个跨膜肽的多聚态 (multimers-analysis.py) ;
在轨迹格式之间转换(例如 dcd2xtc.py 或 amber2dcd.py )
使用MDAnalysis进行简单的建模 (make_MthK_tetramer.py) ;
还有更多。