在VMD里将cube文件瞬间绘制成效果极佳的等值面图的方法
在VMD里将cube文件瞬间绘制成效果极佳的等值面图的方法
Easily drawing a cube file as an excellent isosurface map in VMD
文/Sobereva@北京科音 2019-May-21
1 前言
Multiwfn(http://sobereva.com/multiwfn)是产生量子化学研究和波函数分析中用到的各种格点数据特别方便、强大的工具,可以在自带的界面里直接显示出等值面,也可以把数据导出成cube文件从而在免费的VMD程序(http://www.ks.uiuc.edu/Research/vmd/)里绘制出效果更好的图像。不了解cube文件者请参看《Gaussian型cube文件简介及读、写方法和简单应用》(http://sobereva.com/125)。笔者感到每次给初学者解释怎么在VMD里操作显示出等值面特别费劲、费事。笔者之前写过一篇文章《用VMD绘制艺术级轨道等值面图的方法》(http://sobereva.com/449),里面介绍了一种利用自编的VMD脚本超级方便地绘制出效果绝赞的轨道等值面图的做法。于是笔者想到,不如干脆写一个脚本,从而对于任意类型的cube文件都可以敲几下键盘就能瞬间在VMD里画出极好的等值面图。本文就介绍一下这个脚本,我深信这个脚本会有极高的实用价值(相比之下,大部分其它可视化程序的显示效果都丑爆了,操作步骤还更繁琐)。
2 脚本
本文介绍的VMD脚本是showcub.vmd,在Multiwfn程序包里的examples\scripts目录下。将这个文件拷到VMD目录下,并且用文本编辑器编辑此目录下的vmd.rc文件(对于Windows版VMD而言),在末尾插入source showcub.vmd。这样每次VMD启动时就会自动执行此脚本使其中定义的命令生效。此脚本定义了四条命令,可以直接在VMD的控制台里输入,这里直接给出一些例子:
cub MIO:将VMD目录下的MIO.cub绘制成等值面图,正值和负值部分分别用绿色和蓝色显示,等值面数值分别为默认值0.05和-0.05
cub MIO 0.02:同上,但正值和负值部分等值面数值直接分别设为0.02和-0.02
cubiso 0.015:在使用cub命令后使用,把当前载入的格点数据的正值和负值部分分别设为0.015和-0.015
有的时候我们需要同时将两个cube文件显示在一起,此脚本里也定义了相应命令用于此目的,示例:
cub2 eri nozomi:将VMD目录下的eri.cub和nozomi.cub同时绘制成等值面,分别用绿色和蓝色表示,等值面数值都为默认的0.05(注:如果eri和nozomi格点数据里也有负值部分,负值部分不会被显示出来)
cub2 eri nozomi 0.02:同上,但是二者的等值面数值都直接设为0.02
cub2iso 0.015:在使用cub2命令后使用,代表把已载入的两套cube文件对应的等值面数值都设为0.015
每次使用cub或cub2命令之前都会自动将之前载入的格点数据从VMD中清掉,因此这俩命令可以反复用无数次。
和前述的《用VMD绘制艺术级轨道等值面图的方法》里的做法一样,用VMD绘制出来之后,可以借助Multiwfn程序包里的examples\scripts\VMDrender_full.bat将等值面通过Tachyon渲染器渲染成非常漂亮的图像。
下面给一些例子,VMD用的是1.9.3 Windows版。大家先按上述说明把vmd.rc设置好。
3 例子:用VMD显示自旋密度等值面
在《谈谈自旋密度、自旋布居以及在Multiwfn中的绘制和计算》(http://sobereva.com/353)一文中笔者举了丁烷双自由基的例子。我们用Multiwfn的主功能5计算完这个体系的自旋密度格点数据后,在后处理菜单选择导出cube文件,当前目录下就得到了spindensity.cub。将此文件挪到VMD目录下,启动VMD,直接输入cub spindensity 0.01,马上看到下图,绿色和蓝色分别对应自旋密度为正和为负的部分。
为了得到更好的效果,我们把Multiwfn的examples\scripts目录下的VMDrender_full.bat拷到VMD目录下。在VMD里选择File - Render,渲染器选Tachyon(别选后面带internal的那个),点击Start Rendering。然后双击VMDrender_full.bat执行这个批处理文件,过一会儿VMD目录下就出现了full.bmp,效果如下,可见非常理想,富有立体感而且有阴影效果。
之前笔者录过一段视频《使用Multiwfn结合VMD绘制自旋密度等值面图》(https://www.bilibili.com/video/av26312131),由视频可见,如果不用脚本而手动在VMD里进行操作来显示出等值面,操作步骤多,而效果还明显不如本文的做法好。
4 例子:用VMD同时显示电子激发过程中空穴和电子的等值面
笔者之前在《使用Multiwfn做空穴-电子分析全面考察电子激发特征》(http://sobereva.com/434)中介绍了一种极为重要的考察电子激发特征的方法,此方法可以把空穴和电子分布都给出来。按照文中的做法将空穴和电子格点数据都算出来后,在后处理菜单里可以看到将二者导出为cube文件的选项,选了之后会得到electron.cub和hole.cub。我们现在用VMD将二者同时绘制成等值面。
将这两个cube文件都挪到VMD目录下,启动VMD,在文本窗口输入cub2 electron hole。此时图形窗口里只看到了结构,没看到等值面,这是因为默认的等值面数值太大。我们通过cub2iso命令不断尝试不同的等值面数值,发现当输入cub2iso 0.002命令的时候,空穴和电子的分布特征看起来都比较明显。和上一节一样通过VMDrender_full.bat进行渲染,得到下图:
这图虽然表面上效果看起来很不错,但对于空穴-电子分析来说并不算特别理想。因为我们希望能把空穴与电子分布的交叠特征比较清楚地展现出来,但是当前的图看不清楚这点。此时我们可以尝试其它材质。进入Graphics - Representation,把Material改为EdgyGlass,然后在Selected Molecule里切换成electron.cub,再次把Material改为EdgyGlass,此时空穴和电子就都是EdgyGlass材质了,二者的交叠在图形窗口中已经可以看得非常清楚了。如果你用VMDrender_full.bat来渲染,得到的图像如下
此时的图很不错,但可能会有人觉得有点偏亮。你可以编辑VMDrender_full.bat的内容,把里面的-trans_raster3d改为-trans_vmd,-fullshade改为-mediumshade,再次运行脚本,得到下图
可能又有人嫌这个图有点偏暗,你可以在图像编辑程序如ps里调调曝光度、饱和度之类直到最满意。在Photoshop里把上图的曝光度(Ctrl+Alt+E)增加0.6后得到下图,此时亮度正合适,而且空穴和电子的重叠看得非常清楚,完美!
5 例子:用VMD显示水四聚体的密度差图
在Multiwfn手册4.4.8节给出了绘制水四聚体的密度差图的步骤,也就是让整个水四聚体的密度减去构成它的每个单体的密度。我们将算出来的密度差格点数据导出成cube文件,然后用VMD来渲染。如果直接用VMDrender_full.bat渲染,虽然效果很好,但是阴影搞得图像略微复杂,反倒有点不便于分析,因此我们还是按照上一节,改成-trans_vmd和-mediumshade选项然后再渲染,之后在Photoshop里按Ctrl+Alt+E,把灰度系数校正(Gamma)改为0.7后得到下图,可见又漂亮,又把密度差特征展现得很清楚。
6 例子:苯甲酮的LOL-pi
在《在Multiwfn中单独考察pi电子结构特征》(http://sobereva.com/432)一文中介绍了怎么通过Multiwfn非常简单地绘制出平面和非平面体系的描述pi电子结构的函数的图像,其中对一个非平面体系苯甲酮绘制了LOL-pi等值面图。使用本文的脚本,直接用cub命令将LOL-pi的格点数据文件载入VMD,等值面设为0.5后,通过VMDrender_full.bat渲染直接就得到了下面这个效果非常理想的图像。
7 总结&其它
本文提供的脚本可以又快又好又方便地将一个或两个cube文件绘制成等值面,尤其是建议Multiwfn用户都掌握本文的做法。
用VMDrender_full.bat渲染出的效果并非对任何情况都总是理想,应根据实际情况调节,在http://sobereva.com/449文中对于作图设定还有更多讨论,本文不再累述。尤为值得一提的是如果在.bat里加入-shadow_filter_off,可以避免由于等值面产生大量阴影而使得图像较暗,用了-trans_vmd后若感觉图像偏暗,除了如上文用ps调节外也可以尝试这个选项。大家也可以在Graphics - Representation中对设置自行进行各种修改、在Graphics - Materials里对材质定义进行调整、在Display里调整光源来试图改进效果。等值面是否光滑和格点间距有直接关系,间距越小越光滑,但计算也越昂贵,详见《Multiwfn FAQ》(http://sobereva.com/452)的Q39的讨论。
.bat里-res后面的数字定义的是渲染出来的图像尺寸,设得越小则Tachyon渲染耗时越低。