將分子結構圖和Multiwfn繪制的平面圖準確合并的方法
將分子結構圖和Multiwfn繪制的平面圖準確合并的方法
文/Sobereva @北京科音 2014-Dec-31
Multiwfn的主功能4可以對各種實空間函數(如電子密度、ELF、自旋密度、靜電勢等)繪制出各種類型的平面圖,尤其是填色圖和等值線圖非常常用。但這種圖中,Multiwfn只會在圖中相應位置顯示元素名或序號,不會顯示出分子結構,有時候把分子結構附上會令圖像看起來更直觀。如果作圖平面恰好是XY,YZ,XZ平面還比較好辦,但如果作圖平面是斜著的面,就得用一些技巧了,這里通過實例來說明,我們繪制CH3NH2在C-N-H這個平面上的ELF圖。本文使用的Multiwfn 3.3.6,可以從http://www.shanxitv.org/multiwfn免費下載。
2018-May-25注:從3.6版開始,在繪制平面圖(地形圖除外)的后處理菜單中增加了選項8,可以直接將化學鍵繪制成連線,見http://bbs.keinsci.com/thread-10079-1-1.html。
我們先用Gaussian計算CH3NH2的fch文件
%chk=C:\gtest\CH3NH2.chk
#p b3lyp/6-31g(d)
B3LYP/6-31G* opted
0 1
C 0.05159500 0.70381800 0.00000000
H 0.59439800 1.06209400 0.88166000
H 0.59439800 1.06209400 -0.88166000
H -0.94293100 1.18451300 0.00000000
N 0.05159500 -0.76078400 0.00000000
H -0.45830300 -1.10306000 0.81258800
H -0.45830300 -1.10306000 -0.81258800
將fch文件載入Multiwfn,在主功能0里面我們看到C-N-H平面是斜著的。
我們下面繪制C1-N5-H6這個平面的ELF等值線圖。退回到菜單,依次輸入
4
9
2
[回車]
4
1,5,6
圖像彈出后,我們看到圖中的碳上還有兩個氫的符號沒出現,這是因為它們離作圖平面太遠了。這里我們讓它們也顯示出來,這在之后在photoshop(ps)里準確定位原子位置有益(對此例其實無所謂,但對其它體系不顯示的話就可能難以在ps里定位了)。關閉圖像,選17,輸入一個很大的閾值10,這說明距離作圖平面10埃以內的原子標簽正常顯示,然后輸入y或n都行(輸入y代表距離超過閾值的原子用較細的字體顯示,n代表完全忽略掉)。選0將圖像保存為DISLIN.PNG,這幅圖主要用來在ps里定位用:
然后我們選1讓原子標簽不顯示,再次選0輸出圖像成為DISLIN_1.PNG,這幅圖之后將與分子結構圖相合并。此時Multiwfn可以關了。
之后我們要得到一個分子結構圖,令圖中C1-N5-H6這個平面和屏幕恰好精確平行。如果你覺得自己的眼力很好也有耐心,可以直接在可視化程序里仔細旋轉視角來滿足這一點,但是通常很難做到,這就會導致分子結構圖和Multiwfn作的平面圖的原子位置對應不上。筆者建議先用VMD(http://www.ks.uiuc.edu/Research/vmd/)讓C1-N5-H6這個平面恰好在XY平面上。具體做法是啟動VMD,然后載入CH3NH2的結構文件(一般用pdb或xyz文件,比如用Multiwfn的主功能100里的子功能2就可以導出這些格式),之后把以下代碼拷貝到VMD的文本窗口里來增加alignplane命令:
proc alignplane {ind1 ind2 ind3} {
set atm1 [atomselect top "serial $ind1"]
set atm2 [atomselect top "serial $ind2"]
set atm3 [atomselect top "serial $ind3"]
set vec1x [expr [$atm2 get x] - [$atm1 get x]]
set vec1y [expr [$atm2 get y] - [$atm1 get y]]
set vec1z [expr [$atm2 get z] - [$atm1 get z]]
set vec2x [expr [$atm3 get x] - [$atm1 get x]]
set vec2y [expr [$atm3 get y] - [$atm1 get y]]
set vec2z [expr [$atm3 get z] - [$atm1 get z]]
set sel [atomselect top all]
$sel move [transvecinv [veccross "$vec1x $vec1y $vec1z" "$vec2x $vec2y $vec2z"]]
$sel move [transaxis y 90]
}
然后在文本窗口里執行alignplane 1 5 6,然后選擇display-orthographic使用正交視角,此時看到C1-N5-H6恰好平行于屏幕了,此時圖中的原子位置和DISLIN.png里已精確對應了。選Display-Axes-off關閉坐標軸,graphics-representation里適當調節分子結構顯示方式。然后把圖形窗口拉大一些,選file-render,下拉框選tachyon (internal),點start render渲染出圖像。結果如下
接下來,把前面得到的DISLIN.png和DISLIN_1.png都在ps里放到一個窗口里作為兩個圖層顯示,且只讓帶標簽的那個層顯示。把VMD渲染出的圖像也弄到ps里,選擇“選擇”-“色彩范圍”,點擊圖中黑色背景,點擊“反相”復選框,這時分子結構就被選中了,復制粘貼到Multiwfn繪制的平面圖上作為新的圖層,并且把透明度低一些,這樣在定位時不會擋著原子標簽。然后用ctrl+T對其旋轉、縮放,直至原子核位置與Multiwfn平面圖的原子標簽準確對應上,比如下圖這樣
然后把帶標簽的那個圖層關閉,并且將分子結構恢復為完全不透明,就得到想要的結果了,如下所示:
還有很多技巧可以進一步改進效果,比如上圖中左下方的N-H鍵實際上是在繪圖平面下方的,因此可以用ps把這個鍵改成透明的以體現這點。這些都是零零碎碎的調整,多摸索嘗試就明白了,這里就不提了。