4. 力场参数文件结构解析(AMBER)

做 AMBER 模拟的人,迟早要跟那三个文件打交道:.prmtop、.inpcrd、.frcmod。很多新手上来就跑 tleap,生成一堆文件后直接扔进 sander,结果跑崩了也不知道去哪查。

我个人习惯是,拿到一个新体系,先手工翻一遍 .prmtop 头几行。它就像一张「力场参数配置表」,读完你基本就知道 AMBER 在算什么了。这一节,我们就掰开揉碎看看这三个文件到底长什么样。

4.1 .prmtop 文件——体系的「参数身份证」

.prmtop 是 AMBER 里最核心的拓扑文件。它不存坐标,只存「该怎么算」——原子类型、键连关系、电荷、力常数、平衡值……所有力场参数都在里面。

嗯,这里要注意:它是个纯文本文件,虽然动辄几百KB,但结构是分块的。每个块以 %FLAG 开头,后面跟着块名,然后用 %FORMAT 说明数据格式。

%FLAG 块名 内容说明 数据量
POINTERS 记录原子数、残基数、键数、二面角数等元信息 固定 31 个整型
ATOM_NAME 每个原子的名称(例如 CA, CB, N, H) 原子数
CHARGE 每个原子的部分电荷,固定系数需要除以 18.2223 原子数
ATOM_TYPE_INDEX 原子的力场类型 ID,指向参数表 原子数
BOND_FORCE_CONSTANT 键伸缩力常数 键数
BOND_EQUIL_VALUE 键平衡距离 键数
DIHEDRAL_FORCE_CONSTANT 二面角力常数 二面角数
DIHEDRAL_PERIODICITY 二面角周期性 二面角数
DIHEDRAL_PHASE 二面角相位角 二面角数
LENNARD_JONES_ACOEF LJ A 系数(ε·Rmin¹²) 原子类型数
LENNARD_JONES_BCOEF LJ B 系数(2ε·Rmin⁶) 原子类型数
EXCLUDED_ATOMS_LIST 被排除的 1-2、1-3、1-4 相互作用原子列表 可变

我刚开始接触时,老以为 CHARGE 块里存的就是真实电荷。错了。AMBER 为了省空间,把电荷值乘以了 18.2223。所以你看到 0.834,实际电荷是 0.834 / 18.2223 ≈ 0.0458 e。这个坑我踩过,后来花了一上午核对能量才发现的。

关键记忆点: .prmtop 里的 POINTERS 块第 10 个值指向二面角类型数。如果你加了新的二面角参数,一定要确认这个数对不对。

4.2 .inpcrd 文件——坐标与盒子信息

.inpcrd 基本上就干两件事:存原子坐标、存周期性盒子信息。它的格式很死板,但解析起来也最简单。

我习惯用 ambpdb 把它转成 PDB 看看结构有没有畸形。如果有残基坐标爆到几十埃外,不用跑直接改坐标就行。

一个典型 .inpcrd 文件长这样:

   Initial structure from minimization
  30
   0.000  0.000  0.000   1.500  1.200  0.800   2.100  2.300  1.900
   3.200  3.100  2.800  1.200  1.300  0.400  0.500  0.700  0.300
   ...(共 30 个原子,每行 3 个坐标)
  10.0  10.0  10.0  90.0  90.0  90.0

结构说明:

  • 第一行:标题行,随便写,但最好描述一下结构是什么。
  • 第二行:原子总数。
  • 后续行:坐标数据。每行 6 个浮点数,按我个人的经验,如果你有奇数原子,最后一行可能会不满 6 个数,AMBER 能自动补全。
  • 最后一行:盒子参数(如果体系是周期性的)。a、b、c、alpha、beta、gamma。

警告: 如果 .inpcrd 里没有盒子信息(比如气相模拟),但 .prmtop 里设置了周期性边界,跑 sander 时大概率会报段错误。我遇到过好多次,排查下来都是这个问题。

为什么会这样?因为 AMBER 在运行时先读 .prmtop 里的 IFBOX 标志位。如果标志位是 1(指周期性体系),它就去 .inpcrd 末尾找盒子参数,找不到就直接崩溃。

4.3 .frcmod 文件——参数补丁的「活页夹」

.frcmod 可能是这三个文件里最容易被忽略的。它不像 .prmtop 那么大,但它在力场参数版本锁定中是真正的核心。

简单说,.frcmod 就是一组参数的「增补条款」。当你从文献或自定义力场里新加了一组键、角、二面角或 LJ 参数时,你不必改动 GAFF 或 FF14SB 主参数文件,直接写一个 .frcmod 文件,在 tleap 里用 loadamberparams 命令加载即可。

一个典型的 .frcmod 文件分多个段:

MASS
CA   12.01    0.600     ! 自定义 CA 原子质量与范德华半径
CB   12.01    0.600

BOND
CA-CA   310.0   1.40     ! 新增键伸缩参数:力常数 310 kcal/mol·Å²,平衡键长 1.40 Å

ANGL
CA-CA-CA   63.0   120.0    ! 键角参数

DIHE
CA-CA-CA-CA   1    0.156    180.0   2.0    ! 二面角参数:势垒高度、相位角、周期性

NONBON
CA   0.0860   1.9080   0.0   0.0
CB   0.0860   1.9080   0.0   0.0

注意看 NONBON 段的最后两个 0.0,那是 Rmin/2 的值,AMBER 默认用 Rmin/2 方式。你想想看,如果你从别的力场搬参数,这里的格式对不上,算出来的 LJ 能直接差一个数量级。

提示: 我建议在 .frcmod 文件头部加注释 ! Generated for project X, date Y。项目做久了,你会有几十个 .frcmod,不标注来源根本分辨不出来哪个对应哪个。

4.4 三个文件的关系:一张图讲明白

这三个文件在模拟中的角色,我用一张 SVG 结构图来展示:

AMBER 力场参数文件关系图 AMBER 力场参数文件关系图 .prmtop 拓扑 + 参数表 .inpcrd 初始坐标 + 盒子 .frcmod 自定义参数补丁 tleap 合成时合并 sander / pmemd 输入 .prmtop + .inpcrd + .frcmod 注意: .frcmod 不是直接扔给 sander 的,必须通过 tleap 合并到 .prmtop 中 但保留 .frcmod 源文件,对后续参数版本锁定和溯源至关重要

4.5 典型流程:从 tleap 到完整输入

实际项目中,你通常是这么操作的:

  1. 准备分子结构:用 antechamber 生成 GAFF 参数,或者用已有库文件。
  2. 写 tleap 脚本:在输入文件里引用 .frcmod 和原始库。
  3. 运行 tleap:生成 .prmtop 和 .inpcrd。
  4. 检查关键参数:用 parmchk 或手工打开 .prmtop 看 BOND_FORCE_CONSTANT 和 CHARGE 是否正确。
  5. 归档 .frcmod:把自定义参数单独存到版本控制里,方便后续复现或修改。

这里我提一个避坑指南:有一次我在跑金属配合物体系时,直接把文献里的 .frcmod 文件复制过来用,没细看二面角 DIHEDRAL_PERIODICITY 是不是 2。结果模拟中二面角一直在转,没有势垒。后来我用 ambmask 扫了一遍才发现周期数写成了 1,应该是 2 的。从此以后,凡是新的 .frcmod,我都会在加载后用 parmed 验证一遍参数是不是跟预期一致。

一句话总结: .prmtop 是参数集合,.inpcrd 是当前状态,.frcmod 是自定义补丁。版本锁定主要锁定的是 .frcmod 和 tleap 输入脚本,而不是每次重新生成的 .prmtop。