计算化学公社

 找回密码 Forget password
 注册 Register
Views: 16135|回复 Reply: 14
打印 Print 上一主题 Last thread 下一主题 Next thread

[波函数分析交流] 用 PyMOL 渲染 HSV 混色模式的 RDG 填色等值面图

  [复制链接 Copy URL]

3098

帖子

28

威望

1万

eV
积分
16892

Level 6 (一方通行)

本帖最后由 liyuanhe211 于 2020-11-12 23:52 编辑

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



受益于 Multiwfn 及 Sobereva 的博文,文章中的 RDG 分析越来越常见。大家常使用VMD绘制RDG图。VMD上手容易,可调性极强,但在用 VMD 绘制 RDG 等填色图等值面图的过程中也有一些局限性。主要包括下面几点:(如果有的是我的错误认识,恳请指正)
  • VMD Windows 下 64 位程序不容易获取,加载较大 cube 时内存不足(可以用 Linux,不过x11传可视化界面还是比较难受的)。
  • VMD 不容易显示双键、三键、虚线键。
  • VMD 不记忆打开文件的目录,加载多个文件时要频繁从可执行文件的安装目录走很远去寻找要打开的文件。
  • VMD 不能用 Pov-Ray 渲染填色等值面图 (用 Tachyon 可以渲染,但 Tachyon 手册匮乏,有些效果不知如何增改,如指定位置焦点虚化)
  • (个人问题不太喜欢 tcl 语言)
  • 最重要的一点是,VMD 的混色有问题,这其实挺有意思,稍微解释:

第一个问题是,VMD 中的 colorbar 混色模式是 RGB linear,即分别对两种颜色的 R,G,B 值做数值线性加权平均。这种混合看起来有道理,但其实是不合理的:

如下图所示,左上角是 VMD 的混色模式,因为人眼对亮度的响应函数大概介于 log() 和 sqrt() 之间,所以计算机对各通道亮度的存储是开根号的,而因为 ( (√a + √b) / 2 )^2 < (a + b)/2,所以线性混合的结果是 RGB 中的某个通道越接近 50-50 混合的地方越暗、越“污”。这一点可以从其去色后的灰度图看出来,图中中上和右上分别时 HSV 和 LAB 下的亮度通道,都可见离红绿蓝基准点越远的地方越黑。


这有两个解决方案,一是先将颜色取平方、加权平均、再开方,得到的结果如“Square”所示,其 LAB-L 通道基本平衡,HSV-V 通道也平均化了许多。
另一种方案是用 HSV-mixing,这样混合出来的HSV-V通道是严格平均化的(不过 LAB-L 通道显示中间较亮,这是考虑人眼对绿色的感知比红、蓝更加敏感,所以有时人眼“感觉”靠中间的位置混色较多的地方稍亮一些)。


第二个问题是,VMD默认三种颜色中的中间一种对应的数值是 min,max 的中点。而RDG图的填色通常是自-0.04至0.02,VMD会将绿色放置在正中央即-0.01的位置上,相对于0点(黑线处)有偏移,这使得一些接近“中性”的范德华作用被显示成略微排斥作用的棕黄色,影响分析。



为了解决这些缺点,研究了一下用 PyMOL 绘制类似的图,效果不错。写了一个比较方便的脚本。可见结合脚本用PyMOL绘制可以:
  • 使图片比较鲜亮生动,不“污”;
  • 处于范德华作用区域的基团没有被显示为棕色,而显示为比较符合化学直观的(稍黄的)绿色;
  • 可以显示多重键键级。



下图体现绿色定位不同造成的差异(下图中大片的RDG等值面按经验判断应该都是“一般的”范德华相互作用,将绿色向正值方向偏移后,RDG更符合化学直观。这两图做的时候没注意两边端点的值稍有区别,不过这不重要,造成显著差别的还是绿色是否在中心。):




所用脚本如下:

PyMOL.zip (10.23 KB, 下载次数 Times of downloads: 156)


本脚本只在Windows 10, PyMOL-2.3.4.121 x64 portable (及其自带的python 3.7)下测试过。

使用其他操作系统没有显见的问题,但我个人没有测试过;如果使用的是较旧的 PyMOL 便携版,至少要求是配 Python 3 的。使用时请注意调用的Python是否正确。用便携版是因为它和它对应的Python在一起。PyMOL可以申请免费的学生Lisence (https://pymol.org/2/, Windows-zip file)。

脚本解压后有5个文件(一套 .bat, .py, .ini,和两个带MultipleCube的文件),请将这5个文件放在 PyMOLWin.exe 所在的文件夹下,配置 ini 文件后运行 Draw_RDG_with_PyMOL.bat 文件。注意安装路径不能有非ASCII字符


ini 文件中有相应的配置。文件中有比较详细的说明,解释如下四个选项:

  • 其中混色模式由mixing_order定义,若为“hsv”,则为本帖第一张图中的 “hsv-mixing”,若为整形变量2(不带引号),则对应第一张图中的 "square"
  • 分子结构显示的样式由style定义,改成1对应类似CYLview的球棍模型(见本帖最后),改成2对应棒状模型(见上图)。
  • isovalue是等值面的值,可以设定,所以本脚本可以用于绘制其他的填色等值面图。
  • PyMol_commands_after_load_mol2 其后的一段规定了 PyMOL 里的绘图指令,load 函数对应 style=1 球棍分子结构,load_sticks 函数对应 style=2 棒状分子结构,RDG_map 对应填色等值面图,对默认格式不满意的时候可以修改、添减这里的命令。


使用时直接运行 .bat 文件

脚本首先询问是否使用 .ini 文件中定义的默认着色方式,如果使用则之间按回车,如果不使用则输入任意字符后回车进入定义色标的功能,可以模仿格式单独输入定义。

  1. Default color scheme:
  2. -------------------------------------------------------------
  3.     -0.035       -0.0      0.015
  4.     0000FF     00FF00     FF0000
  5. -------------------------------------------------------------

  6. Accept default gradient color scheme? (Enter for accept, enter any other character for user-defined gradient.)

  7. Default scheme accepted.


  8. --------------------------
复制代码
随后程序需要获取三个文件,RDG 的 .cub 文件,sign(λ2)*ρ 的 .cub 文件,还有包含分子结构(尤其是键级信息)的 .mol2 文件。注意路径均不能有非ASCII字符。


文件路径可以复制或拖拽。(注意首先提供的 cube 是 RDG 的cube,如果写反成先给了 sign(λ2)*ρ 的 cube 文件将显示不出任何等值面。)


如果文件名是 XXX1.cub,XXX2.cub 的两个 cub, 输入其中一个文件脚本会自动找到另一个,直接回车即可。

  1. Getting func1.cub, func2.cub, and molecule.mol2.
  2. Paste the path of RDG cube file (or drag the file in):D:\func2.cube

  3. RDG cube file: D:\func2.cube


  4. Is this your sign(λ2)*ρ cube file (Enter to confirm, enter any other character to refuse):

  5.    D:\func1.cube

  6. Sign(λ2)*ρ cube file: D:\func1.cube


复制代码
程序随后会生成一个以“.structure.cube”结尾的文件,这个文件只包含 cub 文件中的坐标,不包含格点数据。用户应用 GaussView 打开“xxxx.structure.cube”后修改键级,另存为mol2文件后回车。


  1. A small cube file is generated for you to load it into GaussView. You can modify the bond order, then convert it to mol2:
  2. D:/func2.structure.cube
  3. Paste the path of molecule cube file (or drag the file in). Press enter for default [D:/func2.structure.mol2]:
复制代码
如果配置无误,脚本会自动启动 PyMOL,并显示完整的 RDG 填色等值面图和对应格式的分子。对较大的Cube文件,图形化窗口可能会无响应一会儿。


确认 PyMOL 显示无误,可以用 Pov-Ray (File - Export Image as - POV-Ray) 或 PyMOL 自带的渲染器(如下图)渲染为高清、透明背景图片。



另外文件夹下有一个Draw_RDG_with_PyMOL_MultipleCube.bat文件,可以通过它载入多个等值面文件,但都使用同一套着色cube。其目的是为了支持这一帖子:http://bbs.keinsci.com/thread-16243-1-1.html。使用方法与上类似,一看就知道差别。


PyMOL 相比 VMD 有其优势,但也有其局限性,比如界面远不如 VMD 直观,学习曲线比较陡峭,其灵活性很高但有很多操作依赖 Python 命令等。可结合各自软件的优势使用。欢迎批评、讨论、捉虫。


(需要补充一点,文中“批判”了VMD的混色有问题,但其实PyMOL的默认混色与VMD存在同样的问题,所以如果大家用PyMOL的默认设置填色,其会和VMD一样“污”。只不过PyMOL里可以定义任意多的色度节点及节点对应的数值(而VMD只能定义起点、终点和三个颜色),所以我写脚本使用脚本自定义的混色方式定义了(默认值)1000个点的色度曲线,这样每个色度节点足够接近时,程序内部用什么混色方式就不再重要了。)



评分 Rate

参与人数
Participants 20
威望 +2 eV +90 收起 理由
Reason
RandomError + 4 谢谢
chunlinxxx + 5
丁越 + 5 谢谢
Y30181009 + 5 好物!
lonemen + 5 好物!
终_焉 + 5 666
panernie + 3 好物!
wuzhiyi + 5 谢谢
IIIO_OIII + 5 谢谢
冰释之川 + 5 とてもいい!
puzhongji + 5 精品内容
zsu007 + 5 牛!
lijiayisjtu + 3 好物!
snljty + 5 你太厉害!
sobereva + 2
biogon + 5 とてもいい!
ChrisZheng + 5 とてもいい!
978142355 + 5 GJ!
indec + 5
ene + 5

查看全部评分 View all ratings

5万

帖子

99

威望

5万

eV
积分
112354

管理员

公社社长

2#
发表于 Post on 2019-12-13 23:28:35 | 只看该作者 Only view this author
好文,链接已加入下文,之后在Multiwfn培训班里也介绍一下
用Multiwfn+VMD做RDG分析时的一些要点和常见问题
http://sobereva.com/291http://bbs.keinsci.com/thread-1206-1-1.html

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
liyuanhe211 + 1 谢谢!

查看全部评分 View all ratings

北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

62

帖子

0

威望

1059

eV
积分
1121

Level 4 (黑子)

3#
发表于 Post on 2020-1-2 09:49:04 | 只看该作者 Only view this author
老师好,您文中说:“本脚本只在Windows 10, PyMOL-2.3.4.121 x64 portable (及其自带的python 3.7)下测试通过”。这里明确了别的系统都不可以是吗?我笔记本、台式都是win7

3098

帖子

28

威望

1万

eV
积分
16892

Level 6 (一方通行)

4#
 楼主 Author| 发表于 Post on 2020-1-2 18:59:49 | 只看该作者 Only view this author
Peter_zhong 发表于 2020-1-2 09:49
老师好,您文中说:“本脚本只在Windows 10, PyMOL-2.3.4.121 x64 portable (及其自带的python 3.7)下测 ...

不是,其他系统理论上都可以,只是仅在Win10测试过。

62

帖子

0

威望

1059

eV
积分
1121

Level 4 (黑子)

5#
发表于 Post on 2020-1-2 19:24:23 | 只看该作者 Only view this author
liyuanhe211 发表于 2020-1-2 18:59
不是,其他系统理论上都可以,只是仅在Win10测试过。

谢谢老师我改天试试

3098

帖子

28

威望

1万

eV
积分
16892

Level 6 (一方通行)

6#
 楼主 Author| 发表于 Post on 2020-2-7 09:23:13 | 只看该作者 Only view this author
更新了一个版本,新的文件夹下有一个Draw_RDG_with_PyMOL_MultipleCube.bat文件,可以通过它载入多个等值面文件,但都使用同一套着色cube。其目的是为了支持这一帖子:http://bbs.keinsci.com/thread-16243-1-1.html。使用方法与上类似,一看就知道差别。

343

帖子

1

威望

6996

eV
积分
7359

Level 6 (一方通行)

7#
发表于 Post on 2020-2-7 12:15:40 | 只看该作者 Only view this author
好物,谢谢分享!

374

帖子

2

威望

1539

eV
积分
1953

Level 5 (御坂)

8#
发表于 Post on 2020-2-26 18:46:35 | 只看该作者 Only view this author
请教一下老师 我在osx/py3下运行了这个脚本 但是显示
    RDG_cube_object_name = proper_object_name(filename_class(RDG_cube).name_stem)[-20:] + "_RDG"
NameError: name 'proper_object_name' is not defined
想问问proper_object_name是什么啊?

374

帖子

2

威望

1539

eV
积分
1953

Level 5 (御坂)

9#
发表于 Post on 2020-2-26 19:01:57 | 只看该作者 Only view this author
wuzhiyi 发表于 2020-2-26 18:46
请教一下老师 我在osx/py3下运行了这个脚本 但是显示
    RDG_cube_object_name = proper_object_name(fil ...

好像删掉就可以正常运行了

3098

帖子

28

威望

1万

eV
积分
16892

Level 6 (一方通行)

10#
 楼主 Author| 发表于 Post on 2021-3-5 21:14:36 | 只看该作者 Only view this author
jitou11 发表于 2021-3-5 20:25
感谢您提供脚本。
我有个问题,现在Multiwfn已经支持独立梯度模型(IGM),也能生成类似的cube ...

自已定义恰当的染色坐标就可以了

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
jitou11 + 5 谢谢

查看全部评分 View all ratings

13

帖子

0

威望

77

eV
积分
90

Level 2 能力者

11#
发表于 Post on 2022-4-13 21:10:25 | 只看该作者 Only view this author
jitou11 发表于 2021-3-5 20:25
感谢您提供脚本。
我有个问题,现在Multiwfn已经支持独立梯度模型(IGM),也能生成类似的cube ...

您好,请问您是怎么操作的呢?我载入dg.cub, dg_intra.cub, dg_inter.cub 和 sl2r.cube, sl2r.structure.mol2后,没有出现等值面,只有一个结构。

13

帖子

0

威望

77

eV
积分
90

Level 2 能力者

12#
发表于 Post on 2022-4-15 10:45:26 | 只看该作者 Only view this author
jitou11 发表于 2022-4-13 21:46
很久以前弄得,现在忘得很干净
我试着弄了回,等值面很顺利就出来了,可能你cube文件没选对,或者等 ...

谢谢您的回复。我自己试出来了。把文件 “Draw_RDG_with_PyMOL.ini” 中的 isovalue=0.5 改为 isovalue=0.004。

本版积分规则 Credits rule

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

GMT+8, 2024-11-23 23:06 , Processed in 0.183956 second(s), 25 queries , Gzip On.

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