本帖最后由 liyuanhe211 于 2020-4-30 09:39 编辑
本文未经同意不得转载内容,尤其是专门偷别人东西来发的公众号之类的。可以链接引用。
复杂分子的RDG等值面图经常有很多区域,渲染平面图时相互重叠,有难以让人看清关键部分的问题。解决这个问题可以使用屏蔽cube区域的方法,但常需要屏蔽多次,比较繁琐(尤其是想展示多片RDG区域,且等值面不够规整的时候)。在此开发了一个小工具,用于对cube进行等值面分块,之后可以在图形程序中进行。示例如下面的GIF(操作过程)和最终渲染图片对比(要看动图需特殊上网方法):
这个工具适用于任何等值面分成孤立(不连续)的几片表面的情况,也可以实现等值面图的分片样式设置,如下面是水的ELF等值面图,分开后可以为每一部分设置不同的样式:
工具可从此处下载:游客,本帖隐藏的内容需要积分高于 25 才可浏览,您当前积分为 0 (因为Python,又懒得精简依赖的包,有一点大)
使用时运行解压后文件夹中的 Isosurface_Split.exe 文件,程序首先询问三个参数:
首先是等值面的值,需要注意程序运行一个循环只能同时处理一个等值面,诸如±0.5是不自动处理的,要分别处理一次。:
- Input isovalues for isosurfaces. Split multiple isovalues with a comma (e.g. -0.05, 0.05). Press Enter for [0.5]:
复制代码 其次是对每个值,最多输出多少个等值面,程序会按照等值面的表面积排序,越大片儿的等值面越优先输出,默认输出50个,如果输入-1就有多少个等值面区域输出多少。
- Input maximum number of blocks for each isovalue. Press Enter for [50]. Input -1 to remove limit:
复制代码 最后是对切去的空白部分,填充什么数值。这个需要了解一点程序绘制等值面的原理。
- 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,就正常了。
实际例子里,RDG图因为是“下凸的”(isovalue越大,等值面包围的面积越大),所以应该设置一个比所有数值都大的数字。ELF图是“上凸的”(isovalue越大,等值面越小),所以应该设置一个接近0的数值。如果设置错误,例如ELF的屏蔽值写了1(而不是正确的0)就会出现下图中第二张图的情况,在曲面的截断处多出一个“相似形状,大小更大的壳子”。
之后将要用于分割的cube文件拖到程序窗口里,按回车,程序就会自动完成分割,完成后会在原cube文件所在目录下生成一系列由大到小的cube文件:
- Size (kB) Filename
- 380,256 func2.cube
- 3,677 func2_Iso_1.cube
- 1,907 func2_Iso_2.cube
- 1,260 func2_Iso_3.cube
- 924 func2_Iso_4.cube
- 825 func2_Iso_5.cube
- 712 func2_Iso_6.cube
- 365 func2_Iso_7.cube
- 378 func2_Iso_8.cube
- 376 func2_Iso_9.cube
- 317 func2_Iso_10.cube
- 428 func2_Iso_11.cube
- 196 func2_Iso_12.cube
- 201 func2_Iso_13.cube
复制代码 随后可以用下面这个脚本中的 <Draw_RDG_with_PyMOL_MultipleCube.bat> 自动将这些 cube 都载入 PyMol,实现帖子开头动图里的绘图。 (使用VMD等软件也是可以的,依次手动载入即可,也欢迎分享提供脚本)
PyMOL.zip
(9.91 KB, 下载次数 Times of downloads: 47)
|