很多年前接觸過一點Asymptote矢量圖語言,但是不如現(xiàn)成的分子結(jié)構(gòu)程序方便,于是就壓箱子底下了。最近突然把Asymptote又拿出來,主要有以下幾個原因:
1,顯示分子的振動模式。雖然不少程序都可以做,但是如果遇到高對稱分子,振動矢量的箭頭往往和分子鍵重合在一起。稍微好點的程序,允許把分子鍵設(shè)定得非常細(xì),雖然振動箭頭突出了,但是卻很難看。而且箭頭的控制參數(shù)太少。例如下面這個圖,已經(jīng)是能得到的最好結(jié)果了
![用Asymptote產(chǎn)生3D PDF格式的分子結(jié)構(gòu)圖]()
2,能夠顯示振動模式的程序一般都是針對特定數(shù)據(jù)格式設(shè)計的(例如Gaussian的輸出,fchk文件),在其他程序里照抄這些格式是不可能的。比較簡單,又被廣泛接受的振動模式數(shù)據(jù)格式,大概只有MOLDEN頻率文件了。但是能夠讀MOLDEN文件的程序很少,更何況振動模式的顯示效果不好。
3,需要用腳本批量產(chǎn)生一堆結(jié)構(gòu)圖(可能幾十個甚至上百個),比如做動畫。如果用鼠標(biāo)逐個去操作,會累死人的。
4,產(chǎn)生真3D的PDF文件。用免費程序Jamberoo/VMD/Pymol也可以做。
經(jīng)過幾天的學(xué)習(xí),以及參考別人的例子,上面的問題用Asymptote很快就得到解決。
(一)Asymptote的安裝
在Windows下安裝
Asymptote需要大量的Latex編譯工具和宏包支持。如果你對此不太了解,比較省事的一種辦法,是去下載最新的CTeX
http://www.ctex.org/CTeXDownload
然后安裝CTeX。
由于CTeX已經(jīng)兩年多沒有升級,有些宏包和最新的Asymptote有沖突,需要升級到最新版(在下一個CTeX發(fā)布版可能就不需要這一步了):打開CTeX中的WinEdt程序,在TeX菜單中找到MiKTeX/Update Wizard,找到以下幾個宏包,把它們升級到最新:babel,media9,l3experimental(第一個字符是字母,不是數(shù)字。,l3kernel,l3packages。注意:第一次升級可能會安裝一些重要的宏包,用戶指定的那些宏包會被忽略,因此可能要多次進行升級操作。
接下來到Asymptote主頁http://asymptote.sourceforge.net/
下載并安裝最新版Asymptote,然后就可以用了。
在Linux下安裝
最好在版本比較新的主流Linux系統(tǒng),并且自己有管理員權(quán)限的計算機上安裝。大型服務(wù)器不是庫函數(shù)版本低就是缺東西,盡量別在上面裝。我用的是Ubuntu,運行以下命令
sudo apt-get install asymptote
然后輸入密碼,接下來等著系統(tǒng)自動下載和安裝Asymptote。
在MacOSX下安裝
目前不提供二進制的可執(zhí)行程序。需要編譯源代碼,很簡單。
(二)Asymptote學(xué)習(xí)資料
除了Asymptote主頁上的使用手冊外,有以下中文資料可以參考:
三個比較早的教程
https://code.google.com/p/asy4cn/
莫圖寫的Asymptote 作圖指南,時間也比較早了
http://bbs.ctex.org/forum.php?mod=viewthread&tid=44559&extra=page%3D1
asymptote 經(jīng)驗筆記
http://bbs.ctex.org/forum.php?mod=viewthread&tid=76552&extra=page%3D1
遇到問題,除了在Asymptote的英文官方論壇求助外,也可以去ctex.org的TeX 圖形技術(shù)版去討論:
http://bbs.ctex.org/forum.php?mod=forumdisplay&fid=51&page=1
(三)一個Asymptote程序
Asymptote的語法和格式有點類似于c或c++程序。
以下是一些用到的命令: 調(diào)用3D模塊 調(diào)用顏色庫模塊 定義一個實變量。 Rbond是自己起的名字,設(shè)定分子的鍵長。注意Asymptote并不知道波爾、埃這些長度單位,而是使用數(shù)據(jù)點單位。我們可以假定206代表了2.06埃。 定義一個三元數(shù)組。atom1是自己起的名字,表示第一個原子的直角坐標(biāo)。 定義第二個原子的坐標(biāo),等于第一個原子在Z方向做位移。Z是系統(tǒng)變量。 定義一個球面代表原子,這里是氙。unitsphere函數(shù)定義了系統(tǒng)內(nèi)置的單位球。scale3函數(shù)把球縮放。surface命令表示把這樣的一個曲面賦值給xe_atm,默認(rèn)有光照效果。 畫一個xe_atm變量所定義的原子,位置由atom1定義,顏色為淺藍。lightblue是x11colors模塊內(nèi)定的顏色變量。 畫一條線,連接兩個點atom1和atom2,用來表示分子鍵。鍵的顏色是淺灰(mediumgray),linewidth定義鍵的粗細(xì)。為了更好地顯示振動模式,這里把分子鍵設(shè)為半透明,用opacity定義。最后一個參數(shù)currentlight是可選的,用于打開光照效果,draw默認(rèn)沒有光照效果。在3D情況下,Asymptote可以自動計算原子球和分子鍵相交位置的曲線,用戶不用操心。 label命令用于給圖形添加符號。在引號中可以使用Latex語法,因此可以在圖中添加復(fù)雜的數(shù)學(xué)公式,這是大多數(shù)分子模型程序做不到的。符號的位置在atom1。c_align是我們自定義的一個位移變量,把符號從atom1移動一點,否則符號會被原子球包住,什么也看不到。 畫一條線(在這里表示箭桿),起始點的位置分別是atom1和atom1+lmod1。red定義了顏色,是可選的。size_shaft是我們自己定義的箭桿粗細(xì)。Arrow3函數(shù)用來給箭桿的終點添加3D箭頭,所帶的兩個參數(shù)是可選的,分別定義箭頭的長度和寬度。currentlight給箭頭、箭桿添加光照效果,是可選的。
完整的代碼如下: 如果經(jīng)常用Asymptote顯示分子,可以把一些常用的命令做成宏,使代碼更簡短。
把上面的代碼存成一個文件,擴展名為.asy,例如test.asy。用以下命令可以編譯test.asy:
asy test.asy
在Windows下,也可以用鼠標(biāo)直接雙擊test.asy文件。
之后會跳出一個圖形窗口,用鼠標(biāo)把分子轉(zhuǎn)動到合適的角度,縮放到合適的大小,按一下鍵盤上的“e”,就會產(chǎn)生eps格式的圖形文件。效果圖如下:
![用Asymptote產(chǎn)生3D PDF格式的分子結(jié)構(gòu)圖-1]()
但是這個文件僅僅是一個打印屏幕后的圖片,并不是3D圖。要產(chǎn)生3D PDF文件,可以用以下命令編譯:
asy -f pdf test.asy
用adobe acrobat打開產(chǎn)生的pdf文件,會發(fā)現(xiàn)里面的分子模型可以用鼠標(biāo)旋轉(zhuǎn)和縮放。見附件。
其他參數(shù):
-noprc:跟-f pdf合用,在保存pdf文件的時候關(guān)閉3D功能。
-render=n(n=1,2,3,4,...,8):調(diào)分辨率。n=0會得到2D的投影矢量圖,不過效果很差。
-noV:禁止Asymptote自動打開圖形窗口和pdf文件。如果計算機太慢,或者用腳本做批量輸出的時候,可以加上這個選項。此時分子的視角是個問題,需要在程序中用perspective函數(shù)事先設(shè)定,參見上面的代碼。
除了顯示分子模型以外,Asymptote還可以繪制晶體結(jié)構(gòu),輸出3D電子密度和分子軌道,等等。在Asymptote主頁和中文教程中可以找到這方面的例子。 |