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/