HST WFPC2データの解析 II: イメージ間のオフセットを決める。 クロス・コリレーションを取って、イメージ同士のオフセットを決める。 普通のデータ解析では、星の位置のズレからオフセットを決める方法が良く 用いられるが、クロス・コリレーションを使う方法では銀河など、広がった 天体を用いても、オフセットが決まる。 1, IRAF/STSDAS/ANALYSIS/DITHERパッケージのロード > analysis > dither 2, task "sky" のパラメータ設定 銀河の解析の場合は、CCDに十分なスカイが映っていない場合が多いので、 スカイのtask "sky"を使ってスカイバックグラウンドの引き算は行わない。 しかし次のtask "precor"で"sky"のパラメータを使うため、ここで設定し ておく。 > unlearn sky > sky.masks = "" > sky.lower = -99. > sky.upper = 4096. > sky.dq = "" > sky.subsky = yes > sky.width = 8 > sky.stat = "mean" > sky.skyname = "BACKGRND" > sky.skyvalue = 0 > sky.verbose = no 3, task "precor"で大雑把にcosmic rayを除く。 > unlearn precor > precor.box_siz="5" > precor.min_pix = 16. > precor.min_val=3. > precor.ngroup = 4 ! WFPC2は4枚のCCDで出来ている > precor.do_sky = yes ! task "sky"を走らせる > precor.sig2n = yes > precor image?.hhh > ls image1_obj.hhh, image1_obj.hhdなど、*_objのついたファイルが出来る。 4, イメージ同士のクロス・コリレーションを取る。 ここでは、image1をレファレンスにし、image2のオフセットを決める。 まずはtask "offsets"がpackage "fourier"を必要とするので、ロード。 > fourier task "offsets"のsubtask "cdriz"のパラメータを設定。 > cdriz.margin = 50 !イメージ外縁部はノイジィーなので使わない > cdriz.tapersz = 50 !Size of cosine bell tapering window > cdriz.pad = no *_obj.hhhのリストを作る。 # ls -1 *_obj.hhh > image.list # cat image.list ! ちゃんと出来ているか確認 image1_obj.hhh image2_obj.hhh image1_objをレファレンスに、イメージのクロス・コリレーションを取る。 > offsets @image.list image1_obj.hhh cross1x coeffs="header" > ls cross1x_01_g1.hhd cross1x_01_g1.hhh cross1x_01_g2.hhd cross1x_01_g2.hhh ... など、image1とimage2のクロス・コリレーションのイメージが、4枚の CCDの分だけ出来る。 5, クロス・コリレーションのイメージにガウス楕円フィットし、 オフセットを決定 まずはtask "shiftfind"がpackage "fitting"を必要とするので、ロード。 > fitting 次に天体が映っているCCDについての、クロス・コリレーションイメージを見る。 いまはwf2に映っているので、*_g2.hhhというのを見る。 > displ cross1x_01_g2.hhh 1 ここで見える画像に、楕円形をフィッティングするので、楕円形のポジション・ アングルやellipticity、FWHMなどを、画像からだいたい予測する。[今の場合、 pa = 0.0, ellip = 0.05, fwhm = 20.0]。これらの値を task "shiftfind"のパラメータとして設定。 > unlearn shiftfind > shiftfind.x = INDEF > shiftfind.y = INDEF > shiftfind.boxsize = INDEF > shiftfind.fwhm = 20 > shiftfind.ellip = 0.05 > shiftfind.pa = 0 > shiftfind.fitbox = 10 ! Gauss fitをする領域の大きさ > shiftfind.kellip = yes ! ellip, paなどは固定 > shiftfind.kpa = yes > shiftfind cross1x*.hhh shifts.txt これで、計算されたオフセットの値がshifts.txtに書き込まれた。 中身を確認してみる。 # cat shifts.txt image1.hhh 1 -0.0021 0.1156 -0.0005 0.0979 0.00 400.00 image1.hhh 2 -0.0008 0.0997 -0.0009 0.0704 0.00 400.00 image1.hhh 3 0.0003 0.1285 -0.0004 0.0916 0.00 400.00 image1.hhh 4 0.0005 0.1168 -0.0012 0.0852 0.00 400.00 image2.hhh 1 -121.1384 0.1868 40.0482 0.1583 0.00 400.00 image2.hhh 2 -2.1030 0.0641 2.4495 0.0552 0.00 400.00 image2.hhh 3 2.5904 0.0585 2.3983 0.0491 0.00 400.00 image2.hhh 4 2.3255 0.1479 -2.1812 0.1000 0.00 400.00 collumn 2: CCDの番号(pc,wf2,wf3,wf4)、collumn 3: x方向のoffset, collumn 5: y方向のoffset、CCDごとに読み出し方向が90°ずつズレているので、x,y方向の ズレは符号が違う。ただし一般的にditherするように観測する場合、wfチップで 2.5pix、pcチップで5pix程度ずれるように撮影するので、CCD=1については絶対値 がほぼ5、CCD=2,3,4については絶対値が2.5ぐらいになるはず。image1はレファレ ンスなので、ズレはほぼゼロなことを確認する。image2については wfチップの値 はほぼ2.5なので良いが、PCチップは本来の値(5.0)に比べ、明らかにズレている。 これはPCチップに天体が載っていないため、フィッティングに失敗したということ を意味する。 6, 4枚のCCDに重みをつけ、計算したオフセットのアベレージを取る。 今はpcチップの値が辺なので、(pc,wf2,wf3,wf4)=(0,1,1,1,)の重みを掛ける。 > unlearn avshift > avshift shifts.txt angle=0 weight="0. 1. 1. 1." > average_shifts 中身を確認 # cat average_shifts ... # Image Group xsh_in ysh_in best_xsh best_ysh ... image2.hhh 1 -121.138 40.048 -5.272 -4.960 ... image2.hhh 2 -2.103 2.450 -2.291 2.391 ... image2.hhh 3 2.590 2.398 2.403 2.278 ... image2.hhh 4 2.325 -2.181 2.255 -2.425 ... # Weights: 0. 1. 1. 1. ... 7, wmosaicで合成した画像に換算したオフセットを計算する HST Dither Handbookには、pc,wf2,wf3,wf4の4枚のチップを別々に解析する 方法が記述してあるが、ここでは面倒なので、wmosaicで合成した画像を一気 にditherする。そのため、上の1枚1枚についてにのオフセットを、wmosaic 画像のオフセットに計算しなおす。上記average_shiftsは、 Group best_xsh best_ysh 1 2 * Y1 -2 * X1 2 -X2 -Y2 3 -Y3 X3 4 X4 Y4 とうい順番にシフト量が並んでいる。wmosaicで合成した画像のオフセットは これらを平均して、 X = (X1 + X2 + X3 + X4) / 4 Y = (Y1 + Y2 + Y3 + Y4) / 4 と計算出来る。今はPCチップの重みを0にしたので、3枚のwfチップのみ使って、 X = (X2 + X3 + X4) / 3 = ( 2.291 + 2.278 + 2.255) / 3 = 2.275 Y = (Y2 + Y3 + Y4) / 3 = (-2.391 - 2.403 - 2.425) / 3 = -2.406 とする。 8, ディレクトリの掃除 # mkdir tempfiles # mv *obj*.hh? cross1x* tempfiles/