技术背景
在处理分子动力学模拟的数据时,不可避免的会遇到众多的大轨迹文件。因此以什么样的格式来存储这些庞大的轨迹数据,也是一个在分子动力学模拟软件设计初期就应该妥善考虑的问题。现有的比较常见的方式,大致可以分为存成明文的和存成二进制的两种方式。这两种方式各有优劣,明文存储可读性较好,二进制文件压缩率较好,不会占用太大的空间。又因为我们也不会经常性的去打开轨迹文件一个一个的检索,因此二进制文件是一个更好的存储格式选项。如果不仅仅限于分子动力学模拟的领域,在其他数据领域经常用的格式有npz等。而经过各种格式的对比之后,发现hdf5格式是一种非常适合用来存储分子动力学轨迹的文件,其原因主要有:
- 层级结构,可读性相对较好,有
silx view
这样轻量级的软件可以直接高效读取hdf5文件的内容; - 压缩率高,存储下来的文件大小远小于csv等明文数据格式;
- 支持数据帧读取,有很多高效的数据处理软件如vaex专门针对hdf5格式的文件读、写、可视化等进行了优化;
- 在传统量子化学领域,hdf5格式的文件就得到了大量的使用,在分子动力学中使用hdf5格式有向上兼容的一层含义。
在确定需要选择hdf5格式的文件作为分子动力学轨迹的存储格式之后,我们需要考虑下一步如何在已有的可视化软件,如VMD中,去展示hdf5格式的轨迹文件。有一个开源软件叫VMD-h5mdplugin专门支持了在VMD上显示hdf5格式的分子轨迹文件。但是原版的软件有几个缺陷:
- 直接加载的hdf5格式的文件,无法区分原子大小,显示的原子都一样大;
- 不能支持NewCartoon等常用的蛋白结构显示方法;
为此,来自深圳湾实验室的杨奕老师单独对该插件进行了改进优化,Fork的仓库地址为:VMD-h5mdplugin,接下来我们看下如何安装与使用该插件。
源码安装
首先我们需要将Gitee代码仓上的代码clone下来:
代码语言:javascript复制$ git clone https://gitee.com/helloyesterday/VMD-h5mdplugin.git
正克隆到 'VMD-h5mdplugin'...
remote: Enumerating objects: 523, done.
remote: Counting objects: 100% (523/523), done.
remote: Compressing objects: 100% (203/203), done.
remote: Total 523 (delta 323), reused 516 (delta 316), pack-reused 0
接收对象中: 100% (523/523), 1.20 MiB | 296.00 KiB/s, 完成.
处理 delta 中: 100% (323/323), 完成.
然后进入该仓库目录:
代码语言:javascript复制$ cd VMD-h5mdplugin/
$ ll
总用量 132
drwxrwxr-x 6 dechin dechin 4096 8月 4 14:37 ./
drwxrwxr-x 14 dechin dechin 4096 8月 4 14:37 ../
drwxrwxr-x 2 dechin dechin 4096 8月 4 14:37 cmake/
-rw-rw-r-- 1 dechin dechin 2133 8月 4 14:37 CMakeLists.txt
-rw-rw-r-- 1 dechin dechin 3190 8月 4 14:37 'Documentation VMD parameters'
drwxrwxr-x 8 dechin dechin 4096 8月 4 14:37 .git/
-rw-rw-r-- 1 dechin dechin 18 8月 4 14:37 .gitignore
-rw-rw-r-- 1 dechin dechin 18006 8月 4 14:37 h5mdplugin.c
-rw-rw-r-- 1 dechin dechin 5001 8月 4 14:37 h5mdtest.c
-rw-rw-r-- 1 dechin dechin 48343 8月 4 14:37 libh5md.c
-rw-rw-r-- 1 dechin dechin 4267 8月 4 14:37 libh5md.h
-rw-rw-r-- 1 dechin dechin 732 8月 4 14:37 LICENSE
-rw-rw-r-- 1 dechin dechin 1582 8月 4 14:37 Makefile
-rw-rw-r-- 1 dechin dechin 2624 8月 4 14:37 README.md
drwxrwxr-x 2 dechin dechin 4096 8月 4 14:37 samples/
drwxrwxr-x 2 dechin dechin 4096 8月 4 14:37 tests/
编译构建前,我们最好先执行一下make clean
,然后直接sudo make install
即可:
$ make clean
rm -f h5mdplugin.so
rm -f h5mdtest
rm -f libh5md.so
rm -f *.o
rm -f *~
make -C tests clean
make[1]: 进入目录“/home/dechin/projects/gitee/VMD-h5mdplugin/tests”
rm -f *~
rm -f libh5md_unittest
rm -f -rf samples
rm -f *.o
make[1]: 离开目录“/home/dechin/projects/gitee/VMD-h5mdplugin/tests”
$ sudo make install
HDF5_CC=gcc h5cc -shlib -Wall -Wuninitialized -std=c99 -O3 -pedantic -fPIC -I/usr/local/lib/vmd/plugins/include -I/usr/include -I/usr/include/hdf5/serial -c -o h5mdplugin.o h5mdplugin.c
HDF5_CC=gcc h5cc -shlib -Wall -Wuninitialized -std=c99 -O3 -pedantic -fPIC -I/usr/local/lib/vmd/plugins/include -I/usr/include -I/usr/include/hdf5/serial -c -o libh5md.o libh5md.c
...
libh5md.c: In function ‘h5md_get_all_infromation_about_property’:
libh5md.c:986:7: warning: ‘dataset_id’ may be used uninitialized in this function [-Wmaybe-uninitialized]
int current_status=H5Dread(dataset_id, wanted_memory_datatype, memspace_id, dataspace_id, H5P_DEFAULT, data_out);
^~~~~~~~~~~~~~
HDF5_CC=gcc h5cc -shlib -Wall -Wuninitialized -std=c99 -O3 -pedantic -fPIC -shared -Wl,--no-undefined -L/usr/lib/x86_64-linux-gnu/hdf5/serial -L. libh5md.o -o libh5md.so -lhdf5_hl -lhdf5 -lm
HDF5_CC=gcc h5cc -shlib -Wall -Wuninitialized -std=c99 -O3 -pedantic -fPIC -shared -Wl,--no-undefined -L/usr/lib/x86_64-linux-gnu/hdf5/serial -L. h5mdplugin.o -o h5mdplugin.so -lhdf5_hl -lhdf5 -Wl,-rpath,/home/dechin/projects/gitee/VMD-h5mdplugin -lh5md
cp h5mdplugin.so /usr/local/lib/vmd/plugins/LINUXAMD64/molfile/
编译成功的话,会在当前目录下生成一个名为h5mdplugin.so
的文件,然后Makefile会自动将其拷贝到VMD的molfile目录下,如果安装过程中发现拷贝的路径与自己安装VMD的路径不一致,可以手动修改Makefile或者是手动拷贝过去,都是可以的。
效果展示
安装完成后,让我们来看看效果:
感兴趣的童鞋可以通过该链接下载文件到本地测试一下,下载解压之后,直接用vmd xxx.h5md
即可(这里的h5md
格式本质上还是hdf5
,只是在名称上稍作调整,便于区分不同的使用场景)。
总结概要
相比于明文存储和传统的一些数据存储方法,HDF5格式的文件非常适合用于存储分子动力学模拟过程中产生的庞大轨迹文件,不仅有良好的可读性,还有非常优秀的压缩率,使得存储下来的轨迹文件不至于太大。而相应的,我们也需要一些配套的可视化软件,用来展示HDF5文件中存储的内容。本文所介绍的改进版的VMD-h5mdplugin插件,可以在VMD中直接展示HDF5的分子运动轨迹,并给出了相应的案例。
版权声明
本文首发链接为:https://cloud.tencent.com/developer/article/2111656
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958
CSDN同步链接:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343
51CTO同步链接:https://blog.51cto.com/u_15561675