前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用PyVibMS可视化分子和固体中的振动模式

使用PyVibMS可视化分子和固体中的振动模式

作者头像
用户7592569
发布2021-05-11 10:12:21
1.8K0
发布2021-05-11 10:12:21
举报
文章被收录于专栏:量子化学

1. 前言

在日常的计算化学研究中,我们经常需要将计算得到的分子或者固体/晶体体系简谐振动通过动画的方式直观地呈现在屏幕上,从而可以清楚地知道在某个特定的振动模式下是哪些原子在运动。一方面,这种振动的可视化可以在实验测量得到了振动光谱(红外、拉曼)的情况下帮助我们借助理论计算对振动谱图进行指认;另一方面,在反应机理研究的过渡态计算中,通过对虚频振动的观察,我们可以很快知道计算得到的过渡态结构是否能把反应物、产物的结构串起来。 以最常用的量化计算程序高斯为例,与之配套使用的GaussView软件可以很轻松地对振动分析 (freq) 计算结果进行可视化。类似地,Q-Chem也有一个配套的IQmol程序(免费、开源)可以呈现Q-Chem的振动分析结果。此外,一些第三方的程序如Avogadro、MOLDEN等也可以对高斯程序的振动分析结果进行可视化。计算化学公社的社长sob老师曾经写过一个可以将ORCA的振动分析结果转换为高斯输出格式的工具(http://sobereva.com/498)以及一个可以在VMD程序中显示振动模式静态矢量的工具(http://sobereva.com/567)。

以上是分子体系计算的情况,然而对于固体/晶体来说,能够显示振动模式的程序要少得多。笔者唯一用过的是与CRYSTAL程序配套使用的一个网页插件

http://crysplot.crystalsolutions.eu/web_pages_yves3/vibration.html

这个网页插件是CRYSPLOT套件的一部分,使用时需要将CRYSTAL程序计算好的振动分析结果文件先上传到服务器,然后才能得到结果。因此这种方法是需要联网才可以操作,非常不便。

综合上面的多种原因,笔者构思开发了一款基于PyMOL程序的可以跨平台使用、适配多种量子化学、第一性原理计算程序的辅助插件PyVibMS。这块插件免费、开源,下载后可以在本地任意操作平台(Win、Linux和Mac)上使用。目前这款插件的源码在GitHub上托管

https://github.com/smutao/PyVibMS

2. 使用前准备 2.1 PyMOL程序的安装 由于PyVibMS需要依赖PyMOL程序才能使用,在还没有安装PyMOL的情况下,我们需要先安装PyMOL。PyMOL是一款分子可视化程序,其强项在于对生物大分子进行可视化。与之相关的VMD,是另一款比较流行分子可视化软件。 和其他计算化学程序不同的是,PyMOL以两种方式发行:一为通过薛定谔公司发布的商业版,二为由社区发布的开源版。两个版本对于普通用户来说没有特别大的区别,而且在版本上是同步更新的。商业版的使用需要申请或者购买授权证书,假如没有有效证书的话,商业版PyMOL的还可以打开继续使用,但一些高级功能(如渲染出图)会受到影响。此外,商业版PyMOL的教育(edu)证书只能用于授课教学,不能用于科学研究和文章发表。因此,为了避免不必要的麻烦,笔者推荐使用开源版PyMOL。 PyVibMS插件对商业版和开源版的PyMOL都适用。下面是各个操作系统下PyMOL的安装方法:

A)商业版 前往

https://pymol.org/2/

下载适合你的PyMOL安装包,Windows和Mac系统下都很好操作,说一下Linux的情况。

将PyMOL安装包下载到Linux之后,需要先解压。然后打开一个终端窗口,进入解压后得到的pymol文件夹,输入

代码语言:javascript
复制
chmod +x pymol
./pymol

就可以开启PyMOL程序了。如果已经获取了有效的证书,可以在这一步导入证书文件。

B)开源版 B.1) 在Windows下 加州大学尔湾分校的研究人员在他们的网站上

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymol

定期发布预编译的PyMOL程序,安装步骤如下: 1) 前往上述网站下载两个文件 pymol-2.5.0a0-cp38-cp38-win_amd64.whl 和 pymol_launcher-2.1-cp38-cp38-win_amd64.whl 到本地文件夹 (如C:\Downloads)

2) 如果系统下没有安装Anaconda环境, 需要先前往

https://www.anaconda.com/products/individual

下载安装64位的Anaconda环境

3) 在开始菜单中找到并打开Anaconda Prompt 输入

代码语言:javascript
复制
conda create -n pymol python=3.8
conda activate pymol

此时我们创建了一个名为pymol的python3.8环境,并激活了该环境,接着我们输入

代码语言:javascript
复制
conda install -c anaconda pip
conda install -c anaconda numpy
conda install -c conda-forge pmw

来安装相关的python库,接着我们进入刚刚下载的两个文件所在的文件夹(如C:\Downloads)

代码语言:javascript
复制
cd C:\Downloads

然后接着输入下面一行安装指令即可

代码语言:javascript
复制
pip install --no-index --find-links="%CD%"  pymol_launcher-2.1-cp38-cp38-win_amd64.whl

这个时候PyMOL开源版本就已经安装好了,输入下面的指令即可运行

代码语言:javascript
复制
pymol

假如这个Anaconda prompt的窗口关闭了,需要再次使用pymol的时候,则需要先加载pymol的环境然后运行pymol

代码语言:javascript
复制
conda activate pymol
pymol

B.2) 在Linux下 在Linux的不同发行版中,我们可以利用系统自带的包管理工具一键安装开源版的PyMOL,非常方便。比如在ubuntu中,我们可以使用

代码语言:javascript
复制
sudo apt-get install pymol

在centos中,可以使用

代码语言:javascript
复制
sudo yum --enablerepo=epel install pymol

其他的发行版可以参见

https://pymolwiki.org/index.php/Linux_Install

B.3)在Mac下 需要先安装MacPorts环境,见

https://www.macports.org/install.php

安装完毕后打开终端,输入

代码语言:javascript
复制
sudo port install pymol

即可一键安装。 2.2 PyVibMS插件的安装 在安装好PyMOL程序后,我们需要将本文介绍的插件安装妥当。首先我们前往

https://github.com/smutao/PyVibMS/

然后点击 Code -> Download Zip,这样就把整个插件代码以压缩文件的形式下载至本地了。我们把这个压缩包解压,得到一个名为PyVibMS-master的文件夹。接着我们打开PyMOL程序,点击菜单Plugin -> Plugin Manager, 在弹出的窗口中找到Install New Plugin 标签页,接着点击Choose file 然后载入PyVibMS-master/src/__init__.py文件。在点击了一系列确定后,PyVibMS插件便已经安装好了,也可以在PyMOL的Plugin菜单下找到。

3. 使用PyVibMS 在一个干净的PyMOL窗口(如果此时PyMOL已经加载了分子,请先在PyMOL>这一栏输入reinitialize命令重新初始化PyMOL程序),点击Plugin -> PyVibMS 即可打开本插件

具体的使用方式请见下一节的实例。使用完成后,请点击PyVibMS窗口的Close按钮。 4. 使用实例 4.1 高斯计算乙烯分子的振动分析、渲染出图以及动画导出 在打开PyVibMS插件窗口后,点击Input File这一行中三个点(...)的按钮,然后选定 PyVibMS-master/examples/Gaussian/ethene/g16_ethene.log 文件,将文件类型调整为Log File (*.log)后载入。接着,回到PyVibMS界面后,将文件类型XYZ调成Gaussian 09/16。因为这个高斯的输出文件内包含振动分析的信息,我们勾选 Has Vib. Info. ,然后点Load按钮。此时,PyMOL的显示界面会出现乙烯分子,而PyVibMS的表格区域则列出了乙烯分子的12个振动模式对应的编号、频率(单位为波数cm−1)和对称性。表格的最后一栏为注释,可以任意添加笔记。 当鼠标选定表格中的一个振动模式后,可以点击Start Animation则可以显示该振动的动画。下方有两个拉杆,一个可以调节动画的播放速度,另一个则可以调整动画中振动的幅度。当勾选了Displacement Vectors后,PyMOL的显示界面则会显示振动模式的矢量箭头,对应的拉杆可以调节矢量箭头的长短。如果你希望矢量箭头以相反方向出现,则需要多次勾选 Displacement Vectors,有50%的几率会反转矢量箭头方向。 当我们需要制作高质量的图像时,可以点击File -> Export Image As -> PNG,然后在新弹出的窗口的下拉菜单中,选定ray trace with transparent background,这么一来,保存得到的高质量PNG图片将是透明背景的。除了这种方法之外,也可以在PyMOL>一栏使用 ray 命令在PyMOL显示窗口中先看到渲染效果,如果满意的话再点击 File -> Export Image As -> PNG 并选择 capture current display 来保存图片。(需要注意:没有有效证书的商业版PyMOL会在渲染时加上水印。) 除了在电脑上对振动模式的动画进行显示之外,我们经常需要在做报告的时候将振动的动画呈现在幻灯片里面。下面分别针对商业版和开源版的PyMOL介绍两种将振动动画导出成GIF动画图片的方法. 商业版: 在PyVibMS的表格中选定一个振动模式后,我们点击PyMOL的File -> Export Movie As -> MPEG,在弹出的新窗口中,我们把Rendering选为Ray(slow),将Encoder选为convert,下方选定GIF,然后导出即可。 开源版: 在PyVibMS的表格中选定一个振动模式后,我们点击PyMOL的File -> Export Movie As -> PNG Images,在弹出的新窗口中,我们把Rendering选为Ray(slow),然后在导出时,新建一个空的文件夹并选为导出目的地,输入的文件名将作为导出的PNG图片的前缀。比如笔者输入eth作为导出文件名,那么在那个新文件夹中,我们会得到eth0001.png ... eth0024.png 这24个图片文件。下一步则是将这24个图片文件串联起来转换成GIF动画文件。 我们前往

https://ezgif.com/maker

然后将刚刚导出的24个图片文件上传到该网站,点击 Upload and make a GIF上传。接着这个网页会把24个图片都罗列出来,我们可以调整动画的播放速度,笔者觉得把延迟时间设为1比较合适。

按照上图设置好之后,点击 Make a GIF即可制作,完毕后点击下方的save则可以将GIF动画下载到本地。下面是最终的效果图

如果需要提高动画的显示质量(比如减少毛刺),则可以在PyMOL导出成GIF或者PNG的时候增大图片的宽度和高度来提高分辨率。 4.2 VASP计算单晶硅的振动分析 在对VASP计算的振动分析进行可视化之前,我们需要振动计算后得到的OUTCAR和CONTCAR文件 (见PyVibMS-master/examples/VASP/original-data)。前者包含了体系内原子的笛卡尔坐标、振动模式矢量信息,后者则包含了PBC盒子的信息以及体系的元素组成。然后我们把OUTCAR文件复制一份出来并给它一个.out的后缀,接着将CONTCAR的内容插入到这个.out文件的第一行(见PyVibMS-master/examples/VASP/Si_OUTCAR.out)。 在打开PyVibMS插件窗口后,点击Input File这一行中三个点(...)的按钮,然后选定 PyVibMS-master/examples/VASP/Si_OUTCAR.out文件,将文件类型调整为Output File (*.out)后载入。接着,回到PyVibMS界面后,将文件类型XYZ调成VASP 5.x。因为这个VASP输出文件既包含了PBC盒子的信息,又包含了振动模式的信息,我们勾选 Has PBC 和 Has Vib. Info.,然后点击Load载入。 此时我们可以看到PyMOL的显示界面出现了两个相连的硅原子,这是单晶硅原胞内的原子。在PyVibMS窗口中,Lattice Vectors部分已经被自动填充了,这部分设置的是PBC盒子的晶格矢量信息。在表格部分,出现了一共6个振动模式,前三个为真实的振动模式,后三个频率为0的模式对应了平移运动、并非单晶硅的真实振动。 为了更好的理解单晶硅的振动,我们需要把原胞或者超胞显示出来。点击 Unit/Primitive Cell 按钮后,在PyMOL界面会出现一个六面体的框架,这个就是PBC的盒子。如果想知道这两个硅原子和其他硅原子的相对运动,可以点击 Make Supercell 来建立超胞结构。在超胞结构中,中心元胞以外的原子会以小一号的球显示。

4.3 CRYSTAL计算二维水层结构的振动分析 在打开PyVibMS插件窗口后,点击Input File这一行中三个点(...)的按钮,然后选定 PyVibMS-master/examples/crystal17/2d-water/crystal_2d-water_translate.out文件,将文件类型调整为Output File (*.out)后载入。回到PyVibMS界面后,将文件类型XYZ调成CRYSTAL17,并勾选Has PBC 和 Has Vib. Info.,然后点击Load载入。 此时PyMOL的显示界面会出现一个水分子,这是该二维体系中原胞包含的原子。在PyVibMS的界面中,晶格矢量的参数也已经自动设定为2D体系;表格区域罗列了总共9个振动,其中前3个频率为0的模式实际上是平移运动,后面6个才是振动模式。通过和4.2节类似的操作,我们可以显示原胞和超胞下的振动。

4.4 其他量子化学、第一性原理计算程序的振动分析 对于PyVibMS没有原生支持的量子化学、第一性原理的计算程序,PyVibMS目前仍然可以支持。这种情况下,PyVibMS需要两个输入文件:一是体系的XYZ坐标文件 (格式见 https://en.wikipedia.org/wiki/XYZ_file_format),二是包含振动矢量信息可以被PyVibMS识别的mode文本文件。 下面以二氧化碳分子为例,演示PyVibMS的操作流程。

在打开PyVibMS插件窗口后,点击Input File这一行中 三个点(...)的按钮,然后选定 PyVibMS-master/examples/generic-xyz/co2.xyz 文件,载入后以XYZ文件load载入。此时PyMOL的显示界面就出现了二氧化碳分子。然后在PyVibMS的界面上找到 Mode File一行,点击三个点(...)的按钮,选定 PyVibMS-master/examples/generic-xyz/vib-modes.txt 文件并载入。此时PyVibMS的表格区域就出现了4个振动模式,说明已经读取成功。

mode文件可以通过自写脚本的方式从量子化学、第一性原理计算程序的振动分析结果里面提取相应的信息 来制作。下面以这个二氧化碳分子为例,介绍其文件格式。

#之后的文字为注释,在实际情况下不存在。

代码语言:javascript
复制
3 4    # 3 为原子个数,4 为该文件包含的振动模式个数

N  673.5120  PIU  1  # N为固定字符 后面跟着振动频率、对称性和注释
0.88                        # 该振动在第1个原子的X分量
-0.00                       # 该振动在第1个原子的Y分量
-0.00                       # 该振动在第1个原子的Z分量
-0.33                       # 该振动在第2个原子的X分量
0.00                        # ...
0.00
-0.33   
0.00  
-0.00
                              # 空行
N  673.5120  PIU  2
0.00   
0.88  
-0.00
-0.00  
-0.33   
0.00
-0.00  
-0.33  
-0.00

N  1369.4505  SGG  3
-0.00  
-0.00   
0.00
0.00   
0.00   
0.71
0.00   
0.00  
-0.71

N  2400.9444  SGU  4
  0.00   
  0.00   
  0.88
-0.00  
-0.00  
-0.33
-0.00  
-0.00  
-0.33
END                  # 结束字符

如果后续有用户希望可以让PyVibMS原生支持其他的量化、第一性原理程序,可以向笔者反馈。 5. PyVibMS的其他用途——显示分子、固体结构 除了显示振动模式之外,PyVibMS还可以借助PyMOL强大的可视化引擎对分子和固体结构进行可视化。对于分子体系来说,我们只需要准备相应的XYZ格式文件,直接载入即可。对于固体/晶体结构,我们首先需要准备元胞内原子的XYZ坐标文件,按照上述方式载入;然后在PyVibMS的Dimensions下拉菜单选定合适的维度,点击Confirm,然后在a1-a3部分填入晶格矢量信息即可。 下面以一维的聚乙炔体系为例进行演示:

首先我们载入PyVibMS-master/examples/crystal17/1d-trans-PA/cell-content.xyz文件,此时可以在PyMOL显示窗口看到一个C2H2的单体,这是聚乙炔的原胞内部包含的原子。接着,我们用文本编辑器打开 PyVibMS-master/examples/crystal17/1d-trans-PA/pbc-lattice.txt 文本文件,可以看到三行数据。然后,我们将PyVibMS的Dimensions调为1,并点击Confirm。将文本文件中的第一行数据复制到a1一栏,在前两个数据后加英文的逗号(,),再点击相应的按钮就可以显示原胞和超胞了。效果见下图

当然,显示分子、固体结构的程序还有其他的选择,PyVibMS或者PyMOL并非唯一选择。 6. 结语 PyVibMS作为一款免费、开源的PyMOL可视化插件诞生于2019年,笔者希望通过这篇文章能给广大的计算化学研究者对PyVibMS提供最直观的介绍,笔者也将倾听各位用户的反馈,对PyVibMS做及时的更新升级。 如果PyVibMS在你的科研中有所帮助,请引用我们的论文: Tao, Y., Zou, W., Nanayakkara, S. et al. PyVibMS: a PyMOL plugin for visualizing vibrations in molecules and solids. J Mol Model 26, 290 (2020). https://doi.org/10.1007/s00894-020-04508-z

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子化学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档