本文的操作是在VMD 1.8.6中進(jìn)行。
想作出下面的圖嗎? 想讓體系中的原子在每一幀都可以按某一屬性(能量、位移、破壞程度等等)進(jìn)行著色嗎? 那就閱讀本文吧! 只要是對原子根據(jù)某一數(shù)值進(jìn)行著色,本文的方法都可以實(shí)現(xiàn),對單幀或多幀都適用。
一、準(zhǔn)備數(shù)據(jù)文件 1、首先是需要用來著色的軌跡文件,單幀或多幀的都行,文件名為dump.pdb 這里要說明一下:文件名的后綴必須是VMD能識別的,建議使用pdb格式或xyz格式的(VMD默認(rèn)就能打開的格式),后面會解釋為什么。
得到pdb格式或xyz格式的方法: 打開VMD,成功導(dǎo)入軌跡文件或分子文件,VMD main窗口,fileàsave coordinates Selected atoms 選擇 all;File type選擇 pdb,或xyz。Frames下面用默認(rèn)的就行。 格式轉(zhuǎn)換后的文件存在VMD的安裝主目錄下(我的是C:\Program Files\University of Illinois\VMD)。
2、其次為用于給原子著色的數(shù)據(jù)文件,就是想讓原子按哪些數(shù)值顯示顏色,命名為user.da 數(shù)據(jù)文件的名字無所謂,但其格式有要求,數(shù)據(jù)文件里的數(shù)值只有單一的一列,而且從第一個值到最后一個值必須與軌跡文件中的原子一一對應(yīng),數(shù)值之間不能空行,例如: dump文件的數(shù)據(jù)如下: ITEM: TIMESTEP 0 ITEM: NUMBER OF ATOMS 20514 ITEM: BOX BOUNDS -0.0001 0.8001 -0.0501 0.2001 -0.1001 0.1001 ITEM: ATOMS 1 Si 0.000124969 0.00039968 0.0004995 2 Si 0.0126218 0.00039968 0.0004995 3 Si 0.0251187 0.00039968 0.0004995 4 O 0.0376156 0.00039968 0.0004995 5 O 0.0501125 0.00039968 0.0004995 6 O 0.0626093 0.00039968 0.0004995 7 O 0.0751062 0.00039968 0.0004995 8 O 0.0876031 0.00039968 0.0004995 9 O 0.1001 0.00039968 0.0004995 10 Si 0.112597 0.00039968 0.0004995 … …
那么user.da 10 20 30 40 50 60 70 80 90 100 … … user.da
用于著色的數(shù)值如果是在dump文件中一同輸出的,可以使用Linux下的awk, grep等命令提取出來,這個自己處理。
二、tcl腳本操作 1、將上面的軌跡文件dump.pdb和用于著色的數(shù)據(jù)文件user.da 2、進(jìn)入tk控制臺 VMD Mainà Extensionsà TK Console 3、載入tcl腳本 腳本內(nèi)容:
set file dump.pdb #設(shè)置file變量為軌跡文件dump.pdb mol new $file waitfor all #導(dǎo)入file指向的分子文件,并等待直到導(dǎo)入所有原子 set numframes [molinfo top get numframes] #設(shè)置numframes變量為計(jì)算分子幀數(shù)的值 set numatoms [molinfo top get numatoms] #設(shè)置numatoms變量為計(jì)算分子中原子的個數(shù) set sel [atomselect top all] #設(shè)置sel變量為分子編號為top的值,這個就不用管了 set fp [open "user.da #下面開始處理循環(huán) for {set i 0} {$i<$numframes} {incr i} { #從0幀開始循環(huán) $sel frame $i set ulist "" #建立名字為ulist的表,表為空 puts "setting user values for frame [$sel frame].." #輸出處理到哪一幀,便于查錯 for {set j 0} {$j<$numatoms} {incr j} { #循環(huán)每一個原子 animate goto $i #轉(zhuǎn)到第i幀,這個不用管了 gets $fp line #從fp變量中讀入一行值,就是讀入user.da lappend ulist $line #將該值放入表ulist中 } #內(nèi)循環(huán)結(jié)束 $sel set user $ulist #對所有原子使用表中的值作為user域 } #外部循環(huán)結(jié)束 $sel delete #結(jié)束,刪除sel變量
有兩種方法載入腳本 (1)手動輸入腳本 如果是從VMD main 的file中導(dǎo)入的軌跡文件,那么腳本就從第三行輸入,每輸一行按一下確認(rèn),操作下去。因?yàn)槭鞘謩訉?dǎo)入的軌跡,就不需要將軌跡文件放到主目錄下,對軌跡文件的格式也沒特別要求了,只需成功導(dǎo)入完畢就行。但user.da (2)自動完成 由于是自動導(dǎo)入并處理的,所以要求軌跡文件格式為VMD的默認(rèn)格式,否則不能正常進(jìn)行下去。如果你不確定是不是默認(rèn)的格式,就按前面的方法轉(zhuǎn)換成pdb格式或xyz格式文件。根據(jù)你的文件名和格式修改一下腳本內(nèi)容,軌跡文件名替換腳本中的”dump.pdb”關(guān)鍵字,數(shù)據(jù)文件名替換”user.da 將修改好的腳本文件也一同拷貝到VMD主目錄下,腳本文件名為user.tcl,然后在tk console中輸入 source user.tcl #導(dǎo)入user.tcl腳本 按下Enter鍵就OK了。 這個時候雖然處理完了,還需要VMD窗口調(diào)整顯示才能最終完成,請看下面的。
三、顏色的顯示 這一步也非常重要!請仔細(xì)閱讀: 在VMD Main中,GraphicsàRepresentations 在Draw style 欄中,Coloring Method選擇“user”,如下圖: 在Trajectory欄中,勾選“update color every frame” Color Scale Da 顯示的顏色可以在VMD Mainà GraphicsàColoràColor scale中調(diào)整。 完成這個著色后,就可以通過create Rap 隨意做其它顯示了. |
|