1

私はPythonが初めてで、欲しい答えを探していましたが、見つかりませんでした。1D スペクトル ファイル (.fits) があり、その波長とフラックス情報にアクセスしたいと考えています。たとえば、波長値をプラグインすると、入力波長で光束を与えるプログラムを作成しようとしています。そのようなプログラムの書き方や、どのモジュールから始める必要があるかについて、誰かが簡単なガイドを教えてくれませんか? numpy と pyfits はタスクを実行するのに十分でしょうか? どうもありがとう。

4

1 に答える 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

)

これらの列を使用して、モジュールを次のように作成できます。

  1. 入力フラックスを取る
  2. 一致するフラックスの検索列
  3. 一致する行の波長を表示
于 2013-06-20T12:27:45.997 に答える