- 2024-04-08 13:34:46
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
. 现发布出来, 有需求者自取.
程序
使用
>>>>>>>>>>>>>>>> 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
, 那就意味着可以输出任何格式. 但其他格式的输出还是需要你自己来写的. 不过, 既然需要的信息已经读取出来了, 将其转换成任意的格式并输出想来也不成问题吧.