CCD 線形性解析用の cl script, C program
2003.11.25 H.Akitaya
解析の流れ
Shutterless photon transfer method
- LED照射0秒画像取得 ledxx.fits
- bias画像取得 bias.fits
- 各columnごとのS, σ^2計算
cl> noshph4 led01.fits slpt_raw.xy bias.fits
cl> noshph4 led02.fits slpt_raw.xy bias.fits
...
cl> noshph4 led0n.fits slpt_raw.xy bias.fits
- binning
% gain_bin_v11 0 65000 1000 slpt_raw.xy slpt_b1000.xy
光量 - シグナル値関係
- 積分時間を変えて安定光源スペクトル取得
light_xxxsec.fits
安定性確認のため、適当な積分時間を一決め、こまめに撮る
light_varxx.fits
- bias画像取得、bias値測定
light_000sec.fits
cl> imstat light_000sec.fits[2171:2190,101:900]
---> biasvalue
- maskの作成
- light_varxx.fitsの平均化、bias引き
light_ave.fits
- badcolumn処理
cl> lin_badcolmsk light_ave.fits light_ave_bc.fits 0
- mask作成 (例: 2000ADU- 2020ADU)
cl> lin_mkmsk light_ave_bc.fits light_mask.fits 2000 2020
- 光量変化の関数決定
- 安定画像のシグナル値の時間変化を測定
cl> lin_tc_withmsk light_var.lst light_var00.fits
(biasvalue) light_mask.fits 0.0 0.0 0.085 > sigvar.xy
- 光量変化の一次関数の各パラメータa, bを知る
sigvar.xyの $2:$12:$13 に一次関数をfitしてa,bを知る
gnuplot> f(x) = (a*100.0) * x + b
gnuplot> fit f(x) "sigvar.xy" u 2:12:13 via a,b
- 光量変化補正の時間-光量関係を得る
cl> lin_tc_withmsk light.lst light_var00.fits (biasvalue)
light_mask.fits (a) (b) 0.085 > light_tc.xy
- LRsを得る
cl> lin_calclrs light_tc.xy 20000.0 0.455 > light_lrs.xy
IRAF clscripts
lin_01rev.cl
lin_01rev (input_fn) (output_fn)
(input_fn) : file : 入力ファイル
(output_fn) : file : 出力ファイル
数値が 0 or 1 からなるマスク画像の、0と1を反転させる。
lin_badcolmsk.cl
lin_badcolmsk.cl (input_fn) (output_fn) (rplc_val)
(input_fn) : file : 入力ファイル
(output_fn) : file : 出力ファイル
(rplc_val) : real : 設定値
画像内で使用しない領域(オーバースキャン領域、バッドカラム群;
領域はスクリプトファイル内で定義)の値を 設定値 rplc_val に
設定する。
lin_liststat.cl
lin_liststat (list_fn) (mask_fn) (biaslevel)
(list_fn) : file : 入力リストファイル
(mask_fn) : file : 適用するマスクファイル
(biaslevel) : real : バイアスレベル [ADU]
リストファイル list_fn 内に指定する画像ファイルにそれぞれに、
lin_mskstat を適用する。lin_mskstat で使用するマスクファイル
mask_fn、および、差し引くべきバイアスレベル biaslevel を指定する。
lin_mskstatを使用。
lin_mkmsk.cl
lin_mkmsk (template_fn) (mask_fn) (s_min) (s_max)
(template_fn) : file : 入力テンプレート画像
(mask_fn) : file : 出力マスク画像
(s_min) : real : 選択シグナル値下限値
(s_max) : real : 選択シグナル値上限値
入力テンプレート画像 template_fn の画像内で、(s_min)と(s_max)の
範囲にあるピクセルを 0、それ以外のピクセルを 1とするマスク画像、
mask_fn を出力する。
lin_tc.cl
lin_tc (list_fn) (base_time_fn) (biaslevel)
(x1) (x2) (y1) (y2) (tcor) (tcor_b)
(list_fn) : file : 入力リストファイル
(base_time_fn) : file : 時刻の原点となる画像
(biaslevel) : real : バイアスレベル
(x1) : int : 選択領域 開始x座標
(x2) : int : 選択領域 終了x座標
(y1) : int : 選択領域 開始y座標
(y2) : int : 選択領域 終了y座標
(tcor) : real : 光量補正係数・傾き
(tcor_b) : real : 光量補正係数・切片
出力
column#1 : s : 画像ファイル名
2 : f : 測定時刻
3 : f : 積分時間(光量補正後)
4 : d : 使用したピクセル数
5 : f : 領域内平均値
6 : f : 領域内中間値
7 : f : 領域内標準偏差
8 : f : 領域内最小値
9 : f : 領域内最大値
10 : f : 測定誤差 (標準偏差 / √ピクセル数)
11 : f : 光子数誤差 (√(ゲイン x 平均値))
12 : f : 時刻0の平均値に対する光量変化量 lpc [%]
lpc = 100.0 * ( mean / mean0 * exptime0 / exptime - 1.0)
13 : f : 時刻0の平均値に対する光量変化量の誤差 dlpc
dlpc = 100.0 * pherror / mean0
入力リストファイル list_fn 内に記述された各画像について、
バイアスレベル biaslevel 差引の上で、
指定した長方形領域 [x1:x2, y1:y2] 内の統計量を、測定時刻とともに
出力する。
時刻は、各画像のヘッダーから時刻を読み出し、base_time_fn で指定する
画像ファイルの時刻と 0として、分単位で得る。
光量 L が、時刻 0 での光量 L0 に対して、測定時刻 tobs につれて、
一時関数、
L = L0 * [ 1 + tcor * tobs + tcor_b]
と変化しているとして、光量変化のパラメータ tcor、tcor_bを与える。
この時、出力される積分時間 texp が、ヘッダーから読み出した値 texp_hに
対して、
texp = texp_h * [ 1 + tcor * tobs + tcor_b]
と補正されて出力される。
lin_mskstat.cl
lin_mskstat (input_fn) (mask_fn)
(input_fn) : file : 入力画像
(mask_fn) : file : マスク画像
(出力)
column#1 : s : 画像ファイル名
2 : f : 積分時間
3 : d : 使用したピクセル数
4 : f : 領域内平均値
5 : f : 領域内中間値
6 : f : 領域内標準偏差
7 : f : 領域内最小値
8 : f : 領域内最大値
9 : f : 測定誤差 (標準偏差 / √ピクセル数)
入力画像 input_fn について、マスク画像 mask_fn で指定された
ピクセル群内で統計量を計算し出力する。
σ-rejectionについては、スクリプト内で記述
lin_tc_withmsk.cl
lin_tc_withmsk (list_fn) (base_time_fn) (biaslevel) (mask_fn)
(tcor) (tcor_b) (toffset)
(list_fn) : file : 入力リストファイル
(base_time_fn) : file : 時刻の原点となる画像
(biaslevel) : real : バイアスレベル
(mask_fn) : file : マスクファイル
(tcor) : real : 光量補正係数・傾き
(tcor_b) : real : 光量補正係数・切片
(toffset) : real : 真の積分時間の、ヘッダに記録されている
積分時間に対する超過分
リストファイル list_fn について、バイアスレベル biaslevel 差引の上、
マスクファイル mask_fn で指定するピクセル群ないの統計量を求めて
表示する。
時刻は、各画像のヘッダーから時刻を読み出し、base_time_fn で指定する
画像ファイルの時刻と 0として、分単位で得る。
積分時間は、まず、ヘッダーに書かれている値に、toffset が加算される。
さらに、光量 L が、時刻 0 での光量 L0 に対して、測定時刻 tobs につれて、
一時関数、
L = L0 * [ 1 + tcor * tobs + tcor_b]
と変化しているとして、光量変化のパラメータ tcor、tcor_bを与える。
この時、出力される積分時間 texp が、ヘッダーから読み出した値 texp_hに
対して、
texp = texp_h * [ 1 + tcor * tobs + tcor_b]
と補正されて出力される。
σ-rejection の設定はスクリプト内を直接書きかえる。
lin_calclrs.cl
lin_calclrs (input_fn) (base_count) (base_gain)
(input_fn) : file : 入力ファイル (lin_tc lin_tc_withmskの出力)
(base_count) : real : 基準シグナル値
(base_gain) : real : ゲイン値
(出力)
column#1 : s : 画像ファイル名
#2 : f : 積分時間
#3 : f : 電子数
#4 : f : シグナル値(平均値)
#5 : f : LRs
# 6: f : ΔLRs
入力ファイル input_fn (= lin_tc か lin_tc_withmsk の出力)内の、
積分時間 - シグナル値関係から、Linearity Residuals LRsを計算する。
LRsの基準としては、基準シグナル値 base_count を越えない、
シグナル値および積分時間の組みを使用する。
ゲイン値 base_gain をもとに、ADU値 → electron値の変換を行う。
lin_dkds.cl
lin_dkds (input_fn) (km) (pers)
(input_fn) : file : 入力ファイル (gain_bin の出力)
(km) : real : 基準のゲイン値 km
(pers) : real : 出力の単位ADU数
(出力)
column#1 : binの開始シグナル値
#2 : binの終了シグナル値
#3 : binの中間シグナル値
#4 : データ数
#5 : bin内のk(=σ^2/S)平均値
#6 : kの標準偏差
#7 : リジェクトされたデータ数
#8 : LRs
#9 : ΔLRs
#10 : dkds
#11 : Δ(dk/ds)
gain_bin の出力から、dk/ds 〜 (1/2) * ( k - km ) / S を計算して出力。
出力単位は、pers [ADU]ごと。
noshph4.cl
noshph4 (input_fn) (output_fn) (bias_fn)
(input_fn) : file : 入力画像ファイル
(output_fn) : file : 出力テキストファイル
(bias_fn) : file : バイアス、読み出しノイズを測る画像
(出力)
column#1 : x座標
#2 : 平均値
#3 : 分散
#4 : 読み出しノイズ差引分散
#5 : ゲイン (= #4 / #2 )
shutterless photon transfer法で得られた入力ファイル input_fn の、
y方向オーバースキャン領域の各column ごとで統計量を得て、
出力テキストファイル output_fn に書き出す(追記)。
統計量算出の際に使用する バイアスレベル、読み出しノイズは、
bias_fn で指定する画像から得る。
使用するy座標範囲は、スクリプト内 変数、yov1、yov2で指定する。
バッドカラムを含むx:875-915のカラムは、計算から除かれる。
C programs
lin_kinteg.c
lin_kinteg (knc_filename) (from) (to) (k_nc_init) (delta_s)
(knc_filename) : s : k_nc分布関数形(gain_bin出力)※未使用
(from) : f : シグナル値初期(境界)条件
(to) : f : 積分終了シグナル値
(k_nc_init) : f : k_nc初期(境界)条件
(delta_s) : f : Runge-Kutta法の刻み幅
k_ncの関数形(内部関数 calc_knc_fromfunc ( float s ) で定義)をもとに、
初期条件 from, k_nc_init のもとで、Runge-Kutta法で k を解く。
※ knc_filename の指定は、k_ncとして、gain_binの出力ファイルを
そのまま使用しようと試みたときの名残。実際は読み込むものの、
計算には使用していない。
gain_bin_v11.c
gain_bin_v11 (c_from) (c_to) (step) (data_fn) (output_fn)
(c_from) : i : binning開始シグナル値
(c_to) : i : binning終了シグナル値
(step) : i : binning幅
(data_fn) : s : 入力データファイル
(output_fn) : s : 出力データファイル
(出力)
column#1 : i : binning開始シグナル値
column#2 : i : binning終了シグナル値
column#3 : f : binning中間シグナル値
column#4 : i : 使用したデータ点
column#5 : f : ゲイン値平均値
column#6 : f : ゲイン値標準偏差
column#7 : f : ゲイン値測定誤差
column#8 : f : rejectされたデータ数
noshph4 の出力データファイル data_fn について、指定したシグナル値
範囲、幅でbinningを行い、bin内のデータの統計量を出力する。
σ-rejectionはプログラムソース内で直接指定する。
[index]
H. Akitaya