亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        CFITSIO 軟件包簡介及應用舉例

        2010-03-20 19:24:04歐建斌
        微型電腦應用 2010年8期
        關鍵詞:程序

        歐建斌

        0 引言

        FITS最初由美國Wells等人于1979年提出[1],它以獨立于硬件設備的方式描述了數(shù)據(jù)定義和數(shù)據(jù)本身編碼的一般方法。FITS不像JPG或GIF等僅僅是圖像文件,它可以同時存儲多維圖像、數(shù)據(jù)矩陣及二維表格[3]。1982年,IAU(國際天文聯(lián)合會)確立FITS為標準的計算機數(shù)據(jù)格式[4],此后便廣泛應用于天文界數(shù)據(jù)的傳輸、分析和存儲過程之中。1990年,NOST(NASA/Science Office of Standards and Technology)推出NOST 100-0.1,成為首個FITS格式的標準。最近,IAUFWG(IAU FITS Working Group)又通過了FITS最新標準IAUFWG 3.0[2],進一步確立了FITS的地位。

        1 FITS

        FITS文件由一系列邏輯記錄組成,每一個邏輯記錄均長2880個字節(jié)(一個字節(jié)8位),可見一個FITS文件的大小必定是2880字節(jié)的整數(shù)倍。通常,F(xiàn)ITS文件包含一個或多個HDU(Header+Data Unit),也就是所謂的文件頭和數(shù)據(jù)單元。第一個HDU稱作“Primary HDU”(主文件頭和數(shù)據(jù)單元)或“Primary Array”(主數(shù)組)。主HDU后面可以有任意多個HDU作為擴展部分,擴展部分是可選的。標準的FITS文件有3種不同類型的擴展:圖像文件、ASCII表文件和二進制表文件。

        文件頭用來記錄有關圖像的信息和說明,例如FITS格式的標識符,圖像維數(shù)大小,比特數(shù)等。它是用 ASCII方式編碼的字符串,空閑的地方用空格填充。文件頭由多個長80字符的行記錄組成,一個2880字節(jié)的邏輯記錄則剛好包含36個行記錄。每個行記錄表示圖像的某一信息,這樣的設計能夠靈活地定義描述數(shù)據(jù)的參數(shù)。

        行記錄都有相同的格式,其語法為:keyword=value/comment。keyword(關鍵字)是由大寫英文字母、數(shù)字、下劃線“_”或連字符“-”組成的長8個字符的字符串。keyword是左對齊的,長度不滿8字符則在末尾用空格填充,但中間不能有空格。如果對keyword進行了賦值,則第9、10列必定是等號和空格“= ”。value(所賦的值)可以是數(shù)值(整數(shù)、實數(shù)或復數(shù))、字符或邏輯值(T或F),右對齊存放在第11~30列或第11~80列。comment(注釋)用斜線“/”表示,通常從第 31列開始(value后面),若沒有keyword的也可以從第十列開始。

        FITS主文件頭必須按順序含有 SIMPLE,BITPIX,NAXIS,NAXISn,END這幾個關鍵字。每個文件頭都以SIMPLE開頭,以END結束,其它行記錄可以插在最后一個NAXISi和END之間。

        SIMPLE:邏輯值,T表示該文件是FITS文件,否則為F。它必須且只能出現(xiàn)在主文件頭中。

        BITPIX:整數(shù)值,表示數(shù)據(jù)的格式,其值可為8,16,32,64,-32或-64。8表示字符或無符號二進制整數(shù);16,32和64分別表示16位,32位和64位補碼二進制整數(shù);-32,-64分別表示IEEE單精度和雙精度浮點數(shù)。

        NAXIS:整數(shù)值,表示數(shù)據(jù)陣列的維數(shù),取值范圍為0~999。若為0,則表示文件頭后沒有數(shù)據(jù)。

        NAXISn:非負整數(shù)值,表示沿n軸變化的像素個數(shù)。若NAXIS為0,則沒有這一關鍵字。

        END:文件頭結束標記,其后的第9~80列為空格。

        FITS擴展文件頭必須按順序含有XTENSION,BITPIX,NAXIS,NAXISn,PCOUNT,GCOUNT,END這些關鍵字。

        XTENSION:字符串,表示擴展類型,必須而且只能出現(xiàn)在擴展文件頭中。其值若為“IMAGE”則表示是圖像擴展文件,若為“TABLE”則表示是 ASCII表擴展文件,若為“BINTABLE”則表示是二進制表擴展文件。

        PCOUNT:整數(shù)值,用于定義數(shù)據(jù)結構,根據(jù)不同類型的擴展文件賦予不同的值。

        GCOUNT:整數(shù)值,表示一個擴展文件包含的數(shù)據(jù)陣數(shù)目,取值多為1。

        其他關鍵字是可選的,較為重要的有:

        TFIELDS:非負整數(shù)值,表示 ASCII表擴展文件的列數(shù)。

        BSCALE:浮點值,表示比例尺,和BZERO連用。

        BZERO:浮點值,表示實際值的 0。實際值=BZERO+BSCALE×文件值。

        在天文圖像中常用的關鍵字還有 DATE-OBS(觀測日期)、TELESCOP(望遠鏡)、OBSERVER(觀測者)、OBJECT(觀測對象)、EPOCH(歷元)等。用戶還可以設計自己的關鍵字,只要符合定義的規(guī)則而且不與必須存在及保留的關鍵字沖突即可。

        文件頭后面緊跟著的是數(shù)據(jù)單元。數(shù)據(jù)以字節(jié)為單位,包含符號位的字節(jié)放在前面(高位在前)。以統(tǒng)一的數(shù)據(jù)類型按行存放在,不足2880倍數(shù)的用0補足。

        2 CFITSIO

        2.1 CFITSIO簡介

        FITS是標準數(shù)據(jù)格式,對FITS文件的讀寫是許多天文應用軟件的基本功能之一。

        FITSIO(Flexible Image Transport System Input Output)軟件包于20世紀90年代由HEASARC(美國高能天體物理科學研究中心)研發(fā)。它用標準Fortran-77語言編寫,包括350多個子程序,源代碼有30000行左右。FITSIO是一個功能強大、但使用十分簡便的軟件包。它支持所有 NOST定義的FITS格式文件及其擴展文件,提供了一個簡單的途徑來讀寫FITS格式文件,而不必擔心復雜的FITS格式標準[5]。在C或FORTRAN語言編寫的程序中直接調用FITSIO的子程序就可以對FITS格式的數(shù)據(jù)文件進行讀寫操作。

        自從1995年作最后一次更新后,HEASARC不再支持FITSIO而是推薦另一個FITS讀寫程序CFITSIO。CFITSIO完全使用ANSI C語言編寫,繼承了FITSIO許多強大的功能和優(yōu)秀的特點。CFITSIO是免費軟件,目前最新的版本是3.10。

        CFITSIO的新特點[6]:

        (一)支持IRAF格式圖像(*.imh)和原始二進制數(shù)據(jù)陣,通過轉化為虛擬FITS格式文件來對文件進行讀寫操作。

        (二)能直接讀取FTP或HTTP URL上的FITS文件。

        (三)能在內存或共享內存內讀寫FITS文件。

        (四)能夠通過標準輸入輸出流在作業(yè)之間傳輸 FITS文件從而減少寫硬盤臨時文件的需要。

        (五)能直接讀取壓縮包中的FITS文件,包括GZIP、PKZIP和Unix壓縮包。

        (六)能實時過濾或修改FITS表。

        (七)表中的任意一列數(shù)據(jù)都能實時地轉換為一維FITS圖像,任何兩列能轉換為二維圖像。

        (八)能夠多次打開一個FITS文件為一個獨立的文件,能同時讀寫一個FITS文件里面不同的擴展部分。

        (九)能處理大量分層組織的文件。

        (十)能通過描述文件結構的 ASCII模版來創(chuàng)建新的FITS表或圖像。

        隨著 CFITSIO的廣泛使用,也產生了一系列基于CFITSIO的不同編程語言的軟件包。這些軟件包通過調用CFITSIO,提供了許多簡便易用的接口從較高的層次來讀寫FITS文件,隱藏了繁瑣的操作FITS I/O的細節(jié)。例如用C++編寫的面向對象程序包 CCfits[8],用 C#.net編寫的CSharpFITS,以及支持Matlab的MFITSIO等。

        鑒于CFITSIO承前啟后的作用以及當前的重要地位,本文重點關注CFITSIO的功能和應用實例。

        2.2 CFITSIO的功能

        大部分CFITSIO程序都有一個較長的完整程序名和一個縮簡的名字。完整的程序名由3~4個單詞組成,用下劃線“_”連接起來,如“fits_open_file”。它們都以“fits”開頭,方便和用戶自己的程序相區(qū)別。第2個單詞表示要進行的操作,第3~4個單詞指明操作的對象??s簡的程序名以‘ff’開頭,一般長5~6個字符,與Fortran-77版本的FITSIO類似[5]。許多程序都是以“組”的形式出現(xiàn),不同的只是相關參數(shù)的數(shù)據(jù)類型,通常由程序名的最后一個字母暗示出來。對比起來,完整的程序更具有描述性,易于閱讀和理解,建議用戶使用這種方式[7]。

        在使用CFITSIO前,我們有必要先認識兩個幾乎出現(xiàn)在所有子程序中的參數(shù):文件指針fptr和狀態(tài)參數(shù)status。fptr是指向當前準備進行操作的FITS文件的結構體指針。而status是用來返回操作是否正常結束的狀態(tài)參數(shù)。

        3 對FITS文件的一般操作

        使用CFITSIO對FITS文件進行操作,首先必須先打開或建立 FITS文件,操作完畢后要關閉文件。例如:fits_open_image(fptr, filename, iomode, > status)以只讀或讀寫的方式打開一個已經存在的 FITS圖像文件。其中的‘>’符號不是程序參數(shù),而是為了用戶方便地區(qū)分每個程序中的輸入和輸出參數(shù)[7]。在‘>’符號前面的是輸入?yún)?shù),后面的則是輸出參數(shù)。參數(shù)iomode=0表示只讀,而iomode=1則表示讀寫。fits_create_file(fptr, filename, iomode, > status)創(chuàng)建并打開一個新的不含任何數(shù)據(jù)的 FITS文件。fits_close_file(fptr, > status)則關閉一個已經打開的FITS文件。

        CFITSIO當前正在操作的 HDU叫做 CHDU(Current Header Data Unit)。當一個FITS文件被建立或打開的時候,除非特定指派某一個HDU,否則CHDU自動被定義為第一個 HDU。如果在文件名后面加上擴展參數(shù)(例如:myfile.fits+3或 myfile.fits[3]),則文件打開后會移動到該HDU。需要注意的是 FITS文件的主數(shù)據(jù)單元就是第一個HDU,第一個擴展文件就是第二個HDU了。應用CFITSIO可以知道HDU的位置、HDU的數(shù)目、也可以改變CHDU。調用不同的程序還可以插入不同類型的 HDU、刪除已經存在的HDU,當然還可以復制整個HDU等。

        3.1 對FITS文件頭的讀寫操作

        CFITSIO提供了一系列子程序來讀寫FITS文件CHDU的關鍵字。在讀取數(shù)據(jù)陣前,可以用fits_get_img_param(fptr,maxdim, > bitpix, naxis, naxes, status)來獲取幾個必要關鍵字的信息。創(chuàng)建FITS文件時,CFITSIO只是寫入了必要的關鍵字以及相應默認的注釋,使用 fits_read_card可以讀取原來FITS文件中的行記錄,再用fits_write_record把該行記錄插入到新文件中。更方便的是CFITSIO在向數(shù)據(jù)陣寫入數(shù)據(jù)前不必知道數(shù)據(jù)陣的各維數(shù)大小,只須在寫入后用fits_update_key更新關鍵字即可[7]。

        3.2 對FITS主數(shù)據(jù)組或圖像擴展的輸入/輸出操作

        對 FITS文件的操作中最重要的是對數(shù)據(jù)單元的讀寫了,CFITSIO可以讀寫FITS文件中的全部或部分數(shù)據(jù)。例如:fits_read_pix(fptr, datatype, fpixel, nelement, nulval, >array, anynul, status)把從fpixel開始,長nelement的FITS數(shù)據(jù)單元中的數(shù)據(jù)讀進array數(shù)組。其中datatype 是數(shù)據(jù)類型,即BITPIX;fpixel是NAXIS維的數(shù)組,表示讀取數(shù)據(jù)的開始點坐標;nelement表示要讀取數(shù)據(jù)的總個數(shù);array是存放所獲得數(shù)據(jù)的矩陣。而 fits_write_subset(fptr, datatype,fpixel, lpixel, nulval, > array, status)則把子圖像或整個圖像寫進FITS數(shù)據(jù)單元內。

        3.3 對FITS文件的ASCII或BINARY表的操作

        在FITS表文件中,行的數(shù)目由文件頭中關鍵字NAXIS2給出,列的數(shù)目由FTIELDS給出,值得注意的是表中第一行或列的位置是1而不是0。CFITSIO同樣能夠獲取表的各種信息及對表行列進行編輯操作。例如:fits_find_first_row(fptr, expr, > rownum, status)可以查找第一個滿足表達式expr的行。fits_delete_rows(fptr, firstrow, nrows,> status)刪除表中從firstrow開始的nrows行。

        3.4 錯誤狀態(tài)

        幾乎所有的 CFITSIO程序都以兩種方式來返回錯誤信息:函數(shù)本身的返回值和錯誤狀態(tài)參數(shù)status。當函數(shù)返回0或狀態(tài)參數(shù)為0時表示正常返回,否則出錯。CFITSIO還維持一個長80字符的內部錯誤堆棧,它提供詳細的錯誤描述信息,我們可以調用 fits_report_error或 fits_read_errmsg函數(shù)來獲取相應的錯誤信息[7]。需要特別指出的是狀態(tài)參數(shù)status,它既是輸入?yún)?shù)又是輸出參數(shù),在調用CFITSIO的子程序前必須先將其設置為0,否則子程序將不做任何操作而立刻返回。因此我們在編程時只需在程序的最末端檢查狀態(tài)參數(shù)即可。

        3.5 CFITSIO的其它功能

        CFITSIO中另一個常用的子程序是fits_iterate_data,它是一個用戶定義面向對象的讀寫圖像或表的方法。雖然相對有點復雜,但其優(yōu)點在于使用較少的代碼高效地完成工作。

        CFITSIO最大可支持6TB的FITS文件,通常來說不存在容量問題。同時CFITSIO能夠高速的操作FITS文件,它的最大I/O速度依賴于運行的操作系統(tǒng)。在現(xiàn)今的工作站或PC上最大I/O速度能達到5-10M/s或更快。如果FITS文件存放在內存時,最大I/O速度甚至可以達到30M/s[7]。為了獲得最大的I/O速度,應該以適當?shù)捻樞蛘{用CFITSIO中的子程序,否則將會降低程序的執(zhí)行速度。

        [1]Wells D C, Greisen E W & Harten R H. FITS: A Flexible Image Transport System. A&AS, 1981, 44: 363-370

        [2]FITS Working Group. Definition of the Flexible Image Transport System (FITS). Version 3.0. 2008.

        [3]A Primer on the FITS Data Format. http://fits.gsfc.nasa.gov/fits_primer.html.

        [4]IAU. Information Bulletin. 1983,49.

        [5]李化南,肖泉寶,邵正義.FITSIO 軟件包的簡介及應用舉例.中國科學院上海天文臺年刊, 2005, 26: 119-124.

        [6]Pence W. CFITSIO, v2.0: A New Full-Featured Data Interface. ASPC, 1999, 172: 487-489.

        [7]HEASARC. CFITSIO User's Reference Guide. Version 3.0. 2007.

        [8]Doxygen. CCfits Reference Manual. Version 2.0. 2008.

        猜你喜歡
        程序
        給Windows添加程序快速切換欄
        電腦愛好者(2020年6期)2020-05-26 09:27:33
        試論我國未決羈押程序的立法完善
        人大建設(2019年12期)2019-05-21 02:55:44
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        英國與歐盟正式啟動“離婚”程序程序
        基于VMM的程序行為異常檢測
        偵查實驗批準程序初探
        我國刑事速裁程序的構建
        創(chuàng)衛(wèi)暗訪程序有待改進
        恐怖犯罪刑事訴訟程序的完善
        麻豆AV无码久久精品蜜桃久久| 40岁大乳的熟妇在线观看 | 日本熟妇美熟bbw| 亚欧美日韩香蕉在线播放视频| 亚洲av无码成人黄网站在线观看| 国产精品自产拍在线观看中文| 少妇人妻偷人中文字幕| 日韩中文字幕不卡在线| 亚洲av无码乱码国产麻豆| 国产成人精品午夜视频| 99久久久无码国产aaa精品| AV无码专区亚洲AVL在线观看| 久久精品国产9久久综合| 在线播放真实国产乱子伦| 国产自偷亚洲精品页65页| 国产日韩久久久精品影院首页| 女同国产日韩精品在线| 白白发在线视频免费观看2| 午夜福利试看120秒体验区| 欧美日韩性视频| 一本久久伊人热热精品中文| 亚洲国产成人久久综合碰碰| 亚洲乱亚洲乱妇50p| 国产精品卡一卡二卡三| av深夜福利在线| 国产农村妇女毛片精品久久麻豆| 久久精品av在线观看| 国产免费爽爽视频在线观看 | 久久久精品久久久国产| 综合偷自拍亚洲乱中文字幕| 国产精品51麻豆cm传媒| 欧美成人在线A免费观看| 美腿丝袜网址亚洲av| 亚洲精品无码不卡在线播he| 黑人玩弄人妻中文在线| 日韩国产成人精品视频| 极品少妇一区二区三区四区| 精品人妻码一区二区三区剧情| 日本三级欧美三级人妇视频黑白配| 久久网视频中文字幕综合| 男人的av天堂狠狠操|