谈谈记录化学体系结构的xyz文件

谈谈记录化学体系结构的xyz文件

Introduction to the xyz file recording chemical structures

文/Sobereva@北京科音

First release: 2019-Apr-26  Last update: 2023-Jun-14


xyz是一种非常常用的记录化学体系结构的文件格式,定义极其简单。笔者开发的好多程序,以及其它计算化学程序经常涉及这个格式,网上老有初学者问这文件怎么回事、怎么产生,遂在这里统一介绍一下。


1 xyz文件的定义

xyz是文本型文件,可以用文本编辑器打开。以下是一个典型的.xyz文件内容,记录水分子结构。

     3
 Generated by Multiwfn
O      -0.00000000     -0.00000000      0.11930801
H       0.00000000      0.75895306     -0.47723204
H      -0.00000000     -0.75895306     -0.47723204

第一行是原子数;第二行是标题,内容随意;后面是各个原子的元素名以及X、Y、Z坐标,单位是埃。

xyz文件可以记录多帧信息,各帧的原子数通常应当相同。比如这个文件记录了阿斯巴甜的7个构象:http://sobereva.com/attach/477/Aspartame7.xyz。打开文件可见,只要把每个构象的xyz信息简单合并到一起就成了多帧xyz文件。这个文件是此文里做构象搜索产生的:《gentor:扫描方式做分子构象搜索的便捷工具》(http://bbs.keinsci.com/thread-2388-1-1.html)。

xyz文件是自由格式,也就是整数位和小数位随意,所以手写也很简单。而且坐标记录精度想多高就多高,多留一些小数位数即可。

有很多程序都可以直接载入xyz文件来可视化。比如Multiwfn(http://sobereva.com/multiwfn)、VMD(http://www.ks.uiuc.edu/Research/vmd/)、CYLView、Chimeria、ChemCraft、VESTA等等,而常用的Chem3D(至少对于16.0)、GaussView(至少对于6.0.16)、M$(至少对于2018)不支持。

正因为xyz格式极其简单、产生方便,特别是被观看结构效果极佳、速度极快、极度灵活且免费的VMD所支持,所以被大量计算程序、辅助工具所利用。


2 xyz文件的产生

有这些常用方法可以产生xyz文件:

(1)用GaussView建模后保存出gjf文件,然后手工改成xyz的格式。
(2)将Multiwfn支持的含有结构信息的格式载入Multiwfn,然后进入主功能100,选择子功能2,选择"2 Output current structure to .xyz file",然后输入保存的路径。Multiwfn支持的含有结构信息的文件种类极多,比如pdb、mol、mol2、xyz、fch/fchk、gjf(必须是笛卡尔坐标形式)、molden、wfn、wfx、cub等等。Multiwfn初步知识看《Multiwfn入门tips》(http://sobereva.com/167)。
(3)把VMD支持的含有结构信息的文件拖入VMD Main窗口,在VMD Main窗口里点击仅有的那一项,然后在上面点右键选Save Coordinates,File type选xyz,然后点Save并输入文件名即可。
(4)用免费的格式转换工具OpenBabel转换,比如运行obabel 1.pdb -O 1.xyz即把1.pdb转换成1.xyz。OpenBabel相关知识看《基于OpenBabel批量产生特定基团以任意方式接到苯上的结构的方法》(http://sobereva.com/440)。


3 与xyz文件有关的一些信息

xyz文件里理应记录的是元素名,但是如果用VMD程序打开分子动力学程序产生的轨迹或结构文件,保存出来的xyz文件里记录的可能是原子名,这样的xyz文件往往没法被正常读取。

多帧xyz文件可以作为记录动力学轨迹的用途,但是之所以一般动力学程序都不支持输出这个格式,主要在于此格式不够紧凑,记录同样的轨迹比起那些程序定义的私有格式体积明显大很多,载入也慢得多。用VMD载入动力学轨迹后,保存xyz文件时可以选择只保存某一帧的结构,也可以选择保存某些帧号范围的结构成为多帧xyz文件。

一些利用到xyz文件的实际例子:
• 在笔者开发的分子构象与团簇构型搜索程序Molclus(http://www.keinsci.com/research/molclus.html)中,genmer和gentor分别产生的一批团簇初始构型和一批分子构象都是通过多帧.xyz格式记录的。molclus的运行也是基于名为traj.xyz文件。
• 笔者开发的Multiwfn程序里有很多功能只需要提供结构信息,比如基于力场的能量分解、Hirshfeld surface分析、IGM分析、基于promolecular密度的NCI分析、分子体积计算、分子长宽高和直径的计算、HOMA芳香性指数的计算、配位数的计算、平均键长等等都可以用xyz格式作为输入,还有averaged NCI分析可以基于xyz轨迹进行分析。这些分析在手册相应章节和这些文章中都提了:《Multiwfn支持的弱相互作用的分析方法概览》(http://sobereva.com/252)、《使用Multiwfn计算分子的长宽高以及显示分子的主轴》(http://sobereva.com/426)、《谈谈分子体积的计算》(http://sobereva.com/102)、《谈谈分子半径的计算和分子形状的描述》(http://sobereva.com/190)。
• 笔者开发的xyz2QC工具可以将多帧xyz文件转化成含有多步任务的Gaussian程序输入文件,见http://bbs.keinsci.com/thread-12468-1-1.html。此程序在《详谈使用Gaussian做势能面扫描》(http://sobereva.com/474)一文中被充分利用。
• 笔者开发的GauIRC2xyz工具可以将Gaussian跑的IRC轨迹转换为xyz格式,详见http://sobereva.com/285。这样就可以充分利用VMD的灵活和强大对IRC进行分析和绘图。比如《谈谈温度、压力、同位素设定对量子化学计算结果产生的影响》(http://sobereva.com/423)一文中的IRC过程中粒子运动轨迹叠加图就是通过把IRC这样导入VMD绘制的。而且,转换为xyz的轨迹后可以顺利载入到CYLView,从而可以绘制独特的IRC动画,详见《使用CYLview绘制高质量分子结构图和制作化学反应演示动画(视频演示)》(http://sobereva.com/453)。
• 笔者开发的MOPAC2XYZ工具可以将专门做半经验量子化学计算的MOPAC的几何优化任务的输出文件转换为多帧xyz文件,从而可以用VMD观看优化过程,见http://sobereva.com/212
• M$极度不灵活,且显示效果和VMD相比巨差。笔者在《将Material Studio的xtd轨迹文件导出为xyz轨迹文件的方法》(http://sobereva.com/143)一文中介绍了怎么将M$的轨迹转化成xyz轨迹,这使得M$的用户也能利用VMD的灵活和强大性去分析处理轨迹。
• Grimme开发的dftd3、dftd4、xtb等程序都可以以xyz文件作为输入文件运行。参看《将Gaussian与Grimme的xtb程序联用搜索过渡态、产生IRC、做振动分析》(http://sobereva.com/421)、《DFT-D4色散校正的简介与使用》(http://sobereva.com/464)、《DFT-D色散校正的使用》(http://sobereva.com/210)。
• ORCA程序做几何优化会产生.trj文件,实际上就是xyz文件的格式,将后缀改为xyz后就可以拖入VMD中观看优化轨迹。
• 有的计算化学程序可以把体系各个振动模式的振动运动的轨迹导出成多帧xyz文件,放到VMD里播放就可以观看振动动画。


4 关于extended xyz文件

为了能够令xyz文件记录更多信息,ASE程序的开发者定义了extended xyz格式,见https://wiki.fysik.dtu.dk/ase/ase/io/formatoptions.html的相应部分。原本支持xyz文件的程序也可以读extended xyz文件,但没法载入里面额外记录的信息。

下面是一个记录Si晶胞的extended xyz文件的例子
8
Lattice="5.44 0.0 0.0 0.0 5.44 0.0 0.0 0.0 5.44" Properties=species:S:1:pos:R:3 Time=0.0
Si        0.00000000      0.00000000      0.00000000
Si        1.36000000      1.36000000      1.36000000
Si        2.72000000      2.72000000      0.00000000
Si        4.08000000      4.08000000      1.36000000
Si        2.72000000      0.00000000      2.72000000
Si        4.08000000      1.36000000      4.08000000
Si        0.00000000      2.72000000      2.72000000
Si        1.36000000      4.08000000      4.08000000

由此例可见此格式比xyz的一个关键性好处是可以用Lattice标签来记录晶胞信息,顺序是v1x v1y v1z v2x v2y v2z v3x v3y v3z,诸如v2z代表第二个晶胞矢的z分量,单位是埃。

Properties标签定义了此xyz文件包含的原子信息具体有什么。species:S:1代表species属性的数据类型是S(string),占一列。pos:R:3代表pos属性的数据类型是R(real,浮点数),占三列,显然就是对应X、Y、Z坐标。类似地,还可以用更多列记录更多信息,比如species:S:1:pos:R:3:vel:R:3:select:I:1代表用5-7列以浮点数记录vel属性(速度的X、Y、Z分量),第8列以整数记录select属性(可以对应各个原子所属残基或片段序号)。当然,也可以利用这种格式实现记录原子电荷、原子半径等信息的目的。

从上面例子还可以看到Time标签,这用来记录这一帧的时间。用户还可以自己再定义更多的标签,标签里的信息如果是带有空格的话就必须用双引号括住。

extended xyz格式和xyz一样都是自由格式,数据记录精度无上限。

Multiwfn从2023-Jun-14版开始支持从extended xyz文件中载入晶胞信息。