私はPythonが初めてで、欲しい答えを探していましたが、見つかりませんでした。1D スペクトル ファイル (.fits) があり、その波長とフラックス情報にアクセスしたいと考えています。たとえば、波長値をプラグインすると、入力波長で光束を与えるプログラムを作成しようとしています。そのようなプログラムの書き方や、どのモジュールから始める必要があるかについて、誰かが簡単なガイドを教えてくれませんか? numpy と pyfits はタスクを実行するのに十分でしょうか? どうもありがとう。
質問する
1459 次
1 に答える
3
Klaus が言及した FITS 標準からわかる限り、PyFits と Numpy が必要です (Numpy は PyFits の前提条件です)。numpy 1.7 の MKL バージョンを入手する
このファイルをダウンロードしました: HST FOS (FOS 2 x 2064 プライマリ アレイ スペクトルには、光束と波長の配列が含まれており、小さなテーブル拡張が追加されています)には、スペクトルと波長が含まれています。今、私はフォーマットに慣れていませんが、これは私が見つけることができたものです:
import pyfits
hdulist = pyfits.open('testFits.fits')
tbdata = hdulist[1].data
hdulist.info()
これをくれました: hdulist.info()
Filename: D:\Downloads\Documents\Python_Scripts\testFits.fits No.
Name Type Cards Dimensions Format 0 PRIMARY
PrimaryHDU 163 (2064, 2) float32 1 y19g0309t.c2h.tab
TableHDU 85 2R x 19C [D25.16, E15.7, E15.7, E15.7,
E15.7, D25.16, D25.16, I11, I11, D25.16, D25.16, A8, A8, I11, E15.7,
A4, E15.7, E15.7, E15.7]
明らかに、私はこれの頭や尾を作ることができませんでした:)、それでもう少し詳しく:
print tbdata[0]
私にくれた:
(1.0, 1.0, 1.0, 0.0, 2.738755e-15,
182.63573015259999, 39.405888372579994, 0, 0, 49099.133531036357, 49099.133541163668, 'PIXEL', 'SINGLE', 0, -1516.0, 'OBJ', 31.249689, 0.0, 0.0)
これはあなたにとって理にかなっていると思います。
print tbdata.columns
ColDefs(
name = 'CRVAL1'; format = 'D25.16'; start = 1
name = 'CRPIX1'; format = 'E15.7'; start = 29
name = 'CD1_1'; format = 'E15.7'; start = 45
name = 'DATAMIN'; format = 'E15.7'; start = 61
name = 'DATAMAX'; format = 'E15.7'; start = 77
name = 'RA_APER'; format = 'D25.16'; start = 93
name = 'DEC_APER'; format = 'D25.16'; start = 121
name = 'FILLCNT'; format = 'I11'; start = 149
name = 'ERRCNT'; format = 'I11'; start = 161
name = 'FPKTTIME'; format = 'D25.16'; start = 173
name = 'LPKTTIME'; format = 'D25.16'; start = 201
name = 'CTYPE1'; format = 'A8'; start = 229
name = 'APER_POS'; format = 'A8'; start = 241
name = 'PASS_DIR'; format = 'I11'; start = 253
name = 'YPOS'; format = 'E15.7'; start = 265
name = 'YTYPE'; format = 'A4'; start = 281
name = 'EXPOSURE'; format = 'E15.7'; start = 289
name = 'X_OFFSET'; format = 'E15.7'; start = 305
name = 'Y_OFFSET'; format = 'E15.7'; start = 321
)
これらの列を使用して、モジュールを次のように作成できます。
- 入力フラックスを取る
- 一致するフラックスの検索列
- 一致する行の波長を表示
于 2013-06-20T12:27:45.997 に答える