CCD 解析

1次処理用データ (Bias, Dark, Flat, Fringe) の準備が終わったら、各 visit での CCD 毎の解析に移ります。 最後に 生成データの構成 について記載しています。


CCD 毎の1次解析

1次解析用データの準備ができたら、CCD 毎の解析を始めましょう。

まず、各 CCD の画像補正では、overscan 引き、bias 引き、dark 引き、フラットフィールディング、そして fringe 引きが行われます。 さらに、サチュレーションピクセルやバッドピクセルに対するマスクも行います。また、bias 引きの後には CCD ごとに線形性補正、クロストーク補正、brighter-fatter 補正が行われます。 画像に対して一通りの処理が終わると、キャリブレーションが走ります。 まず、各 CCD 毎に 128 pixel グリッドで sky 引きを行い、較正に使用する天体を検出します。 検出された天体の PSF を測定し、アストロメトリ用カタログファイルとマッチングを行い、等級原点を見積もります。 このあと、宇宙線が除去されます。最後に天体がマスクされた状態でもう一度 sky 引きが行われ、各 CCD 毎に座標と等級原点が決まります。 次に天体検出と測定が行われます。天体検出時にはデブレンドが行われ、混ざっている天体が分離されます。 検出された天体において、位置・形状・明るさが測定され、ピクセルのマスク情報や測定中のイベントに応じてフラグが立ちます。

使うコマンドは singleFrameDriver.py です。

# 解析ディレクトリは ~/HSC, rerun 名は test とします。rerun 名は天体名や領域名にするとわかりやすいです。
# local 環境で解析を行う場合。
singleFrameDriver.py ~/HSC --calib ~/HSC/CALIB --rerun test --id visit=18214..18220:2^18224..18230:2 --batch-type=smp --cores=8

# 1次処理済みデータ (bias, dark 引き、 flat 割り、その他装置固有の処理が終わったデータ, postISR データ) も出力させたい場合。
# Helpdesk の調査で必要になることがあります。
singleFrameDriver.py ~/HSC --calib ~/HSC/CALIB --rerun test --id visit=18214..18220:2^18224..18230:2 --config processCcd.isr.doWrite=True --batch-type=smp --cores=8

# singleFrameDriver.py [解析ディレクトリ] --calib [calib データ用ディレクトリ] --rerun [rerun 名] --id [visit, field, filter..]
# オプション
#       --batch-type: singleFrameDriver.py ではジョブキューにジョブを投入することができます。
#       --config processCcd.isr.doBias=False processCcd.isr.doDark=False: Bias と Dark をスキップした場合はこれらのオプションをつけて下さい。

標準的な領域 (星が多くない領域) の処理をする場合、1プロセスでだいたい 2GB のメモリを消費します。メモリ容量を確認し、メモリが不足しないようにコア数を指定して下さい。 HSC データ解析用共同利用計算機 (hanaco) では、8 コアで 10 ショット分の処理を行うと、10 時間程度かかります。

CCD 毎の1次解析が終了すると、1次処理済み画像と天体カタログが生成されます。まずは画像を確認しましょう。画像データは以下のディレクトリに生成されます。

  • sky 引き込み1次処理済み画像データ : ~/HSC/rerun/[rerun]/[pointing]/[filter]/corr/CORR-[visit]-[ccd].fits
  • sky 引きで使われた sky 画像 : ~/HSC/rerun/[rerun]/[pointing]/[filter]/corr/BKGD-[visit]-[ccd].fits
  • overscan 引き後の天体画像 (サムネイル) : ~/HSC/rerun/[rerun]/[pointing]/[filter]/thumbs/oss-[visit]-[ccd].png
  • Flat 割り後の天体画像 (サムネイル) : ~/HSC/rerun/[rerun]/[pointing]/[filter]/thumbs/flattened-[visit]-[ccd].png
  • 1次処理済み (postISR) 画像データ : ~/HSC/CALIB/postISRCCD/v[visit]-f[filter]/c[ccd].fits
../_images/SFP_CCD.png

図1:左から順に生データ、oss 画像、flattened 画像、BKGD 画像、CORR 画像。BKGD 画像はピクセル数が少ないので、他の画像と同じくらいの大きさになるようにサイズを調整しています。また、BKGD と CORR 画像は見やすくするため、画像の向きを生データに合わせています。

そして、CCD ごとの天体測定カタログや、検出天体と外部カタログをクロスマッチさせたマッチリストは /rerun/[rerun]/[pointing]/[filter]/output/ 以下に生成されます。

  • アストロメトリと等級原点較正用に各 CCD 上で検出・測定された明るい天体カタログ : ICSRC-[visit]-[ccd].fits
  • single frame processing の最後に生成された各 CCD 上で検出・測定された天体カタログ : SRC-[visit]-[ccd].fits
  • 外部カタログ天体とクロスマッチさせたリスト : SRCMATCH-[visit]-[ccd].fits
  • 検出天体の測定結果と、それとマッチした外部カタログ天体の情報がまとまったカタログ : SRCMATCHFULL-[visit]-[ccd].fits

これらのカタログファイルは FITS BINTABLE 形式になっているので、ds9 等の画像ソフトでは中身を見ることができません。 カタログデータを確認するソフトとしては、Fv (Fv FITS Viewer) や STSDAS/TABLES (TABLES)があります。 PyFITS や IDL でも確認することができます。 ここでは、Fv でカタログを開いた例を示します。

../_images/fv.png

図2:Fv で SRC ファイルを開いた結果。左下は Header、右がカタログ。

カタログのスキーマファイルは rerun/[rerun]/schema 以下にあります。hscPipe4 とはカラム名が大きく変わっているので注意して下さい。

また、hscPipe では点源のカウントを r = 12 pix (直径約 4”) のアパーチャで測っています。 これは全フラックスを測るにはやや小さめです。 そのアパーチャで測ったフラックスを PSF フラックスとして 1 ADU の等級を決めています。 天体を測定した場合、Kron, PSF, CModel フラックスなどでは点源が r = 12 pix アパーチャで測定した際のフラックスになるように補正がかかります。 これをアパーチャ補正と呼びます。 補正後のフラックスに上記のゼロ点が適用されていることになります。


生成データの構成

生成された CORR データは全 13 の HDU (Header Data Unit) を持っています。 それぞれの構成を以下に示します。

  • Primary HDU (HDU0): 基本情報ヘッダ
  • 2nd HDU (HDU1): サイエンスイメージ (32bit Float)
  • 3rd HDU (HDU2): マスクイメージ (16bit UInt)
  • 4th HDU (HDU3): バリアンスイメージ
  • 5th HDU 以降: 付属情報 (PSF やアパーチャ補正)

図3 はサイエンスイメージ、マスクイメージの例です。 ds9 でマスクイメージ等を開く際は起動時に選択できます。

# ds9 で1次処理済みイメージを開く
ds9 CORR-[visit]-[ccd].fits
# もしくは
ds9 CORR-[visit]-[ccd].fits[1]

# ds9 でマスクイメージを開く
ds9 CORR-[visit]-[ccd].fits[2]

# ds9 でバリアンスイメージを開く
ds9 CORR-[visit]-[ccd].fits[3]
../_images/CORR_Mask.png

図3:左がサイエンスイメージ、右がマスクイメージ。

マスクイベントについてはまずマスクイメージのヘッダ情報を確認します。 図4 はマスクイメージのヘッダの例です。 赤い四角で囲まれた部分がビットとマスクイベントの対応になります。 例えば、図3 のマスクイメージでピクセルの値が 1024 = 2^10 の部分はヘッダ情報を確認すると “HIERARCH MP_CROSSTALK = 10” なので、クロストークのフラグが立っていることになります。 また、2080 = 2048 + 32 = 2^11 + 2^5 であるので、ヘッダ情報より、Not Deblended かつ Detected のフラグが立っていることがわかります。 ただし、このマスクイベントとビットの関係は固定ではないので、必ずマスクイメージのヘッダを確認するようにしてください。

../_images/Mask_header.png

図4: マスクイメージのヘッダ。赤枠内にビットとマスクイベントの対応が書かれている。

またマスクイベント別に確認することが出来るツールを以下に公開中です。

https://hsc-gitlab.mtk.nao.ac.jp/sogo.mineo/view-mask/blob/master/view-mask.py


生成データ確認の例

1次処理済みイメージに、SRC カタログにある天体をプロットしてみます。 以下は python のインタラクティブモードでの動作の例です。メインをスクリプトにしても良いです。 結果は 図5 のようになります。

# hscPipe をセットアップ
setup-hscpipe

# python を起動
python

# モジュールの呼び出し
>>> import pyfits
>>> import lsst.afw.display.ds9 as ds9
>>> import lsst.afw.image as afwImage

# CORR ファイルを呼び出し、ds9 で表示
>>> corr = afwImage.ImageF("~/HSC/rerun/[rerun]/[pointing]/[filter]/corr/CORR-[visit]-[ccd].fits")
>>> ds9.mtv(corr)
# ds9 が別ウィンドウで立ち上がります。

# カタログファイルを読み込む
>>> cat = pyfits.open("~/HSC/rerun/[rerun]/[pointing]/[filter]/output/SRC-[visit]-[ccd].fits")
>>> cat[1].data
# 全データが出力される
#       FITS_rec([ ([ ....
#       ...
#       dtype=(numpy.record, [('flags', 'u1', (14,)), ('id', '>i8'), ('coord_ra', '>f8'), ('coord_dec', '>f8'), ('parent', '>i8'),
#       ... ('base_FootprintArea_value', '>i4'), ('base_ClassificationExtendedness_value', '>f8'), ('footprint', '>i4')]))

# カタログデータのうち、位置情報を得る
>>> xs = cat[1].data["base_SdssCentroid_x"]
>>> ys = cat[1].data["base_SdssCentroid_y"]

# ds9 上にプロットする
>>> for x,y in zip(xs,ys):
...     ds9.dot("o", x, y, size=30)
# 先程立ち上がった CORR イメージの上に○で天体の位置が表示される。
../_images/CORR_SCR_ds9.png

図5:左が CORR ファイルを ds9 で表示させたもの、右がそれに SRC ファイルの天体をプロットしたもの。