技术背景

在处理分子动力学模拟的数据时,不可避免的会遇到众多的大轨迹文件。因此以什么样的格式来存储这些庞大的轨迹数据,也是一个在分子动力学模拟软件设计初期就应该妥善考虑的问题。现有的比较常见的方式,大致可以分为存成明文的和存成二进制的两种方式。这两种方式各有优劣,明文存储可读性较好,二进制文件压缩率较好,不会占用太大的空间。又因为我们也不会经常性的去打开轨迹文件一个一个的检索,因此二进制文件是一个更好的存储格式选项。如果不仅仅限于分子动力学模拟的领域,在其他数据领域经常用的格式有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. scanf("%d",a[i]+j)为什么不加取地址符号

    为什么我画的地方不加取地址符号? 不要在意标题为什么不加分号,因为长度太长了! 二维数组a[3][5]中,a[3]储存的是下一维的地址,a[1]等同于&a[1][0] 同理,a[1]+1等于& ...

  2. vc2010以及VS2019安装使用教程

    一.vc2010的安装教程. ①下载(由于是一个离线文件,可关注后找我) ②下载好并解压安装文件后,打开解压后的文件进行运行安装. 点击"setup"根据提示安装即可. ③安装后点 ...

  3. 【单片机】CH32V103C8T6 ——窗口看门狗

    本章教程通过串口调试助手打印显示程序运行状态,具体现象如下: 若计数器值在上窗口值和下窗口值0X40之间的时候,进行喂狗操作,计数器重新计数,程序正常运行,串口打印显示:The program run ...

  4. 【Java面试】如何中断一个正在运行的线程?

    一个去京东面试的工作了5年的粉丝来找我说: Mic老师,你说并发编程很重要,果然我今天又挂在一道并发编程的面试题上了. 我问他问题是什么,他说:"如何中断一个正在运行中的线程?". ...

  5. 《Effective C++》阅读总结(四): 设计、声明与实现

    第四章: 设计与声明 18. 让接口更容易被正确使用,不易被误用 将你的class的public接口设计的符合class所扮演的角色,必要时不仅对传参类型限制,还对传参的值域进一步限制. 19. 设计 ...

  6. 攻防世界pwn题:forgot

    0x00:查看文件信息 该文件是32位的,canary和PIE保护机制没开. 0x01:用IDA进行静态分析 总览: 该函数就是:v5初值为1,对v2输入一串字符.然后执行一个会根据输入的字符串而修改 ...

  7. 在Visual C++ 6.0中无法使用gets()函数的解决办法

    问题 昨晚遇到一个有意思的问题,明明在Visual Studio 2019运行好好的C语言代码,Copy到Visual C++ 6.0中就无法编译通过了,错误提示信息如下: error C2143: ...

  8. Bika LIMS 开源LIMS集——实验室检验流程概述及主页、面板

    主页 主页左侧为功能入口菜单.右侧含待办提醒,中间为工作区. 工作区功能将主要工作页面置于首页,便于用户操作. Dashboard 面板 系统面板 包括待排定的实验任务.实验中的任务数.复核/审核中的 ...

  9. 21.LVS负载均衡群集-DR群集

    LVS负载均衡群集-DR群集 目录 LVS负载均衡群集-DR群集 数据包流向分析 DR模式的特点 LVS-DR中的ARP问题 IP地址冲突 解决办法 路由根据ARP表项,会将新来的请求报文转发给Rea ...

  10. ngRoute 配置路径不能跳转问题

    1.原因:AngularJS 版本更新至1.6后对地址做了特别处理.如:<a hret="#/someurl"> 在浏览器中被解析为"#!%2Fsomeurl ...