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/

参考链接

  1. https://github.com/refresh-bio/mdcompress