什麼是Fits文件?我們該如何讀取它其中的數據呢?

我使用的環境是Ubuntu系統,以及Python。當然Windows及macOS也可以,環境略有不同,但是代碼都是一樣的。


大家好,對於一名天文學新學生來說,首先需要接觸到的文件格式就是 .Fits ,本文將簡單討論什麼是Fits文件?我們該如何讀取它其中的數據呢?由於作者也是剛剛踏入天文學這個專業,學識水平有限,如有錯誤之處,希望大家提出建議,多多指正!

1. Fits文件格式簡介。

FITS 全稱是Flexible Image Transport System,它是天文學界常用的數據格式,它專門為在不同平臺之間交換數據而設計,國際天文學會(IAU)於1982 年確定為世界各天文臺之間用於數據傳輸、交換的統一標準格式。所以我們必須要了解此類文件的基本特性,以及使用方法。

一個 FITS 文件包含一系列邏輯單元,而每個單元的開頭都是用一組標題記錄描述隨後的數據記錄。一個 FITS 文件的邏輯記錄長度總是 2880 字節(bytes),每字節 8 位(bits)。標題和數據組都在一個新的邏輯記錄裡起始。FITS 標題用 ASCII 碼編輯成每一個開始用一個 8 字符的關鍵詞(keyword) 定義信息的類型(80字符)。參數值用標準 FORTRAN-77 規則編輯,它們詳細地描述了標題記錄後面的數據。在文件裡最後的標題/數據單元后面,可能存在附加的記錄。標題的設計對描述的數據組所需的參數定義有較大的靈活性。總是需要給出很好定義的標準關鍵詞組,甚至用簡單的程序也容易能夠讀出數據的基本內容。

如下圖:

什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖一 fits文件基本組成


看這些學術性的描述,感覺有些抽象,我們下面看一個真實的天文數據,如下圖,這是tess衛星開放的數據,一個恆星的光變曲線文件:


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖二 fits文件


那麼我們看到文件結尾是.fits。

下面我們看看打開它之後長什麼樣子,這裡我用的Python打開:

輸入代碼 from astropy.io import fits 加載用於處理fits文件的包


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖三


輸入代碼 hdu=fits.open('tess2019198215352-s0014-0000000142520516-0150-s_lc.fits')

括號裡是文件名,其中hdu是變量,可以自己輸入想用的

接著輸入代碼 hdu.info() info是查看基本信息


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖四


那麼我們能看到一些關於文件的基本信息,例如文件名,以及文件頭和數據。

其中,No.0 是每個文件都有的,後面的NO.1等便是我們這個文件的數據所在,我們之前講了這是一個恆星的光變曲線文件,我們看到NO.1 的名字便是lightcurve(光變曲線),所以我們所需的數據便存儲在裡面,我們看到後面Dimensions下面寫著19337R x 20C,意思是文件數據有19337行,20列,這就是一個二維數組。後面的format是數據類型,其中是這樣規定的:I表示整型, J表示長整形, E表示浮點型, D表示雙精度浮點型,A表示字符型。19337R x 20C後面的中括號裡依次寫的意思就是不同列的數據類型。


我們打開No.0看看,

輸入代碼:hdu[0].header


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖五


上圖便是no.0的結果,header看的是頭文件,相當於目錄,編寫規則是:

1-8列是關鍵詞,9列是=,10列空格,11-80是描述。一些基本的關鍵詞意思是:

SIMPLE 邏輯變量,指明文件是否符合基本 FITS 標準。

BITPIX 整數變量,指明用於表示每一個象元值的位數。

當然,每個關鍵詞後面都有描述,可以自己翻譯看一下。

我們接下來主要看下no.1的內容。

輸入代碼 hdu[1].header


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖六


同樣,我們打開的是頭文件,相當於目錄,

我們可以輸入hdu[1].header['BITPIX'],來看BITPIX對應的內容,當然,本身我們直接也能看到等於8


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖7


這是關於頭文件,接下來,我們如何查看數據呢?

我們可以使用data函數。

輸入hdu[1].data[i][j],可以返回數據,其中i是行,j是列。

當然我們也可以只要某一列,比如之前的time,如果我們知道這列名稱是什麼,比如 time,


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖8


就使用:hdu[1].data.field(‘time’),注意,代碼都是使用英文輸入。


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖9


就得到上圖的結果,如果你沒有查看目錄(header),也可以通過下面的代碼查看數據的名字。

代碼:hdu[1].data.names

下圖為結果:


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖10


其實,還有以下方法也可以訪問數據

代碼:hdu['LIGHTCURVE'].data['TIME']

即你如果知道關鍵詞。

結果:


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖11


以上就是關於fits文件的讀取方法。


總結:


from astropy.io import fits # 加載科學包

hdu=fits.open( ‘ 文件名 ‘ ) # 打開文件

hdu.info() #查看文件信息

hdu[?].header #查看頭文件信息 ?寫想看的單元

hdu[?].data[i][j] #查看i行j列數據

hdu[1].data.field(‘time’) #查看time 的數據

hdu[1].data.names #查看數據名字

hdu['LIGHTCURVE'].data['TIME'] #直接訪問數據


Tip: 注意使用英文模式輸入代碼。




題外話,其時現在也有軟件可以直接打開fits格式,我在Windows上安裝了叫做fv的軟件,長這個樣子

什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖12


,它是由美國NASA開發的用於打開fits 的軟件,官網鏈接:https://heasarc.gsfc.nasa.gov/docs/software/ftools/fv/


打開後界面很簡陋:


什麼是Fits文件?我們該如何讀取它其中的數據呢?

圖13


可以進行可視化讀取,但是我也沒玩懂這個軟件,有興趣的可以自己玩。

除此之外,還有下面的軟件可以打開fits:

1、GIMP 開發者:The GIMP Development Team 兼容:Windows、macOS、Linux。鏈接:https://www.gimp.org/

2、 Wolfram Research Mathematica 開發者:Wolfram Research 兼容:Windows、macOS、Linux。鏈接:https://www.wolfram.com/mathematica/

3、MSB AVIS 開發者:開源 兼容:Windows 鏈接:http://www.msbsoftware.it/avis/

4、MicroObservatory Image 開發者:開源 兼容:Windows、macOS、Linux

鏈接:https://waps.cfa.harvard.edu/eduportal/js9/software.php


部分引用:

1. https://www.cnblogs.com/tyjsjl/p/3952823.html

2. https://baike.baidu.com/item/fits/9223832?fr=aladdin

3. https://www.solvusoft.com/zh-cn/file-extensions/file-extension-fits


2020.03.07


分享到:


相關文章: