计算化学公社

标题: 分块自定义着色/隐藏 (填色) 等值面 (RDG/ELF) 区块的工具 [打印本页]

作者
Author:
liyuanhe211    时间: 2020-2-7 09:18
标题: 分块自定义着色/隐藏 (填色) 等值面 (RDG/ELF) 区块的工具
本帖最后由 liyuanhe211 于 2020-4-30 09:39 编辑

本文未经同意不得转载内容,尤其是专门偷别人东西来发的公众号之类的。可以链接引用。

复杂分子的RDG等值面图经常有很多区域,渲染平面图时相互重叠,有难以让人看清关键部分的问题。解决这个问题可以使用屏蔽cube区域的方法,但常需要屏蔽多次,比较繁琐(尤其是想展示多片RDG区域,且等值面不够规整的时候)。在此开发了一个小工具,用于对cube进行等值面分块,之后可以在图形程序中进行。示例如下面的GIF(操作过程)和最终渲染图片对比(要看动图需特殊上网方法):




(, 下载次数 Times of downloads: 105)

这个工具适用于任何等值面分成孤立(不连续)的几片表面的情况,也可以实现等值面图的分片样式设置,如下面是水的ELF等值面图,分开后可以为每一部分设置不同的样式:


工具可从此处下载:(因为Python,又懒得精简依赖的包,有一点大)

使用时运行解压后文件夹中的 Isosurface_Split.exe 文件,程序首先询问三个参数:
首先是等值面的值,需要注意程序运行一个循环只能同时处理一个等值面,诸如±0.5是不自动处理的,要分别处理一次。:
  1. Input isovalues for isosurfaces. Split multiple isovalues with a comma (e.g. -0.05, 0.05). Press Enter for [0.5]:
复制代码
其次是对每个值,最多输出多少个等值面,程序会按照等值面的表面积排序,越大片儿的等值面越优先输出,默认输出50个,如果输入-1就有多少个等值面区域输出多少。
  1. Input maximum number of blocks for each isovalue. Press Enter for [50]. Input -1 to remove limit:
复制代码
最后是对切去的空白部分,填充什么数值。这个需要了解一点程序绘制等值面的原理。
  1. Input the value which will be filled to the blank region of a cube file. Press Enter for [100]:
复制代码
程序在绘制等值面时,是在尝试寻找cube文件中等于某数值的点,但因为Cube文件取点是间断的,(一般)没有与所要求值恰好相等的点,所以程序需要对相邻的格子进行某种插值。

用一维的例子进行说明(三维数据对应二维的等值面,一维曲线对应零维的等值点集),下面的曲线中,不做截取时有三个等值点,现在尝试将最左侧的等值点截去时,需要考虑应该对截去的部分填充什么数值,如果填充数值较大(如1.5),会导致程序多插值出一个没有物理意义的等值点(如红色箭头所示)如果设置为0.5,就正常了。


(, 下载次数 Times of downloads: 110)




实际例子里,RDG图因为是“下凸的”(isovalue越大,等值面包围的面积越大),所以应该设置一个比所有数值都大的数字。ELF图是“上凸的”(isovalue越大,等值面越小),所以应该设置一个接近0的数值。如果设置错误,例如ELF的屏蔽值写了1(而不是正确的0)就会出现下图中第二张图的情况,在曲面的截断处多出一个“相似形状,大小更大的壳子”。

(, 下载次数 Times of downloads: 101)


之后将要用于分割的cube文件拖到程序窗口里,按回车,程序就会自动完成分割,完成后会在原cube文件所在目录下生成一系列由大到小的cube文件:


  1. Size (kB)        Filename
  2. 380,256        func2.cube
  3. 3,677        func2_Iso_1.cube
  4. 1,907        func2_Iso_2.cube
  5. 1,260        func2_Iso_3.cube
  6. 924        func2_Iso_4.cube
  7. 825        func2_Iso_5.cube
  8. 712        func2_Iso_6.cube
  9. 365        func2_Iso_7.cube
  10. 378        func2_Iso_8.cube
  11. 376        func2_Iso_9.cube
  12. 317        func2_Iso_10.cube
  13. 428        func2_Iso_11.cube
  14. 196        func2_Iso_12.cube
  15. 201        func2_Iso_13.cube
复制代码
随后可以用下面这个脚本中的 <Draw_RDG_with_PyMOL_MultipleCube.bat> 自动将这些 cube 都载入 PyMol,实现帖子开头动图里的绘图。 (使用VMD等软件也是可以的,依次手动载入即可,也欢迎分享提供脚本)

(, 下载次数 Times of downloads: 57)


这个脚本的使用方法见《用 PyMOL 渲染 HSV 混色模式的 RDG 填色等值面图》http://bbs.keinsci.com/thread-15756-1-1.html



向命令提示行中贴入多个文件可以用Windows explorer的“复制为路径功能”,选中这些cube文件之后按着shift点右键即有这个选项,可直接贴入cmd窗口里回车(不必去除引号)。



另外有个小问题,如果遇到下面最右侧这种“等值面多出一个角”的情况,可将程序目录下Isosurface_Split.ini中的 swell=4 改小一些,如 swell=6 是最右侧的样子,swell=2 就正常了是最左侧的样子,但如果没有这个问题,应该使 Swell 保持 4。这个数值是等值面的周围保留几个格子,因为绘图程序有时用不止一个格子做差值,所以仅保留两个格子有时绘图效果不佳,会有不平滑、锯齿的现象,所以尽量在不出问题的时候保留的稍多一点。


(, 下载次数 Times of downloads: 117)


反馈与Bug:


如果遇到闪退问题,请在cmd里运行这个程序(方法是在exe文件所在的文件夹下,空白处按shift点右键,选择“在此处打开命令行窗口”,然后输入 ./Isosurface_Split.exe 运行程序,这样程序运行出错后能保留报错前的情况。如遇Bug,请将cube文件,操作选项,以及最后的报错传给我。



作者
Author:
biogon    时间: 2020-2-7 16:20
标尺的字体是怎么控制的
作者
Author:
冰释之川    时间: 2020-2-8 10:23
这是引诱我下载PyMOL么
作者
Author:
liyuanhe211    时间: 2020-2-8 10:25
冰释之川 发表于 2020-2-8 10:23
这是引诱我下载pymol么

这个分块VMD照样用,只是我不喜欢TCL,等值面填色有点问题,其他的VMD还是比PyMol亲民
作者
Author:
冰释之川    时间: 2020-2-8 10:27
本帖最后由 冰释之川 于 2020-2-8 10:28 编辑
liyuanhe211 发表于 2020-2-8 10:25
这个分块VMD照样用,只是我不喜欢TCL,等值面填色有点问题,其他的VMD还是比PyMol亲民

不过 VMD的colorbar 确实 看着有些不舒服……棕色区域一坨屎一样……
啥时候搞个VMD版的脚本呗 (白女票党):
Draw_RDG_with_VMD_MultipleCube.bat

作者
Author:
liyuanhe211    时间: 2020-2-8 10:40
冰释之川 发表于 2020-2-8 10:27
不过 VMD的colorbar 确实 看着有些不舒服……棕色区域一坨屎一样……
啥时候搞个VMD版的脚本呗{: ...

不会写Tcl,等别人写
作者
Author:
fghwinlin    时间: 2020-4-30 00:09
挺好的。
作者
Author:
风飞    时间: 2021-2-1 11:59
老师,您好,请问您这个在非正交的周期边界下是否可行呢?
作者
Author:
Joely    时间: 2021-2-26 19:32
挺好的1




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3