前置き
Pythonで天文データ解析をする際に必須のライブラリであるastropy
。
今回はこれをもちいて天文データフォーマットの標準であるFITSファイルに行を追加する方法の備忘録を兼ねた共有です。
ネットで検索したが難しいという情報が。。
https://stackoverflow.com/questions/68562745/adding-a-row-to-a-fits-table-with-astropy
そんなはずないということで、頑張ってみたらできたので記事にしてみました。
今回はGTIをFITSファイルに追加するという作業を例に扱います。
結論
Table
オブジェクトのadd_row
method で追加することが可能です。
詳細
以下のようなFITS ファイルを想定します。
$ ftlist event.evt+2 C
HDU 3
Col Name Format[Units](Range) Comment
1 START 1D
2 STOP 1D
これに[0, 10]
と[11, 15]
の範囲のGTIを追加してみます。
読み込み、追加、そして保存までのスクリプトは以下のようになります。
from astopy.table import Table
from astopy.io import fits
def update_gti(hdul, gtis, idx_gti_hdu=2):
tbl = Table.read(hdul[idx_gti_hdu])
for gti in gtis:
tbl.add_row(gti)
hdul[idx_gti_hdu] = fits.BinTableHDU(tbl)
return hdul
gtis = [[0, 10], [11, 15]]
hdul = fits.open("event.evt")
hdul_updated = update_gti(hdul, gtis, idx_gti_hdu=2) # HDU 3 のインデックスは 2
hdul_updated.writeto("new_event.evt")
もちろん公式ドキュメントにあるのですが情報を見つけるのが少し大変でした。