第2章:输入文件体系——.top、.itp、.gro、.pdb、.mdp 文件的作用与关系
开始上手 GROMACS,你第一眼看到的,往往不是炫酷的分子动画,而是一堆奇奇怪怪的文件名。说实话,我第一次看到这一堆后缀时也有点懵。后来我才明白,搞懂这套文件体系,才算真正入了门。
今天我就跟你把这几个核心文件拆开揉碎了讲清楚。它们的关系不复杂,但你得知道谁负责什么,谁依赖谁。
2.1 一句话给你整明白
每个文件说白了都是在模拟中扮演一个角色:
- .gro / .pdb:告诉系统原子长什么样、摆在哪(坐标)
- .top:告诉系统原子之间怎么连、带什么电(拓扑)
- .itp:.top 的得力助手,用来拆分和组织拓扑内容
- .mdp:告诉系统模拟过程怎么跑、跑多久(参数)
你可以把 .gro/.pdb 想象成「演员表」,.top/.itp 是「角色设定和台词」,.mdp 则是「导演拍摄方案」。缺哪个,戏都演不下去。
2.2 .top 文件:总拓扑文件
.top 是体系拓扑的总指挥。它只管连接关系和质量参数,不管坐标。我个人习惯在一开始就把 .top 写得干干净净,后面能省很多事。
一个典型 .top 长这样:
[ defaults ]
; nbfunc comb-rule gen-pairs fudgeLJ fudgeQQ
1 1 yes 0.5 0.5
[ atomtypes ]
; name mass charge ptype sigma(nm) epsilon(kJ/mol)
CA 12.01100 0.000 A 0.34 0.360
[ moleculetype ]
; name nrexcl
Protein 3
[ atoms ]
; nr type resnr residu atom cgnr charge mass
1 CA 1 ALA CA 1 0.20 12.01100
[ bonds ]
; i j funct r(nm) k(kJ/mol/nm^2)
1 2 1 0.153 502080.0
这里要注意,[ defaults ] 和 [ atomtypes ] 定义全局参数。[ moleculetype ] 定义分子的内部连接。电荷和质量就是在这个文件里配好的。我见过有人把拓扑配错了,结果模拟出来两个原子之间多了一根莫名其妙的键,那场面……嗯,后来我学会了多检查几遍。
2.3 .itp 文件:模块化拓扑文件
.itp 就是用来拆解 .top 的。一个复杂体系,比如蛋白质加溶剂加离子,全塞一个 .top 里会乱成一团。这时候 .itp 就派上用场了。
一个 .itp 里通常只写一种分子的拓扑:
[ moleculetype ]
; name nrexcl
SOL 2
[ atoms ]
; nr type resnr residu atom cgnr charge mass
1 OW 1 SOL OW 1 -0.82 15.999
2 HW1 1 SOL HW1 2 0.41 1.008
3 HW2 1 SOL HW2 3 0.41 1.008
[ settles ]
; i funct doh dhh
1 1 0.1 0.1633
之后在 .top 里用 #include 把它引进来:
#include "water.itp"
#include "protein.itp"
[ system ]
; name
My System
[ molecules ]
; name number
Protein 1
SOL 10000
2.4 .gro / .pdb 文件:坐标文件
.gro 和 .pdb 存储原子的三维坐标。.gro 是 GROMACS 的原生格式,紧凑且含盒信息;.pdb 是通用格式,更易读,但信息量少一点。
.gro 的结构:
Protein in water
3
1ALA CA 1 0.126 1.345 0.457
1ALA CA 2 0.189 1.432 0.498
1SOL OW 3 0.256 1.111 0.602
1.00000 1.00000 1.00000
第一行是注释,第二行是原子数,后面每行就是 残基名称、原子名称、编号和 xyz 坐标,最后一行是盒子尺寸。这个格式很短小,我喜欢用它做快速检查。
.pdb 则长得啰嗦一些:
ATOM 1 N ALA A 1 1.452 1.342 0.789 1.00 0.00 N
ATOM 2 CA ALA A 1 1.562 1.278 0.892 1.00 0.00 C
2.5 .mdp 文件:运行参数文件
.mdp 是模拟的「遥控器」。你让系统跑多久、压力多大、用哪种算法,全写在这里。
一个基础 .mdp:
integrator = md
nsteps = 50000
dt = 0.002
nstxout = 100
nstenergy = 100
pbc = xyz
pcoupl = Berendsen
tau_p = 1.0
ref_p = 1.0
compressibility = 4.5e-5
gen_vel = yes
gen_temp = 300
gen_seed = -1
这里有几点你得留心:
- integrator:选 md 就是标准分子动力学,选 steep 就是能量最小化。
- nsteps × dt:决定模拟总时长。我刚开始总把 nsteps 设太小,跑完一看才几皮秒,等于白跑。
- pbc:周期性边界条件。想清楚你的体系需不需要,别乱开。
2.6 它们的关系——一张图讲明白
别急,我画了一张流程图,把这五个文件怎么配合、谁生成谁、谁依赖谁,一次说清。SVG 图在下面。
从图里你可以看出来,.top 和 .gro 是并行的两条线,一个管连接关系,一个管空间位置。只有通过 grompp 把它们和 .mdp 合并,才能生成最终的可执行文件 .tpr。
我当时刚学的时候,总觉得 .top 和 .gro 是同一类文件,结果有一次把拓扑里的原子数和坐标里的原子数搞差了,grompp 直接报了个 syntax error。后来我养成习惯:先用 gmx check 检查两者数量是否一致。
2.7 避坑指南——我踩过的坑你都别踩
我整理了一张表,把这些文件常见的坑标出来:
| 文件类型 | 常见问题 | 怎么避免 |
|---|---|---|
| .top | 原子类型与力场不匹配 | 用同源力场参数,不要混用 |
| .itp | #include 路径写错 | 相对路径要确认,或干脆绝对路径 |
| .gro | 原子数不匹配,盒尺寸未更新 | 每次修改后都跑一遍 gmx check |
| .pdb | 缺失某些原子记录 | 用 pdb2gmx 转换,不要手写 |
| .mdp | nsteps × dt 明显不合理 | 手动估算总模拟时间的数量级 |
我曾经有一回在 .mdp 里写了 dt = 0.002 但 nsteps = 100,跑完一看才 0.2 皮秒,啥也看不出来。那种感觉……嗯,后来我就把 nsteps 和总时间的计算写在笔记上,跑之前先算一下。
2.8 小结:你需要记住的三句话
- .gro 给坐标,.top 给连接,.mdp 给参数。三者缺一不可。
- .itp 是 .top 的拆分工具。复杂体系一定要用 .itp 模块化管理。
- grompp 是大家长。它把所有输入揉一起,生成 .tpr,mdrun 才认这个。
gmx check -f system.gro -top system.top
如果不一致,别往后跑,先修好再走。我保证你省下的时间比花在这行命令上的多得多。