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