CCD 線形性解析用の cl script, C program

2003.11.25 H.Akitaya

解析の流れ

Shutterless photon transfer method

  1. LED照射0秒画像取得 ledxx.fits
  2. bias画像取得 bias.fits
  3. 各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
  4. binning
    % gain_bin_v11 0 65000 1000 slpt_raw.xy slpt_b1000.xy

光量 - シグナル値関係

  1. 積分時間を変えて安定光源スペクトル取得
    light_xxxsec.fits
    安定性確認のため、適当な積分時間を一決め、こまめに撮る
    light_varxx.fits
  2. bias画像取得、bias値測定
    light_000sec.fits
    cl> imstat light_000sec.fits[2171:2190,101:900]
    ---> biasvalue
  3. maskの作成
    1. light_varxx.fitsの平均化、bias引き
      light_ave.fits
    2. badcolumn処理
      cl> lin_badcolmsk light_ave.fits light_ave_bc.fits 0
    3. mask作成 (例: 2000ADU- 2020ADU)
      cl> lin_mkmsk light_ave_bc.fits light_mask.fits 2000 2020
  4. 光量変化の関数決定
    1. 安定画像のシグナル値の時間変化を測定
      cl> lin_tc_withmsk light_var.lst light_var00.fits (biasvalue) light_mask.fits 0.0 0.0 0.085 > sigvar.xy
    2. 光量変化の一次関数の各パラメータ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
  5. 光量変化補正の時間-光量関係を得る
    cl> lin_tc_withmsk light.lst light_var00.fits (biasvalue) light_mask.fits (a) (b) 0.085 > light_tc.xy
  6. 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