• 談談VMD可視化程序的連接關系的判斷和設置問題

    談談VMD可視化程序的連接關系的判斷和設置問題

    文/Sobereva@北京科音  2020-Feb-25


    化學體系可視化程序VMD的用戶越來越多,經常有人在網上問我怎么在VMD里修改鍵連關系,這里就專門說一下這個問題。本文內容對應于撰文時最新的VMD正式版1.9.3,對其它版本可能適用也可能不適用。

    當VMD載入pdb、xyz等格式的結構文件時,程序就會自動判斷連接關系。判斷規則和Multiwfn、GaussView等程序類似,都是根據兩個原子間距離以及這兩個原子半徑之和來判斷的,參看此文的相關說明:《談談原子間是否成鍵的判斷問題》(http://www.shanxitv.org/414)。VMD里默認的line方式,以及常用的CPK、Licorice等顯示風格都是根據連接關系顯示的。

    如果兩個原子間沒有被判斷為成鍵,但你希望讓它們之間顯示鍵,就選擇Mouse - Add/Remove Bonds,然后點擊這兩個原子的正中心,它們就連上了。如果你點擊兩個已經成鍵的原子,它們之間的鍵就會被去掉。

    在你點擊原子時,VMD會自動給你點擊的原子加上標簽并顯示在圖上,如果不想顯示,就按鍵盤上的1鍵,再點擊有標簽的原子,標簽就被隱藏了。如果你想把一批標簽都隱去或者徹底刪掉,就進入Graphics - Labels,按住鼠標左鍵選中一批,然后點Hide按鈕就可以隱藏,點Delete按鈕就可以刪掉。如果想讓批量刪除標簽的操作盡可能省事,對于Windows版VMD,你可以在VMD目錄下的vmd.rc里加入如下內容
    proc da {} {
    label delete Atoms all
    }
    啟動VMD后,隨時都可以在文本窗口里輸入自定義命令da來刪除所有原子標簽。

    如果有很多同類的鍵,它們的連接關系判斷得都和你要求的不符,一個一個靠鼠標點擊來修改連接關系很麻煩。此時可以在Graphics - Representation界面里把Drawing Method改為DynamicBonds,這代表基于當前結構實時判斷成鍵并顯示,判斷閾值可以用旁邊的Distance Cutoff控件來修改,恰當改成令顯示的連接方式滿足你要求的情況即可。但這種顯示方式有個缺點就是不顯示原子球,而只顯示鍵,而且鍵是空心的,很不好看。因此為了讓原子球也顯示出來,你可以點Add Rep增加一個Representation,把Drawing Method設成VDW,并且把Sphere Scale改小到合適。

    有的時候在用DynamicBonds方式顯示時,通過調節Distance Cutoff雖然讓A-B之間鍵連方式滿足要求了,但同時C-D之間的連接方式變得卻與期望的不符了,這種時候就需要靈活變通,多設幾個Representation,每個都恰當用不同的選擇語句選定繪制的區域(參考《VMD里原子選擇語句的語法和例子》http://www.shanxitv.org/504),并用恰當的Drawing Method和參數設定,從而讓顯示出的效果疊加起來正好滿足你的要求。

    有的文件格式包含了連接關系信息。比如NAMD、Amber的拓撲文件都可以被VMD載入,載入的時候就相當于提供了連接關系了,之后再往這個ID里載入結構文件或軌跡時也因此都是按照拓撲文件里的連接關系來顯示。還有的結構文件格式自己也帶了連接關系段落,典型的就是mol2格式(mol格式也有,但VMD不能載入)。你用文本編輯器打開它的話,會看到@<TRIPOS>BOND字段,這部分記錄的是鍵的形式,諸如5 3 27 2就代表這是第5號鍵,對應3與27原子間的雙鍵。當VMD載入mol2格式文件的時候,就不會自動根據結構來判斷連接關系,而是直接用文件里的連接關系。pdb格式里有個CONECT字段,也是記錄連接關系用的,但是VMD并不會采用這里的連接關系。如果你想讓VMD直接利用這里的連接關系,方法看《使VMD根據pdb文件中的CONECT字段設定原子連接關系》(http://www.shanxitv.org/121)。

    在GaussView里可以編輯鍵連關系,而且從GaussView 6開始,可以自定義不同元素之間成鍵的判斷閾值,這在前述的《談談原子間是否成鍵的判斷問題》文中已經說過了。改過之后只點擊Edit - Rebond就可以按照用戶自定義的閾值重新判斷成鍵,因此在批量修改特定類型元素間的成鍵方式的時候比較方便。GaussView可以保存mol2格式的文件,里面的連接關系信息正對應于你在GaussView圖形界面里當前看到的。因此,可以先讓GaussView正確顯示出你期望的連接關系,保存成mol2文件,再用VMD讀取,此時VMD里顯示的連接關系就和GaussView里精確一致了。

    注意VMD里沒法以GaussView的風格來顯示雙鍵、三鍵等成鍵形式。比如載入VMD的mol2文件離記錄了某兩個原子間形成的是二重鍵,但在VMD的Line、CPK、Licorice顯示風格顯示時看起來和單鍵一樣。VMD的Bonds顯示風格倒是能區分形式鍵級,但雙鍵和三鍵分別是以兩個、三個套筒形式顯示的,非常難看,沒實際意義。

    VMD自身也可以保存mol2文件,因此你在VMD里通過Add/Remove bonds好不容易把連接關系改合適后,不妨通過File - Save coordinate功能保存成mol2文件,以后再次顯示時就免得再修改一遍了。

    常有人問我怎么載入動力學軌跡后,雖然第一幀的成鍵方式正確,但播放軌跡時成鍵方式有時連得亂七八糟,甚至跨越盒子。這是因為如前所述,連接關系要么是從拓撲文件里讀取的(比如看Amber軌跡前要載入拓撲文件),要么是載入結構文件時自動判斷的(比如看GROMACS軌跡前通常要載入與模擬體系原子信息對應的gro或pdb文件),或者是根據軌跡文件的第一幀結構判斷的(比如載入molclus、xtb程序產生的多幀xyz文件),之后再載入軌跡或播放軌跡時都不會改變連接關系。由于動力學過程中可能發生分子解離、異構化,或者由于周期邊界條件的原因分子時而完整時而被盒子截斷,因此內存里記錄的連接關系列表可能對于軌跡的某些幀并不適用,極度影響正常觀看。像這種情況,可以用DynamicBonds顯示方式,這樣就會按照當前幀的坐標實時判斷成鍵并顯示(但并不會改寫內存里的連接關系列表);但如果你想用其它顯示方式,就得讓VMD根據當前這一幀的結構重新判斷連接關系并改寫內存里的連接關系列表,做法是在文本窗口輸入mol bondsrecalc all; topo retypebonds。此時連接關系就是滿足當前這一幀的情況了,而對其它幀可能就不適合了。為了方便,你可以定義重新判斷連接關系的快捷鍵,甚至可以讓VMD自動對每一幀實時判斷連接關系,做法見《VMD初始化文件(vmd.rc)我的推薦設置》(http://www.shanxitv.org/545)。

    如果你想把當前內存里的連接關系列表以文本方式顯示出來,就在文本窗口輸入[atomselect top all] getbonds,輸出的信息比如
    {1 2 3 4 7} 0 0 0 {5 6 7 0} 4 4 {4 0}
    這是個列表,里面共有8個成員(有的成員自身就是個列表),對應體系一共8個原子的成鍵情況,比如第0號原子與1、2、3、4、7成鍵,第2號原子與第0號原子成鍵,第3號原子也與第0號原子成鍵...注意這體現的是連接關系,而非鍵級。

    連接關系也可以從自行提供的列表里讀取。比如運行
    [atomselect top all] setbonds {{1 2 3 4 7} 0 0 0 {5 6 7 0} 4 4 {4 0}}
    就代表把當前體系的連接關系改成{1 2 3 4 7} 0 0 0 {5 6 7 0} 4 4 {4 0}所定義的。

    久久精品国产99久久香蕉