使用Multiwfn一鍵批量產生各類光譜圖(含演示視頻)
本文配有操作演示視頻,強烈建議一看:https://www.bilibili.com/video/av50818216
使用Multiwfn一鍵批量產生各類光譜圖
文/Sobereva@北京科音 2019-Apr-29
0 前言
如果讀者還沒看過《使用Multiwfn繪制紅外、拉曼、UV-Vis、ECD、VCD和ROA光譜圖》(http://www.shanxitv.org/224)請先看此文。波函數分析程序Multiwfn具有非常強大的光譜繪制功能,本文目的是介紹一個小技巧,使用批處理文件,僅通過一條命令就令Multiwfn把當前目錄下所有輸入文件轉化為光譜圖。這里說的輸入文件是指Multiwfn繪制光譜圖的功能支持的輸入文件,比如Gaussian、ORCA等程序的電子激發計算、振動分析任務的輸出文件等,詳見上面提到的文章。
Multiwfn可在主頁http://www.shanxitv.org/multiwfn免費下載,讀者務必使用2019-Apr-28及之后更新的程序包,否則沒有本文中提到的文件。
在程序包的examples\spectra\indigo目錄下有四個.out文件,都是Gaussian使用不同級別做電子激發計算的輸出文件,我們以這四個文件為例,說明怎么一下子就把它們都轉化成UV-Vis光譜圖像文件。
1 在Windows下運行
這里首先假設讀者用的是Windows版。將四個.out文件都拷到Multiwfn目錄下,然后把examples\spectra目錄下的UV-Vis.txt和batchspec.bat也拷到Multiwfn目錄下。然后把Multiwfn目錄下的settings.ini里的isilent設為1并保存文件。直接雙擊batchspec.bat,馬上當前目錄下就出現了四個與輸入文件同名的png文件,是UV-Vis譜的圖像文件,可見極其方便!
原理是什么?首先看batchspec.bat,這是一個Windows下的批處理文件,點擊右鍵選編輯,就可以看到以下內容
for /f %%i in ('dir *.out /b') do (
Multiwfn %%i < UV-Vis.txt > NUL
rename DISLIN.png %%~ni.png
)
其中dir *.out顯示當前目錄下所有.out文件,利用for循環將每個文件名依次賦值給%%i,并對每個文件調用當前目錄下的Multiwfn程序按照UV-Vis.txt文件里記錄的指令進行處理。由于輸出在屏幕上的信息不是我們需要的,所以將這些信息重定向到NUL,它相當于是個垃圾桶,定向到里面的信息都會消失不見。Multiwfn每次處理完一個文件后,會在當前目錄下產生DISLIN.png文件,為了讓文件名與輸入文件相同,因此用rename重命名一下,%%~ni的寫法代表把%%i變量記錄的文件名的后綴去除。
再來看記錄了在Multiwfn里輸入的指令的UV-Vis.txt文件,內容如下,每一行對應在Multiwfn里敲入的一次指令,//后面是注釋。如果還有不理解的,啟動Multiwfn載入任意一個out文件,照著里面的命令敲一遍就肯定懂了
11 //光譜繪制功能
3 //繪制UV-Vis
0 //顯示一次光譜,否則之后無法修改縱坐標
3 //修改橫坐標設定
150,850,100 //初值,終值,步長
4 //修改左側坐標軸(對應摩爾吸收系數)
0,45000,5000 //初值,終值,步長
y //對右側縱坐標做相應的縮放/平移
5 //修改右側坐標軸(對應振子強度)
0,1.0,0.1 //初值,終值,步長
n //不對左側坐標軸做相應的縮放/平移
1 //產生圖像文件
由于在選擇選項0的時候光譜會在屏幕上彈出來,因此要把settings.ini里的isilent設為1使程序處于安靜模式,這樣就不會蹦出圖像,免得到時候還得手動關閉了。
可見批量調用Multiwfn繪制光譜的機理非常簡單易懂,想改什么,只要改相應內容就行了。一般需要改的就是坐標軸范圍,可以先跑一下,發現范圍不合理的話,改一下UV-Vis.txt里的坐標軸設置然后重新跑即可。
在examples\spectra目錄下還有個IR.txt。如果你把此文件拷到Multiwfn目錄,把batchspec.bat里的UV-Vis.txt改為IR.txt,那么雙擊batchspec.bat時就會把當前目錄下所有.out文件轉化為紅外光譜的圖像文件。IR.txt的內容就不再解釋了,因為只要照著IR.txt里的指令在Multiwfn里敲一遍,對照屏幕上的提示,馬上就能理解其中的內容。
想用Multiwfn批量繪制其它類型的光譜,如ROA、Raman、VCD、ECD、光電子譜,只要自己創建個記錄了繪制命令的.txt文件,按照上述過程使用它來批處理即可。
2 在Linux下運行
如果你用的是Linux版Multiwfn,也想這樣通過批處理繪圖的話,先按照Multiwfn手冊2.1.2節的步驟以正規方式安裝Multiwfn,把examples\spectra中的batchspec.sh、UV-Vis.txt以及要繪圖的文件都拷到當前目錄下,然后在終端里輸入./batchspec.sh運行之即可。如果提示沒有可執行權限,先運行一下chmod +x ./batchspec.sh。
batchspec.sh是個Bash shell的腳本,內容為:
#!/bin/bash
for inf in *.out
do
Multiwfn ${inf} < UV-Vis.txt > /dev/null
mv -f dislin.png ${inf//out/png}
done
可見和batchspec.bat的內容大同小異,只不過命令改為了Linux下的情況。${inf//out/png}代表把$inf變量記錄的文件名的out后綴替換為png。
為了用起來更方便,讀者還可以把batchspec.sh和UV-Vis.txt放到比如/sob目錄下,把./batchspec.sh里的UV-Vis.txt改為/sob/UV-Vis.txt,然后在~/.bashrc文件里增加一行
alias UV='/sob/batchspec.sh'
alias gUV='gedit /sob/UV-Vis.txt'
重新進入終端后,只要某個目錄里有比如Gaussian的電子激發任務的輸出文件,就在這個目錄下運行UV命令即可將它們全都瞬間轉化為UV-Vis光譜文件。如果發現坐標范圍不合適,輸入gUV命令就可以啟動gedit編輯UV-Vis.txt的內容。
3 總結
希望讀者舉一反三,效仿本文的運行方式,使得Multiwfn實現其它任務的批量處理。筆者的很多與Multiwfn有關的博文都充分利用了批處理文件,比如《使用Multiwfn做空穴-電子分析全面考察電子激發特征》(http://www.shanxitv.org/434)、《使用Multiwfn做自然躍遷軌道(NTO)分析》(http://www.shanxitv.org/377)、《使用Multiwfn繪制躍遷密度矩陣和電荷轉移矩陣考察電子激發特征》(http://www.shanxitv.org/436)、《通過鍵級曲線和ELF/LOL/RDG等值面動畫研究化學反應過程》(http://www.shanxitv.org/200)等等,讀者可參考之,寫出功能更強的批處理腳本。