MDAnalysis中文教程-UserGuide
快速入门指南
本指南旨在作为 MDAnalysis 的基本介绍,以帮助您入门并运行。您可以在示例notebooks中看到更复杂的任务。本页概述了如何:
1 | import MDAnalysis as mda |
正常无报错
概述
MDAnalysis 是一个 Python 包,它提供了访问和分析分子动力学轨迹中数据的工具。几个关键数据结构构成了 MDAnalysis 的支柱。
载入结构或者轨迹
使用 MDAnalysis 通常首先将数据加载到 MDAnalysis 中的中心数据结构Universe中。
首要的参数就是拓扑文件和轨迹文件。
1 | psf = mda.Universe(PSF) |
psf文件不含坐标信息,所以没有trajectory属性
1 | gro = mda.Universe(GRO) |
gro文件含坐标信息,所以有trajectory属性,且长度为1,即单帧
以下读取测试文件、创建一条轨迹用于后续分析。
1 | u = mda.Universe(PSF, DCD) |
使用原子组
大多数分析都需要创建并操作一个“AtomGroup”,即一组Atom的集合。为了方便起见,您还可以处理具有化学意义的原子组,例如“Residue”或“Segment”。这些组都有与之对应的容器,如“ResidueGroup”和“SegmentGroup”。例如,一个“Universe”对象的“.residues”属性会返回一个“ResidueGroup”
1 | print(u.residues) |
选择原子
获取Universe的原子的最简单方式是使用.atoms属性
1 | print(u.atoms) |
返回一个AtomGroup,相当于Atom的list。大多数分析都涉及使用AtomGroup的atoms。AtomGroup也可通过另一个AtomGroup切片创建,如下:
1 | print(u.atoms[-5:]) |
也可通过索引进行创建
1 | print(u.atoms[[0, 3, -1, 1, 3, 0]]) |
也可通过类似于现有VMD、PyMol等软件包的原子选择语句.select_atoms()方法进行选择
1 | print(u.select_atoms('resname ASP or resname GLU')) |
注意:原子选择语句中的数值范围是闭区间,包括’-‘和’:',不同于list切片的左闭右开
1 | print(u.select_atoms('resid 50-100').n_residues) |
select_atoms支持布尔运算、通配符
1 | u.select_atoms("(resname GLU or resname HS*) and name CA and (resid 1:100)") |
注意,选择创建的AtomGroup被排序和去重,而这可能不同于切片产生的AtomGroup
详见AtomGroup篇
从AtomGroup提取原子信息
AtomGroup对象包含许多属性,这些属性可以方便地提取原子信息。这些属性包括:names、masses、residues、segements、resnames等,详细属性见topology_system篇
1 | print(list(zip(u.atoms[:20].names, u.atoms[:20].masses))) |
通过拓扑属性分组原子
1 | near_met = u.select_atoms('not resname MET and (around 2 resname MET)') |
AtomGroup位置和方法
.position属性可能是AtomGroup中最有用的属性之一。它返回一个形状为(n_atoms, 3)的NumPy数组,其中n_atoms是AtomGroup中的原子数,3是每个原子的x、y、z坐标。该属性是只读的,但您可以使用它来计算原子组的位置,例如质心
1 | ca = u.select_atoms('resid 1-5 and name CA') |
AtomGroup对象还包含许多方法,这些方法可以方便地计算原子组的位置和运动。这些方法包括:
center_of_mass():质心
center_of_geometry():重心
total_mass():总质量
total_charge():净电荷
radius_of_gyration():回转半径
bsphere():重心和边界半径
MDAnalysis也可以创建键、键角、二面角、离面弯曲角(improper),但要满足一定条件,如原子数量,这是很自然的。
1 | nhh = u.atoms[:3] |
对于角度部分,输入原子的顺序非常关键。二面角是输入原子的∠123,2是顶点原子。
1 | angle_nhh = nhh.angle |
使用轨迹
Universe的trajectory包含坐标变化信息。轨迹的长度就是帧数,即len(u.trajectory)
获取轨迹每帧的信息的标准方式就是迭代它。当时刻变化时universe仅包含当前时间步的相关信息。
*此处timestep被替代为“时刻”,timestep通常为MD的时间步长、时间间隔参数,如1fs,本文timestep应该表达时刻,如第10帧、第10ps
1 | for ts in u.trajectory[:20]: |
迭代完后,轨迹的指针重新定位到第一帧,详见trajectories篇。
1 | print(u.trajectory.frame) |
除了迭代之后,也可通过帧索引获取结构,如u.trajectory[10],或手动迭代,u.trajectory.next()
通常,轨迹分析首先在列表中收集逐帧数据。
然后可以将其转换为其他数据结构,例如 numpy 数组或 pandas DataFrame。它可以绘制(如下所示),或用于进一步分析。
1 | rgyr = [] |
动态选择
选择通常是在静态属性上定义的,这些属性在穿过轨迹时不会改变。但是一些选择包含依赖距离的查询,如around、point等,详见selection篇。这种情况下,可以通过设置“updating=True”使用动态选择对选择按时更新,这时select_atoms返回的是UpdatingAtomGroup而不是AtomGroup。
1 | dynamic = u.select_atoms('around 2 resname ALA', updating=True) |
写出坐标
MDAnalysis 支持将数据写入一系列文件格式,包括单帧格式(例如 PDB、GRO)和轨迹写入器(例如 XTC、DCD 和多帧 PDB 文件)。(您还可以将选择写入其他程序,例如 VMD 宏,详见selection_exporters篇。)用户指南有一个完整的列表 格式,每个格式都有自己的参考页面。
单帧
写入只能容纳单个帧的文件的最直接方法是使用任意AtomGroup的 write 的方法。MDAnalysis 使用文件扩展名来确定输出文件格式。
1 | ca = u.select_atoms('name CA') |
轨迹
写出轨迹的标准方式是:
- 打开轨迹Writer,识别每帧将包含的原子数;
- 遍历轨迹,使用Wrier.write()将每帧写入Writer;
- 关闭Writer。
1 | ca = u.select_atoms('name CA') |
分析
MDAnalysis 附带了一组不同的分析模块,以及用于实现您自己的构建块,详见analysis篇。
其中大多数遵循一个通用接口:
- 使用Universe和相关的参数初始化分析;
- 使用.run()运行分析。可选参数有起始帧索引、结束帧索引、步长、toggling verbose。默认分析整条轨迹。
- 分析结果存储在Analysis对象中
- 另外,函数可用于分析单帧
但是,不是所有分析都使用这个模型。检查每个分析的文档是很重要的。分析详见examples篇。
RMSD
不是所有的子模块都使用“import MDAnalysis”导入。大多数模块都必须显示导入,如“from MDAnalysis.analysis import rms”
MDAnalysis 提供了一个函数rmsd(),用于计算两个 numpy 坐标数组之间的 RMSD。
1 | bb = u.select_atoms('backbone') |
类RMSD也提供了对轨迹的操作。
- 第一个参数是用于RMSD计算的AtomGroup/Universe
- 第二个参数是参考结构,可以是AtomGroup或Universe,默认为None,即使用第一个参数的当前帧作为参考结构
- 我们选择将轨迹对齐到骨架原子,然后计算select的骨架原子的RMSD。
- 然后,不用重新对齐轨迹,计算groupselections的RMSD。
1 | u.trajectory[0] ## set to first frame |
结果被保存在属性中,即rmsd_analysis.results.rmsd,为shape为(n_frames, 3+len(groupselections))的numpy.ndarray,其中各列分别是
- 帧数
- 时间(ps)
- RMSD(backbone)
- RMSD(CA)
- RMSD(protein)
我们可以将结果转换为DataFrame,并绘制出来。
1 | import pandas as pd |
参考文献
在发表工作中使用MDAnalysis应当引用下列文献:
翻译https://userguide.mdanalysis.org/stable/examples/quickstart.html