处理分子动力学轨迹时,经常遇到这样的怪象:一个多链蛋白复合物,大部分链都好端端聚在一起,偏偏有一条链跑到很远的地方去了;好不容易把蛋白修好,又发现膜散开了。这些都不是模拟出了错,而是周期性边界(PBC)的赝象。本文记录针对多链膜蛋白复合物 xtc 轨迹的一套完整 gmx trjconv 处理流程,以及过程中容易踩的坑。
xtc 里保存的坐标是被”按盒子折叠”过的。GROMACS 默认逐分子(逐链)独立地把质心折回盒子里。当某条链的质心在某一帧越过盒子边界,它就被映射到对面的周期镜像,看起来跑到很远的地方;而其它链恰好还在原位,于是出现”大部分链聚在一起、唯独一条链离得很远”的现象。
这条链并没有”飞走”,它只是被放到了另一个等价的周期镜像里。坐标在物理上是正确的,只是观感上不连续。
下面是走通的完整流程。顺序很重要,每一步都基于上一步的输出。
先修复跨边界被切断的分子,把每条链各自补完整:
gmx trjconv -s step3_1.tpr -f traj-100ns-per-frame-001-to-099.xtc \
-o nojump.xtc -pbc whole -n index-jun29.ndx
弹出选组时选 System。
gmx trjconv -s step3_1.tpr -f nojump.xtc \
-o final.xtc -pbc nojump -n index-jun29.ndx
-pbc nojump 通过追踪每个原子相对上一帧的位移、消除跨边界跳变。蛋白扩散很慢、整体作为一个刚性装配一起移动,所以这一步能把复合物修得很完整、很聚拢。
前提:
nojump要求初始帧(第 0 帧)本身就是完整聚在一起的。它保留的是相对初始帧的累积位移,如果起点就错了,结果也会错。
到这里蛋白聚拢了,但膜蛋白体系会出现新问题——膜散开了。
gmx trjconv -s step3_1.tpr -f final.xtc \
-o final-centered.xtc -pbc mol -ur compact -center -n index-jun29.ndx
centering 组选 Protein(或你的目标残基组),输出组选 System。
final-centered.xtc 就是给做图、看动画用的最终版本:蛋白聚拢、膜规整、目标居中。
这是膜蛋白体系用 nojump 时的典型现象,膜并没有坏掉,只是被”摊开”了。
原因在于 nojump 忠实保留每个原子的累积位移。蛋白扩散慢,所以被修得很聚拢;但脂质在膜平面内的横向扩散非常剧烈——100 ns 里每个脂分子都真实地游走了很长距离,nojump 把这些位移全保留下来,于是脂分子们沿着各自的真实轨迹散布到了好几个周期镜像里,看起来膜就”炸开 / 摊平”了。
坐标在物理上仍然正确(它是一张连续铺展、跨越周期镜像的膜),只是不再被收拢在一个盒子里。第三步的 -pbc mol 把每个分子(包括每个脂分子)的质心逐帧折回盒子,膜就重新变回规整的一层膜片。
很容易误以为是 -center 把膜收拢的,其实不是。两个标志分工不同:
| 标志 | 作用 |
|---|---|
-pbc mol |
逐分子把质心折回盒子——这才是让膜规整的功臣 |
-center |
只做一次整体平移,把选中的组挪到盒子正中央,本身不折叠任何分子 |
所以如果只加 -center 不加 -pbc mol,膜还是会保持摊开的样子。两者在同一条命令里配合:-pbc mol 负责收拢,-center 顺带把蛋白摆正。
这也解释了为什么第三步能在保留蛋白聚拢的同时把膜收回来——居中之后蛋白复合物各条链都聚在盒子中心、远离边界,-pbc mol 就不会再把某条链折到对面去(那正是开头”一条链跑很远”的根因:当时那条链恰好贴着边界)。
如果想对某个特定残基(而不是整个 Protein)居中,先在 index 里建好这个组:
gmx make_ndx -f step3_1.tpr -n index-jun29.ndx -o index-jun29.ndx
# 交互界面输入(假设 XXX 是残基号):
# r XXX
# name <新组号> resXXX_center
# q
然后第三步在 centering 提问时选 resXXX_center 即可,-pbc mol 照常工作。
但有一个必须注意的陷阱:-pbc mol -ur compact 的折叠是以居中后的盒子中心为基准的,凡是离居中组超过”半个盒长”的原子,都会被折到盒子对面。
所以复合物相对盒子越小越安全;复合物较大或居中残基偏在一侧时,跑完务必检查有没有链又跑偏了。
-n 选项的辨析一个常见疑问:前两步是不是不该写 -n?
-n index.ndx 只是把 index 文件里定义的组提供给 trjconv 选用,它本身不会自动选任何组,也不改变 PBC 处理逻辑。真正决定处理哪些原子的,是运行时交互界面里你选的那个组。
| 步骤 | -n 是否必需 |
说明 |
|---|---|---|
第一步 -pbc whole |
可有可无 | 对 System 做,System 是默认组,不需要自定义组 |
第二步 -pbc nojump |
可有可无 | 同上 |
第三步 -center |
必需 | 要用自定义居中组(如 resXXX_center),不在默认组里 |
所以前两步带不带 -n,只要最后选的是同一个组(如 System),结果完全一样。三步统一都写 -n 也完全没问题,反而不容易记混;唯一要注意的是带 -n 时交互界面列出的组更多、组号排列不同,别选错组号。
-center 是 xyz 三向都居中。若蛋白在 z 方向不对称,偶尔会把膜片在 z 边界切成上下两半。遇到时可考虑只对整张膜居中,或只在膜平面内处理。final.xtc,那个不能再 wrap。所以有分析需求时别急着删中间产物。final-centered.xtc 完整快速播一遍(不是只看第一帧),确认没有某条链在中途又跑偏、膜没在 z 方向被切两半。PBC 处理的对错只有看完整轨迹才能确认。针对多链膜蛋白复合物的 xtc 轨迹,处理三步法是:
-pbc whole:补完整每个分子-pbc nojump:让蛋白复合物保持聚拢-pbc mol -ur compact -center:逐分子折回盒子,膜重新规整并居中核心要点:让膜规整的是 -pbc mol 而非 -center;居中组的选择会影响折叠基准,要避开复合物边缘;-s 一定要用 .tpr;分析用途反而要保留 nojump 版的摊开坐标。
完