206

MDTraj:轻量级分子动力学轨迹分析

MDTraj 轻量、快速,适合做 MD 轨迹的几何计算与格式转换。这篇给出常用 API、与 MDAnalysis 的分工,以及它在二级结构与聚类分析上的优势。

MDTraj 是另一个主流的 MD 轨迹分析库,风格与 MDAnalysis 不同:它把整条轨迹载入内存为 NumPy 数组,API 更函数式、更贴近 NumPy 习惯,几何计算的底层实现经过高度优化,速度通常更快。

安装与基本用法

pip install mdtraj
import mdtraj as md
import numpy as np

t = md.load("traj.dcd", top="topology.pdb")
print(t)            # <mdtraj.Trajectory with 1000 frames, 4521 atoms>
print(t.xyz.shape)  # (n_frames, n_atoms, 3),单位 nm

# 只载入部分帧或部分原子,省内存
sel = t.topology.select("protein and name CA")
t_sub = md.load("traj.dcd", top="topology.pdb", stride=10, atom_indices=sel)

注意单位:MDTraj 用纳米(nm),MDAnalysis 用埃(Å)。混用两个库时这是最常见的错误来源,差 10 倍不会报错,只会给出错误结论。

常用分析

# RMSD(自动做最优叠合)
t.superpose(t, frame=0, atom_indices=t.topology.select("backbone"))
rmsd = md.rmsd(t, t, frame=0) * 10        # nm → Å

# 距离、角度、二面角
pairs = [[100, 250]]
dist = md.compute_distances(t, pairs) * 10
phi_idx, phi = md.compute_phi(t)
chi_idx, chi = md.compute_chi1(t)

# 二级结构(DSSP 实现,MDTraj 的强项)
ss = md.compute_dssp(t, simplified=True)   # (n_frames, n_residues),H/E/C
helix_frac = (ss == "H").mean(axis=0)      # 每个残基成螺旋的比例

# 溶剂可及表面积
sasa = md.shrake_rupley(t, mode="residue")

# 氢键
hbonds = md.baker_hubbard(t, freq=0.3)     # 出现频率 >30% 的氢键

它明显更顺手的两件事

  • 二级结构分析compute_dssp 内建 DSSP 算法,不需要外部程序。研究折叠、构象转变、无序区行为时非常方便,逐帧逐残基的二级结构矩阵可以直接画成时间演化图。
  • 构象聚类:因为整条轨迹就是一个 NumPy 数组,配合 scipy 做层次聚类非常自然:
import scipy.cluster.hierarchy as sch
from scipy.spatial.distance import squareform

n = t.n_frames
D = np.empty((n, n))
for i in range(n):
    D[i] = md.rmsd(t, t, i, atom_indices=sel)
D = (D + D.T) / 2                       # 对称化
Z = sch.linkage(squareform(D, checks=False), method="average")
labels = sch.fcluster(Z, t=0.25, criterion="distance")   # nm
# 每簇取代表构象,用于后续对接或分析

和 MDAnalysis 怎么分工

维度 MDAnalysis MDTraj
内存模型 惰性逐帧读取 整条载入内存
超大轨迹 更合适 受内存限制
选择语法 更强大灵活 较简单
几何计算速度 一般 更快
二级结构 / SASA 需外部工具 内建
单位 Å nm

实践中两者常常并用:用 MDAnalysis 做复杂选择与超大轨迹的流式处理,用 MDTraj 做快速几何计算、二级结构和聚类。它们都能读写常见格式,中间用 PDB/XTC 交接即可。

上手提示

  • MDTraj 用 nm、MDAnalysis 用 Å,混用时务必换算;
  • 整条轨迹入内存,超大轨迹要用 strideatom_indices 减量;
  • 二级结构(DSSP)和 SASA 内建,是它相对省事的地方;
  • 构象聚类挑代表结构,是它在实际项目里最常见的用途。

延伸资源