轨迹文件基础:.xtc、.trr、.gro、.pdb 格式解析与转换
做分子模拟,最头疼的事是什么?
不是力场选错了,也不是体系没平衡好。
而是模拟跑完了,拿到一堆文件……看不明白。
我见过不少新人,对着几十个G的轨迹文件发愣。
“.xtc”和“.trr”有什么区别?
“.gro”和“.pdb”哪个更小?
说白了,这四种格式就是四个不同性格的工具。
你得了解它们,才能灵活运用。
这一章,我就带你理清楚。
1. .gro 格式:轻量级的结构描述
.gro 文件,本质上是 GROMACS 的亲儿子。
文本格式、体积小、读写快。
每行固定宽度,内容包含:原子序号、残基名、原子名、x/y/z 坐标、以及可选的 vx/vy/vz(初速度)。
为什么它很重要?
模拟的初始结构、平衡结束后的检查点、甚至是 mdrun 的输入参数,很多地方都依赖 .gro。
我个人习惯,在分析轨迹前,先用 .gro 做一次「结构快照确认」。
gmx dump -f npt.gro 可以帮你以人类可读的方式查看 .gro 的内容。但注意,文件末尾的「盒子向量」是 nm 为单位,不是 Å!
举个例子,一个经过 NPT 平衡的体系,其 .gro 文件结构大致如下:
MD simulation of solvated protein, t= 0.00000
15258
1ALA N 1 0.779 0.257 0.302
1ALA CA 2 0.860 0.350 0.342
...
2MET CB 10 0.798 0.481 0.285
...
15258SOL OW15258 0.516 0.213 0.475
5.60731 5.60731 5.60731 0.00000 0.00000 0.00000
第一行是模拟标题,第二行是总原子数,接着是每个原子的坐标行,最后是 box 向量。
我曾经见过有人直接用文本编辑器改 .gro 里的坐标——
嗯,结果导致模拟瞬间崩掉。因为 .gro 对列宽非常敏感,
尤其是原子名和残基名之间的空格。
改坐标,请用
gmx editconf 或 gmx trjconv。
2. .pdb 格式:人人都懂的通用语言
如果你想把 GROMACS 的轨迹放到 VMD、PyMOL 或 Chimera 里看,.pdb 是最好的桥梁。
它是生物分子模拟界的“通用语”。
.pdb 也是文本格式,但比 .gro 更啰嗦。
一行记录一个原子,包含温度因子、残基链标识等额外信息。
缺点是体积大,但可移植性好。
我就把 .xtc 转成 .pdb 轨迹发给他。
虽然文件大了 5 倍,但人家能直接打开,谁都没废话。
转换命令很简单:
gmx trjconv -f md.xtc -s md.tpr -o md_frame.pdb -dump 500
这个命令从 md.xtc 里提取第 500 ps 的帧,存成 .pdb。
-s md.tpr 是为了提供拓扑信息,否则残基名会丢失。
3. .trr 格式:全精度的“原始负片”
.trr 是 GROMACS 的全精度二进制轨迹格式。
它包含每个原子的坐标、速度、以及力(如果你输出的话)。
浮点数用 double 存储,误差极小。
- 优点:精度高,适合后续分析(比如计算扩散系数、动力学性质)
- 缺点:体积大(大约是 .xtc 的 5~10 倍)
实际项目中,我很少直接保存 .trr 全长轨迹。
只在关键阶段(如自由能计算、过渡态采样)才会启用。
在 md.mdp 里这样控制输出:
; .trr 输出频率
nstxout = 500 ; 每 500 步输出一次坐标
nstvout = 500 ; 每 500 步输出一次速度
nstfout = 500 ; 每 500 步输出一次力
; .xtc 输出频率(轻量)
nstxtcout = 1000 ; 每 1000 步输出一次压缩坐标
这组参数的意思是:
.trr 每 500 步记一次全精度数据,.xtc 每 1000 步记一次压缩数据。
两者互不干扰,可以共存。
我曾经在一次粗粒化模拟中,不小心把 .trr 的输出频率设成了 nstxout = 1。
跑完一看,一个 .trr 文件 200 GB!
嗯,后来我老老实实把 nstxout 设成 0(不输出),只靠 .xtc 干活。
4. .xtc 格式:存储友好的“压缩饼干”
.xtc 是 GROMACS 最常用的轨迹格式。
它是二进制、有损压缩的 — 通过牺牲一定的坐标精度(默认 0.001 nm)来大幅减小文件体积。
精度够用吗?
对于大部分结构分析:RMSD、回旋半径、二级结构分析、距离统计……完全够用。
除非你要做极其精细的自由能面计算,否则 .xtc 是你的最佳选择。
我个人的经验是:
一个 100 ns 的模拟,.trr 可能到 15 GB,.xtc 往往只有 1.5 GB。
省下的空间,可以存更多副本、做更多测试。
.xtc → 日常分析(快、省空间)
.trr → 精细复查、重启模拟(全精度、但沉)
.gro → 输入、检查点、小场景(轻量文本)
.pdb → 跨软件、可视化(通用但慢)
5. 格式转换实操
在实际工作中,你经常需要在这四种格式之间切换。
核心工具有两个:gmx trjconv 和 gmx editconf。
常用命令一览:
| 转换需求 | 命令示例 |
|---|---|
| .xtc → .pdb(单帧) | |
| .xtc → .gro(单帧) | |
| .xtc → .trr(无损) | |
| .trr → .xtc(压缩) | |
| .gro → .pdb(加氢自动处理) | |
| .xtc 提取子轨迹(帧范围) | |
-b 和 -e 用于截取时间范围(单位 ps)。-skip 用于隔帧抽取(比如 -skip 10 = 每 10 帧取 1 帧)。-dump 只取某一时刻的单帧。
举个例子,你想从 10 ns 的轨迹里,提取 2~5 ns 之间的所有帧,并且隔 5 帧取一帧:
gmx trjconv -f md.xtc -s md.tpr -o sub.xtc -b 2000 -e 5000 -skip 5
这样既能定位时间窗口,又能稀疏采样,是分析长轨迹的常用手段。
6. 实战建议:如何选择输出格式
我做过不少项目,从几百个原子的小肽到百万原子的病毒衣壳。
不同的体系,对轨迹格式的选择完全不同。
- 小体系(< 10k 原子,短模拟 < 50 ns): 直接存 .trr。
精度高,省心,空间开销也不大。 - 中大型体系(10k ~ 500k 原子,100 ns ~ 1 μs): 存 .xtc,配合 .tpr 文件。
trr 只保留检查点间隔(checkpoint)。 - 超大规模(百万级以上): 极小频率输出 .xtc,甚至只用 .gro + .xtc 抽样。
存.trr 是奢侈行为。
如果你 60% 以上的分析都是结构相关的(RMSD、PCA、distance),那 .xtc 就足够好。
只有当分析涉及速度、均方位移(MSD)或能量相关量时,才需要 .trr。
7. 一个小坑:文件完整性检查
有时候 .xtc 文件读到一半报错「Corrupted frame」。
一种常见原因:模拟被中途 kill,trr 可能正常结尾,xtc 写了一半。
检查方法很简单:
gmx check -f md.xtc
如果输出显示 Trajectory is readable, last frame OK,恭喜。
如果报错,说明文件损坏。这种情况我遇到过多次,尤其是集群作业被超时打断时。
我曾经在一次大规模分批次模拟中,因为没做文件完整性检查,
直接拿损坏的 .xtc 做了三天的后处理分析……结果 RMSD 图全是锯齿。
后来,我把
gmx check 加入了分析的自动流程里,再也不掉坑了。
好了,四种格式的核心区别和转换方法,就是这样。
你记住一句话就行:
.xtc 是轻骑兵,.trr 是重装部队,.gro 是帮手,.pdb 是翻译官。
下次拿到轨迹文件,先问自己:
「我到底要算什么东西?」
答案会帮你选出最合适的格式。