董 一,吳顯鳳,付喜春,王喜平,田東升
(東方地球物理勘探公司大慶物探研究院 黑龍江 大慶 163357)
按照油田甲方要求,一些地震資料處理工區(qū)在做完去噪處理后還要進行表層Q補償處理。目前大慶物探院所使用的Omega、Geocluster軟件由于軟件版本較低,沒有Q補償模塊。Geoeast軟件中雖然有Q補償?shù)哪K,但甲方要求使用QCompensation_Server軟件(以下簡稱Q補償軟件),因此表層Q補償工作必須用該軟件來完成。
Q補償軟件是一款獨立的專門做表層Q補償?shù)能浖L幚碥浖鐾耆ピ牒蟮臄?shù)據(jù),用戶需要按照Q補償軟件的要求手動編輯和分發(fā)作業(yè),再將做完表層Q補償后的數(shù)據(jù)用于下一步處理。
Q補償軟件被安裝在1套集群系統(tǒng)的28個計算節(jié)點上。它是以命令行方式手動分發(fā)作業(yè),每次只能提交一個作業(yè),格式如下:
%rsh 主機名 Q補償命令 補償因子文件 輸入輸出參數(shù)文件 > 日志文件 &
其中主機名是安裝了Q補償軟件的主機IP地址,Q補償命令和補償因子文件兩個參數(shù)同一個工區(qū)固定不變,日志文件記錄運行作業(yè)過程中所產生的信息。輸入輸出參數(shù)文件中存放的是輸入數(shù)據(jù)和輸出數(shù)據(jù)的文件名,每個作業(yè)都需要一個輸入輸出參數(shù)文件,一個處理工區(qū)一般拆分成幾百個去噪后的數(shù)據(jù),那就意味著用戶要手工編輯幾百個參數(shù)文件,在命令提示符下發(fā)送幾百次作業(yè)。為了達到負載均衡和批量分發(fā)作業(yè)的目的[1],用戶又必須手工編輯腳本文件,把每個命令行寫入腳本,然后一次性執(zhí)行腳本,這就會耗費大量的人工時間。因此通過編制相關功能軟件代替大量的人工操作是非常必要的。
Python是一種跨平臺計算機程序設計語言,是一個高層次的結合了解釋性、編譯性、互動性和面向對象的程序語言。它的特點是語法簡潔、通俗易懂、可擴展性好,還可以編寫圖形界面的應用程序,主要應用于科學計算和統(tǒng)計、人工智能、軟件開發(fā)等領域[2]。
基于Linux Redhat操作系統(tǒng),采用Python3來研制Q補償作業(yè)生成軟件,通過其中的Qt C++類庫來對模塊進行圖形用戶界面(Graphical User Interface,簡稱 GUI)的設計[3],使用PyQt5進行開發(fā),再通過Qt Designer設計界面,最終開發(fā)出專業(yè)的Python GUI應用程序[4]。
由于Q補償軟件針對多個同一類型的數(shù)據(jù)進行相同的處理,因此在編輯作業(yè)時存在著普遍規(guī)律性,可以通過軟件實現(xiàn)自動批量的編輯和分發(fā)作業(yè)的目的。根據(jù)處理用戶的使用習慣,同一工區(qū)去噪后的數(shù)據(jù)文件均保存在一個目錄下,文件名的前綴相同,僅末尾的序號以連續(xù)且遞增的方式命名,同時也為了方便之后的處理工作,用戶做完表層Q補償后的輸出文件名序號均與輸入文件名相同,僅輸出目錄和前綴有所改變。根據(jù)這個規(guī)律性,即可編輯軟件自動生成輸入輸出參數(shù)文件。
Q補償軟件分發(fā)作業(yè)時的命令格式固定,僅在節(jié)點名、輸入?yún)?shù)文件名、日志文件名有所區(qū)別,因此也可以根據(jù)一個工區(qū)文件名連續(xù)的規(guī)律,編輯軟件實現(xiàn)自動生成分發(fā)作業(yè)的腳本,再通過軟件批量地分發(fā)作業(yè)。
Q補償作業(yè)生成軟件設計主要包含三部分:第一部分通過Qt Designer對軟件的圖形用戶界面進行設計;第二部分通過Python語言生成輸入輸出參數(shù)文件;第三部分通過Python語言及算法生成批量提交表層Q補償作業(yè)的shell腳本,同時實現(xiàn)通過軟件提交作業(yè)的功能。
若要想在Python里使用這個窗體,需要使用PyQt5里的工具軟件pyuic5將ui文件編譯轉換為Python語言程序文件。執(zhí)行以下命令完成轉換:
%pyuic5-o Q_creator.py Q_creator.ui
Q_creator.py即為Python語言識別的窗體文件。
Qt Designer實現(xiàn)對Q補償作業(yè)生成軟件界面的設計后,還需要實現(xiàn)從界面上讀取輸入數(shù)據(jù),經(jīng)過算法實現(xiàn)軟件功能后再將結果輸出保存為文件的功能。界面與算法功能設計方法主要有兩種,一種是多繼承的方法,另一種是單繼承的方法[5],本軟件采用多繼承的方法對程序進行設計,這種設計可以使界面上的組件都成為窗體業(yè)務邏輯類的公共屬性,外界可以直接訪問組件[6]。Qt界面組件都支持信號與槽的功能,每個類都有一些內建的信號和槽函數(shù),這里使用的“保存”按鈕所使用的信號即為“clicked()”信號,在按鈕被單擊時發(fā)送這個信號,程序開始執(zhí)行,“提交”按鈕、“關閉”按鈕也使用了“clicked()”信號[7]。
Q補償作業(yè)中必須的輸入輸出參數(shù)文件的生成原理示意如圖1所示:
圖1 輸入輸出參數(shù)文件生成原理圖
從軟件圖形界面的文本框內,獲取Q補償軟件的輸入文件、輸出文件的物理地址及文件名前綴,例如:/data1/input/sw,/data2/output/sw,同時從文本框中獲取去噪后的文件數(shù)量N,以及輸入輸出文件命名時軟件需要的文件名前綴。輸入文件按照用戶的習慣文件序號均從0開始,因此軟件定義初始變量i=0,當i的數(shù)值小于等于N時,軟件按照Q補償軟件的格式要求,將輸出、輸出文件的路徑、文件名前綴,與i的數(shù)值相結合,把文件名補齊并寫入輸入輸出參數(shù)文件,再通過獲取的文件名前綴與i的數(shù)值相結合作為輸入輸出參數(shù)文件名保存到“文件存放目錄”文本框獲得的目錄下[8]。生成一個輸入輸出參數(shù)文件后i的值都會加1,直到生成所有的輸入輸出參數(shù)文件后程序結束[9]。
在指定目錄下放置一個hosts文件,文件內容是正常運行Q補償軟件的計算節(jié)點的IP地址,軟件通過用戶輸入的相應參數(shù),根據(jù)Q補償軟件的要求,生成發(fā)送Q補償作業(yè)的命令行,并將命令行循環(huán)均勻分配給host文件中的計算節(jié)點,生成批量分發(fā)Q補償作業(yè)的可執(zhí)行文件。
定義“提交作業(yè)”的函數(shù),在函數(shù)中執(zhí)行分發(fā)Q補償作業(yè)的可執(zhí)行文件,通過圖形界面中的“提交”按鈕激活函數(shù),實現(xiàn)用戶在軟件上直接分發(fā)Q補償作業(yè)的功能[10]。
Q補償作業(yè)生成軟件需要在安裝了Python3的工作站或服務器上運行。同時為了能夠實現(xiàn)提交作業(yè)的功能,工作站需要配置與安裝Q補償軟件的28個計算節(jié)點rsh互信,且用戶需要有讀寫文件存放目錄的權限。
在命令提示符下輸入以下命令:%Python Q_creator.py,打開Q補償作業(yè)生成軟件,軟件界面如圖2所示。
圖2 Q補償作業(yè)生成軟件界面圖
用戶在“輸入文件”文本框填寫去噪后數(shù)據(jù)文件物理地址及文件名前綴,在“輸出文件”文本框中填寫Q補償軟件完成后文件存放的的物理地址及文件名的前綴。填寫需要做Q補償?shù)臄?shù)據(jù)文件數(shù)量,輸入輸出參數(shù)文件名的前綴,所有輸入輸出參數(shù)文件需要存放的目錄,Q補償軟件的開發(fā)者為每個工區(qū)提供的“JOB文件”放置的物理地址,LOG文件的前綴名。點擊“保存”按鈕后Q補償作業(yè)生成軟件即可自動編輯出所有Q補償軟件分發(fā)作業(yè)時需要的所有文件。點擊“提交”按鈕后,即可將Q補償作業(yè)負載均衡地分發(fā)到節(jié)點上進行計算。
Q補償作業(yè)生成軟件主要實現(xiàn)了為Q補償軟件自動編輯、分發(fā)作業(yè)的功能。目前已經(jīng)成功應用于4個資料處理工區(qū),實現(xiàn)了快速準確地對Q補償作業(yè)進行批量編輯和提交,節(jié)省了大量的人工操作時間。原來手工編輯、分發(fā)作業(yè)需要3 h左右才能完成的工作,使用地震資料Q補償作業(yè)生成軟件不到5 min即可全部完成,極大地提高了工作效率。這項技術可推廣應用于使用QCompensation_Server軟件做補償?shù)乃泄^(qū)。