談談記錄化學體系結構的xyz文件
談談記錄化學體系結構的xyz文件
文/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://www.shanxitv.org/attach/477/Aspartame7.xyz。打開文件可見,只要把每個構象的xyz信息簡單合并到一起就成了多幀xyz文件。這個文件是此文里做構象搜索產生的:《gentor:掃描方式做分子構象搜索的便捷工具》(http://bbs.keinsci.com/thread-2388-1-1.html)。
xyz文件是自由格式,也就是整數位和小數位隨意,所以手寫也很簡單。而且坐標記錄精度想多高就多高,多留一些小數位數即可。
有很多程序都可以直接載入xyz文件來可視化。比如Multiwfn(http://www.shanxitv.org/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://www.shanxitv.org/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://www.shanxitv.org/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://www.shanxitv.org/252)、《使用Multiwfn計算分子的長寬高以及顯示分子的主軸》(http://www.shanxitv.org/426)、《談談分子體積的計算》(http://www.shanxitv.org/102)、《談談分子半徑的計算和分子形狀的描述》(http://www.shanxitv.org/190)。
? 筆者開發的xyz2QC工具可以將多幀xyz文件轉化成含有多步任務的Gaussian程序輸入文件,見http://bbs.keinsci.com/thread-12468-1-1.html。此程序在《詳談使用Gaussian做勢能面掃描》(http://www.shanxitv.org/474)一文中被充分利用。
? 筆者開發的GauIRC2xyz工具可以將Gaussian跑的IRC軌跡轉換為xyz格式,詳見http://www.shanxitv.org/285。這樣就可以充分利用VMD的靈活和強大對IRC進行分析和繪圖。比如《談談溫度、壓力、同位素設定對量子化學計算結果產生的影響》(http://www.shanxitv.org/423)一文中的IRC過程中粒子運動軌跡疊加圖就是通過把IRC這樣導入VMD繪制的。而且,轉換為xyz的軌跡后可以順利載入到CYLView,從而可以繪制獨特的IRC動畫,詳見《使用CYLview繪制高質量分子結構圖和制作化學反應演示動畫(視頻演示)》(http://www.shanxitv.org/453)。
? 筆者開發的MOPAC2XYZ工具可以將專門做半經驗量子化學計算的MOPAC的幾何優化任務的輸出文件轉換為多幀xyz文件,從而可以用VMD觀看優化過程,見http://www.shanxitv.org/212。
? M$極度不靈活,且顯示效果和VMD相比巨差。筆者在《將Material Studio的xtd軌跡文件導出為xyz軌跡文件的方法》(http://www.shanxitv.org/143)一文中介紹了怎么將M$的軌跡轉化成xyz軌跡,這使得M$的用戶也能利用VMD的靈活和強大性去分析處理軌跡。
? Grimme開發的dftd3、dftd4、xtb等程序都可以以xyz文件作為輸入文件運行。參看《將Gaussian與Grimme的xtb程序聯用搜索過渡態、產生IRC、做振動分析》(http://www.shanxitv.org/421)、《DFT-D4色散校正的簡介與使用》(http://www.shanxitv.org/464)、《DFT-D色散校正的使用》(http://www.shanxitv.org/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文件中載入晶胞信息。