在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)

大家都在看

  • Samba:文件共享

    samba:现主要用于Linux与Windows之间的文件共享。 samba的特点: 用于Linux与Windows之间进行文件共享和打印机共享 不仅用于Windows之间的文件共…

    技术杂谈 2023年7月11日
    073
  • ORACLE数据恢复方法(提交事务也可以)

    今天在操作数据库的时候,发现数据操作错误,想要恢复,但是没有用事务,按理说,设置成不默认提交事务,此时所做的各种操作都没有反应到数据库中。这时,你可以rollback事务,撤销所有…

    技术杂谈 2023年5月31日
    075
  • Fetch:下一代 Ajax 技术

    Ajax,2005年诞生的技术,至今已持续了 10 年。它是一种在客户端创建一个异步请求的技术,本质上它不算创新,是一组技术的组合。它的核心对象是 XMLHttpRequest。 …

    技术杂谈 2023年6月1日
    067
  • 解决C#中ListView数据刷新时界面闪烁的问题

    通常往ListView不断写入数据时,会发现ListView上的数据存在抖动闪烁的问题。对于追求完美的强迫症晚期患者而言,这一点是无法容忍的。同时也带来不良的用户体验。 下面通过双…

    技术杂谈 2023年5月31日
    083
  • 用心整理 | Spring AOP 干货文章,图文并茂,附带 AOP 示例 ~

    Spring AOP 是 Java 面试的必考点,我们需要了解 AOP 的基本概念及原理。那么 Spring AOP 到底是啥,为什么面试官这么喜欢问它呢?本文先介绍 AOP 的基…

    技术杂谈 2023年7月25日
    095
  • 日常踩坑_下载文件时文件名是乱码

    背景提要 一个下载文件的controller,下载下来内容虽然正常,但是文件名一直是乱码。 解决 需要清晰的一点就是,下载的文件名仅与请求头有关所以实际只要设置一下 respons…

    技术杂谈 2023年7月25日
    046
  • ThreeJS3d模型简介

    本文主要是对Threejs中加载模型的支持种类进行简单的知识科普。 3ds (.3ds) 3ds是3ds max通用储存文件格式。使用的范围更宽,可被更多的软件识别使用. amf …

    技术杂谈 2023年7月24日
    062
  • JAVA设计模式-桥接模式

    JAVA设计模式-桥接模式 一、介绍 桥接模式是一种结构型模式,它主要是将抽象部分和实现部分进行分离,可以独立变化,降低类与类之间的耦合度。举例:我们现在需要实现不同形状,每个形状…

    技术杂谈 2023年6月21日
    0100
  • Spring为list集合和map集合类型赋值

    1.通过List标签在property标签中直接进行赋值 2.通过配置一个list集合类型的bean,需要使用util的约束(直接写,可以自动导入) 然后再通过id引用该list集…

    技术杂谈 2023年7月11日
    067
  • Javaweb学习-HTML

    ; ; 重新开始HTML,之前学的都忘了 posted @2022-03-24 21:27 HelloHui 阅读(7 ) 评论() 编辑 Original: https://ww…

    技术杂谈 2023年6月21日
    076
  • HashMap源码分析

    主要过一遍HashMap中的常量、构造方法、put方法(hash、putVal、resize) 当我们调用put时,实际上就是调用putVal public V put(K key…

    技术杂谈 2023年7月24日
    086
  • Rust:axum学习笔记(3) extract 

    预备知识:json序列化/反序列化 鉴于现在web开发中,json格式被广泛使用,先熟悉下rust中如何进行json序列化/反序列化。 先加入serde_json依赖项,然后就可以…

    技术杂谈 2023年5月31日
    075
  • 用户成长体系-规划

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/shoshana-kong/p/16498628.htm…

    技术杂谈 2023年6月1日
    095
  • [学习笔记]Java抽象类

    抽象类 在Java中所有的对象都是通过类来描述的,但不是所有的类都用于描述对象,抽象类就是这样一种存在; 抽象类不能用于实例化对象,但它也可以拥有普通类一样的成员变量、成员方法和构…

    技术杂谈 2023年7月24日
    065
  • google chrome 浏览器插件2

    mate translator 翻译软件比 IM translator 好一点。 Original: https://www.cnblogs.com/welhzh/p/155722…

    技术杂谈 2023年6月1日
    0119
  • 【SSM框架】Spring笔记 – 事务详解

    1、Spring的事务管理: 事务原本是数据库中的概念,在实际项目的开发中,进行事务的处理一般是在业务逻辑层, 即 Service 层。这样做是为了能够使用事务的特性来管理关联操作…

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