计算化学公社

 找回密码 Forget password
 注册 Register
Views: 7478|回复 Reply: 0

[VMD] 聊聊如何让让VMD的提示更人性化(气人),顺带提几句VMD的源码编译

[复制链接 Copy URL]

224

帖子

5

威望

4468

eV
积分
4792

Level 6 (一方通行)

发表于 Post on 2020-2-25 03:21:54 | 显示全部楼层 Show all |阅读模式 Reading model
本帖最后由 ene 于 2020-2-25 11:53 编辑

        用过VMD里头psfgen模块给NAMD搭过模拟体系的人应该都知道,当由于种种原因psfgen出错的时候(比如不识别的氨基酸,segment重复,不小心打错命令等等),这倒霉软件会给你输出一个巨大的错误提示,然后把你整个模拟体系全都扬了(如下图)。由于一般搭体系的时候人都会很暴躁(尤其是反复构建失败/模拟崩溃的时候),所以楼主开始考虑能不能把这个气人的提示给做一些修改,让psfgen看起来有(更)人(气)味(人)一些。
Screenshot from 2020-02-25 01-34-36.png Screenshot from 2020-02-03 15-59-04_1.jpg
        首先根据这句错误提示,在vmd软件路径里面进行搜索:
  1. $ grep -ir "MOLECULE DESTROYED"
  2. Binary file plugins/LINUXAMD64/tcl/psfgen2.0/libpsfgen.so matches
复制代码
       可见这句提示的来源是libpsfgen.so,这是psfgen插件的库文件,VMD中psfgen插件的所有功能都要由这个二进制文件提供。如果想魔改提示语,只能从插件的源码下手,再源码编译插件。所以楼主只好下载了VMD的源码进行编译。VMD源码包解压之后分为两部分,分别是vmd-x.x.x和plugins。前者是VMD本体,后者是VMD的各种插件。由于我们并不需要更改VMD本身,所以这时只要编译插件即可。首先楼主先修改了要魔改的代码:psfgen的源码位于plugins/psfgen/src下面,通过grep可以定位到这句提示来自于tcl_psfgen.c这个文件中。打开文件,在对应位置(144行开始)可以看到:
  1. /*
  2. * Kills molecule to prevent user from saving bogus output.
  3. */
  4. void psfgen_kill_mol(Tcl_Interp *interp, psfgen_data *data) {
  5.   if (data->mol) {
  6.     Tcl_AppendResult(interp,
  7.         "\nMOLECULE DESTROYED BY FATAL ERROR!  Use resetpsf to start over.",
  8.         NULL);
  9.   }
  10.   topo_mol_destroy(data->mol);
  11.   data->mol = 0;
  12. }
复制代码
看来是一种保护措施,防止产生bug了。毕竟清掉所有操作重新开始是最安全的。这段代码里面第七行就是输出的错误提示,修改成喜欢的某句话即可。改好之后就可以编译了,这里需要注意的是,如果你用默认的Make-arch文件,psfgen插件是不会被编译的。打开plugins/psfgen/Makefile就可以发现,只有定义了TCL库文件的位置,才会编译出这个插件:
  1. ##
  2. ## Only build psfgen if we have a Tcl library
  3. ##
  4. ifdef TCLLIB
  5. ifdef TCLINC
  6. ifdef TCLLDFLAGS
  7. TARGETS = ${ARCHDIR} ${ARCHDIR}/libpsfgen.so
  8. endif
  9. endif
  10. endif
复制代码
而默认的plugins/Make-arch中,LINUXAMD64(这是楼主以及一般VMD用户的平台)选项中并没有定义TCLLIB和TCLINC:
  1. LINUXAMD64:
  2.         $(MAKE) dynlibs staticlibs bins \
  3.         "ARCH = LINUXAMD64" \
  4.         "COPTO = -fPIC -m64 -o " \
  5.         "LOPTO = -fPIC -m64 -lstdc++ -o " \
  6.         "CC = gcc" \
  7.         "CXX = g++" \
  8.         "DEF = -D" \
  9.         "CCFLAGS = -m64 -O2 -fPIC -Wall" \
  10.         "CXXFLAGS = -m64 -O2 -fPIC -Wall" \
  11.         "TCLLDFLAGS = -ltcl8.5 -ldl" \
  12.         "NETCDFLDFLAGS = -lnetcdf " \
  13.         "AR = ar" \
  14.         "NM = nm -p" \
  15.         "RANLIB = touch" \
  16.         "SHLD = gcc -shared"
复制代码
因此我们需要手动修改一下这个部分为:
  1. LINUXAMD64:
  2.         $(MAKE) dynlibs staticlibs bins \
  3.         "ARCH = LINUXAMD64" \
  4.         "COPTO = -fPIC -m64 -o " \
  5.         "LOPTO = -fPIC -m64 -lstdc++ -o " \
  6.         "CC = gcc" \
  7.         "CXX = g++" \
  8.         "DEF = -D" \
  9.         "CCFLAGS = -m64 -O2 -fPIC -Wall" \
  10.         "CXXFLAGS = -m64 -O2 -fPIC -Wall" \
  11.         "TCLLIB = -L/path/to/libtcl8.6.so" \
  12.         "TCLINC = -I/path/to/tcl.h" \
  13.         "TCLLDFLAGS = -ltcl8.6 -ldl" \
  14.         "NETCDFLDFLAGS = -lnetcdf " \
  15.         "AR = ar" \
  16.         "NM = nm -p" \
  17.         "RANLIB = touch" \
  18.         "SHLD = gcc -shared"
复制代码
可以看到编译依赖libtcl和libnetcdf,如果没有可以安装一下这两个依赖。最后输入命令编译
  1. $ export PLUGINDIR=$(pwd)/../vmd-x.x.x
  2. $ make LINUXAMD64
  3. $ make distrib
复制代码
随后在vmd-x.x.x目录下会产生一个叫LINUXAMD64的文件夹,我们编译的psfgen插件就位于LINUXAMD64/tcl/psfgen2.0中了。你可以把这个文件夹拷贝到你的VMD安装目录下:/path/to/vmd-x.x.x/plugins/LINUXAMD64/tcl/,替换掉原先的psfgen2.0文件夹。这时再启动vmd,就可以看到错误提示变成了我们所修改的(这里楼主把resetpsf的提示也一起修改了):
Screenshot from 2020-02-25 11-51-04.png
终端下也一样:
Screenshot from 2020-02-25 03-17-10.png
如果你也是Linux用户,可以在这里下载楼主编译的版本,替换到你的VMD目录中:

psfgen2.0.tar.xz (1.25 MB, 下载次数 Times of downloads: 4)

评分 Rate

参与人数
Participants 10
eV +48 收起 理由
Reason
丁越 + 5 太逗了hhhh
Shine剪水 + 5 生活中充满了乐子~
Alan123 + 4 好物!
biogon + 5 とてもいい!
lewisbase + 5 好物!
卡开发发 + 2 德国boy警告!
njfuzjs + 4
ABetaCarw + 5 掀桌好评
ezez + 5 赞!
sobereva + 8

查看全部评分 View all ratings

我需要一些假日,但我不希望每天都是假日。因为我没有承担痛苦,因为那不是真正的自由。

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2023-2-7 02:27 , Processed in 0.204826 second(s), 25 queries .

快速回复 返回顶部 返回列表 Return to list