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 用 Å,混用时务必换算;
- 整条轨迹入内存,超大轨迹要用
stride和atom_indices减量; - 二级结构(DSSP)和 SASA 内建,是它相对省事的地方;
- 构象聚类挑代表结构,是它在实际项目里最常见的用途。
延伸资源
- 对照工具:205《MDAnalysis》;模拟引擎:200《OpenMM》;
- 相互作用分析:207《ProLIF》、208《PLIP》;结构动力学:209《ProDy》。