计算化学公社

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

[综合交流] 使用 Mathematica 实现HOMO与LUMO轨道的3D同步可视化及自动排版保存

[复制链接 Copy URL]

196

帖子

5

威望

1213

eV
积分
1509

Level 5 (御坂)

本帖最后由 wxyhgk 于 2024-2-6 15:14 编辑

先看效果:


计算数据整理成表格


优点:
  • 分子同步转动,省去手动调节每个分子
  • 排版一键完成,并且保存高清图片
  • ppt 演讲的时候如果条件允许可以直接用 Mathematica 笔记本将更加清晰


测试平台:
  • 系统:Ubuntu20.04 / win11 / MacOS 13.4
  • CPU:AMD 5950x/i7-13700/苹果 M1
  • Mathematica 13.3/Mathematica 14.0






1. 需求
在化学反应研究中,最高占据分子轨道(HOMO)和最低未占据分子轨道(LUMO)的理解和分析至关重要。传统上,我们依赖 Gaussian09/16 软件来计算这些轨道数据,这一过程涉及将计算结果的 chk 文件通过 formchk 命令转换为 fchk 文件,再使用 cubegen 命令将 fchk 文件转化为 cube 文件,最后进行可视化处理。

然而,这一流程并不尽如人意,尤其是在需要同时处理多个分子的轨道数据时。每当需要统一调整多个分子的视角以保持一致性时,工作量急剧增加,手动调整变得异常繁琐。此外,完成这些步骤后,我们还需进行复杂的图像排版工作,这在处理大量分子时更是耗时耗

最近我在北京实习,用的服务器是某大学的集群,不能上网,Python 包安装起来也费劲,开始写的 Python 脚本,后来写的 shell 脚本,发现效果都让我不太舒服,因为最后都需要放到 ppt 里面,所以我索性,直接使用 Wolfram 语言解决,把排版也搞好,然后就能直接用了。

2. 解决
面对这些繁琐且耗时的步骤,我想到了一个高效且简洁的解决方案:结合 Mathematica 和 Gaussian 16,实现一键式分子轨道可视化和自动排版。


首先,我们继续利用 Gaussian 16 进行精确的轨道数据计算。接着,借助 Mathematica 强大的数据处理和图形展示能力,将这些复杂的数据转换成直观的3D图像。这一过程不仅简化了数据转换,还提高了整体的工作效率


接着我们在 PowerPoint 里面做好 ppt 模板,然后将这些图片直接拖入,免去每次都需要排班的麻烦


2.1 表格函数
https://www.123pan.com/s/U8JrVv-9Q6EH.html

使用方法:
step1:在电脑文件夹下面建立一个文件夹
setp2:将 Mathematica 的 nb 文件,所需的 log 文件,homo,lumo 的 cube 文件放入上面建立的文件夹当中
setp3:运行代码即可,然后运行代码,调整好视角后会自动保存在你这个文件夹里面

2.2 同步可视化排版函数
  1. Clear["Global`*"]
  2. (*设置nb文件所在的位置*)
  3. SetDirectory[NotebookDirectory[]];
  4. (*log文件*)
  5. s0Log = "s0.log";

  6. (*cube 文件*)
  7. s0HomoCube = "s0_homo.cube";
  8. s0LumoCUbe = "s0_lumo.cube";
  9. s1HomoCube = "s1_homo.cube";
  10. s1LumoCube = "s1_lumo.cube";

  11. (*输出图片*)
  12. s0HomoPic = "s0_homo.png";
  13. s0LumoPic = "s0_LumoPic.png";
  14. s1HomoPic = "s1_HomoPic.png";
  15. s1LumoPic = "s1_LumoPic.png";

  16. DynamicModule[{vp = {1.3, -2.4, 2.0}, vv = {0, 0, 1}},
  17. logFun[file_] :=
  18.   Import["s0.log", "GaussianLog"] //
  19.    MoleculePlot3D[#, ViewPoint -> Dynamic[vp],
  20.      ViewVertical -> Dynamic[vv], SphericalRegion -> True] &;
  21. cubeFun[file_] :=
  22.   Import[file, "Graphics3D", ContourStyle -> {Red, Blue},
  23.    ViewPoint -> Dynamic[vp], ViewVertical -> Dynamic[vv],
  24.    SphericalRegion -> True];

  25. (*=== 定义分子模型图 ===*)
  26. s03D = logFun[s0Log];
  27. s0Homo = cubeFun[s0HomoCube];
  28. s0Lumo = cubeFun[s0LumoCUbe];
  29. s1Homo = cubeFun[s1HomoCube];
  30. s1Lumo = cubeFun[s1LumoCube];

  31. (*=== 创建组合图形布局 ===*)
  32. (*定义一个应用样式的函数*)
  33. styledText1[text_] :=
  34.   Style[text, FontFamily -> "Times New Roman", FontSize -> 18];
  35. styledText2[text_] :=
  36.   Style[text, FontFamily -> "Times New Roman", FontSize -> 12];
  37. (*应用样式到具体文本*)

  38. s0Text = styledText1["s0"];
  39. s1Text = styledText1["s1"];
  40. homoText = styledText2["HOMO"];
  41. lumoText = styledText2["LUMO"];

  42. (* ===构建 combinedGraphics ===*)
  43. combinedGraphics = Grid[
  44.    {{s03D, s0Homo, s0Text, s0Lumo, s1Homo, s1Text, s1Lumo},
  45.     {" ", homoText, " ", lumoText, homoText, " ", lumoText}},
  46.    Alignment -> Center, Spacings -> {1, 0.3},
  47.    Dividers -> {{{False, True, False, False, True, False, False},
  48.       False}}, FrameStyle -> Directive[Dashed]];

  49. (*=== 动态面板 ===*)
  50. Panel@Column[{
  51.     Dynamic@combinedGraphics,
  52.     Button["Save",
  53.      Export[s0HomoPic, s0Homo, Background -> None];
  54.      Export[s0LumoPic, s0Lumo, Background -> None];
  55.      Export[s1HomoPic, s1Homo, Background -> None];
  56.      Export[s1LumoPic, s1Lumo, Background -> None];
  57.      Export["s0s1_homolumo.png", combinedGraphics, "PNG",
  58.       Background -> None];
  59.      Method -> "Queued"]}]]
复制代码
使用方法和步骤 2.1 中的相同

当然很多论文中有那种 HOMO 在下面, LUMO 在上面的那种能级图,通过修改我上面的代码,也可以实现这一点,省去手动排班的麻烦,此外 Gap 还能直接通过计算相应的文件得到,无需自己手动排版,用 excel 计算等各种麻烦的操作。



3. 其他
使用 Mathematica 还有一个好处就是,无需每次都重新打开重新载入,因为一旦运行成功后,以后每次打开都能自己随意调整视角什么的,同时还能做其他的数据分析,偶极矩,发光光色,弗朗克-康登原理,分子静电式的可视化和排版等等



  1. (* === 1. 定义文件路径 === *)
  2. path1 = "http://pic.wxyh.top/C3H4O2-esp.cube"; (*导入esp.cube文件的路径*)
  3. path2 = "http://pic.wxyh.top/C3H4O2-Potential.cube"; (*导入Potential.cube文件的路径*)

  4. (* === 2. 导入体积数据 === *)
  5. espCube = Import[path1, "VolumetricData"]; (*导入esp.cube文件*)
  6. potentialCube = Import[path2, "VolumetricData"]; (*导入Potential.cube文件*)

  7. (* === 3. 获取数据信息 === *)
  8. espData = espCube["Data"]; (*从esp.cube文件中提取数据*)
  9. potentialData = potentialCube["Data"]; (*从Potential.cube文件中提取数据*)
  10. dataRange = espCube["DataRange"]; (*获取数据的范围*)

  11. (* === 4. 处理数据 === *)
  12. espDataNormal = Normal[espData]; (*将espData数据标准化*)
  13. potentialDataNormal = Normal[potentialData]; (*将potentialData数据标准化*)

  14. (* === 5. 绘图 === *)
  15. mole = Import[path1, "Molecule"]; (*导入分子数据*)

  16. moleplot = MoleculePlot3D@mole; (*生成分子模型*)
  17. surface = ListContourPlot3D[espData[[1]], Contours -> 0.03 {-1, 1}, DataRange -> dataRange] // DiscretizeGraphics; (*生成等值面*)

  18. potentialPlot = ListSliceDensityPlot3D[potentialData[[1]], surface, DataRange -> dataRange,
  19.   ColorFunction -> ({Opacity[0.8], Blend["M10DefaultDensityGradient", #1]} &), PlotLegends -> Automatic]; (*生成静电势图*)

  20. Show[moleplot, potentialPlot] (*显示分子模型和静电势图*)
复制代码










评分 Rate

参与人数
Participants 12
威望 +1 eV +55 收起 理由
Reason
呆瓜 + 5 好物!
wsz + 5 赞!
shuiningzhu + 5 好物!
flyingchow + 5 GJ!
北大-陶豫 + 5 牛!
卡开发发 + 5
tiandikuoyuan + 5 好物!
Aletyx + 5 谢谢
LittlePupil + 5 牛!
sobereva + 1
ChrisZheng + 5 谢谢
naoki + 5 谢谢分享

查看全部评分 View all ratings

15

帖子

0

威望

259

eV
积分
274

Level 3 能力者

3#
发表于 Post on 2024-2-23 09:36:14 | 只看该作者 Only view this author
接触了十年的Mathematic,总以为用处不大,今天终于有用了

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

2#
发表于 Post on 2024-2-7 18:42:01 | 只看该作者 Only view this author
我认为
Mathematica
应该列为,理工科,尤其是工科学生的必修课或者选修课,
而不是追求高数中的解题技巧。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

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

GMT+8, 2024-11-24 00:11 , Processed in 0.192649 second(s), 27 queries , Gzip On.

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