仓库源文站点原文


layout: post title: trr轨迹转换程序trr2all categories:


GROMACS常用的轨迹文件有两种格式, xtc和trr. 这两种都是二进制格式, 没法直接查看. xtc中只有坐标, 精度有限且经过压缩. trr中可以包含坐标, 速度和力, 全精度且没有进行压缩. 与xtc相比, trr需要较多的存储空间. 大致而言, 保存频率相同时, 采用默认的精度压缩, xtc大小大约是trr的1/10. 对于稍大些的轨迹, trr文件因为尺寸大, 读取也就慢些, 因而如果只是查看轨迹(如VMD), 我们常使用xtc, 而不使用trr.

这两种轨迹的读取都可以使用xdrfile. 这是GROMACS官方提供的一个C语言库, 也可以用于Fortran. 对于未压缩的trr二进制文件, 只要了解了其格式, 数据类型, 读取起来还是容易的, 所以网上也可以找到不少相关的代码, 如pytrr.

几年前, 我也写过一份读取trr文件的Fortran代码. 代码没有借助外部库, 直接使用二进制文件的读取方法来读取trr文件, 因为目的就是学习trr的二进制格式及其读取. 写过后稍微调试了一下就放在那里了.

最近, 又有人问起我写的那个红外脚本的问题. 测试过程中我发现那个脚本经过改进, 中间文件已经减小了不少, 但运行过程中仍然还需要输出并处理一个gro文件. 对于大的trr轨迹, 这个中间gro文件会变的巨大, 不仅处理速度慢, 对磁盘空间的压力也大, 很不方便.

所以, 我就想到了以前的Fortran代码, 拿出来稍加整理, 添加了几点功能, 使其不单可用于红外计算的处理, 名为trr2all. 现发布出来, 有需求者自取.

程序

gmxtools-trr2all

使用

>>>>>>>>>>>>>>>>     trr2all    <<<<<<<<<<<<<<<<
>>>>>>>>>>>>>>>>    Jicun Li    <<<<<<<<<<<<<<<<
>>>>>>>>>>     2024-04-05 20:25:51     <<<<<<<<<
Usage:   trr2all [-f traj.trr] [-s topol.tpr] [-n index.ndx]
                 [-g System  ] [-o  traj.xyz]
                 [-ov ] [-of ] [-oqv]
                 [-gmx gmx   ]
default: trr2all -f traj.trr -s topol.tpr -n index.ndx
                 -g System   -o traj.xyz  -gmx gmx
option:  -f:   trr file
         -s:   tpr file
         -n:   index file
         -g:   group name
         -o:   output file: File.trr, File.xyz, File.lammpstrj
         -ov:  output velocity
         -of:  output force
         -oqv: output charge*velocity
         -gmx: command to run GMX
--------------------------------------------------------------

功能

trr2all 读取trr, tpr, ndx三个输入文件, 输出所选组的坐标r, 速度v(可选), 力f(可选), 电荷速度积qv(可选).

暂时支持三种输出类型, 简单的xyz文件, trr文件, lammps轨迹lammpstrj文件.

对于xyz文件, 主要是可以在每个原子的坐标后面列出速度v, 力f, 或电荷速度积qv. 使用Jmol等读取这种扩展的xyz格式并显示相应的向量很方便.

Jmol载入后, 脚本控制台执行vector; vector scale 0.5即可显示相应的向量. 向量缩放系数可根据具体体系的数值进行调整.

由于GROMACS的trjconv工具就可以实现trr文件的输出, 所以trr2all在输出trr文件时, 只保留了输出选组qv总和的功能, 并将其附加到选区的最后一个原子之上. 所得trr文件可以直接用于红外光谱计算, 避免了以前脚本使用中间gro文件的缺陷, 极大地减小了磁盘占用, 处理速度也大大加快.

对于lammpstrj文件, 则主要着眼于VMD. VMD不读取trr文件中的速度(除非自己修改源码后编译), 因而无法直接根据原子的速度对其进行着色. 虽然可以借助脚本完成, 像我以前的作法, VMD加载GROMACS轨迹的速度信息与时间信息, 但不是很方便. 借助trr2all, 只要将trr文件转换成lammpstrj格式即可, 方便了不少.

当然, 名字既然叫做trr2all, 那就意味着可以输出任何格式. 但其他格式的输出还是需要你自己来写的. 不过, 既然需要的信息已经读取出来了, 将其转换成任意的格式并输出想来也不成问题吧.