• 在VMD程序里對不同元素的原子用不同顏色顯示的方法

    在VMD程序里對不同元素的原子用不同顏色顯示的方法

    文/Sobereva@北京科音

    First release: 2021-Nov-11  Last update: 2022-Sep-16


    1 前言

    之前筆者寫了大量的將Multiwfn與VMD相結合的文章,比如《使用IRI方法圖形化考察化學體系中的化學鍵和弱相互作用》(http://www.shanxitv.org/598)、《使用Multiwfn+VMD快速地繪制靜電勢著色的分子范德華表面圖和分子間穿透圖》(http://www.shanxitv.org/443)、《用VMD繪制藝術級軌道等值面圖的方法》(http://www.shanxitv.org/449)等等,并且做法已被大量同行所使用,令VMD被量子化學的研究者們用得也越來普遍,并有越來越多的人在思想家公社QQ群和計算化學公社論壇里問我VMD的使用問題。其中有一個問題被問得越來越頻繁,已經成了半周經問題,也就是怎么對不同元素的原子用不同顏色顯示。為了免得老得重復回答,特此寫一個小文章專門說一下這事。本文的情況是針對VMD 1.9.3版而言的,其它版本的情況可能相同也可能不同。

    筆者還有一篇文章介紹了怎么讓VMD對元素的著色和另一個流行的可視化程序GaussView相同,建議閱讀,見《在VMD中使用GaussView的元素著色的方法》(http://www.shanxitv.org/652)。


    2 name和element屬性

    VMD里每個原子都有各種屬性。name和element在VMD里是每個原子的兩種不同的屬性,name是原子的名字,element是元素周期表里的元素符號(第一個字母大寫,第二個小寫)。在VMD的文本窗口中,輸入[atomselect top all] get name命令可以列出當前體系里所有原子的name,輸入[atomselect top all] get element命令可以列出當前體系里所有原子的element,都是按原子序號順序輸出。


    3 不同格式的文件記錄的信息

    不同輸入文件提供給VMD的信息是不一樣的,這里對幾種典型的文件來說一下。

    ? xyz文件:介紹見《談談記錄化學體系結構的xyz文件》(http://www.shanxitv.org/477)。在標準的xyz文件中,第一列是每個原子的元素符號。將xyz文件載入VMD后,name和element屬性值都是元素符號。

    注意有些xyz文件不標準,里面記錄的是原子名而非元素符號,比如VMD載入gro文件后直接保存出來的xyz文件里就是原子名。這樣的xyz文件載入VMD后name屬性值是文件里記錄的原子名,element會根據原子名里面的字母部分去猜。比如原子名是HG3的話會被認作汞,因此element被設為Hg。如果猜不出來,比如原子名是CG,則element屬性將為X。注意VMD這么猜元素很容易猜錯,比如alpha碳在氨基酸里的標準原子名是CA,如果xyz文件里記錄的是原子名,VMD就會把它視為是鈣,從而令element屬性值為Ca。

    ? gro文件:即GROMACS的結構文件。里面對每個原子記錄的是原子名,比如氨基酸里面的碳可以有CA、CB、CG、CG1等等原子名。載入VMD后,name就是這些原子名,而element皆為X。

    ? mol2文件:同上。

    ? pdb文件:在標準的pdb文件中,第三列是原子名,最后一列是元素符號。因此,pdb文件載入VMD后可以給VMD分別提供name和element信息,因此element不用根據原子名猜了。但是有些pdb文件不規矩,沒有記錄元素符號的最后一列,這樣的pdb文件載入后element就都為X。

    ? cub文件:cub文件經常通過VMD程序繪制成等值面圖,見比如《在VMD里將cube文件瞬間繪制成效果極佳的等值面圖的方法》(http://www.shanxitv.org/483)。如《Gaussian型cube文件簡介及讀、寫方法和簡單應用》(http://www.shanxitv.org/125)所述,此文件里沒記錄原子名,但記錄了各個原子的元素在周期表里的序號。此文件載入VMD后,name和element屬性都為元素符號。

    還值得一提的是VMD里每個原子還有個type屬性,記錄的是原子類型,可以用[atomselect top all] get type命令查詢。諸如amber的拓撲文件prmtop里記錄了原子類型,mol2格式也記錄了原子類型(但很多程序輸出的mol2文件里原子類型和元素符號相同),因此載入后type屬性就是文件里記錄的原子類型。而xyz、gro、pdb格式里沒記錄原子類型,載入后type屬性值會和name相同。cub格式里也沒記錄原子類型,載入后type、name和element都相同。


    4 對原子的著色設置

    這里以氯仿為例進行說明,此分子的pdb文件可以在http://www.shanxitv.org/attach/624/CHCl3.pdb下載。

    將它載入VMD后,在Graphics - Representation里把Drawing method改為CPK,目前看到的是下圖

    可見,碳和氯的顏色完全一樣,都是青色。為什么沒有區分開?原因很簡單,如上圖所見,Coloring method目前是默認的Name,即根據原子的name屬性決定顏色。我們來看一下當前著色用的顏色定義。進入Graphics - Colors,在Categories里選Name,點擊C,然后看到下圖

    如圖可見,當前根據name進行著色時并不區分C和Cl,只要首字母是C就都按用cyan顏色著色。

    如果想按照元素來著色,就在Graphics - Representation里把Coloring method改為Element,此時圖像如下,可見氯和碳的顏色區分開了

    氯用棕色明顯不好看。我們要把它改為常用的綠色,就進入Graphics - Colors,在Categories里選Element,點擊Cl,再選green,此時如下圖所示

    如果想微調green顏色的具體色彩定義,可以在上圖的Color Definitions標簽頁下方修改紅、綠、藍三種顏色分量的大小。

    記住,只有載入的是pdb、xyz這樣能直接給VMD提供元素信息的輸入文件,才能像上面這樣按照element屬性來著色。而用比如gro文件的時候,由于不能提供元素信息,就只能按照name來著色了。如果你是GROMACS用戶又想按元素著色,就得把gro轉成比如pdb格式,按照pdb格式規范在合適的列上補上元素信息后再載入;或者用比如gmx editconf -f md.tpr -o md.pdb把tpr文件轉成pdb文件,由于tpr文件里本身有元素信息,所以這樣得到的pdb文件里最后一列直接記錄了元素信息(順帶一提,之后你可以刪除當前僅有的一幀,然后再往這個體系中載入gro文件或軌跡文件,此時載入的只有坐標,而元素信息還是載入pdb時提供給VMD的)。


    5 設置默認著色方式

    如果你想將element作為默認著色方式,并且Cl元素默認用綠色,免得每次在VMD里還得如上操作一遍,可以在vmd.rc文件末尾加入以下兩行
    mol default color Element
    color Element Cl green
    每次啟動VMD后就會自動執行這兩條命令修改默認設置。如果不了解vmd.rc文件的話,看《VMD初始化文件(vmd.rc)我的推薦設置》(http://www.shanxitv.org/545)。

    另外,如果你想默認用CPK方式顯示體系結構,在vmd.rc末尾還可以再加上mol default style CPK。

    還值得一提的是VMD有個colordefs.dat文件,記錄了默認的著色用的規則。對于Windows版,此文件在VMD目錄下的scripts\vmd目錄下;對于Linux版,如果安裝到了默認目錄,此文件在/usr/local/lib/vmd/scripts/vmd目錄下。用文本編輯器打開此文件可以看到

    Name   H   white
    Name   O   red
    Name   N   blue
    Name   C   cyan
    Name   S   yellow
    Name   P   tan
    Name   Z   silver
    ...略
    Element C  cyan
    Element Ca ochre
    Element Cd ochre
    Element Ce ochre
    Element Cf ochre
    Element Cl ochre
    Element Cm ochre
    ...略

    你可以直接在colordefs.dat里修改按照name著色、按照element著色時默認的色彩,比如可以把Element Cl ochre改為Element Cl green使得程序按照element著色時對Cl元素默認用綠色。這里設置的優先級低于自己在vmd.rc末尾添加諸如color Element Cl green這樣的設置命令。

    久久精品国产99久久香蕉