• 使用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)等等,讀者可參考之,寫出功能更強的批處理腳本。

    久久精品国产99久久香蕉