在VMD上可视化hdf5格式的分子轨迹文件

技术背景

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

Original: https://www.cnblogs.com/dechinphy/p/h5md.html
Author: DECHIN
Title: 在VMD上可视化hdf5格式的分子轨迹文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715313/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 从一个例子中体会React的基本面

    【起初的准备工作】 npm init npm install –save react react-dom npm install –save-dev html-webpack-…

    技术杂谈 2023年5月31日
    098
  • 猜数字小游戏

    python猜数字游戏 要求: 输入指定范围,在该范围内进行猜数,可多次猜数,直到猜中 如果猜错,给出下次猜数的范围继续猜 思路: 导入random包,生成随机数 利用while循…

    技术杂谈 2023年7月23日
    089
  • 开放的智力

    这本书很赞,是教人如何去学习,如何去思考的。 看这本书的时候,我在想我年少的时候怎么没有人和我讨论这些问题。 这本书没有实体书,只有kindle电子书,建议下载kindle阅读软件…

    技术杂谈 2023年5月31日
    0123
  • JAVA的线程

    JAVA的线程 1.1线程与进程 进程:是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就…

    技术杂谈 2023年6月21日
    096
  • 解决SpringBoot jar包中的文件读取问题

    前言 SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档、导出模版等),本地开发时可以正常…

    技术杂谈 2023年7月25日
    094
  • Flink window

    窗口计算 我们经常需要在一个时间窗口维度上对数据进行聚合,窗口是流处理应用中经常需要解决的问题。Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,…

    技术杂谈 2023年7月10日
    098
  • 用两行代码实现重试功能,spring-retry真是简单而优雅

    最近做的一个需求,需要调用第三方接口。正常情况下,接口的响应是符合要求的,只有在网络抖动等极少数的情况下,会存在超时情况。因为是小概率事件,所以一次超时之后,进行一次重试操作应该就…

    技术杂谈 2023年7月25日
    0124
  • xcode

    使用xcode给app添加静态资源,方便react-native调用 posted @2019-12-16 12:06 脚本小娃子 阅读(164 ) 评论() 编辑 Origina…

    技术杂谈 2023年5月31日
    086
  • Codeforces Round #616 (Div. 2) C. Mind Control 博弈论 枚举

    C. Mind Control time limit per test1 secondmemory limit per test256 megabytes You and your…

    技术杂谈 2023年6月1日
    086
  • 分布式ID 生成方案

    作者:shmilychen,腾讯 IEG 后开开发工程师 在业务开发中,会存在大量的场景都需要唯一 ID 来进行标识。比如,用户需要唯一身份标识;商品需要唯一标识;消息需要唯一标识…

    技术杂谈 2023年5月31日
    085
  • 分布式任务调度平台XXL-JOB安装及使用

    一、为什么需要任务调度平台 在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题: 不支持集群、不支持统计、没有管理平台、没有失败报警、没有监…

    技术杂谈 2023年7月11日
    084
  • 浅析有关运行npm run serve时发生了什么的5个问题出发解析npm run的执行原理

    1、npm run xxx 的时候,首先会去项目的 package.json 文件里找 scripts 里对应的 xxx,然后执行 xxx 的命令,例如启动vue项目 npm ru…

    技术杂谈 2023年5月31日
    099
  • jmte 模版引擎

    String template = "${user.age}===${user.name}====${user.extend.type} ${user}"; S…

    技术杂谈 2023年5月30日
    098
  • Vue系列—理解Vue.nextTick使用及源码分析(五)

    一. 什么是Vue.nextTick()? 2.1 更改数据后,进行节点DOM操作。 比如修改数据、修改节点样式、等操作。比如说我修改data中的一个属性数据后,如果我这个时候直接…

    技术杂谈 2023年6月1日
    091
  • CSAPP Tiny web server源代码分析及搭建执行

    1. Web基础 webclient和server之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议)。 一个webclient(即浏览器)打开一个到server的…

    技术杂谈 2023年6月1日
    0100
  • 实现批量自动部署Linux操作系统

    实战描述: xxx公司所服务的用户IT环境中有很多的Linux系统,品种也五花八门,有RHEL、Centos、OpenSUSE甚至还有测试环境使用的RockyLinux。当有大量的…

    技术杂谈 2023年7月23日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球