mdcompress的安装与使用
对于长效分子动力学模拟来说,如何去高效的存储分子轨迹,是一个重要的问题。前者有Gromacs的xtc格式文件,利用量化和比特级的压缩,将分子轨迹压缩到23%左右。而本文介绍的mdc工具,可以在xtc的基础上,再压缩到60%左右。
MDCompress的安装构建
如果本地有gcc-12和g++-12,以及make cmake build-essential python3 python3-dev rustc cargo git这些基本的环境依赖,那么就可以直接运行如下指令,先把仓库clone到本地,然后编译构建:
$ git clone --recurse-submodules https://github.com/refresh-bio/mdcompress
$ cd mdcompress
$ make -j
$ ./bin/mdcompress compress -i examples/data/example.xtc --topology examples/data/example.tpr -o example.mdc
这是顺利的情况,以下是几个有可能出现的问题,及其解决方案。
Git下载网络问题
在国内的网络环境下,git下载仓库这一步就有可能报错,很多时候是卡在chemfiles这个子模块。那么我推荐的一个路径是:将仓库映射到Gitee镜像库,然后把相应的链接修改为Gitee的路径。具体操作是先在Gitee上点击,从Github导入仓库:

然后填入这个链接地址:https://github.com/refresh-bio-dependencies/chemfiles.git。这就在Gitee上创建了一个镜像仓库:

这个仓库的地址从github链接变成了:https://gitee.com/dechin/chemfiles.git。然后用命令行或者手动的把这个链接配置到mdcompress的仓库中:
$ sed -i 's|https://github.com/refresh-bio-dependencies/chemfiles.git|https://gitee.com/dechin/chemfiles.git|g' .gitmodules
$ grep -A2 'libs/chemfiles' .gitmodules
[submodule "libs/chemfiles"]path = libs/chemfilesurl = https://gitee.com/dechin/chemfiles.git
[submodule "libs/nanobind"]
$ git submodule sync libs/chemfiles
为 'libs/chemfiles' 同步子模组 url
$ rm -rf libs/chemfiles
$ git submodule update --init libs/chemfiles
正克隆到 '/home/xxx/workspace/mdcompress/libs/chemfiles'...
子模组路径 'libs/chemfiles':检出 '487cbdba3286aec25c'
$ ll ./libs/chemfiles/
总计 112
drwxrwxr-x 11 dechin dechin 4096 7月 17 18:09 ./
drwxrwxr-x 6 dechin dechin 4096 7月 17 18:09 ../
-rw-rw-r-- 1 dechin dechin 394 7月 17 18:09 AUTHORS
-rw-rw-r-- 1 dechin dechin 19675 7月 17 18:09 CHANGELOG.md
drwxrwxr-x 3 dechin dechin 4096 7月 17 18:09 cmake/
-rw-rw-r-- 1 dechin dechin 9551 7月 17 18:09 CMakeLists.txt
-rw-rw-r-- 1 dechin dechin 164 7月 17 18:09 .codecov.yml
-rw-rw-r-- 1 dechin dechin 3200 7月 17 18:09 Contributing.md
drwxrwxr-x 6 dechin dechin 4096 7月 17 18:09 doc/
drwxrwxr-x 4 dechin dechin 4096 7月 17 18:09 examples/
drwxrwxr-x 2 dechin dechin 4096 7月 17 18:09 external/
-rw-rw-r-- 1 dechin dechin 42 7月 17 18:09 .git
drwxrwxr-x 3 dechin dechin 4096 7月 17 18:09 .github/
-rw-rw-r-- 1 dechin dechin 51 7月 17 18:09 .gitignore
drwxrwxr-x 3 dechin dechin 4096 7月 17 18:09 include/
-rw-rw-r-- 1 dechin dechin 1541 7月 17 18:09 LICENSE
-rw-rw-r-- 1 dechin dechin 7524 7月 17 18:09 README.md
drwxrwxr-x 4 dechin dechin 4096 7月 17 18:09 scripts/
drwxrwxr-x 6 dechin dechin 4096 7月 17 18:09 src/
drwxrwxr-x 9 dechin dechin 4096 7月 17 18:09 tests/
-rw-rw-r-- 1 dechin dechin 11 7月 17 18:09 VERSION
到这里仓库就下载并配置完成,可以开始编译了。
gcc-12依赖
这个仓库依赖于gcc-12和g++-12及以上的版本,但是很多人本地可能已经有了一些gcc的版本,但是这里不用担心,gcc支持多版本共存的管理模式,可以按照如下方式在Ubuntu Linux平台安装gcc-12和g++-12(需要sudo权限):
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt update
$ sudo apt install gcc-12 g++-12
$ sudo apt install rustc cargo # 这个依赖很重要,必须执行
安装好基础环境之后,可以通过如下方式编译构建mdcompress,并指定使用gcc-12和g++-12:
$ make -j CC=gcc-12 CXX=g++-12
编译完成后,可以通过mdcompress --version测试编译是否成功:
$ ./bin/mdcompress --version
mdcompress version: 2.0.4
Date: 2026-06-22
Authors: Marek Kokot, Sebastian Deorowicz
Usage:
mdcompress <mode> [options]
Modes:compress - compress a trajectory (XTC/TRR/DCD/...) into MDC formatdecompress - decompress MDC file into a trajectory (XTC/TRR/DCD/...)select - decompress some frames from MDC file into a trajectory (XTC/TRR/DCD/...)info - info about contents of MDC filemake_desc - create description file (for -d) from a topology (TPR/PSF/...)
Options - compress mode-i <file_name> - input trajectory (XTC, TRR, DCD, ...)-o <file_name> - output file name (.mdc)-d <file_name> - description of the segments of a frame.May be omitted if --topology is given: mdcompress thenbuilds the description from the topology automatically.--topology <file_name> - topology file (TPR, PSF, PDB, ...). It is stored inside the .mdc.If -d is not given, mdcompress infers the description from it.NOTE: coordinate-only trajectories (e.g. DCD) carry no topology,so either -d or --topology must be provided for them.NOTE 2: It may happen that mdcompress cannot build a descriptionfrom the file specified with the --topology switch;in that case, -d must be provided.--only-mol - compress only the molecule segments, skipping water/ions/otherfrom the description/topology. Usually not needed: if thetrajectory contains only molecules, mdcompress detects this andenables --only-mol automatically (with a warning).(description check) - whether -d or --topology is used, the description is validatedagainst the trajectory's atom count before compressing:* exact match -> used as-is;* only molecules match -> --only-mol enabled automatically;* no match -> compression is aborted with anexplanation, and (when the description was inferred from atopology) a candidate is written to <output>.candidate.descfor you to edit and reuse with -d.-l <int> - compression level (default: 2)--preset <preset> - use one of preset parameters for -b, --subsegment-size,available presets:* default,* archive - use if the main decompression use scheme is decompress all,* trajectory - use if the main decompression use scheme is tracking trajectoryof some atoms,* frames - use if the main decompression use scheme is selecting subset of frames.Current usage message prints defaults in regards to configured preset.-t <int> - no. threads-b|--batch-size <int> - no. of frames in a batch (default: 20)-h|--max-history-size <int> - no. of previous framed used to predict the current one (default: 1; max: 3)--res <int> - min. resolution in fm (default: 1000; 1000 fm = 0.01 Angstrom)--subsegment <id1,id2,...> - list of segments to split into subsegments (if no specified subsegment all)--subsegment-size <int> - number of atoms in a single subsegment (default: 102, 0 means don't use subsegments)--n-frames-for-model - no. of frames to build model (default: 50)--max-dist-in-model - max. distance in segment of reference atoms (default: 100)
Options - decompress mode-i <file_name> - input file name (.mdc)-o <file_name> - output trajectory file name (format chosen by extension: .xtc/.trr/.dcd/...)--topology <file_name> - if a topology was stored at compression time, write it out tothis path (the extension must match the original topology file)
Options - select mode-i <file_name> - input file name (.mdc)-o <file_name> - output trajectory file name (format chosen by extension: .xtc/.trr/.dcd/...)--topology <file_name> - if a topology was stored at compression time, write it out tothis path (the extension must match the original topology file)--fid <int> - frame id (0-based)--fr <int> <int|MAX> - range of frame ids (0-based) (`MAX` or 2147483647 means last frame)--stride <int> - stride size (for range of frames) (default: 1)--segments <id1,id2,...> - list of segment ids--atoms <id1,id2,...> - list of atoms to tracks, `id<n>` may be single id or closed interval in format start-end
Options - info mode-i <file_name> - input file name (.mdc)--full - print full info (include subsegments)
Options - make_desc mode-i <file_name> - input topology file (TPR, PSF, ...)-o <file_name> - output desc file name--only-mol - include only molecule (skip water and 'other')
如果有上述输出内容,就表示编译成功了。
MDCompress压缩
按照上述章节的内容完成编译构建之后,就可以开始使用MDCompress进行压缩了。比较常规的策略是先用xtc格式压缩一遍,然后再导入mdc进行进一步的压缩。mdc的压缩,需要xtc格式的轨迹文件,以及一个pdb格式的拓扑文件。
$ ../bin/mdcompress compress -i Pro_lig17.xtc --topology Pro_lig.pdb -o Pro_lig17.mdc
Completed frame 1530, with number of atoms 3410
Compressing time: 0.571706s
Segment sizes:Segment 0: 46999 bytesSegment 1: 9031 bytesSegment 2: 3644163 bytesSegment 3: 65469 bytesSegment 4: 4173376 bytesSegment 5: 65985 bytesSegment 6: 1767515 bytesSegment 7: 65262 bytesSegment 8: 1322871 bytesSegment 9: 70045 bytesSegment 10: 903313 bytesSegment 11: 214015 bytesFrame desc: 12716 bytes
Segment ratios:Segment 0: 18.9036 bits/atomSegment 1: 23.6105 bits/atomSegment 2: 18.8845 bits/atomSegment 3: 20.1366 bits/atomSegment 4: 18.9095 bits/atomSegment 5: 20.2953 bits/atomSegment 6: 18.7844 bits/atomSegment 7: 20.0729 bits/atomSegment 8: 18.8473 bits/atomSegment 9: 20.3471 bits/atomSegment 10: 18.8928 bits/atomSegment 11: 20.7228 bits/atom
压缩效果:
总计 32824
drwxrwxr-x 3 dechin dechin 4096 7月 20 11:08 ./
drwxrwxr-x 13 dechin dechin 4096 7月 20 10:59 ../
-rw-rw-r-- 1 dechin dechin 12447261 7月 20 11:08 Pro_lig17.mdc
-rw-rw-r-- 1 dechin dechin 20710652 7月 20 11:05 Pro_lig17.xtc
-rw-rw-r-- 1 dechin dechin 276336 7月 20 11:08 Pro_lig.pdb
从结果中可以看到,这个压缩率,在xtc的基础上,还能够进一步有60%左右的压缩率,这是一个非常优秀的成绩了。
总结概要
对于长效分子动力学模拟来说,如何去高效的存储分子轨迹,是一个重要的问题。前者有Gromacs的xtc格式文件,利用量化和比特级的压缩,将分子轨迹压缩到23%左右。而本文介绍的mdc工具,可以在xtc的基础上,再压缩到60%左右。
版权声明
本文首发链接为:https://dechinphy.github.io/posts/75aab8ab.html
作者ID:DechinPhy
更多原著文章请参考:https://dechinphy.github.io/
参考链接
- https://github.com/refresh-bio/mdcompress
对于长效分子动力学模拟来说,如何去高效的存储分子轨迹,是一个重要的问题。前者有Gromacs的xtc格式文件,利用量化和比特级的压缩,将分子轨迹压缩到23%左右。而本文介绍的mdc工具,可以在xtc的基础上,再压缩到60%左右。