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