楊曉艷,石 濤,李 冰,孫小涓,盧曉軍
(1. 中國科學院空間信息處理與應用系統(tǒng)技術重點實驗室,北京 100190; 2. 中國科學院電子學研究所,北京 100190;3. 中國國際工程咨詢公司,北京 100048)
FITS(Flexible Image Transport System)*http://fits.gsfc.nasa.gov/standard21b.html是一種在空間天文領域廣泛使用的數據格式[1],目的是為了傳輸、分析和歸檔天文科學數據文件。自20世紀80年代FITS格式被國際天文聯(lián)合會確認為國際標準以來,大部分天文數據以FITS格式在世界各地的數據中心存儲和交換。
美國Chandra*http://cda.harvard.edu/chaser/mainEntry.do衛(wèi)星、Swift*https://swift.gsfc.nasa.gov/cgi-bin/sdc/ql?衛(wèi)星、歐洲EXOSAT*https://heasarc.gsfc.nasa.gov/docs/exosat/archive/exosat_archive.html衛(wèi)星等國際知名的天文衛(wèi)星數據,歐洲低頻射電干涉陣列(Low Frequency Array, LOFAR)*http://lofar.target.rug.nl/、澳大利亞望遠鏡致密陣列(Australia Telescope Compact Array, ATCA)[2]等地基天文觀測數據,以及我國硬X射線衛(wèi)星[3]數據均采用FITS格式存儲。以中國科學院國家天文臺為首的中國天文學界聯(lián)合建設了中國虛擬天文臺(China-VO)[4],針對系統(tǒng)中FITS文件檢索與訪問的問題,文[5-6]進行研究并構建了FiHAS系統(tǒng)。
通常情況下,空間天文數據采用定長數組的方式存儲為FITS文件。FITS格式文件由整數個長度為2 880字節(jié)的報頭和數據單元(Header and Data Unit, HDU)組成,其數據單元區(qū)采用長度固定的ASCII表或者二進制表存儲。但是,暗物質粒子探測衛(wèi)星的科學數據源包長度隨有效載荷探測模式、粒子擊中狀態(tài)的不同而不同,定長數據的存儲方式無法滿足數據存儲的需要;同時,暗物質衛(wèi)星是一顆空間天文衛(wèi)星,出于數據共享的需求,編輯級產品文件必須采用FITS格式存儲。因此,需要根據暗物質衛(wèi)星的數據特點,設計并實現(xiàn)一種數組長度可變的FITS格式數據存儲方案。
FITS數據格式能夠在國際天文領域得到廣泛應用,原因之一是其自描述性和靈活性。標準的FITS文件由一個主HDU和一定數量的擴展HDU組成,每個HDU都包括頭單元和數據單元兩部分。其中,主HDU的頭單元包含該文件對應的衛(wèi)星名稱、生產日期等總體描述信息,支持擴展定義,數據單元為空;擴展HDU的頭單元包含本HDU數據起始結束時間、參考坐標系、各列數據類型等元數據信息,也支持擴展定義,數據單元中以ASCII表或二進制表的行列存儲數據信息*https://heasarc.gsfc.nasa.gov/fitsio/fitsio.html。標準的FITS文件結構如表1。
表1 FITS文件結構Table1 FITSFilestructure
數據單元以ASCII表或二進制表形式存儲二維數組,每行長度固定,每列的數據類型需保持一致。FITS格式支持的數據類型包括:邏輯型(L)、bit型(X)、字節(jié)型(B)、16位整型(I)、32位整型(J)、64位整型(K)、單精度浮點型(E)、雙精度浮點型(D)。
另外,F(xiàn)ITS格式的靈活性還支持對變長數組進行存儲,存儲方法為在文件頭單元中定義一組特殊關鍵字,指定變長數組起始位置的偏移量和數據總長度。變長數組的實體數據并不存放在數據單元中,而是存放在數據單元之后的一個叫做heap的二維數組中。
暗物質粒子探測衛(wèi)星是中國科學院空間科學戰(zhàn)略性先導科技專項中首批確定的5顆科學衛(wèi)星之一,旨在通過高精度測量高能電子和伽瑪射線能譜及其空間分布進行暗物質粒子探測,尋找和發(fā)現(xiàn)宇宙暗物質粒子,對可能的宇宙空間分布進行研究。暗物質衛(wèi)星已于2015年12月發(fā)射。
暗物質衛(wèi)星有效載荷獲取的科學觀測數據以及衛(wèi)星平臺采集的工程數據通過數傳通道下傳至地面,經過幀同步、虛擬信道分離、源包提取、驗證排序、排重、拼接/切分等處理后按照FITS格式輸出為編輯級產品,完成產品歸檔存儲,并分發(fā)給科學應用系統(tǒng)。主要處理流程如圖1。
圖1暗物質衛(wèi)星數據處理、存儲及分發(fā)流程
Fig.1Data processing, storage and distribution processes of DAMPE
暗物質衛(wèi)星數傳數據中,衛(wèi)星平臺采集的表示載荷、平臺工作狀態(tài)的工程數據長度是固定的,按照通用的定長方式存儲即可;而科學觀測數據源包由30個數據幀隊列組成,總長度可變,源包結構以及各數據幀最大長度如表2。
暗物質衛(wèi)星每軌下傳的數傳數據中,科學數據源包數量為60萬左右,按照每個源包20 998字節(jié)的最大長度計算,單個文件大小為11.73 GB。但實際上,由于科學數據幀的實際長度與有效載荷模式、粒子擊中狀態(tài)有關,而且星上可能對數據進行壓縮,因此,科學數據源包長度是變化的。尤其是硅陣列探測器,總共有7萬多個通道,絕大多數情況下,沒有大擊中事例發(fā)生,大多數通道沒有響應,并不輸出科學數據。如果按照最大數據量存儲,造成暗物質衛(wèi)星科學數據文件量偏大,導致數據處理和應用的難度增加、效率降低,以及存儲資源的巨大浪費。
針對暗物質衛(wèi)星科學數據源包特點及其存儲需求,需要設計并實現(xiàn)一種能夠支持變長數據的FITS文件存儲方案。
如上所述,暗物質衛(wèi)星科學數據源包長度變化范圍比較大,針對其數據特點和存儲需求,設計數據存儲方案,并采用C++語言調用CFITSIO⑥完成軟件實現(xiàn)。暗物質衛(wèi)星數據存儲方案設計如下:
(1)文件頭改造
在通用的定長數組存儲方案中,文件頭中用關鍵字tform指定數據類型,包括L,X,B,I,J等類型。在暗物質衛(wèi)星變長數據存儲方案中,tform將賦值為rPt(emax)或rQt(emax)兩種特殊類型。其中,r為計數,可以是0、1或者不出現(xiàn);P,Q為數組描述符類型,分別表示32位、64位有符號整數;t為數據類型代碼;emax為數據長度最長的字節(jié)數。根據暗物質衛(wèi)星數據類型,設置tform=1QB(emax),表示數組描述符類型為64位有符號整數,實體數據按字節(jié)類型存儲,emax值從實際數據中提取。
表2暗物質衛(wèi)星科學數據源包結構
Table2ThesciencedatasourcepackagestructureofDAMPE
序號數據幀類型最大數據幀長/bit1觸發(fā)邏輯包122中子探測器數據幀183+X方向+X方向塑閃數據幀1784塑閃、Si、+X方向SiFEE1數據幀20005BGO+X方向SiFEE2數據幀20006數據幀+X方向BGOFEE1數據幀3027+X方向BGOFEE2數據幀3028+X方向BGOFEE3數據幀1589+X方向BGOFEE4數據幀30210~16-X方向塑閃、Si、BGO數據幀524217~23+Y方向塑閃、Si、BGO數據幀524224~30-Y方向塑閃、Si、BGO數據幀5242暗物質衛(wèi)星科學數據源包總長度20998
另外,關鍵字theap表示heap區(qū)域的開始位置,省略時默認值為數據單元長度,表示heap區(qū)域直接從數據單元的下一個字節(jié)開始;如果取值大于默認值,表示heap區(qū)域與數據單元區(qū)域之間有一定的間隔。pcount為間隔大小與heap區(qū)域大小之和。暗物質衛(wèi)星變長數據存儲方案中,theap取默認值,pcount為科學源包數據的字節(jié)數,該參數值從實際數據中提取。
(2)調用fits_create_tbl函數,創(chuàng)建FITS文件
函數調用方式如下:
fits_create_tbl(fitsfile *fptr, int tbltype, LONGLONG naxis2, int tfields, char *ttype[], char *tform[], char *tunit[], char *extname, int *status)
其中,fptr表示準備創(chuàng)建的暗物質衛(wèi)星編輯級產品FITS文件;tbltype表示數據單元區(qū)表格類型,ASCII_TBL表示ASCII表;BINARY_TBL表示二進制表,暗物質衛(wèi)星數據采用二進制表存儲;naxis2表示暗物質衛(wèi)星科學數據源包總行數,該參數從實際數據中提??;tfields表示參數個數,暗物質衛(wèi)星科學數據源包產品僅有CCSDS源包1個參數列;ttype表示參數名稱,命名為CCSDS;tform表示參數類型,如上文所述,設置tform=1QB(emax);tunit表示參數度量單位,CCSDS源包沒有單位;extname表示擴展HDU的名稱,命名為Sci_Src。
(3)寫入數組描述符
數組描述符是一個2N的二維矩陣,N為變長數組的總行數,第1列定義數組中各行數據的長度,第2列定義各行數據起始位置在整個heap區(qū)域的偏移量,取值均為正整數,存儲在數據單元中。暗物質衛(wèi)星變長數據存儲方案中,創(chuàng)建兩個N維索引數組,分別命名為index_len[N],index_offset[N],N表示暗物質衛(wèi)星科學數據源包總行數,從實際數據中提取每行長度,存入index_len數組,提取每行數據起始位置偏移量,存入index_offset數組。
(4)在heap區(qū)域中寫入變長數組數據
變長數組實體逐行存在heap區(qū)域中,由于theap取默認值,因此,存儲起始位置就是數據單元結束符的下一個字節(jié)。然后,根據數組描述符取值,確認各行數據的起始位置和各行長度,調用fits_write_col函數,將暗物質衛(wèi)星科學數據源包數據逐行寫入FITS文件heap區(qū)域,函數調用方式如下:
int fits_write_col(fitsfile *fptr, int datatype, int colnum, LONGLONG firstrow, LONGLONG firstelem, LONGLONG nelements, DTYPE *array, > int *status)
其中,fptr表示準備寫入的暗物質衛(wèi)星編輯級產品FITS文件;datatype表示寫入方式,暗物質衛(wèi)星數據按字節(jié)寫入,該參數設置為TBYTE;colnum表示行號,從第1行開始;firstrow表示起始寫入的行號,從1開始;firstelem表示該行的第1個元素;nelements為該行數據長度,取值為index_len[N];*array為準備寫入該行的CCSDS源包數據的存儲位置,設置為p+index.index[N].offset,其中p為位置指針。
按照上述方案,暗物質衛(wèi)星數據FITS文件中擴展HDU的存儲結構如下:
【文件頭】【數據單元】存儲暗物質衛(wèi)星數據數組描述符【heap】存儲暗物質衛(wèi)星科學源包數據實體
為了驗證上述存儲方案在產品文件數據量、存儲效率、處理效率等方面的性能,選擇2016年4月29日(2 041圈)、2016年6月5日(2 605圈)、2017年7月3日(8 595圈)、2017年7月25日(8 923圈)、2017年8月30日(9 478圈)共5軌暗物質衛(wèi)星數傳數據中科學源包類數據的編輯級產品文件進行分析。表3對定長FITS方案存儲與變長方案存儲的暗物質衛(wèi)星編輯級產品文件大小進行了對比。
表3 兩種格式下FITS文件數據量對比Table3 Comparisonofthetwoformatfilesizes
真實數據的驗證結果表明,針對暗物質衛(wèi)星的數據產品存儲特點,本文提出的基于FITS格式的變長數組存儲方案能夠將文件數據量降低88%左右,極大地節(jié)省了數據存儲空間;同時,由于文件數據量的有效降低,數據的處理速度、產品的歸檔速度和應用效率都得到了明顯提升。
本文提出的基于FITS格式的可變數組存儲方案能夠擴展應用到其他數據長度變化的天文數據存儲中,該方案能夠有效降低數據存儲量,降低效率取決于實際數據長度與最大數據長度的平均比例。
參考文獻:
[1]Hanisch R J, Farris A, Greisen E, et al. Definition of the Flexible Image Transport System (FITS) [J]. Astronomy & Astrophysics, 2001, 376: 359-380.
[2]Murphy T, Lamb P, Owen C, et al. Data storage, processing, and visualization for the Australia telescope compact array[J]. Publications of the Astronomical Society of Australia, 2006, 23(1): 25-32.
[3]趙海升, 葛明玉, 李正恒, 等. 一種天文衛(wèi)星數據預處理方法[J]. 天文研究與技術, 2017, 14(6): 376-381.
Zhao Haisheng, Ge Mingyu, Li Zhengheng, et al. A method of data preprocessing for astronomical satellite[J] . Astronomical Research & Technology, 2017, 14(6): 376-381.
[4]崔辰州, 趙永恒. 中國虛擬天文臺體系結構[J]. 天文研究與技術——國家天文臺臺刊, 2004, 1(2): 140-151.
Cui Chenzhou, Zhao Yongheng. Architecture of Chinese virtual observatory[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2004, 1(2): 140-151.
[5]崔辰州, 李文, 于策, 等. FITS數據文件的檢索與訪問[J]. 天文研究與技術——國家天文臺臺刊, 2008, 5(2): 116-123.
Cui Chenzhou, Li Wen, Yu Ce, et al. Search an location of FITS data files[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2008, 5(2): 116-123.
[6]張海龍, 冶鑫晨, 李慧娟, 等. 天文數據檢索與發(fā)布綜述[J]. 天文研究與技術, 2017, 14(2): 212-228.
Zhang Hailong, Ye Xinchen, Li Huijuan, et al. Astronomical data query and release review[J]. Astronomical Research & Technology, 2017, 14(4): 212-228.