王明吉 倪子顏 李玉爽 姚岱男 張 政 劉 博
(東北石油大學(xué)電子科學(xué)學(xué)院)
高分辨率傳輸分子吸收數(shù)據(jù)庫HITRAN 包含用于計算和模擬光在氣體中傳輸與擴散的各種光譜參數(shù)[1],對光學(xué)研究有很大的參考價值,是光學(xué)研究者常用的工具之一。 當(dāng)前版本HITRAN2016 提供了HITRANonline 交互式互聯(lián)網(wǎng)應(yīng)用程序, 用戶可以在線查詢獲取數(shù)據(jù)。 此外,HITRAN2016 還提供了HITRAN 應(yīng)用程序編程接口 (The HITRAN Application Programming Interface,HAPI), 用戶可以對HITRANonline 提供的功能和數(shù)據(jù)進行遠程訪問。 對比HITRANonline,HAPI 擴展了過濾數(shù)據(jù)、繪制圖像、下載用戶定義的輸出數(shù)據(jù)、計算吸收和傳輸以及應(yīng)用高級線型函數(shù)等功能[2],使用起來更加方便、快捷、靈活。HAPI 是基于Python 語言的應(yīng)用程序,對于不熟悉編程語言的用戶來說使用起來極為不便,因此筆者開發(fā)HITRAN 數(shù)據(jù)庫接口可視化工具,為無程序語言基礎(chǔ)用戶的使用提供有利條件。
HAPI 是HITRAN 數(shù)據(jù)庫為用戶提供的免費的應(yīng)用程序編程接口,是基于Python 語言的函數(shù)集。目前最新版本為HAPI.PY V.1.1.0.9.7,該版本除可對HITRANonline 提供的功能和數(shù)據(jù)進行遠程訪問,還提供以下功能[3]:
a. 使用大量第三方Python 庫處理數(shù)據(jù);
b. HT 線型的Python 實現(xiàn), 該線型也可以簡化為高斯(多普勒)、洛倫等傳統(tǒng)的線型;
c. TIPS-2011 的Python 實現(xiàn);
d. 考慮壓力、溫度和光路長度的高分辨率光譜模擬;
e. 計算吸收系數(shù)、吸收光譜、透射光譜、輻射光譜;
f. 使用許多工具函數(shù)模擬實驗光譜, 用于光譜計算。
用戶在使用過程中需要應(yīng)用Python 語言編寫程序來調(diào)用HAPI 中的相應(yīng)函數(shù), 以實現(xiàn)上述功能, 這就要求使用者有一定的編程語言基礎(chǔ)。沒有編程語言基礎(chǔ)的使用者在應(yīng)用該數(shù)據(jù)庫的過程中會受到很大限制, 只能在HITRANonline上對數(shù)據(jù)進行遠程獲取。
圖 形 用 戶 界 面 (Graphical User Interface,GUI) 指采用圖形方式顯示的計算機操作用戶界面。 傳統(tǒng)的字符界面操作復(fù)雜,非專業(yè)用戶難以理解和操作。 HAPI 就是依靠使用者編寫程序調(diào)用功能函數(shù)實現(xiàn)上述HAPI 的各種功能, 屬于傳統(tǒng)的字符操作界面。 而在圖形用戶界面中,使用者不需要學(xué)習(xí)復(fù)雜的代碼,可以通過窗口、按鍵、菜單等圖形對象向計算機等電子設(shè)備發(fā)出指令,設(shè)備接收指令后,通過圖形反饋操作的結(jié)果[4]。
筆者開發(fā)的HITRAN 數(shù)據(jù)庫接口可視化工具是將用戶通過編程調(diào)用HAPI 中的功能函數(shù)這一復(fù)雜的字符界面操作過程轉(zhuǎn)換成以圖形方式表達函數(shù)和參數(shù),使用者根據(jù)需求選擇相應(yīng)的函數(shù)和參數(shù), 本工具根據(jù)使用者的選擇調(diào)用HAPI中的功能函數(shù),以滿足使用者的需求。
3.1.1 開發(fā)原理
根據(jù)使用者的需求并結(jié)合HAPI 的內(nèi)置函數(shù)設(shè)計人機交互界面。 該人機交互界面通過應(yīng)用鼠標事件、鍵盤事件和菜單事件,將使用者選擇的功能和參數(shù)轉(zhuǎn)換為對HAPI 內(nèi)置函數(shù)的參數(shù)并調(diào)用函數(shù),實現(xiàn)HAPI 的功能。
3.1.2 開發(fā)環(huán)境
HAPI 是應(yīng)用Python 語言開發(fā)的應(yīng)用程序。Python 作為一種面向?qū)ο蟮慕忉屝阅_本語言,具有簡潔直觀、 靈活方便及可移植等特點, 并且Python 語言的使用是免費的[5]。目前,最新版本的HAPI.PY V.1.1.0.9.7 支 持Python2.6 + , 因 為Python3 全新版本與Python2 不完全兼容,所以筆者將Python2.7.14 作為開發(fā)語言。除此之外,許多開源的科學(xué)計算庫都提供了Python 的調(diào)用接口并免費使用, 因此本設(shè)計的界面框架應(yīng)用與Python2.7.14 匹配的wxPython 作為輔助工具,開發(fā)HITRAN 數(shù)據(jù)庫接口可視化工具。 本設(shè)計基于Windows 系統(tǒng)開發(fā)驗證,但由于Python 的跨平臺特征,也可運行于Linux 或MacOS 平臺。
本設(shè)計應(yīng)用Python 和開源wxPython 開發(fā)HITRAN 數(shù)據(jù)庫接口可視化工具, 本工具通過HAPI 接口在線訪問HATRAN 數(shù)據(jù)庫獲取數(shù)據(jù)、篩選數(shù)據(jù)并保存至本地,還可提供利用數(shù)據(jù)繪制特定圖譜的功能。 系統(tǒng)結(jié)構(gòu)如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)示意圖
本設(shè)計分為主界面、數(shù)據(jù)獲取模塊、數(shù)據(jù)篩選模塊、圖形繪制模塊與幫助模塊5 部分,以面向使用者為理念實現(xiàn)各個模塊功能。 主界面介紹HITRAN 數(shù)據(jù)庫;數(shù)據(jù)獲取模塊從HITRAN 數(shù)據(jù)庫獲取相應(yīng)條件的數(shù)據(jù), 并保存文件至相應(yīng)目錄;數(shù)據(jù)篩選模塊對已獲取數(shù)據(jù)進行相應(yīng)條件的查看或保存;圖形繪制模塊對已獲取數(shù)據(jù)進行相應(yīng)計算并生成曲線圖形;幫助模塊幫助使用者了解光譜參數(shù), 并可通過該模塊訪問HITRANonline。 程序流程如圖2 所示。
主界面如圖3 所示,本設(shè)計在wx.Frame()函數(shù)創(chuàng)建框架中添加wx.Notebook()函數(shù),用筆記本模式將各個模塊在一個窗口顯示出來,每一個頁面即notebookpage()函數(shù)顯示一個模塊,每一個模塊功能的實現(xiàn)都依托HAPI 中相應(yīng)的功能函數(shù)。
3.2.1 數(shù)據(jù)獲取模塊
圖2 程序流程
圖3 主界面
實現(xiàn)數(shù)據(jù)獲取模塊功能的核心函數(shù)是fetch_by_ids(),調(diào)用該函數(shù)可以從HITRANonline 服務(wù)上逐行下載數(shù)據(jù)并保存到本地。 從圖2 可以看出,使用者需要輸入本地目錄名、獲取數(shù)據(jù)的波段、獲取數(shù)據(jù)的分子與參數(shù)組。 獲取后的數(shù)據(jù)以文件形式保存至使用者定義的目錄下。 本設(shè)計應(yīng)用wxTextCtr()函數(shù)創(chuàng)建對話框,實現(xiàn)使用者在對話框中輸入目錄名與獲取數(shù)據(jù)的波段范圍;應(yīng)用wxRadioButton()函數(shù)創(chuàng)建選擇按鈕,列出參數(shù)組供使用者選擇。HITRAN 數(shù)據(jù)庫目前提供49 種氣體分子及其分子種類中最重要的同位素分子光譜參數(shù),因此本設(shè)計應(yīng)用wxComboBox()函數(shù)創(chuàng)建下拉框,在MolecularsChoices()函數(shù)中列出49種分子,同時在wxNotebook()函數(shù)中創(chuàng)建49 個notebookpage()函數(shù),列出每種分子同位素,使MolecularsChoices()函數(shù)與notebookpage()函數(shù)產(chǎn)生聯(lián)動,實現(xiàn)使用者快速查找同位素并選擇需要查詢的分子的功能。 OnButtonClick()函數(shù)連接fetch_by_ids()函數(shù),點擊按鈕觸發(fā)事件,程序開始執(zhí)行fetch_by_ids()函數(shù),實現(xiàn)模塊功能。 在用戶圖形界面設(shè)計過程中,應(yīng)用wx.Panel()函數(shù)和wx.BoxSizer()函數(shù)對界面進行分割,分布上述函數(shù)在界面中的位置,如圖4 所示。
圖4 數(shù)據(jù)獲取模塊圖形用戶界面
3.2.2 數(shù)據(jù)篩選模塊
數(shù)據(jù)篩選模塊的核心函數(shù)是select(),對已經(jīng)下載的數(shù)據(jù)進行選擇或篩選到標準輸出或保存到指定文件。使用者可以對數(shù)據(jù)的波段、參數(shù)進行篩選,篩選后的數(shù)據(jù)以.txt 格式保存。 數(shù)據(jù)篩選模塊的圖形用戶界面如圖5 所示。 由于進行篩選的數(shù)據(jù)必須為HITRAN 數(shù)據(jù)庫下載的數(shù)據(jù), 為避免出錯, 選擇文件部分應(yīng)選用wx.FilePickerCtrl()函數(shù)訪問本地文件,并將獲取數(shù)據(jù)模塊中定義的目錄默認為選擇文件所在的目錄。 數(shù)據(jù)篩選模塊其余部分的實現(xiàn)過程與數(shù)據(jù)獲取模塊類似,本節(jié)不做詳細描述。
圖5 數(shù)據(jù)篩選模塊圖形用戶界面
3.2.3 圖形繪制模塊
圖形繪制模塊是根據(jù)吸收系數(shù)計算分子不同線型的吸收、透射率和輻射光譜,由absorption-Coefficient_Lorentz()、absorptionSpectrum()等 多個函數(shù)實現(xiàn)這些功能。 圖形用戶界面布局與上面兩個模塊類似,將選擇吸收線型、設(shè)置影響條件、輸入文件名和波段、圖形繪制這些步驟分模塊列出。 因為功能函數(shù)較多,該模塊采用if 語句對使用者的輸入進行判斷,進而實現(xiàn)該模塊功能。 圖形用戶界面如圖6 所示。
3.2.4 幫助模塊
幫助模塊可以查看HAPI、 光譜參數(shù)信息與訪問HITRANonline 網(wǎng)站。 為了使界面簡潔,應(yīng)用wx.MenuBar()函數(shù)在界面上方設(shè)置菜單欄,下設(shè)3個選項,wx.MenuItem()函數(shù)分別實現(xiàn)3 個功能。 圖形用戶界面如圖7 所示。
圖6 圖形繪制模塊圖形用戶界面
圖7 幫助模塊圖形用戶界面
為驗證基于Python 語言的HITRAN 數(shù)據(jù)庫接口可視化工具的效果, 以H2O 和NH3為例,各個模塊的程序運行結(jié)果如圖8 所示。
圖8 運行結(jié)果
基于Python 語言的HITRAN 數(shù)據(jù)庫接口可視化工具界面簡潔、方便,沒有編程語言基礎(chǔ)的使用者也可以快速獲取所需數(shù)據(jù),并可對數(shù)據(jù)依照需求再篩選、在線查看或保存成文件,方便對數(shù)據(jù)進行下一步處理,提高工作效率。 此外,本工具還提供了4 種不同線型的吸收系數(shù)、 吸收光譜、透射光譜和輻射光譜,對HITRAN 數(shù)據(jù)庫使用者有極大幫助。 在本程序的基礎(chǔ)上,可進一步實現(xiàn)更復(fù)雜的數(shù)據(jù)處理,以滿足各種不同需求。