本文收录于专栏 分子动力学模拟-Amber ------ 专栏系统覆盖Amber 分子动力学模拟全流程,点击订阅可跟踪后续更新。
**摘要:**本文系统拆解 AMBER 生态下 cpptraj 轨迹分析的八个核心命令与两个能量工具(process_mdout.perl / mdout_analyzer.py),从通用流程骨架(parm / trajin / autoimage / run)出发,逐一讲清 RMSD、RMSF、DSSP 二级结构、氢键占有率、聚类与 PCA 的参数原理与作用,并给出三套可直接套用的 Python 绘图模板。全文按「稳定性 → 柔性 → 相互作用 → 构象态」的分析顺序组织,帮助读者在跑完一条 100 ns 的 MD 轨迹后,独立完成从能量收敛判断、稳定性检查、柔性分析、氢键占有率到聚类提取代表构象的完整流程。

系列上篇《16.1 轨迹分析基础》讲工具选型、六类命令速查与完整案例;本篇下钻到参数级------每个命令拆开讲,适合被某个参数卡住时对号入座。
你刚跑完一条 100 ns 的 MD 轨迹,面对一万帧 NetCDF 文件不知道从哪看起:RMSD 命令里first和reference差在哪?hbond的series、avgout、uuseries各干什么?聚类的sieve不加为什么爆内存?这篇把 cpptraj 八个最常用命令和两个能量工具(process_mdout.perl / mdout_analyzer.py)的每个参数拆开讲清原理和作用,配可照抄的输入文件与三套 Python 绘图模板。读完你能独立完成能量收敛判断、稳定性检查、柔性分析、氢键占有率到聚类提代表构象的完整流程。
〇、相关教程与核心文献
动手前建议按需取用(链接 2026-08 实测存活,DOI 经 Crossref 验证):
官方教程
| 教程 | 内容 | 与本文关系 |
|---|---|---|
| CPPTRAJ 入门教程 | 拓扑载入、RMSD、距离分析 | 二、五至六节蓝本 |
| AMBER-hub 聚类教程 | k-means/DBSCAN/层次凝聚三算法对比 | 第九节完整版 |
| Tutorial 41:PCA/tICA/MSM | MAD2 蛋白构象态分析 | 第十节进阶 |
| pytraj 文档 | cpptraj 的 Python 接口 | 批量自动化的替代入口 |
核心文献
| 文献 | 为什么值得先读 |
|---|---|
| Roe & Cheatham, JCTC 9, 3084 (2013), 10.1021/ct400341p | cpptraj 官方论文,mask 语法权威定义 |
| Kabsch & Sander, Biopolymers 22, 2577 (1983), 10.1002/bip.360221211 | DSSP 原始论文 |
| Shao et al., JCTC 3, 2312 (2007), 10.1021/ct700119m | 聚类算法系统评测 |
| Scherer et al., JCTC 11, 5525 (2015), 10.1021/acs.jctc.5b00743 | PyEMMA 2,接 MSM 动力学分析 |
一、跑完 MD,先看什么
新手最常见的错误是拿到轨迹就画十几张图,却答不出"这条轨迹能不能用"。分析顺序其实是有讲究的:先看稳定性 (RMSD/Rg------这条轨迹有没有散架),再看柔性 (RMSF/DSSP------哪里在动),然后看相互作用 (氢键/接触------结合姿态保持了吗),最后才轮到构象态(聚类/PCA------有哪些代表性结构)。三个自带工具的分工:cpptraj 管坐标轨迹,process_mdout.perl 管能量提取,mdout_analyzer.py 管快速看收敛。分析顺序:稳定性(能量收敛 + RMSD)→ 柔性(RMSF/DSSP)→ 相互作用(氢键)→ 构象态(聚类/PCA),下面按这个顺序拆参数。
二、通用流程:parm / trajin / autoimage / run
任何 cpptraj 分析都由这四种指令构成骨架。推荐写成输入文件批处理:
# analysis.in
parm system.prmtop
trajin md.nc 1 last 10
autoimage anchor :1-300
strip :WAT,Na+,Cl-
distance d1 :45@CA :120@CA out dist.dat
run
cpptraj -i analysis.in
调试单个 mask 或命令时可以不开输入文件,直接进交互模式逐条试:cpptraj -p system.prmtop 回车后出现 cpptraj> 提示符,逐条敲 trajin/rms,确认输出没问题再整段抄进 .in 文件批处理。
| 指令 | 作用 | 关键参数与原理 |
|---|---|---|
parm |
载入拓扑(prmtop/parm7),提供原子名、残基名、成键信息 | 可多次载入多个体系;parmwrite out 可写出修改后的拓扑 |
trajin |
载入轨迹并指定帧范围 | 1 last 10 = 每 10 帧取 1;多数统计量对帧间相关性不敏感,降采样省时省内存 |
autoimage |
周期性边界修复------把跨盒子边界的分子重新拼完整 | anchor 锚定分子(通常蛋白),其余分子向它成像;origin 质心移到原点。不做这步跨边界分子被算成"两半",RMSD/Rg 全错 |
strip |
删除指定原子 | 去水去离子提速 5-10 倍;保留原轨迹先 trajout 另存 |
run(或 go) |
执行排队的所有 action | 只写 action 不写 run 什么都不会发生------新手第一坑 |
三、process_mdout.perl ------ 能量批量提取
原理:能量、温度、压力这些标量写在 mdout 文本里,不在轨迹文件里,cpptraj 管不着。这个自带 perl 脚本解析 sander/pmemd 输出,把每个物理量抽成两列文件(时间、值),并给累计平均与累计 RMS 涨落------收敛判断的标准动作。
process_mdout.perl prod.out # 单段
process_mdout.perl prod1.out prod2.out # 多段合并
| 参数 | 原理与作用 |
|---|---|
| 输入 mdout(位置参数,可多个) | 多段轨迹合并分析;无其他选项------这就是它的全部参数 |
summary.<量> |
时序两列文件(时间 ps、值):ETOT/EKTOT/EPTOT/TEMP/PRES/VOLUME/DENSITY/ESCF 等 11 个量(本机实测生成) |
summary_avg.<量> |
累计平均值------曲线进平台 = 收敛 |
summary_rms.<量> |
累计 RMS 涨落------衡量噪声水平 |
收敛判读:ETOT 无漂移、TEMP 绕目标 ±5 K、DENSITY 稳定------三项齐了才谈后续结构分析。画图用第十一节模板 1。
四、mdout_analyzer.py ------ 快速看收敛
原理:同样解析 mdout,但跳过"抽数据→画图",直接弹交互窗口:左侧勾选物理量,右侧出曲线,多段并排,肉眼十秒判断哪段平衡了。
mdout_analyzer.py prod.out # 弹 Tk 窗口
mdout_analyzer.py run1.out run2.out # 多段并排
mdout_analyzer.py --openmm parmed_out.csv # OpenMM 接口输出
| 参数 | 原理与作用 |
|---|---|
| 输入 mdout 列表(位置参数) | 多文件并排比较 |
--openmm |
把输入按 ParmEd Amber/OpenMM 接口的 CSV 格式解析 |
| 输出 | Tk 交互窗口:左栏选量、右栏曲线,框选区间可算均值/涨落 |
二选一原则:快速肉眼验收用 mdout_analyzer.py;要把数据接进自己的画图或流水线,用 process_mdout.perl。
五、rms ------ RMSD,稳定性第一指标
原理:RMSD 量化当前帧与参考结构的偏差------曲线进平台 = 平衡完成,持续爬升 = 还在漂移,后续分析都不可信。
rms first :1-300@CA,C,N,O out rmsd_bb.dat time 10
reference crystal.pdb [xtal]
rms toXtal :1-300@CA,C,N,O ref [xtal] out rmsd_xtal.dat time 10
rms ligand :301&!@H= nofit out rmsd_lig.dat time 10
| 参数 | 原理与作用 |
|---|---|
first |
以第一帧为参考;注意第一帧未必是平衡构象 |
reference <file> [name] + ref [name] |
以独立结构(如晶体)为参考。看配体姿态保持必须用这个------以第一帧为参考会把"初始不齐"算成漂移 |
mask(如 :1-300@CA,C,N,O) |
RMSD 计算与拟合的原子集。骨架 @CA,C,N,O,全蛋白 &!@H= |
out <file> / time <dt> |
输出文件与帧间隔(ps)。给了 time,第一列从帧号变成时间,直接出"时间 vs RMSD" |
mass |
质量加权拟合与 RMSD,重原子贡献更大 |
nofit |
不做最小二乘重叠直接算。配体 RMSD 必加 ------先对骨架拟合再 nofit 算配体,得到口袋内真实位移;否则拟合把配体"吸"回参考位置、低估漂移 |
六、atomicfluct ------ RMSF,柔性分布图
原理:RMSF 给出每个原子/残基的波动幅度,识别柔性 loop 与刚性核心,可换算 B 因子与晶体学对比。它自身不做结构拟合 ------必须先 rms first 对齐,否则整体平动转动污染涨落。
rms first :1-300@CA,C,N,O
atomicfluct out rmsf.dat :1-300@CA byres
atomicfluct out bfactor.dat :1-300@CA byres bfactor
| 参数 | 原理与作用 |
|---|---|
out <file> |
输出文件:byres 时两列(残基号、RMSF) |
| mask | @CA 每残基一点、图干净;重原子更全但噪声大 |
byres |
按残基平均输出(推荐)。byatom 逐原子输出,bymask 整个 mask 一个值 |
bfactor |
换算 B 因子 = (8/3)π²·RMSF²,与晶体学 B 因子对比 |
start / stop / offset |
帧窗口控制,如 start 5001 跳过前一半排除平衡初期 |
adp |
输出各向异性位移参数(ANISOU 格式),写回 PDB 用 |
七、secstruct ------ DSSP 二级结构时间演化
原理:secstruct 用内置 Kabsch-Sander 算法对每帧每残基判定二级结构(8 类编码:0=Coil,1/2=β 链,3/4/5=三种螺旋,6=Turn,7=Bend),输出"残基 × 时间"演化矩阵------一段螺旋是否保持,一张图回答。
secstruct out dssp.gnu sumout dssp_sum.dat totalout dssp_total.out
| 参数 | 原理与作用 |
|---|---|
out <file> |
残基 × 帧的 SS 编码矩阵(.gnu 格式)。Python 读进来 imshow 就是论文标准的二级结构演化热图 |
sumout <file> |
每残基各 SS 类型百分比,找螺旋含量骤降的不稳定区段 |
totalout <file> |
全轨迹各 SS 类型总帧数,快速对比 apo vs holo |
| mask(可选) | 如 :10-280 跳过无序末端,避免高波动拉花热图 |
八、hbond ------ 氢键占有率
原理:氢键按几何双判据判定(供-受体距离 + D-H···A 角度),hbond 每帧判定一次,输出存在矩阵、平均占有率、时间序列三类结果------回答"这个关键氢键保持了 80% 还是 20%"。
hbond hb_pro :1-300 out hb_pro.dat avgout hb_avg.dat series uuseries hb_uu.gnu
hbond hb_lig :1-301 out hb_lig.dat avgout hb_lig_avg.dat \
solventdonor :WAT solventacceptor :WAT@O
| 参数 | 原理与作用 |
|---|---|
| mask | 判定范围。蛋白-配体氢键须包含配体残基(:1-301),否则只算蛋白内部 |
out <file> |
每帧每氢键 0/1 存在矩阵,占有率热图数据源 |
avgout <file> |
平均统计:每个氢键的占有率、平均距离/角度、lifetime。挑关键氢键看这张 |
series |
时间序列:uuseries 溶质-溶质(.gnu 热图)、uvseries 溶质-溶剂 |
solventdonor / solventacceptor |
溶剂供体/受体 mask,桥接水分析------配体经一个水分子间接连蛋白,不加就漏 |
dist / angle <cut> |
双判据阈值:距离默认 3.0 Å(供-受体重原子间距),角度默认 135°(D-H···A 夹角) |
nointramol |
排除分子内氢键,看蛋白-配体界面时建议加 |
九、cluster ------ 聚类,从一万帧到五个代表构象
原理:聚类按坐标 RMSD 把相似帧归组,每组取代表帧(centroid)------从轨迹提炼"可对接"构象的标准方法。三算法:k-means(快、预设簇数)、层次凝聚(ε 截断)、DBSCAN(自动定簇数)。
cluster c1 \
kmeans clusters 5 randompoint maxit 500 \
rms :1-300@CA,C,N,O \
sieve 10 random \
out cnumvtime.dat summary cluster_summary.dat info cluster_info.dat \
cpopvtime cpopvtime.dat normframe \
repout cluster_rep repfmt pdb \
singlerepout singlerep.nc singlerepfmt netcdf \
avgout cluster_avg avgfmt pdb
| 参数 | 原理与作用 |
|---|---|
算法段 kmeans clusters 5 |
目标 5 簇,randompoint 初始化,maxit 500 上限。可换 hieragglo epsilon 3.0 或 dbscan minpoints 4 epsilon 2.0(ε 用 kdist 定) |
rms <mask> |
距离度量用的原子集------簇相似性的定义本身。骨架重原子最常用 |
sieve 10 random |
随机取 1/10 帧建距离矩阵。两两距离 O(N²),一万帧矩阵 800 MB,不加直接爆内存 |
out <file>(cnumvtime) |
每帧所属簇编号 |
summary <file> |
簇统计:帧数、占比、簇内均距(越小越紧致)、代表帧号、簇间均距(越大越开) |
info <file> |
质量指标:DBI(越低越好)、pSF(越高越好)、SSR/SST(方差解释率) |
cpopvtime <file> normframe |
簇布居随时间。收敛判断:后 1/3 段平稳,布居才可用于热力学分析 |
repout / singlerepout / avgout |
各簇代表帧(centroid,真实帧------对接/药效团输入)、合并轨迹、平均结构(展示用,对接建议用 centroid) |
十、matrix / diagmatrix / projection ------ PCA 三步走
原理:PCA 把 Cα 原子坐标协方差矩阵对角化,前几个特征向量(主成分)捕获最大幅度的集体运动。cpptraj 里它固定是三个命令的组合:建矩阵 → 对角化 → 投影。
rms first :1-300@CA
matrix covar name mcovar :1-300@CA out covar.dat
run
runanalysis diagmatrix mcovar out evecs.dat vecs 10 name eigenvec
projection modes eigenvec beg 1 end 3 :1-300@CA out pca.dat
run
| 参数 | 原理与作用 |
|---|---|
matrix covar |
建坐标协方差矩阵。变体:mwcovar 质量加权、correl = DCCM 相关矩阵 (变构分析)、distcovar 距离协方差(免拟合) |
run(第一处) |
先让 matrix 吃完轨迹。这一行不能省 ------diagmatrix 是分析命令,需要完整矩阵才能对角化 |
runanalysis diagmatrix <name> |
对角化,且在解析输入阶段立即执行(普通 diagmatrix 与 projection 同队列排队时,特征向量还没生成,projection 会报 "modes set is empty" 直接失败)。vecs 10 出前 10 个特征向量;out 同时写特征值(画方差贡献率) |
projection modes <name> |
每帧投影到 PC 空间,beg 1 end 3 取前 3 个;输出帧号 + 各 PC 投影值。PC1-PC2 团块 = 构象盆地。注意 modes 接的是数据集名不是文件名 |
十一、绘图实战:三套 Python 模板
cpptraj 只产数据不画图,三个模板覆盖 90% 日常图。只是想快速扫一眼 .dat 不写代码,xmgrace rmsd.dat(sudo apt install grace)十秒出图可交互调样式;要进论文再回到下面的模板:
import numpy as np
import matplotlib.pyplot as plt
模板 1:时序 .dat(RMSD/Rg/距离/SASA 通用)
d = np.loadtxt('rmsd_bb.dat', comments='#')
plt.plot(d[:, 0] / 1000, d[:, 1], lw=1) # ps→ns
plt.xlabel('Time (ns)'); plt.ylabel('RMSD (Å)')
plt.savefig('rmsd.png', dpi=300)
模板 2:.gnu 矩阵(DSSP/DCCM/rms2d 通用)
mat = np.array([[float(x) for x in l.split()] for l in open('dssp.gnu')
if l.strip() and not l.startswith('#')])
plt.imshow(mat[:, 1:].T, aspect='auto', cmap='viridis', origin='lower')
plt.colorbar(); plt.savefig('dssp.png', dpi=300)
模板 3:聚类布居(cpopvtime)
cp = np.loadtxt('cpopvtime.dat', comments='#')
for i in range(1, cp.shape[1]):
plt.plot(cp[:, 0], cp[:, i], lw=1, label=f'C{i-1}')
plt.legend(fontsize=8); plt.savefig('cpop.png', dpi=300)
十二、补充:radgyr 与 radial ------ Rg 和径向分布函数
radgyr(回旋半径 Rg):量化体系整体紧致程度,与 RMSD 互补------RMSD 平台但 Rg 持续变大说明蛋白在"舒展漂移",仍不可用。
radgyr out rg.dat :1-300 mass
| 参数 | 原理与作用 |
|---|---|
| mask | 计算范围,蛋白通常 :1-300(配体分析可单独 radgyr out rg_lig.dat :301) |
mass |
质量加权(推荐),未加时按等权几何计算,两者数值有差异 |
tensor |
额外输出回旋张量,看各向异性舒展(如去折叠过程) |
radial(RDF 径向分布函数):统计某组原子周围另一组原子的密度随距离的分布 g(r)------看水/离子在蛋白或配体周围的分布层、结合水有序程度的标准工具。
radial rdf_water.dat 0.1 10.0 :1-300 :WAT@O volume
radial rdf_ion.dat 0.1 10.0 resname LIG :Na+
| 参数 | 原理与作用 |
|---|---|
<outfile> <spacing> <maximum> |
位置参数:输出文件、bin 宽(Å)、最大距离(Å) |
<mask1> <mask2> |
中心原子组 / 分布原子组 |
volume |
按当前帧盒子体积归一化(周期体系必加,否则 g(r) 整体偏低) |
density <d> |
用给定密度而非盒子体积归一化,密度已知时更稳 |
输出两列(r、g(r)),画图套第十一节模板 1;g(r) 第一峰位即典型配位距离,峰下面积给配位数。
十三、分析选型速查与结语
| 研究问题 | 首选命令 | 关键输出 |
|---|---|---|
| 平衡收敛判断 | process_mdout.perl / mdout_analyzer.py |
ETOT 平台、TEMP ±5 K |
| 轨迹能用吗 | rms + radgyr |
RMSD 平台、Rg 稳定 |
| 哪里在动 | atomicfluct + secstruct |
RMSF 峰、SS 热图 |
| 结合姿态保持吗 | rms ref + hbond avgout |
配体 RMSD、氢键占有率 |
| 有哪些代表构象 | cluster |
repout centroid PDB |
| 构象怎么变 | PCA 三步 + rms2d |
PC 投影团块、两两 RMSD 矩阵 |
| 要动力学速率 | 转 PyEMMA(tICA+MSM) | 态间转换时间尺度 |
一句话收束:先 stability 后 flexibility 再 interaction 最后 ensemble,每步为下步排除干扰。下一步:拿一条自己的蛋白-配体轨迹,从第二节骨架文件开始把八个命令各跑一遍;批量多体系换 pytraj 接口(命令一一对应,返回 numpy 数组)。
关键字
AMBER cpptraj RMSD RMSF 径向回旋半径 氢键占有率 DSSP 聚类分析 PCA 轨迹分析 process_mdout
参考来源
- CPPTRAJ 入门教程:Tutorial C1
- Roe, D.R. & Cheatham, T.E. J. Chem. Theory Comput. 2013, 9, 3084-3095. DOI: 10.1021/ct400341p
- Kabsch, W. & Sander, C. Biopolymers 1983, 22, 2577-2637. DOI: 10.1002/bip.360221211
- Shao, J. et al. J. Chem. Theory Comput. 2007, 3, 2312-2334. DOI: 10.1021/ct700119m
- Scherer, M.K. et al. J. Chem. Theory Comput. 2015, 11, 5525-5542. DOI: 10.1021/acs.jctc.5b00743
- pytraj 文档:pytraj: data analysis package for MD simulation data
系列导航 :专栏全集 分子动力学模拟-Amber
更多专栏: