在VMD上可视化hdf5格式的分子轨迹文件
技术背景
在处理分子动力学模拟的数据时,不可避免的会遇到众多的大轨迹文件。因此以什么样的格式来存储这些庞大的轨迹数据,也是一个在分子动力学模拟软件设计初期就应该妥善考虑的问题。现有的比较常见的方式,大致可以分为存成明文的和存成二进制的两种方式。这两种方式各有优劣,明文存储可读性较好,二进制文件压缩率较好,不会占用太大的空间。又因为我们也不会经常性的去打开轨迹文件一个一个的检索,因此二进制文件是一个更好的存储格式选项。如果不仅仅限于分子动力学模拟的领域,在其他数据领域经常用的格式有npz等。而经过各种格式的对比之后,发现hdf5格式是一种非常适合用来存储分子动力学轨迹的文件,其原因主要有:
- 层级结构,可读性相对较好,有
silx view这样轻量级的软件可以直接高效读取hdf5文件的内容; - 压缩率高,存储下来的文件大小远小于csv等明文数据格式;
- 支持数据帧读取,有很多高效的数据处理软件如vaex专门针对hdf5格式的文件读、写、可视化等进行了优化;
- 在传统量子化学领域,hdf5格式的文件就得到了大量的使用,在分子动力学中使用hdf5格式有向上兼容的一层含义。
在确定需要选择hdf5格式的文件作为分子动力学轨迹的存储格式之后,我们需要考虑下一步如何在已有的可视化软件,如VMD中,去展示hdf5格式的轨迹文件。有一个开源软件叫VMD-h5mdplugin专门支持了在VMD上显示hdf5格式的分子轨迹文件。但是原版的软件有几个缺陷:
- 直接加载的hdf5格式的文件,无法区分原子大小,显示的原子都一样大;
- 不能支持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格式的分子轨迹文件的更多相关文章
- VMD可视化hdf5格式的分子坐标文件
技术背景 VMD是分子动力学模拟领域常用的一款可视化软件,可以非常直观方便的展示分子的运动过程.而VMD本身对展现的格式有一定的要求,如果不是常见的rst等类型的坐标文件的话,就需要自己手动去实现一个 ...
- caffe上使用hdf5格式文件以及回归(regression)问题
最近用caffe做了一下regression问题,先用data layer中的data,float_data试了一下,data用来存放图片,float_data存放regression的values, ...
- 实现android上解析Json格式数据功能
实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...
- HTML5 上播放视频格式兼容性
视频格式 当前,video 元素支持三种视频格式: 格式 IE Firefox Opera Chrome Safari Ogg No 3.5+ 10.5+ 5.0+ No MPEG 4 9.0+ No ...
- (24)ajax上传json格式的数据
urs.py from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpat ...
- 上传base64格式的图片到服务器
上传base64格式的图片到服务器 /**bash64上传图片 * @param $base64 图片的base64数据 * @param $path 保存路径 */ function base64_ ...
- Vue directive自定义指令+canvas实现H5图片压缩上传-Base64格式
前言 最近优化项目-手机拍照图片太大,回显速度比较慢,使用了vue的自定义指令实现H5压缩上传base64格式的图片 canvas自定义指令 Vue.directive("canvas&qu ...
- SharePoint 2013上传AI格式文件,再次下载后变成了PS格式文件
问题: SharePoint 2013上传AI格式文件,再次下载后变成了PS格式文件 需要下载副本才能显示AI格式 解决办法有两个: 第一种,在客户端机器1. Click Start, click R ...
- vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式
进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...
随机推荐
- Java高并发-多线程基础
一.什么是线程 线程是进程内的执行单元. 二.线程的基本操作 2.1 状态与操作 2.2 新建线程 Thread t1 = new Thread(new CreateThread()); t1.sta ...
- 从数字化概念到落地,都说是一道坎,JNPF能为企业带来什么呢?
数字经济席卷全球推动产业转型是必然趋势,人类社会正在数字化大潮中发生深刻变革,数字化越来越成为推动经济社会发展的核心驱动力.企业正处于数字经济大潮的风口浪尖,故企业经验决策者应深刻认识数字化转型对于企 ...
- JAVA - 序列化的方式
JAVA - 序列化的方式 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读 ...
- tf.data(二) —— 并行化 tf.data.Dataset 生成器
在处理大规模数据时,数据无法全部载入内存,我们通常用两个选项 使用tfrecords 使用 tf.data.Dataset.from_generator() tfrecords的并行化使用前文已经有过 ...
- 在Winform开发中,使用Async-Awati异步任务处理代替BackgroundWorker
在Winform开发中有时候我们为了不影响主UI线程的处理,以前我们使用后台线程BackgroundWorker来处理一些任务操作,不过随着异步处理提供的便利性,我们可以使用Async-Awati异步 ...
- ACL权限控制
ALC讲述比较详细 https://zhuanlan.zhihu.com/p/360158311
- 4.怎么理解相互独立事件?真的是没有任何关系的事件吗? 《zobol的考研概率论教程》
1.从条件概率的定义来看独立事件的定义 2.从古典概率的定义来看独立事件的定义 3.P(A|B)和P(A)的关系是什么? 4.由P(AB)=P(A)P(B)推出"独立" 5.从韦恩 ...
- 打通web的三维国产引擎!老子云AMRT,够牛!
AMRT(Auto Mobile Reality Technology)指的是自动化移动现实技术,它是老子云3D模型自动轻量化引擎及轻量化模型格式.模型展示框架.API/SDK的统称.3D研发技术其中 ...
- Javaweb-Servlet学习
1.Servlet简介 Servlet就是sun公司开发动态web的一门技术 Sun在这些API中提供一个借口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤: 编写一个 ...
- FICO 常用事务码
1.SAP配置流程 1.定义,定义组织,概念,比如FI中定义公司代码,会计科目表,年度变式.SAP中有大量的定义过程. 2.分配,把会计科目表/公司/年度变式等参数分配到公司代码,逻辑组织,基本实现框 ...