TCD1304 リニアイメージセンサで分光器 6 FITS ファイルに保存する

製作した分光器のデータは、デフォルトではテキストファイルに保存される。フォーマットは、

  #Data from the TCD1304 linear CCD
  #column 1 = pixelnumber , column 2 = pixelvalue
  #Pixel 1-32 and 3679-3694 and are dummy pixels
  #SH-period: 100 ICG-period: 2000000 Integration time: 50.0 µs
  1 1027
  2 411
  3 561
  ・・・・
  ・・・・

  3692 1030
  3693 1034
  3694 1030

というふうになっている。CSV ファイルの形式でコラムごとの値が ASCII 形式となっている。これをEXCELGNUplot などで処理するようにしている。これでは、波長のキャリブレーションなどが不便なので天文画像データの一般的なフォーマットである FITS 形式で保存できるようにした。

FITS フォーマットの詳細については、こちらの「FITS の手引き」を参考に。

ww1.fukuoka-edu.ac.jp

また、PC側のソフトは Python で書かれているので、

www.astropy.orgのパッケージを使うことができる。ドキュメントは詳細に書かれているが、なにぶん英語であり、複雑なデータでもない。シンプルに取り込んだデータを FITS ファイルを生成するサンプルとして、

qiita.comを参考にした。

Anaconda3 の Python(Spyder3)では、最初から Astropy のパッケージがインストールされているので、

   from astropy.io import fits

と記述するだけで使うことができる。

FITS ヘッダーを定義して、ファイル書き込みのところだけのソースは、

 def savefile(self):
  filename = filedialog.asksaveasfilename(defaultextension=".FITS", title="Save file as",

  parent=self)
  try:

  # for i in range (3694):
   for i in range (3694):
    LineImage[i] = config.rxData16[i]

   hdu = fits.PrimaryHDU(data = LineImage)
   hdu.header['BITPIX'] = 16
   hdu.header['NAXIS'] = 1
   hdu.header['NAXIS1'] = 3695
   hdu.writeto(filename,overwrite=True)

  except IOError:
   messagebox.showerror("By the great otter!","There's a problem saving the file.")

というふうに。

これを BASSproject で読み込んで波長をキャリブレーションすると

f:id:PanariLab:20200315111641p:plain

こんなふうに波長の表示できる。

このように生成した FITS ファイルだが、一次元画像のせいか、Header が間違っているのか FITS ファイルが処理できるいくつかの ソフトでは、読み込むことができなかった。Makalii では読み込むことはできて、ヘッダーも表示されるが、グラフを表示させようとすると、範囲を選択できず表示できない。2次元画像処理を前提にしているせいだろうか。

ちなみに、fv FITS Viewer

heasarc.nasa.govではこのようにきちんと表示される。

f:id:PanariLab:20200315113711j:plain

なんとか動いているようなので、あまり深追いせずに使えるソフトを使っていくことに。