Amber分子动力学模拟16: Amber轨迹分析与作图-2

本文收录于专栏 分子动力学模拟-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 命令里 firstreference 差在哪?hbondseriesavgoutuuseries 各干什么?聚类的 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.0dbscan 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> 对角化,且在解析输入阶段立即执行(普通 diagmatrixprojection 同队列排队时,特征向量还没生成,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.datsudo 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

参考来源

  1. CPPTRAJ 入门教程:Tutorial C1
  2. Roe, D.R. & Cheatham, T.E. J. Chem. Theory Comput. 2013, 9, 3084-3095. DOI: 10.1021/ct400341p
  3. Kabsch, W. & Sander, C. Biopolymers 1983, 22, 2577-2637. DOI: 10.1002/bip.360221211
  4. Shao, J. et al. J. Chem. Theory Comput. 2007, 3, 2312-2334. DOI: 10.1021/ct700119m
  5. Scherer, M.K. et al. J. Chem. Theory Comput. 2015, 11, 5525-5542. DOI: 10.1021/acs.jctc.5b00743
  6. pytraj 文档:pytraj: data analysis package for MD simulation data

系列导航 :专栏全集 分子动力学模拟-Amber

更多专栏:

蛋白 / 多肽 分子模拟 / 动力学 分子对接 / CADD / 工具 其他
开源蛋白结构推理预测 分子模拟基础 UCSF DOCK系列 agent智能体系列
开源蛋白生成方法实践 分子动力学模拟-Amber rDock系列 化学大模型介绍(2025)
蛋白药物设计-原理与案例剖析 分子动力学模拟-Gromacs LeDock系列 我胡师兄说药
开源多肽设计模型和方法实践 結合自由能 CADD中的机器学习模型 siRNA药物设计模型
开源多肽性质预测 高效计算基本配置 小分子药物设计-原理与案例剖析 ASO药物设计模型
多肽药物设计-原理与案例剖析 作用于DNA/RNA的药物设计实践 开源小分子生成和设计实践 开源药代动力学模拟软件
相关推荐
纪伊路上盛名在12 天前
Kabsch算法的Julia实现
开发语言·算法·julia·序列分析·蛋白质·rmsd
您好啊数模君1 年前
基于聚类与引力斥力优化的选址算法
聚类分析·选址
叫我:松哥2 年前
基于Python 哔哩哔哩网站热门视频数据采集与可视化分析设计与实现,有聚类有网络语义研究
开发语言·python·信息可视化·网络爬虫·matplotlib·聚类分析·网络语义分析
叫我:松哥2 年前
基于python的当当二手书数据分析与可视化系统设计与实现
python·信息可视化·数据分析·数据可视化·管理系统·聚类分析·数据分析大屏
叫我:松哥2 年前
基于B站视频评论的文本分析,采用包括文本聚类分析、LDA主题分析、网络语义分析
爬虫·数据挖掘·可视化·数据可视化·聚类分析·lda主题分析·网络语义分析
归去_来兮2 年前
聚类模型的算法性能评价
人工智能·算法·机器学习·数据分析·聚类分析
༱ホ2 年前
聚类分析 #数据挖掘 #Python
人工智能·python·数据挖掘·k-means·聚类分析
清园暖歌2 年前
数学建模 —— 聚类分析(3)
数据结构·算法·数学建模·聚类分析
Francek Chen2 年前
数据仓库实验四:聚类分析实验
数据仓库·数据挖掘·k-means·聚类分析