技术背景

在处理分子动力学模拟的数据时,不可避免的会遇到众多的大轨迹文件。因此以什么样的格式来存储这些庞大的轨迹数据,也是一个在分子动力学模拟软件设计初期就应该妥善考虑的问题。现有的比较常见的方式,大致可以分为存成明文的和存成二进制的两种方式。这两种方式各有优劣,明文存储可读性较好,二进制文件压缩率较好,不会占用太大的空间。又因为我们也不会经常性的去打开轨迹文件一个一个的检索,因此二进制文件是一个更好的存储格式选项。如果不仅仅限于分子动力学模拟的领域,在其他数据领域经常用的格式有npz等。而经过各种格式的对比之后,发现hdf5格式是一种非常适合用来存储分子动力学轨迹的文件,其原因主要有:

  1. 层级结构,可读性相对较好,有silx view这样轻量级的软件可以直接高效读取hdf5文件的内容;
  2. 压缩率高,存储下来的文件大小远小于csv等明文数据格式;
  3. 支持数据帧读取,有很多高效的数据处理软件如vaex专门针对hdf5格式的文件读、写、可视化等进行了优化;
  4. 在传统量子化学领域,hdf5格式的文件就得到了大量的使用,在分子动力学中使用hdf5格式有向上兼容的一层含义。

在确定需要选择hdf5格式的文件作为分子动力学轨迹的存储格式之后,我们需要考虑下一步如何在已有的可视化软件,如VMD中,去展示hdf5格式的轨迹文件。有一个开源软件叫VMD-h5mdplugin专门支持了在VMD上显示hdf5格式的分子轨迹文件。但是原版的软件有几个缺陷:

  1. 直接加载的hdf5格式的文件,无法区分原子大小,显示的原子都一样大;
  2. 不能支持NewCartoon等常用的蛋白结构显示方法;

为此,来自深圳湾实验室的杨奕老师单独对该插件进行了改进优化,Fork的仓库地址为:VMD-h5mdplugin,接下来我们看下如何安装与使用该插件。

源码安装

首先我们需要将Gitee代码仓上的代码clone下来:

$ 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), 完成.

然后进入该仓库目录:

$ 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://www.cnblogs.com/dechinphy/p/h5md.html

作者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

在VMD上可视化hdf5格式的分子轨迹文件的更多相关文章

  1. VMD可视化hdf5格式的分子坐标文件

    技术背景 VMD是分子动力学模拟领域常用的一款可视化软件,可以非常直观方便的展示分子的运动过程.而VMD本身对展现的格式有一定的要求,如果不是常见的rst等类型的坐标文件的话,就需要自己手动去实现一个 ...

  2. caffe上使用hdf5格式文件以及回归(regression)问题

    最近用caffe做了一下regression问题,先用data layer中的data,float_data试了一下,data用来存放图片,float_data存放regression的values, ...

  3. 实现android上解析Json格式数据功能

    实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...

  4. HTML5 上播放视频格式兼容性

    视频格式 当前,video 元素支持三种视频格式: 格式 IE Firefox Opera Chrome Safari Ogg No 3.5+ 10.5+ 5.0+ No MPEG 4 9.0+ No ...

  5. (24)ajax上传json格式的数据

    urs.py from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpat ...

  6. 上传base64格式的图片到服务器

    上传base64格式的图片到服务器 /**bash64上传图片 * @param $base64 图片的base64数据 * @param $path 保存路径 */ function base64_ ...

  7. Vue directive自定义指令+canvas实现H5图片压缩上传-Base64格式

    前言 最近优化项目-手机拍照图片太大,回显速度比较慢,使用了vue的自定义指令实现H5压缩上传base64格式的图片 canvas自定义指令 Vue.directive("canvas&qu ...

  8. SharePoint 2013上传AI格式文件,再次下载后变成了PS格式文件

    问题: SharePoint 2013上传AI格式文件,再次下载后变成了PS格式文件 需要下载副本才能显示AI格式 解决办法有两个: 第一种,在客户端机器1. Click Start, click R ...

  9. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...

随机推荐

  1. MyBatis 结果映射总结

    前言 结果映射指的是将数据表中的字段与实体类中的属性关联起来,这样 MyBatis 就可以根据查询到的数据来填充实体对象的属性,帮助我们完成赋值操作.其实 MyBatis 的官方文档对映射规则的讲解还 ...

  2. VueX数据持久化

    解决:Vue刷新时获取不到数据 解决方案:1.本地存储 2.Vuex数据持久化工具插件 本地存储 import Vue from "vue"; import Vuex from & ...

  3. GoF的23种设计模式的功能

    GoF的23种设计模式的功能 前面说明了 GoF 的 23 种设计模式的分类,现在对各个模式的功能进行介绍. 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取 ...

  4. 第06组 Beta冲刺 (5/5)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3.曾丽莉 4.黄少丹 5. 董翔云 6.鲍凌函 7.杜筱 8.詹鑫冰 9.曹兰英 10.吴沅静 1.3 冲刺成果展示 1.1 ...

  5. Typecho博客转移服务器,数据备份.

    目录 Typecho博客转移服务器,数据备份. 简述操作(有基础的mjj看这个简述就可以了.) 详细步骤(建议小白来看, 已经在很多详细方面进行说明了.) 备份篇 备份导入与数据库转移篇 重新部署ty ...

  6. 《Unix 网络编程》14:高级 I/O 函数

    高级 I/O 函数 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...

  7. swap函数模板

    在许多应用程序中,都有交换相同类型的两个变量内容的需要.例如,在对整数数组进行排序时,将需要一个函数来交换两个变量的值,如下所示: void swap(int &a, int &b) ...

  8. 【摸鱼神器】UI库秒变LowCode工具——列表篇(二)维护json的小工具

    上一篇介绍了一下如何实现一个可以依赖 json 渲染的列表控件,既然需要 json 文件,那么要如何维护这个 json 文件就成了重点,如果没有好的维护方案的话,那么还不如直接用UI库. 所以需要我们 ...

  9. 开发工具-Java SDK下载地址

    更新记录 2022年6月14日 加入更多的下载地址. 2022年6月10日 完善标题. 下载地址: https://www.oracle.com/java/technologies/downloads ...

  10. 使用html2canvas,由html转换canvas时,出现图片丢失问题解决方案

    在img标签上加上crossorigin="anonymous":如果是图片地址是跨域网址,请将图片转换为base64格式: 源码如下: <!DOCTYPE html> ...