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文件夹,输入
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 输入
conda create -n pymol python=3.8
conda activate pymol
此时我们创建了一个名为pymol的python3.8环境,并激活了该环境,接着我们输入
conda install -c anaconda pip
conda install -c anaconda numpy
conda install -c conda-forge pmw
来安装相关的python库,接着我们进入刚刚下载的两个文件所在的文件夹(如C:\Downloads)
cd C:\Downloads
然后接着输入下面一行安装指令即可
pip install --no-index --find-links="%CD%" pymol_launcher-2.1-cp38-cp38-win_amd64.whl
这个时候PyMOL开源版本就已经安装好了,输入下面的指令即可运行
pymol
假如这个Anaconda prompt的窗口关闭了,需要再次使用pymol的时候,则需要先加载pymol的环境然后运行pymol
conda activate pymol
pymol
B.2) 在Linux下 在Linux的不同发行版中,我们可以利用系统自带的包管理工具一键安装开源版的PyMOL,非常方便。比如在ubuntu中,我们可以使用
sudo apt-get install pymol
在centos中,可以使用
sudo yum --enablerepo=epel install pymol
其他的发行版可以参见
https://pymolwiki.org/index.php/Linux_Install
B.3)在Mac下 需要先安装MacPorts环境,见
https://www.macports.org/install.php
安装完毕后打开终端,输入
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文件可以通过自写脚本的方式从量子化学、第一性原理计算程序的振动分析结果里面提取相应的信息 来制作。下面以这个二氧化碳分子为例,介绍其文件格式。
#之后的文字为注释,在实际情况下不存在。
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