Skip to content

HDSデータのQuick Look Reduction on IRAF

Japanese / English

すばる望遠鏡 HDS (High Dispersion Spectrograph)のIRAF上でのQuick Reductionについての解説です。 基本的には山頂(もしくはリモート観測環境)でのsumda環境を前提に説明していますが、
ユーザー各自のIRAF環境でも同様にデータの一次解析を進めることも可能です。

(その場合はこちらからCLスクリプトをダウンロードし、各自の環境にインストールしてください)


スペクトルは一次元化されるため、空間情報が必要な場合はこれ以外の手段を用いる必要があります。

IRAF上での解析の詳細については IRAF解析マニュアル(PDF : Japanese/English)を参照してください。
もくじ
sumdaへのlogin, IRAFの起動
IRAF上でのクイックリダクションの概要
hdsqlによるoverscan
[準備その1]BIASからマスクフレームを作成
[準備その2]オーダートレース用のテンプレートを作成
[準備その3]規格化したフラットを作成
[準備その4]波長較正用データを作成
hdsql : 天体フレームのクイックルック
バッチモード
使い方のコツ、トラブルシューティング

CL scriptのダウンロード

イメージスライサを使用した場合の解析 (フリンジがあるときのフラットおよびオーダー抽出)

オーダー結合~完全一次元化 (Continuum fitから)
オーダー結合~完全一次元化 (Flux calibrationから)





sumdaへのloginとIRAFの起動
[1] ユーザーアカウント(oXXXXX)でsum01のコンソールからログインする。
[2] デスクトップ上のアイコンから『ANA Menu』をクリック。
しばらく待つとANA Menuのウィンドウが現れる。
[3] ANA Menuのなかの『HDS』のボタンを押す。
[4] IRAFのターミナル(xgterm)と"HDS LOG Editor"(HDS用オートログエディタ)が起動する。
初回起動時はIRAFのターミナルで自動的にmkirafのコマンドが立ち上がって いるので、"xgterm"と入力する。
[5] 起動したIRAF上ではoverscanなどのタスクや set stdimage=imt4096, set imtype="fits"がすでに登録されている他、 これから解説するクイックリダクション用タスクの"hdsql"も登録されている。
[6] IRAF上で
     ecl> cd /work/oXXXXX
このディレクトリの下で作業を行う。 /data/oXXXXX はユーザー書き込み不可のデータディレクトリで、 イメージはここに保存される。




IRAF上でのクイックリダクションの概要
Reduction process using hdsql
▲"hdsql"を使ったリダクション過程
   図の右側がhdsqlの内部処理。 これを行う前に左側14の準備を行う。
   ピンク で書かれているのはそれぞれに使用される(する)IRAFのタスク。
   通常、天体の解析では2/13 Bias/Dark Subtraction および 7/13 Cross-Talk Subtractionは実行しない方がよい。


以下ではsumda上のIRAFにて、タスク"hdsql"を使っての クイックリダクションの過程を解説する。
上図にてこの過程の概要をまとめているが、 hdsqlを使うことにより、生データから最終的には一次元化され、フラット補正および 波長較正までされたデータを作ることができる。 hdsql内の各過程(1~12)は必要に応じてそれぞれスキップすることも可能である。
hdsqlを使用する前に上図左側の14の準備が必要となるが、 フラット補正や波長較正が必要でない場合は最低限2のみの準備でいい (ただし、Bad Columnの影響を受けずにトレースを行うために1も行っておくといいだろう)。
これらの準備を完了させ、 各天体フレームが取得されるごとにhdsqlを実行するというのがクイックリダクションの スタイルになる。
なお、HDSでは一回の露出で赤(CCD1=L: HDSAで奇数番号)と青(CCD2=R: HDSAで偶数番号)の 二枚のフレームが得られるが、これらはそれぞれ独立して解析する必要がある。




hdsqlによるoverscan
HDSの各CCDはそれぞれ二つの読み出し口を持っており、 フレームの中央にオーバースキャン領域を持っている。 BIASフレームの差し引きを行うかわりに このオーバースキャン領域の平均値をフレームから差し引き、 フレームからオーバースキャン領域を消すタスクが"overscan"である。
また、このタスクは内部でADUからelectron number(約1.7倍)への 変換も行っている
オーバースキャンを行う前の生データは、 FITSのExtensionテーブルを持っているため、 "HDSA000YYYYY.fits[0]"というように、 IRAF上では"[0]"をファイル名につけないと取り扱うことができない。

hdsqlの処理でもまず最初に生データからオーバースキャンをした データを生成するところから処理を始める。 [準備その1]のマスクの作成や[準備その2]のでオーダーのテンプレートを作成する 前にも使用するフレームの生データに対してこの処理をしなくてはいけないので、 hdsqlでオーバースキャン領域処理のみをする方法を紹介しておく。


[1] 生データ(HDSA000YYYYY.fits)の保存されているディレクトリを確認する。
通常は/data/oXXXXX/ になる。
[2] IRAF上にて
     cl> eparam hdsql
タスクhdsqlのパラメータを指定する。 "indirec"でデータ格納ディレクトリおよびファイル名の頭を指定し、 それ以外の番号部分を"inid"で指定するというカタチになる。 なお、オーバースキャンしたデータはタスクを実行したディレクトリに保存 されるので、生データをコピーする必要はなくなる。
PACKAGE = echelle
   TASK = hdsql

inid    =                22405  Input frame ID
(indirec= /data/o05129/HDSA000) directory of Input data

(batch  =                   no) Batch Mode?
(inlist =                     ) Input file list for batch-mode
(overw  =                  yes) Force to overwrite existing images?

(oversca=                  yes) Overscan?
(biassub=                   no) BIAS / Dark Subtraction?
(maskbad=                   no) Mask Bad Pixels?
(linear =                   no) Linearity Correction?
(cosmicr=                   no) Cosmicray-event rejection?
(scatter=                   no) Scattered light subtraction?
(xtalk  =                   no) CCD Amp Cross-Talk Subtraction?
(flat   =                   no) Flat fielding?
(apall  =                   no) Extract spectra with apall?
(isecf  =                   no) Extract & Flat for IS? (override flat & apall)
(remask =                   no) Re-Mask wavlength calibrated spectrum?
(wavecal=                   no) Wavelength calibration?
(rvcorre=                   no) Heliocentric wavelength correction?
(splot  =                   no) Splot Spectrum?

                                ### Overscan ###
(os_save=                  yes) Save overscaned data?
......(以下略)
[3] この状態でhdsqlを実行すると "H22045o.fits"というファイルが作成されている。 これがオーバースキャン済みのデータになる。
Before OverScan (RAW)
▲HDSのRAWイメージ(Red CCD)
  →   After OverScan
▲OverScan後のイメージ(Red CCD)
オーバースキャン後の画像ではBIASレベルが左右で同じ(~ゼロ)になり、中央にあった オーバースキャン領域が取り除かれている。




[準備その1]
BIASからマスクフレームを作成
HDSのCCD、特にRed側のCCDには非常に強いBad Columnが存在し、 しばしばオーダートレースや、フラットフィールディングで害を およぼす。 その影響をなるべく抑制するために、BIAS画像をつかって マスクフレームを作成しておく。
この「マスク」はBIASフレームから異常なカウント値を示す Bad Pixelを抜き出して、まわりのピクセルで補間を行うもので、 その部分にあたるスペクトルのカウント値は「一見問題なさそうに 見えるが、実は嘘の値に置き換えられている」という点に注意しなければ ならない。
また、Blue CCDにはカウントが伸びない"負"のBad Columnや、 その他の弱いBad Columnが多数存在するが、 この作業ではそれらの補正はあまり考えない(たぶんそこまで厳密には 行わない方がよいと思われる)。


[Preparation 1] BIASフレームからのマスクフレームの作成
使用するフレーム BIAS
hdsqlでの前処理 OverScanのみ
hdsql後の処理 "imcombine"で足し合わせてBIASを作成。
そのBIASからタスク"mkbadmask"によってマスクフレームを作成。
hdsqlのパラメータへの指定 "### Masking Bad Pixels"の"mb_refer"にマスクフレームを指定する。

[1] hdsqlを使ってBIASフレームについてoverscanのみを実行。
できた HXXXXXo.fitsのリスト(Bias2x1R.lst etc.)を作って、imcombineでmedianをとり、BIASフレームとする。
     ecl> imcombine @Bias2x1R.lst Bias2x1R combine=median reject=sigclip

[2] このBIASフレームについて上限値と下限値を指定し、マスクフレームを作成する。 使うタスクは"mkbadmask"(オリジナル)。
また、このコマンドの内部では"wacosm11.cl"を呼び出している部分があるのでlogin.cl等で登録がなされている必要がある(sumdaでは登録済みなので気にしなくてよい)。
パラメータの例としては以下のようになる。
PACKAGE = echelle
   TASK = mkbadmask

inimage =             Bias2x1R  Input BIAS image 
outimage=             Mask2x1R  Output MASK image 

(lower  =                 -100) Lower limit replacement window
(upper  =                  300) Upper limit replacement window

(clean  =                  yes) Clean up by wacosm11
(base   =                    1) Baseline for wacosm11
(mode   =                    q)
lowerおよびupperにBIASフレームでの下限値および上限値を指定する。 数値としてはbinningにも依存するが、経験上からlower=-100, upper=300程度とすればRed CCDの強いBad Columnをピックアップできるようである。
また、imcombine時に取り除けなかったCosmic Ray(一部 Bad "Pixel"も混在している) を取り除きたい場合は、clean=yes とすることでタスク wacosm11 (オリジナル)を用いて クリーンアップを行い、純粋にBad "Column"だけを抽出することができる。
[3] できたマスクフレームは下図のように Bad pixel=1, 健常なPixel=0とした二値の 画像になる。 このマスクフレームはタスク"fixpix"でマスクとして指定して使用することができる。
ただし、fixpixはhdsqlの内部で自動的に呼び出されているので、その部分の解説は省く。
Mask image created from BIAS
▲BIASから作成されたマスクフレーム(Red CCD)
After OverScan
▲OverScan後のイメージ(Red CCD)
  →   After Masked
▲fixpixによるマスク済みのイメージ(Red CCD)
中央部右側の強いBad Columnがマスクされている。
逆に左側の比較的弱いBad Columnはそのまま残っている。 こちらはupper=100程度でマスクを作ると取り除くこともできるが、
オーダートレースなどで悪影響の出るようなBad Columnではないため、 無理して取り除かない方がよいと思われる。
(非常に明るい天体などでは無視してしまえる場合もある。)
[4] できたマスクフレームは、hdsqlのパラメータで
   ##### Masking Bad Pixels
部のmb_referに指定しておく。
[5] なお、山頂sumdaで解析をする場合は、
   /home/hds01/share/data/Mask2x1R.fits  
というようなマスクが各CCD・binningについて用意されているので、 以上の作業はとばして、それをそのまま使用してもよい。




[準備その2]
オーダートレース用のテンプレートを作成
オーダートレース用のテンプレート(=Apertureリファレンス)は標準星などの明るい星のデータ、 もしくはオーダートレース用にスリット長を狭めてとったフラットのデータを用いて 作成する。
標準設定(StdYbなど)を使っている場合は、"/home/hds01/share/data/" の下にある"StdYbLshsl2x2.fits" (StdYb, L[Red側,(Blue側はR)], 2x2binning)などのデータを流用し、 以下の作業はスキップすることができる。 このときは database/ディレクトリの下にある apStdYbLshsl2x2 などの ファイルも作業しているディレクトリの database/ 下ににコピーする必要がある。


[Preparation 2] オーダートレース用のテンプレートの作成
使用するフレーム 標準星などの明るい天体、もしくはスリット長を狭めてとったフラット
hdsqlでの前処理 OverScan + Masing Bad Pixels (OverScanのみでも可)
hdsql後の処理 "apall"でApertureをトレースする。
hdsqlのパラメータへの指定 "### Scattered Light Subtraction"の"sc_refer"にApertureリファレンスフレームを指定する。
"### Aperture Extraction"の"ap_refer"にApertureリファレンスフレームを指定する。

[1] hdsqlを使ってテンプレートにするデータについてoverscanおよびmaskbadをyesとして実行。
(場合によってはmaskbadをnoとしてもよいが、Bad Columnの影響が出てトレースしにくくなる)
できた HXXXXXom.fits をわかりやすい名前にリネーム (ここではApYb2x1R.fitsとしておく)する。
[2] これに関してapallを実行。 パラメータの例としては以下のようになる。 オーダーの抽出時にCCD端でlineがうまく拾えない等のときは、 "line"の値を少し変える(もしくはApertureのedit画面で":line 1800"→"a"-Keyでオーダー全選択→"g"-Keyでリセンター→"m"-Keyでオーダー抽出、等) ことで対処するとよい。
オーダーの抽出画面では、ライン上"m"キーでマニュアルのオーダー抽出。 1番となるべきオーダー上で"o"キー→Aperture(1)="1"で オーダーの順番が整列。 その後"q"キーで次の作業に移る。 (yes/no)と聞かれるところは基本的に"yes"(そのままリターンキー押下) でよい。
フィッティング時にはCCD端(もしくはbad columnの影響を受けているところ)については "s"→"s"で抽出範囲の決定、"t"で抽出範囲のクリア、"f"で再フィット などの小技を使う以外はそれほど細かい作業はない(sky等を気にしなければ)。
PACKAGE = echelle
  TASK = apall

input   =             ApYb2x1R  List of input images
(output =                     ) List of output spectra
(apertur=                     ) Apertures
(format =              echelle) Extracted spectra format
(referen=                     ) List of aperture reference images
(profile=                     ) List of aperture profile images

(interac=                  yes) Run task interactively?
(find   =                  yes) Find apertures?
(recente=                  yes) Recenter apertures?
(resize =                  yes) Resize apertures?
(edit   =                  yes) Edit apertures?
(trace  =                  yes) Trace apertures?
(fittrac=                  yes) Fit the traced points interactively?
(extract=                  yes) Extract spectra?
(extras =                   no) Extract sky, sigma, etc.?
(review =                  yes) Review extractions?

(line   =                INDEF) Dispersion line
(nsum   =                   20) Number of dispersion lines to sum or median

                                # DEFAULT APERTURE PARAMETERS

(lower  =                  -20) Lower aperture limit relative to center
(upper  =                   20) Upper aperture limit relative to center
(apidtab=                     ) Aperture ID table (optional)

                                # DEFAULT BACKGROUND PARAMETERS

(b_funct=            chebyshev) Background function
(b_order=                    1) Background function order
(b_sampl=          -10:-6,6:10) Background sample regions
(b_naver=                   -3) Background average or median
(b_niter=                    0) Background rejection iterations
(b_low_r=                   3.) Background lower rejection sigma
(b_high_=                   3.) Background upper rejection sigma
(b_grow =                   0.) Background rejection growing radius

                                # APERTURE CENTERING PARAMETERS

(width  =                  15.) Profile centering width
(radius =                  30.) Profile centering radius
(thresho=                   0.) Detection threshold for profile centering

                                # AUTOMATIC FINDING AND ORDERING PARAMETERS

nfind   =                   22  Number of apertures to be found automatically
(minsep =                  40.) Minimum separation between spectra
(maxsep =                1000.) Maximum separation between spectra
(order  =           increasing) Order of apertures

                                # RECENTERING PARAMETERS

(aprecen=                     ) Apertures for recentering calculation
(npeaks =                INDEF) Select brightest peaks
(shift  =                   no) Use average shift instead of recentering?

                                # RESIZING PARAMETERS

(llimit =                 -17.) Lower aperture limit relative to center
(ulimit =                  17.) Upper aperture limit relative to center
(ylevel =                 0.05) Fraction of peak or intensity for automatic width
(peak   =                  yes) Is ylevel a fraction of the peak?
(bkg    =                   no) Subtract background in automatic width?
(r_grow =                   0.) Grow limits by this factor
(avglimi=                  yes) Average limits over all apertures?

                                # TRACING PARAMETERS

(t_nsum =                   10) Number of dispersion lines to sum
(t_step =                    3) Tracing step
(t_nlost=                   10) Number of consecutive times profile is lost befor
(t_funct=             legendre) Trace fitting function
(t_order=                    3) Trace fitting function order
(t_sampl=                    *) Trace sample regions
(t_naver=                    1) Trace average or median
(t_niter=                    2) Trace rejection iterations
(t_low_r=                   3.) Trace lower rejection sigma
(t_high_=                   3.) Trace upper rejection sigma
(t_grow =                   0.) Trace rejection growing radius

                                # EXTRACTION PARAMETERS

(backgro=                 none) Background to subtract
(skybox =                    1) Box car smoothing length for sky
(weights=                 none) Extraction weights (none|variance)
(pfit   =                fit1d) Profile fitting type (fit1d|fit2d)
(clean  =                   no) Detect and replace bad pixels?
(saturat=                INDEF) Saturation level
(readnoi=                   0.) Read out noise sigma (photons)
(gain   =                   1.) Photon gain (photons/data number)
(lsigma =                   4.) Lower rejection threshold
(usigma =                   4.) Upper rejection threshold
(nsubaps=                    1) Number of subapertures per aperture
(mode   =                   ql)
[3] ApYb2x1R.ec.fits という一次元化されたファイルができる。
またトレースされたアパーチャーの情報はdatabase/apApYb2x1Rというファイルに保存される。
Order extraction in apall
▲apallによるオーダー抽出
Order fitting in apall
▲apallによるオーダーフィッティング
[4] apallに使ったApertureリファレンスフレームを、hdsqlのパラメータとして
   ##### Scattered Light Subtraction
部のsc_refer、および
   ##### Aperture Extraction
部のap_referに指定しておく。




[準備その3]
規格化されたフラットを作成
上記のオーダートレース用のテンプレートをリファレンスとして使い、 フラットフレームから規格化されたフラットを作成する。
もちろんフラットフィールディングをしない場合はこの作業はスキップできる。
オーダーテンプレートや波長較正データと違って、 標準設定でもフラットは保存していないので、必要な場合は 各自で作業されたい。


[Preparation 3] 規格化されたフラットの作成
使用するフレーム フラット
hdsqlでの前処理 OverScan + Masing Bad Pixels + Linearity Correction(OverScanのみでも可)
hdsql後の処理 "apscatter"で"ref=ApYb2x1R"とリファレンスを指定して散乱光を除去する。
次に"apflatten"で同じく"ref=ApYb2x1R"とリファレンスを指定して規格化する。
hdsqlのパラメータへの指定 "### Flat Fielding"の"fl_refer"に規格化したフラットフレームを指定する。

[1] hdsqlを使って各フラットフレームをOverScan + Masking Bad Pixels + Linearity Correctionする(場合によっては後ろふたつは飛ばしてもよい)。
HDSではたいていの場合Blue用とRed用に最適化したフラットのシリーズを とるため、使える方のものだけを使う。
複数ファイルに同じ処理をするため、この処理にはバッチモードを使うとよい。
[2] リニアリティ補正済みのHXXXXXoml.fits (もしくはOverScan済みのHXXXXXo.fits) のテキストリストを作成し、 imcombineで平均化されたフラットイメージを作成する (combine=average reject=avsigclipでよい)。
    ecl> imcombine @FlatYb2x1R.lst FlatYb2x1R combine=ave reject=avsigclip
[3] タスク apscatterでオーダー間の散乱光を除去する。
refrenにはオーダートレース用テンプレートのファイル名を入れる。
    ecl> apscatter FlatYb2x1R FlatYb2x1R.sc referen=ApYb2x1R find- recent+ resize+ edit+ trac-
(場合によっては飛ばしてもよい)
Aperture editing in scatter
▲apscatterでのオーダー抽出
   (テンプレートからのresize、recenterで行う)
Fitting along dispersion in apscatter
▲apscatterでの分散方向フィッティング
   (spline3のorder=20でフィッティング)
[4] apscatterの出力に対して、タスク apflattenで規格化されたフラットを作成する。
refrenにはオーダートレース用テンプレートのファイル名を入れる。
    ecl> apflatten FlatYb2x1R.sc FlatYb2x1R.sc.nm referen=ApYb2x1R find- recent+ resize+ edit+ trac-
フラットをフィッティングする関数は比較的高次で10~20次程度くらい (":order 11"のようにして変更)。 bad columnの影響部分や端のピクセルなどを取り除きながら行う行程は apallとほぼ一緒("s"-"s"-keyで範囲選択、"t"で範囲解除等)である。
PACKAGE = echelle
TASK = apflatten

input   =        FlatYb2x1R.sc  List of images to flatten
output  =     FlatYb2x1R.sc.nm  List of output flatten images
(apertur=                     ) Apertures
(referen=             ApYb2x1R) List of reference images

(interac=                  yes) Run task interactively?
(find   =                   no) Find apertures?
(recente=                   no) Recenter apertures?
(resize =                  yes) Resize apertures?
(edit   =                  yes) Edit apertures?
(trace  =                   no) Trace apertures?
(fittrac=                   no) Fit traced points interactively?
(flatten=                  yes) Flatten spectra?
(fitspec=                  yes) Fit normalization spectra interactively?

(line   =                INDEF) Dispersion line
(nsum   =                  100) Number of dispersion lines to sum or median
(thresho=                  10.) Threshold for flattening spectra

(pfit   =                fit1d) Profile fitting type (fit1d|fit2d)
(clean  =                   no) Detect and replace bad pixels?
(saturat=                INDEF) Saturation level
(readnoi=                   0.) Read out noise sigma (photons)
(gain   =                   1.) Photon gain (photons/data number)
(lsigma =                   4.) Lower rejection threshold
(usigma =                   4.) Upper rejection threshold

(functio=              spline3) Fitting function for normalization spectra
(order  =                    3) Fitting function order
(sample =                    *) Sample regions
(naverag=                    1) Average or median
(niterat=                    5) Number of rejection iterations
(low_rej=                   3.) Lower rejection sigma
(high_re=                   3.) High upper rejection sigma
(grow   =                   0.) Rejection growing radius
(mode   =                    q)
Order extraction in apflatten
▲apflattenでのオーダーフィッティング
   (spline3のorder=20でフィット)

</td>
[5] できた規格化済みフラットフレームは、hdsqlのパラメータで
   ##### Flat Fielding
部のfl_referに指定しておく。




[準備その4]
波長較正用データを作成
上記のオーダートレース用のテンプレートと波長較正用のTh-Arフレーム を取得していれば、波長較正用のデータを作成することができる。
もちろん波長情報がいらない場合はこの作業はスキップできる。
また以前同じ設定で同定を行ったフレームがある場合は、 それをリファレンスとして指定することで、ecidentifyでの同定作業において 楽をできる。 そうした場合は、該当するTh-Arフレームとデータベース(database/ecXXXXXX)ファイル をそれぞれコピーしておく。


[Preparation 4] 波長較正用データの作成
使用するフレーム Comparison (Th-Ar)
hdsqlでの前処理 OverScan + Masing Bad Pixels + Aperture Extraction (Maskはスキップ可)
hdsql後の処理 [a] 新規に同定を行う場合
"ecidentify"でラインの同定を行う。

[b] 以前に同定したデータがある場合
"ecreidentify"で"referen=ThArXXXX"と以前のフレームを指定して実行してから、 "ecidentify"で同定を行う。
hdsqlのパラメータへの指定 "### Wavelength Calibration"の"wv_refer"に波長同定したTh-Arフレームを指定する。

[1] hdsqlをThArのフレームに対して使用。
今回はOverscanとMasking Bad Pixels, Aperture Extractionを実行することになる(Maskはスキップ可)。
apallのアパーチャーのリファレンスには先ほどテンプレートを作ったときのもの を指定する。
また、apallでのアパーチャーのresize, recenter, editは Th-Arのデータなのでしないようにする。 apall後のデータをセーブするために"ap_save=yes"としておく。
PACKAGE = echelle
   TASK = hdsql

inid    =                22073  Input frame ID
(indirec= /data/o05129/HDSA000) directory of Input data

(batch  =                   no) Batch Mode?
(inlist =                     ) Input file list for batch-mode
(overw  =                  yes) Force to overwrite existing images?

(oversca=                  yes) Overscan?
(biassub=                   no) BIAS / Dark Subtraction?
(maskbad=                  yes) Mask Bad Pixels?
(linear =                   no) Linearity Correction?
(cosmicr=                   no) Cosmicray-event rejection?
(scatter=                   no) Scattered light subtraction?
(xtalk  =                   no) CCD Amp Cross-Talk Subtraction?
(flat   =                   no) Flat fielding?
(apall  =                  yes) Extract spectra with apall?
(isecf  =                   no) Extract & Flat for IS? (override flat & apall)
(remask =                   no) Re-Mask wavlength calibrated spectrum?
(wavecal=                   no) Wavelength calibration?
(rvcorre=                   no) Heliocentric wavelength correction?
(splot  =                   no) Splot Spectrum?
   (...中略...)
(ap_save=                  yes) Save apalled data?
(ap_in  =                     ) Input frame for apall (if necessary)?
(ap_refe=             ApYb2x1R) Reference frame for apall
(ap_inte=                  yes) Run apall interactively?
(ap_rece=                   no) Recenter apertures?
(ap_resi=                   no) Resize apertures?
(ap_edit=                   no) Edit apertures?
(ap_trac=                   no) Trace apertures?
(ap_fitt=                   no) Fit the traced points interactively?
(ap_llim=                  -30) Lower aperture limit relative to center
(ap_ulim=                   30) Upper aperture limit relative to center
(ap_ylev=                 0.05) Fraction of peak for automatic width determinati
(ap_peak=                  yes) Is ylevel a fraction of the peak?
(ap_bg  =                 none) Background to subtract
     (...後略...)
[2] H22073om_ec.fits (もしくは H22073o_ec.fits)という一次元化されたファイルができる。
このファイルをわかりやすい名前 "ThArYb2x1R.fits" などにかえておく。
[3a] 新規に同定を行う場合
まず、大雑把な波長域をつかむ。
ThArのrawフレームには波長情報を含んだASCII Table Extentionが附属しているため、それを参照するとよい。
    ecl> tprint /data/o05129/HDSA00022073.fits[1]
    #  Table HDSA00022073[1]  Fri 02:34:18 07-Apr-2017

    # row ORDER X-MIN Y-MIN   WL-MIN X-CEN Y-CEN   WL-CEN X-MAX Y-MAX   WL-MAX SLIT INCLINATION DISPERSION
    #           PIXEL PIXEL       nm PIXEL PIXEL       nm PIXEL PIXEL       nm           degree   nm/PIXEL

        1    88    47  2048  672.436   112  1024  676.602   168     1  680.767            0.000      0.004
        2    89   104  2048  664.881   169  1024  669.000   225     1  673.118            0.000      0.004
        3    90   160  2048  657.493   225  1024  661.566   280     1  665.639            0.000      0.004
        4    91   215  2048  650.268   280  1024  654.296   334     1  658.324            0.000      0.004
        5    92   269  2048  643.200   333  1024  647.184   387     1  651.169            0.000      0.004
        6    93   322  2048  636.284   385  1024  640.225   439     1  644.167            0.000      0.004
        7    94   373  2048  629.515   437  1024  633.414   490     1  637.314            0.000      0.004
        8    95   423  2048  622.888   487  1024  626.747   640     1  630.605            0.000      0.004
        9    96   473  2048  616.400   636  1024  620.218   689     1  624.037            0.000      0.004
       10    97   621  2048  610.045   684  1024  613.824   736     1  617.603            0.000      0.004
       11    98   668  2048  603.820   731  1024  607.561   783     1  611.301            0.000      0.004
       12    99   715  2048  597.721   777  1024  601.424   829     1  605.126            0.000      0.004
       13   100   760  2048  591.744   822  1024  595.410   874     1  599.075            0.000      0.004
       14   101   804  2048  585.885   866  1024  589.514   918     1  593.144            0.000      0.004
       15   102   848  2048  580.141   909  1024  583.735   961     1  587.329            0.000      0.004
       16   103   891  2048  574.509   952  1024  578.068  1003     1  581.626            0.000      0.003
       17   104   933  2048  568.985   994  1024  572.509  1044     1  576.034            0.000      0.003
この出力でおおよその波長とオーダーがわかる。apallによるトレースの仕方如何では多少のずれが生じるので注意する。

リネームしたThArファイルについて、タスク"ecidentify"で波長同定。
オーダーの数にもよるが、1オーダーにつき5~6点、2~3オーダーとばしで 波長情報を記入して"f"でフィット。 最終的には":xorder 5", ":yorder 4"などとしてx=5, y=4次の関数でフィットするのが いいようである。 いらない点を"d"でつぶして再フィットし、エラーが小さいとうなら、"l"で リスト中の他のラインも同定し再フィット→いらいない点をけす。 ……というような手順で完了。
なおUVのデータをフィットする場合は、"coordli"で指定している Th-Arの波長データでは足りないため、追加したファイル(このページの末尾からDLできる)に置き換える等の作業が必要となる。
PACKAGE = echelle
  TASK = ecidentify

images  =           ThArYb2x1R  Images containing features to be identified
(databas=             database) Database in which to record feature data
(coordli=   linelists$thar.dat) User coordinate list
(units  =                     ) Coordinate units
(match  =                   1.) Coordinate list matching limit in user units
(maxfeat=                 1000) Maximum number of features for automatic identifi
(zwidth =                  10.) Zoom graph width in user units
(ftype  =             emission) Feature type
(fwidth =                   4.) Feature width in pixels
(cradius=                   5.) Centering radius in pixels
(thresho=                  10.) Feature threshold for centering
(minsep =                   2.) Minimum pixel separation
(functio=            chebyshev) Coordinate function
(xorder =                    2) Order of coordinate function along dispersion
(yorder =                    2) Order of coordinate function across dispersion
(niterat=                    0) Rejection iterations
(lowreje=                   3.) Lower rejection sigma
(highrej=                   3.) Upper rejection sigma
(autowri=                   no) Automatically write to database?
(graphic=             stdgraph) Graphics output device
(cursor =                     ) Graphics cursor input
(mode   =                    q)
Identification of Th-Ar lines
▲ecidentifyによるTh-Ar lineの同定
   (1orderにつき6本くらい)
Residual of fitting in ecidentify
▲ecidentifyでのフィッティング誤差
   (xorder=2, yorder=2での初期フィット)
Identification of Th-Ar lines
▲ecidentifyでのフィッティング誤差
   (xorder=4, yorder=4でフィット。 0.6 arcsec slit幅, 2x1bin)
Residual of fitting in ecidentify
▲ecidentifyでのフィッティング誤差
   (xorder=5, yorder=4でフィット。フィーチャーが消える。)
[3b] 以前に同定したデータをリファレンスにする場合
以前のデータをThArYb2x1R_old.fitsとすると、そのファイルを同じディレクトリに、 さらにdatabase/にデータベースファイル"ecThArYb2x1R_old"をコピーしておく。 タスク"ecreidentify"で参照する。
    ecl> ecreidentify ThArYb2x1R referen=ThArYb2x1R_old
出てきたRMSエラーが大きい(0,01以上など)の場合はたぶんうまく行っていない。
そののちに、ThArYb2x1Rについて"ecidentify"をして誤差を確認し、 フィットし直す。
[4] 同定したTh-Arフレームを、hdsqlのパラメータで
   ##### Wavelength Calibration
部のwv_referに指定しておく。




hdsql : 天体フレームのクイックルック
上記の[準備](1は推奨、 2は必須、 3,4はスキップ可)がすんだら、 いよいよ天体のフレームのクイックルックをhdsqlでおこなう。
一次元化したデータのクイックルックならばAperture Extraction以外は スキップすることが可能であるので、 スキップしたい場合はhdsqlのパラメータで該当する部分に "no"を記述する。


[1] hdsqlが行う作業は(1)OverScan ~ (12)Plotまで12段階に分かれている。
最低 (1)OverScanと(8)Aperture Extractionを行えば一次元化されたクイックルックとなる。 ここではほぼ全てを行うパラメータを示すが、スキップしたい項目に関しては パラメータで"no"を指定すればいいだけである。
各工程のなかの作業は以下のようなものになる。
[1/13] OverScan (suffix="o")
各フレームのオーバースキャン領域の平均値を出して、 それを画像全体から差し引く。 いわゆるBIAS Subtractと同等の作業であるが、 同時にADUからelectron (photon) numberへの変換(約1.7倍)も 行っている。
すべてのRAWデータはこの処理過程を経る必要がある。
[2/13] Bias/Dark Subtraction (suffix="b")
BIASフレームもしくはDark、その両方を差し引く。
ただし、HDSの解析ではこの処理は 行わないほうがよい。前項のoverscanで平均のBIASレベルは 差し引きされており、後のScattered light subtractionの過程で Darkの差し引きも行われることになる。 ここでBIASの差し引きを行うと結果的にS/N比を落とすことになる。
Darkを引く場合は、天体と積分時間を比較し、自動的にスケーリングを行う。
[2/13] Parameters for BIAS/Dark Subtraction
bs_refer BIASフレーム名
bs_dark Dark+BIASフレーム名
bs_style どのSubtractionを行うか? [bias(=default)|dark|both]

[3/13] Masking Bad Pixels (suffix="m")
Bad pixelについてマスクを行う。
[3/13] Parameters for Masking Bad Pixels
mb_refer Maskフレーム名
mb_auto 上のmb_referの代わりにbs_referで指定したBIASからマスクを作るか? (default=no)
mb_lower mb_autoでマスクを作るときの下限値 (default=-100)
mb_upper mb_autoでマスクを作るときの上限値 (default=300)

[4/13] Linearity Correction (suffix="l")
HDSで使用しているEEV 42-80 CCDでは10,000e-以上のカウントで リニアリティに問題がみつかっている。 これを修正するための変換(hdslinear.cl)を行う。
[5/13] Cosmic-Ray Rejection (suffix="c")
Cosmic Rayの除去には オリジナルの wacosm11.cl か、 L.A.Cosmic (Laplacian Cosmic Ray Identification)を選択して適用することができる。

wacosm11.clは、天体のフレームにメディアンフィルターをかけ、 それで天体のフレームを割り、飛び抜けた値を持つピクセルを同定し、 そのピクセルについては周囲からフィットした値を用いるという処理を行うスクリプトである。 パラメータとしては、 メディアンフィルターをかける前にゲタをはかせる際の定数がある (ゲタをはかせるのは、オーダー間のカウントがゼロに近いと、 あとで割り算を行う時に問題になるため)。 この定数は、 cr_base として与えるが、 天体データのピークカウントと同程度以上の値を与えておくと問題ないようである (小さい値の方が cosmic-ray hit を同定しやすいが、 リアルなデータまで拾ってしまう恐れがあるので注意。)

L.A.Cosmicを使用するには 別途stsdasがインストールされ、かつhdsqlを実行する前にロードされている必要がある。 計算には時間がかかるので注意が必要である。
[5/13] Parameters for Cosmic-Ray Rejection
cr_proc 除去方法を wacosm11 にするか L.A.Cosmicにするか? (default=wacosm)
cr_wbase wacosm11用のベースラインカウント (default=2000)
cr_ldisp (L.A.Cosmic用) 除去結果をDS9に表示するか? yとした場合はDS9を立ち上げておく必要がある。 (default=no)
cr_lgain (L.A.Cosmic用) CCDのgain (default=1.67)
cr_lreadn (L.A.Cosmic用) CCDの読み出しノイズ (default=4.4)
cr_lxorder (L.A.Cosmic用) スペクトル方向のフィットオーダー (default=9)
cr_lyorder (L.A.Cosmic用) スカイ方向のフィットオーダー (default=3)
cr_lclip (L.A.Cosmic用) Cosmic-Ray の検出リミット = σ (default=10)
cr_lfrac (L.A.Cosmic用) Cosmic-Ray のfractional detection limit = σ (default=3)
cr_lobjlim (L.A.Cosmic用) Cosmic-Ray のcontrast limit = σ (default=5)
cr_lniter (L.A.Cosmic用) itterationの回数。 (default=4)

[6/13] Scattered Light Subtraction (suffix="s")
apscatter を用いて、天体の光の当たっていない範囲を指定して曲面フィットを行い、 フレーム全体から差し引く。
[6/13] Parameters for Scattered Light Subtraction
sc_refer Aperture リファレンスフレーム名 (後で出てくるap_referと同じでよい)
sc_inte 処理をインタラクティブに行うかどうか? (default=yes)
sc_rece Apertureのrecenterを行うか? (default=yes)
sc_resi Apertureのresizeを行うか? (default=yes)
sc_edit Apertureの編集を行うか? (default=yes)
sc_trac Apertureのトレースを行うか? (default=no)
sc_fitt Apertureのトレースを手動で行うか? (default=no)

Scattered Light fitting along X
▲apscatterでの空間(クロス)方向フィッティング
   (オーダー間の"底"をトレースしているか確認する)

Scattered Light fitting along Y
▲apscatterでの分散方向フィッティング
   (spline3のorder=20でフィッティング)

[7/13] Cross-Talk Subtraction (suffix="x")
CCDチップ内のクロストークを除去する。 HDSで使用しているEEV 42-80 CCDでは 約0.12%の強度のシグナルが鏡像でオーバーラップする クロストークが見つかっているため、これを除去する。 主にフラットの解析などで仕様。
IS flat before Cross-Talk subtraction
▲Cross-Talk 除去前
IS flat after Cross-Talk subtraction
▲Cross-Talk 除去後
[7/13] Parameters for Cross-Talk Subtraction
xt_amp クロストークシグナルの強度。(default=0.0012)
xt_disp 除去前後の画像をDS9で表示するか? yとした場合はDS9を立ち上げておく必要がある。(default=no)

[8/13] Flat Fielding (suffix="f")
(規格化された)フラットで天体を割る。
[8/13] Parameters for Flat Fielding
fl_refer (規格化済み) Flatフレーム名

[9/13] Aperture Extraction (suffix="_ec")
apallを使用してエシェルのオーダーをトレースし、一次元化する。
[9/13] Parameters for Aperture Extraction
ap_refer Aperture リファレンスフレーム名 (前に出てきたsc_referと同じでよい)
ap_inte 処理をインタラクティブに行うかどうか? (default=yes)
ap_rece Apertureのrecenterを行うか? (default=yes)
ap_resi Apertureのresizeを行うか? (default=yes)
ap_edit Apertureの編集を行うか? (default=yes)
ap_trac Apertureのトレースを行うか? (default=no)
ap_fitt Apertureのトレースを手動で行うか? (default=no)
ap_llim Apertureの下限値 (default=-30)
ap_ulim Apertureの上限値 (default=30)
ap_bg Sky backgroundのフィットをどうするか? [none(=default)|average|median|minimum|fit]

Aperture Edit in apall
▲Apertureの編集
   ("."-Keyで特定オーダーを選択。"a"-keyで全選択。
   ": lower ??",": upper ??"で切り出すサイズを指定。)


Confirmation of 1-order in apall
▲オーダーの確認
   ("b"-keyでこの画面に入り、BGを指定する場合は"s"と"t"-keyでの範囲指定。
   "c"-keyで裾のピクセル値を確認。)


[(8+9)/13] Flat Fielding & Extraction for Image Slicer (suffix="_ecf")
イメージスライサを使用した時のフラットフィールディングと 一次元化。
基本的に イメージスライサのデータは apflatten で規格化したフラットを 用いて[8/13] Flat Fieldingを行えば、[9/13] Aperture Extraction以降の 処理も通常のスリットを用いたデータと同様な処理ができる。
ただし、フリンジが出る(Hαより長い)波長域のデータについてはこちら[8/13] Flat Fielding & [9/13] Aperture Extractionのかわりにこちらの処理が必要となる。
詳細はこちらへ。
[10/13] Wavelength Calibration (suffix="w")
天体の波長較正を行う。
[10/13] Parameters for Wavelength Calibration
wv_refer 波長較正用 Th-Arフレーム名
wv_log 波長をlog scaleにするかどうか? (default=no)

[11/13] Re-Mask after Wavelength Calibration (suffix="z")
波長較正したマスクを作成し、天体のスペクトルに適用する。
[11/13] Parameters for Re-Mask after Wavelength Calibration
zm_val マスクをかけた部分のカウント値 (default=1)
0にするよりも1にした方がblaze functionを修正するときなどに都合がよい
blaze functionをいじらないときは0でもよい。
zm_thre 波長較正したマスクを切り直す際のThreshold (default=0.1 [0-1の間の数値])

Before Re-Mask
▲Re-Mask前の天体スペクトル
   (Bad Columnの影響が残っている)

After Re-Mask
▲Re-Mask後の天体スペクトル
   (マスクされた部分は"1"になっているが、周りの数値より限りなく小さい)

[12/13] Heliocentric RV Correction (suffix="r")
波長をHeliocentric (AIR)に修正する。
[12/13] Parameters for Heliocentric RV Correction
rv_obs observatoryタスクで指定できる観測所名 (default="subaru")

[13/13] Plot
完成したスペクトルをsplotで表示する。
[13/13] Parameters for Plot
sp_line 表示するオーダー (default=1)



すべての工程を実行する場合のパラメータ指定例は以下のとおり。 マスクフレーム(Mask2x1R)、 オーダートレース用のテンプレート(ApYb2x1R)、 規格化フラット(FlatYb2x1R.sc.nm)および 波長較正用Th-Arフレーム(ThArYb2x1R)の各フレームを パラメータで指定している。
これらの作業を行うと実際にはフルリダクションとかわらない結果が 得られるはずである。
PACKAGE = echelle
   TASK = hdsql

inid    =                22081  Input frame ID
(indirec= /data/o05129/HDSA000) directory of Input data

(batch  =                   no) Batch Mode?
(inlist =                     ) Input file list for batch-mode
(overw  =                  yes) Force to overwrite existing images?

(oversca=                  yes) Overscan?
(biassub=                   no) BIAS / Dark Subtraction?
(maskbad=                  yes) Mask Bad Pixels?
(linear =                  yes) Linearity Correction?
(cosmicr=                  yes) Cosmic Ray Rejection?
(scatter=                  yes) Scattered Light Subtraction?
(xtalk  =                   no) CCD Amp Cross-Talk Subtraction?
(flat   =                  yes) Flat Fielding?
(apall  =                  yes) Aperture Extraction?
(isecf  =                   no) Extract & Flat for IS? (override flat & apall)
(wavecal=                  yes) Wavelength Calibration?
(remask =                  yes) Re-Mask Wave-calibrated Spectrum?
(rvcorre=                  yes) Heliocentric Wavelength Correction?
(splot  =                  yes) Splot Spectrum?

                                ### Overscan ###
(os_save=                  yes) Save overscaned data?

                                ### Bias/Dark Subtraction ###
(bs_save=                  yes) Save BIAS / Dark subtracted data?
(bs_in  =                     ) Input frame for BIAS / Dark subtraction (if necessa
(bs_styl=                 bias) Subtraction style (bias|dark)
(bs_refe=                     ) BIAS frame
(bs_dark=                     ) Dark + BIAS frame

                                ### Masking Bad Pixels ###
(mb_save=                  yes) Save masked data?
(mb_in  =                     ) Input frame for Masking Bad Pixels (if necessary)
(mb_refe= /home/hds01/share/data/Mask_2x1R) Bad Pix Mask frame
(mb_auto=                   no) Auto mask creation from BIAS(bsrefer)?
(mb_uppe=                  300) Upper limit for mb_auto
(mb_lowe=                 -100) Lower limit for mb_auto
(mb_clea=                  yes) Cleaning by wacosm11?
(mb_base=                    1) Baseline for wacosm11

                                ### Linearity Correction ###
(ln_save=                  yes) Save Linearity Corrected data?
(ln_in  =                     ) Input frame for Linearity Correction (if necessary)

                                ### Cosmic-ray Rejection ###
(cr_save=                  yes) Save cosmicray processed data?
(cr_in  =                     ) Input frame for wacosm1 (if necessary)
(cr_proc=               wacosm) CR rejection procedure (wacosm|lacos)?
                                ### Parameters for wacosm11 ###
(cr_wbas=                2000.) Baseline for wacosm11
                                ### Parameters for lacos_spec ###
(cr_ldis=                  yes) Confirm w/Display? (need DS9)
(cr_lgai=                 1.67) gain (electron/ADU)
(cr_lrea=                  4.4) read noise (electrons)
(cr_lxor=                    9) order of object fit (0=no fit)
(cr_lyor=                    3) order of sky line fit (0=no fit)
(cr_lcli=                  10.) detection limit for cosmic rays(sigma)
(cr_lfra=                   3.) fractional detection limit fro neighbouring pix
(cr_lobj=                   5.) contrast limit between CR and underlying object
(cr_lnit=                    4) maximum number of iterations

                                ### Scattered-light Subtraction ###
(sc_save=                  yes) Save scattered light subtracted data?
(sc_in  =                     ) Input frame for scattered light subtraction (if nec
(sc_refe=             ApYb2x1R) Reference for aperture finding
(sc_inte=                  yes) Run apscatter interactively?
(sc_rece=                  yes) Recenter apertures for apscatter?
(sc_resi=                  yes) Resize apertures for apscatter?
(sc_edit=                  yes) Edit apertures for apscatter?
(sc_trac=                   no) Trace apertures for apscatter?
(sc_fitt=                  yes) Fit the traced points interactively for apscatter?

                                ### Cross-Talk Subtraction ###
(xt_save=                  yes) Save cross-talk subtracted data?
(xt_in  =                     ) Input frame for cross-talk subtraction (if necessar
(xt_amp =               0.0012) Cross-talk amplifier
(xt_disp=                   no) Confirm w/Display? (need DS9)

                                ### Flat Fielding ###
(fl_save=                  yes) Save flat-fielded data?
(fl_in  =                     ) Input frame for flat fielding (if necessary)
(fl_refe=     FlatYb2x1R.sc.nm) Flat frame

                                ### Aperture Extraction ###
(ap_save=                  yes) Save apalled data?
(ap_in  =                     ) Input frame for apall (if necessary)?
(ap_refe=             Ap2x1YbR) Reference frame for apall
(ap_inte=                  yes) Run apall interactively?
(ap_rece=                  yes) Recenter apertures?
(ap_resi=                  yes) Resize apertures?
(ap_edit=                  yes) Edit apertures?
(ap_trac=                   no) Trace apertures?
(ap_fitt=                   no) Fit the traced points interactively?
(ap_nsum=                  10.) Number of Dispersion tosum for apfind
(ap_llim=                 -30.) Lower aperture limit relative to center
(ap_ulim=                  30.) Upper aperture limit relative to center
(ap_ylev=   1.0000000000000E-4) Fraction of peak for automatic width determination?
(ap_peak=                  yes) Is ylevel a fraction of the peak?
(ap_bg  =                 none) Background to subtract

                                ### IS Extraction and Flat fielding ###
(is_save=                  yes) Save IS extract & flat-fielded data?
(is_in  =                     ) Input frame for flat fielding (if necessary)
(is_plot=                  yes) Plot image and extract manually
(is_stx =                  -10) Start pixel to extract (for is_plot=no)
(is_edx =                    5) End pixel to extract (for is_plot=no)
(is_bfix=               fixpix) Fixing method for Bad Pix
(is_up  =                0.001) Upper Limit for Bad Pix in ApNormalized Flat

                                ### Wavelength Calibration ###
(wv_save=                  yes) Save wavelength-calibrated data?
(wv_in  =                     ) Input frame for wavelength calibration (if necessar
(wv_refe=           ThArYb2x1R) Reference frame for refspectra
(wv_log =                   no) Logarithmic wavelength scale?

                                ### Re-Mask after Wavelength Calibration###
(zm_save=                  yes) Save re-masked data?
(zm_in  =                     ) Input frame for re-mask afre wave calib. (if necess
(zm_val =                   1.) Pixel Value replaced to All Bad Pixels
(zm_thre=                  0.1) Threshold pixel value for bad column [0-1]

                                ### Heliocentric Wavelength Correction ###
(rv_in  =                     ) Input frame for radial velocity correction (if nece
(rv_obs =               subaru) Observatory

                                ### Splot ###
(sp_line=                    1) Splot image line/aperture to plot
[2] タスクがうまく機能すれば"H22081omlcsf_ecwzr.fits"のようなファイルが 作成されるはずである。
付加される"omlcsf_ecwzr"の意味は、 "o"=overscan, "m"=masked bad pixels, "l"=linearity corrected, "c"=cosmicray rejected, "s"=scatterd light subtracted, "f"=flat fielded, "_ec"=aparture extracted, "w"=wavelength caliblated, "z"=zero masked after wavelength calibration, "r"=radial velocity corrected で、途中のファイルをセーブするようにパラメータ内で指定(os_save=yes等)していたら、 それに応じた途中のファイルも存在しているはずである。
Completion of hdsql
▲完成した天体スペクトル
   (NaD線のオーダー)




バッチモード
フラットを作成するときなど、決まった同じ処理を繰り返す場合は 第一引数に指定するファイル番号のみを並べたファイルを作り、 バッチ処理をすることができる。
hdsqlのパラメータ指定で
    (batch  =                  yes) Batch Mode?
    (inlist =          FlatRaR.lst) Input file list for batch-mode
    (overw  =                  yes) Force to overwrite existing images?
として inlist でそのファイルを指定して実行すればよい。




使い方のコツ、トラブルシューティング
[1] HDSは、一回の露出で2枚の独立なファイルをつくる。 このため、キャリブレーションファイルも2セットつくることになる。 これらを参照するパラメータの内容を書きかえる手間を省くため、 sumdaではhdsqlと同様のタスクを"hdsql1", "hdsql2", "hdsql3"としても 登録してあり、カラー毎にタスクを切り替えて使うことができる。
[2] どの処理を行うか選択できるため、 途中まで処理済のデータを入力ファイルとして扱うことも可能である。 途中から始めたい場合は、パラメータ "XX_in" にインプットを指定するか、 "inid"と"indirec"に指定するファイル名から読み込めるようにする。
[3] デフォルトでは出力しようとするファイルがすでにある場合は上書きをするか確認をとる。
無条件に上書きしてもいい場合は、hdsqlの冒頭のパラメータで
    (overw  =                  yes) Force to overwrite existing images?
としておく。
[4] エラーなどで処理が中断されたときは、中間ファイルが消されずに残って しまうことがある。tmp*という名前になっているはずなので、消去しておく。




CL script のダウンロードと設定
  • HDSのIRAF解析パッケージは githubで公開しているため、以下の手順に従って git でダウンロードする。
          % mkdir ~/IRAF   (ディレクトリは適当に)
          % cd ~/IRAF
          % git clone https://github.com/chimari/hds_iraf
    で ~/IRAF/hds_iraf/ ディレクトリにHDS解析パッケージがダウンロードされる。
    すでにこのディレクトリがあって更新を適用したい場合は
          % git pull https://github.com/chimari/hds_iraf
    とする。
  • 標準設定用CALテンプレートをダウンロードする。 HDSの公式ページからダウンロードできる (1GB近くあるので注意) 。
    必須ではないが、標準設定での較正データを作成する際にリファレンスとして使えるので、時間を大幅に節約できる。
          % cd ~/IRAF
          % wget https://www.naoj.org/Instruments/HDS/Data/HDS-CAL-202010.tar.gz   (ファイル名はページに合わせて適宜変更)
          % gzip -dc HDS-CAL-202010.tar.gz | tar xvf -
    で ~/IRAF/HDS-CAL ディレクトリ内にCALテンプレートファイルが展開される。
  • login.cl に以下の四行を加える。(古い hdsql の設定が残っている場合は削除する。)
          set    hdshome = 'home$IRAF/hds_iraf/'
          task   $hds.pkg = 'hdshome$hds.cl'
          set    obsdb    = "hdshome$obsdb.dat"
          set    hdscal = 'home$IRAF/HDS-CAL/'
    1行目 : HDS IRAF解析パッケージを入れたディレクトリ
    4行目 : 標準設定用CALテンプレートを置いたディレクトリにそれぞれ置き換える。
  • パッケージの呼び出し方
    IRAFをたちあげて
          vocl> hds
    とし、タスクリストが表示されればOK。
hdsql[1,2,3...].clというのはhdsql.clのコピーで まったく内容の同じファイルだが、これらは もう一方のCCDや、違う波長設定のデータを同時に解析したいとき などに役立つ。

タスク "rvhds" ではheliocentricへの変換に観測所の位置情報を必要 とする。 "すばる"はIRAFにデフォルトで収録されている observatory.dat に 含まれていないので、上記のloginuser.clで指定したobsdb.datで データを加えている。
実際に観測所情報が読み込めるかは、IRAFのターミナルで以下のようにして確認することができる。

ecl> observatory
Command (set|list|images) (set|list|images) (list): 
Observatory to set, list, or image default (subaru): 
# Observatory parameters for SUBARU Telescope, NAOJ
       observatory = subaru
       timzone = 10
       altitude = 4163
       latitude = 19.8255
       longitude = 155.4706
       name = 'SUBARU Telescope, NAOJ'


     
[Old version]




Appendix. イメージスライサを使用した場合の解析 (フリンジがあるときのフラットおよびオーダー抽出)

</td>

イメージスライサを使用している場合は基本的には apflattenで規格化されたフラットを用いて フラットフィールディングし、 通常のスリットと同様な解析を行うとトラブルが少ない。

ただし、フリンジが出る領域(Hαより長い波長域) では、以下に述べる特殊な方式で解析を行うことでノイズを削減できる。
この方法では、apnormalize された フラットを使用し、 flat-fieldingとapallを両方同時に行う形で解析を行う。

hdsqlのパラメータ設定で、apnormalizedで規格化したフラットを指定し、
    (fl_refe=       FlatNIRR.sc.nm) Flat frame
フラットフィールディング(flat)と 一次元化 (apall)をno にした上で、その下にある isecf を yes にする。
    (flat   =                   no) Flat Fielding?
    (apall  =                   no) Aperture Extraction?
    (isecf  =                  yes) Extract & Flat for IS? (override flat & apall)
この isecf (中身は hdsis_ecf.cl というタスク) に関して指定するhdsqlの パラメータは以下の通り。
[(8+9)/13] Parameters for Flat Fielding & Extraction for Image Slicer
is_plot フラットに対してapeditを起動し、インタラクティブに抽出する範囲を決定するか? (default=yes)
is_stx 非インタラクティブに抽出するときの範囲を開始するピクセル。(default=-12)
is_edx 非インタラクティブに抽出するときの終端ピクセル。(default=12)
is_bfix バッドピクセルをフィックスする方法の指定。(default=fixpix)
is_up 規格化されたフラットでバッドピクセルと判断するときのピクセルの上限値。(default=0.001)

hdsqlを実行して、この処理が始まると apeditが起動するので、'.'(ドット)で適当なオーダーを選び、 オーダー表示中に'C'で抽出すべき範囲の両端のピクセルを決めておく。
Aperture Extraction for Image Slicer
▲イメージスライサのオーダー抽出
'.'で選択したオーダーの表示中で、'C'を押してピクセル値を読み、天体の写っている範囲を決めておく。

両端のpixel値が決められれば(もしくはすでに決まっていれば)、 とくになにもせずに'q'でGUIから抜けてよい。 このapeditで':upper'と':lower'でapertureをトレースする範囲(これは全オーダー共通の値になる)を決めると次の手入力でのデフォルト値になる。

次に両端のpixel値を聞かれるので、手入力をする。 (ここの数字はフラットに対してapnormalizeで指定したlower,upperの範囲よりも内側にくるべきである)
    >>> Lower Pixel for Extraction (-12) : -20
    -20
    >>> Upper Pixel for Extraction (12) :  11
    11
プロンプトの( )のなかには先ほどのapeditで決めた一番目のオーダーの apertureの値がデフォルトで入っている。 何も数字を入れずにリターンをするとその値になる。
あとは自動的に1pixel毎にフラットと天体がスライスされ、 フラットフィールディングとオーダー抽出が同時に行われる形になる。
Aperture Extraction for Image Slicer
▲イメージスライサ#3のスリット長方向のプロファイル
黒が天体で赤がフラットのプロファイル。
スライサ素子の間および両端では フラットのカウントが小さくなるが、このまま割るとこの部分の 天体のカウントが過大に見積もられてしまう。
hdsis_ecf.clでは このフラットのプロファイルを一度作って補正をかけることにより それを防止する。





Appendix. オーダー結合~完全一次元化

ここまでの作業で、一次リダクションはほぼ完了したので、 ここから先はエシェルの各オーダーを結合して完全一次元化をしてみる。
オーダー間を結合したフレームを作成するためには、EchelleのBlaze functionを なんらかの形で補正する作業が必要になるが、それには大きく分けて
     [A]  目標天体自身をContinuuum Fitする
     [B]  標準星を使ってフラックス補正をする
という二つの方法が考えられる。
目標天体自身のContinuum Fitから
天体自身が普通の星であり、broadな輝線やバンド吸収などがなく連続光の レベルの決定が容易である場合は、天体自身のスペクトルを タスクcontinuuumでフィットしてしまうのがもっとも簡単な方法である。

[1] タスク "continuum" を使って天体のcontinuuum fitを行う。
   ecl> continuum H75611omlcsf_ecwzr H75611omlcsf_ecwzr_c
Continuum fitting
▲Continuum Fit中の様子
   (Order 6~15程度でfit)

Spectrum normalized by continuum level
▲Continuum Fit後の天体スペクトル
   (continuuum level=1に規格化される)

この出力(H75611omlcsf_ecwzr_c)をそのままscombine (combine=ave group=images)すると、一応オーダー結合されたスペクトルを得ることができるが、 各オーダー端のカウントが低い部分も区別なく平均かされるため、S/Nが悪くなってしまう。 これを避けるために、一度Blaze Function を算出する手段をとる。
[2] Continuum Fit前後のスペクトルを割って、Blaze Function (CBlaze)を算出する。。
   ecl> sarith H75611omlcsf_ecwzr / H75611omlcsf_ecwzr_c CBlaze
CBlazeは本来のblazeと違い、目標天体のcontinuumに相当する関数が実際にはかかったものであるが、ここでは便宜上「Blaze Function」と記述する。
[3] ここで可能な場合は、CBlazeについてバルマー線の周囲や大気吸収のあるオーダー を周囲のオーダーで補間をかけるような作業をした方がよりよいBlaze Function にすることができる。

hdsqlのRe-Mask after Wavelength Calibrationの過程で"zm_val=0"とした 場合は、CBlazeでもマスクした部分の値がゼロになってしまい、 この補間に向かなくなるため注意が必要である。
Blaze function from Continuum Fit
▲修正前のCBlazeの全オーダーをオーバープロット
Modified Blaze function from Continuum Fit
▲修正後のCBlazeの全オーダーをオーバープロット
(CCD端で大きくずれているものはあまり気にしなくてよいが、Hα等のbroadな輝線や大気吸収のある一部オーダーで明らかに異なるフィーチャーが見られる。)

[4] hdsqlで天体にマスクをかけた場合(かつRe-Mask after Wavelength Calibrationの過程で"zm_val=0"としなかった場合)は、 Continnum Fitする前の天体のフレームにマスクを適用しなおす (hdsqlでzm_val="0"としたときは飛ばしてよい)。 hdsqlでは天体のフレームと同時にマスク(Mask_HXXXXXomlcsf_ecw.fits)も 作られ、天体フレームのヘッダ(H_MASK)には該当するマスクが記録されている。 タスク "hdsbadfix" (オリジナル)を使えば、このマスクは簡単にできる。
     ecl> hdsbadfix H75611omlcsf_ecwzr H75611omlcsf_ecwzr_b mask+ manual+ cl_mask+ value=0
今度はvalue=0としてマスク部分のカウントがゼロになるようにする。 このコマンドではmanual=yesとすることにより、CCD端の両側2オーダーずつで 手動でカウントをゼロにする領域を決めることができる。 このときにcl_mask=yesとすると、CCD端でカウントをゼロにした部分も同時にマスクに追加する(上書きなので注意)。
[5] 同様に Blaze Function (CBlaze) にマスクを適用させておく。 こうすることで、Bad Column にかかった部分のデータがとなりのオーダーでは 同じ波長で有効な値を持つといった場合は、以降の作業で有効なオーダーのデータのみを反映させることができる(もちろんその部分のS/Nは低くなるが)。
天体から作られたCBlazeも同じマスク情報(H_MASK)をヘッダに持っているはずなので、hdsbadfixで同じマスクを簡単に適用できる。
     ecl> hdsbadfix CBlaze CBlaze_b mask+ manual- cl_mask- value=0
value=0を指定して、マスク部分の値がゼロになるようにする。
[6] タスク scombineにて天体・Blazeともにオーダーを足し合わせ(combine=sum group=images)、最後にsarithで割って最終スペクトルを得る。 こうすることにより、オーダー端でS/Nを落とすことなく 滑らかに結合することができる。
     ecl> scombine H75611omlcsf_ecwzr_b H75611omlcsf_ecwzr_b_sum combine=sum gorup=images
     ecl> socmbine CBlaze_b CBlaze_b_sum combine=sum gorup=images
     ecl> sarith H75611omlcsf_ecwzr_b_sum / CBlaze_b_sum H75611_Cfit
     
[3]のBlazeの作成・補正までが終了していれば、上記[4]∼[6]は次のコマンドで一括処理できる。
     ecl> hdsmk1d H75611omlcsf_ecwzr H75611_Cfit CBlaze
PACKAGE = hds
   TASK = hdsmk1d

inec    = H75611omlcsf_ecwzr    Multi-Order Spectrum
out1d   = H75611_Cfit           Output Flux Calibrated 1D Spectrum
blaze   = CBlaze                (Modefied) Blaze Function

(trim   =                  yes) Trimming X-Pixel? (y/n)
(st_x   =                    3) Start X
(ed_x   =                 2048) End X

(adjexp =                  yes) Auto ExpTime Adjustment? (y/n)
(mode   =                   al)
Parameters for hdsmk1d
inec hdsqlで処理をした天体スペクトル (INPUT)
out1d 出力するファイル
blaze Blaze function のファイル
trim st_x, ed_x を使ってトリミングを行うか?
st_x トリミングを行うときの最初のpixel値
ed_x トリミングを行うときの最後のpixel値
adjexp (通常 "y"にしておく)




scombined CBlaze
▲scombineで結合したCBlaze_b_sum
scombined object
▲scombineで結合した天体スペクトル
Object Soectrum normalized by Continuum fit
▲完成したContinuum Fit・完全一次元化済みスペクトル

devided by non-Masked CBlaze
▲CBlazeにマスクをしなかった場合
(Bad Columnの影響が残ってしまう)


devided by Masked CBlaze
▲CBlazeにマスクをした場合
(生きているオーダーのみを使ってスペクトルをつなげることができる)


標準星でのフラックス補正から
broadな輝線や吸収帯が存在するときや、フラックス情報を残したい場合は 目標天体のごく近傍で撮った 標準星を使ってフラックス補正をすることにとってBlaze functionに相当する 関数を算出し、オーダー結合することもできる。
HDSの場合は、EchelleのBlaze functionが望遠鏡の位置またはフォーカス に依存して変動があるようであまり安定しないため、いわゆる 分光測光標準星(数が少ない)を撮るよりは
  • 目標天体の近傍(同様な高度・時間)
  • 吸収線が少なめな早期型(<A型星)で、スペクトル型および等級が既知
  • (Balmer limit付近を含むUVでの観測では特に)自転速度が遅め
    (λ>4000Åなどの場合ではそれほどBalmer線は混み合ってなく、大気吸収の判別にも使える高速自転星の方がいいこともあるので一概には言えない)
な星を標準星のかわりに使った方が以下の作業はうまくいく場合が多い。


[1] タスク "standard"を使って標準星のデータのフラックスを測定する。
PACKAGE = echelle
   TASK = standard

input   = H75611omlcsf_ecwzr_tb  Input image file root name
output  =       HD153855R_0724  Output flux file (used by SENSFUNC)
(samesta=                  yes) Same star in all apertures?
(beam_sw=                   no) Beam switch spectra?
(apertur=                     ) Aperture selection list
(bandwid=                   1.) Bandpass widths
(bandsep=                   1.) Bandpass separation
(fnuzero=  3.6800000000000E-20) Absolute flux zero point
(extinct= hdshome$mkoextinct.dat) Extinction file
(caldir =  onedstds$blackbody/) Directory containing calibration data
(observa=       )_.observatory) Observatory for data
(interac=                  yes) Graphic interaction to define new bandpasses
(graphic=             stdgraph) Graphics output device
(cursor =                     ) Graphics cursor input
star_nam=                    v  Star name in calibration list
airmass =                 1.62  Airmass
exptime =                  30.  Exposure time (seconds)
mag     =                 6.97  Magnitude of star
magband =                    V  Magnitude type
teff    =                B1III  Effective temperature or spectral type
answer  =                 YES!  (no|yes|NO|YES|NO!|YES!)
(mode   =                    q)
▲分光測光標準星ではなく、明るさ・およびスペクトル型が既知の星を使って、 bklackbodyにフィットさせる場合

     (前略)
(caldir =  onedstds$spec50cal/) Directory containing calibration data
     (中略)
star_nam=             bd284211  Star name in calibration list
airmass =                 1.62  Airmass
exptime =                  30.  Exposure time (seconds)
     (後略)
▲IRAFがデータを持っている分光測光標準星を使う場合

airmass, exptimeはimage headerに記述されている内容が優先されるようなので、 正しくない場合はheditで修正しておく必要がある。
blackbodyを使う場合のteffは例のようにスペクトル型で入力してもよい。 スペクトル型のテンプレートがない、判別できない場合は怒られるので 心配しなくてよい。
[2] タスク sensfuncによって感度曲線を決定する。
PACKAGE = echelle
   TASK = sensfunc

standard=       HD153855R_0724  Input standard star data file (from STANDARD)
sensitiv=       HD153855R_0724  Output root sensitivity function imagename
(apertur=                     ) Aperture selection list
(ignorea=                   no) Ignore apertures and make one sensitivity functi
(logfile=              logfile) Output log for statistics information
(extinct=        )_.extinction) Extinction file
(newexti= hdshome$mkoextinct.dat) Output revised extinction file
(observa=       )_.observatory) Observatory of data
(functio=              spline3) Fitting function
(order  =                   10) Order of fit
(interac=                  yes) Determine sensitivity function interactively?
(graphs =                   sr) Graphs per frame
(marks  =       plus cross box) Data mark types (marks deleted added)
(colors =              2 1 3 4) Colors (lines marks deleted added)
(cursor =                     ) Graphics cursor input
(device =             stdgraph) Graphics output device
answer  =                  YES  (no|yes|NO|YES)
(mode   =                    q)
task standard
▲タスク"standard"での標準星のフラックス測定
(測定バンドはもっと太くてもよい[~4Åくらい])

task sensfunc
▲タスク"sensfunc"での感度曲線の決定
(spiline3のorder=10でやっているが、もっと低いorderでもよい)

[3] hdsqlで同様に解析した天体のスペクトルを準備(必要ならscombine combine=sumで足し合わせる)し、タスク calibrate によってフラックス補正をする。
PACKAGE = echelle
   TASK = calibrate

input   = V1312Sco_R_omlcsf_ecwzr_t  Input spectra to calibrate
output  = V1312Sco_R_omlcsf_ecwzr_tf  Output calibrated spectra
(extinct=                  yes) Apply extinction correction?
(flux   =                  yes) Apply flux calibration?
(extinct= hdshome$mkoextinct.dat) Extinction file
(observa=       )_.observatory) Observatory of observation
(ignorea=                   no) Ignore aperture numbers in flux calibration?
(sensiti=       HD153855R_0724) Image root name for sensitivity spectra
(fnu    =                   no) Create spectra having units of FNU?
airmass =                 1.99  Airmass
exptime =                1500.  Exposure time (seconds)
(mode   =                    q)
[4] あとはContinuum Fitでの場合とほとんど同じである。
calibrate前後の天体のスペクトルを割って、Blaze Function (FBlaze)を算出する。
   ecl> sarith V1312Sco_R_omlcsf_ecwzr_t / V1312Sco_R_omlcsf_ecwzr_tf FBlaze
(前述のContinuumのときCBlazeに標準星のフラックス情報が加わった関数であり異なるものであるが、ここでは便宜上同じ「Blaze function」と呼ぶ。)
[5] ここで可能な場合は、FBlazeについてバルマー線の周囲や大気吸収のあるオーダー を周囲のオーダーで補間をかけるような作業をした方がよりよいBlaze Function にすることができる。

hdsqlのRe-Mask after Wavelength Calibrationの過程で"zm_val=0"とした 場合は、FBlazeでもマスクした部分の値がゼロになってしまい、 この補間に向かなくなるため注意が必要である。
Blaze function from Flux calib
▲修正前のFBlazeの全オーダーをオーバープロット
Modified Blaze function from Flux calib
▲修正後のFBlaze(マスク済み)の全オーダーをオーバープロット


[6] hdsqlで天体にマスクをかけた場合(かつRe-Mask after Wavelength Calibrationの過程で"zm_val=0"としなかった場合)は、 calibrateする前の天体のフレームにもマスクを適用しなおす (hdsqlでzm_val="0"としたときは飛ばしてよい)。
     ecl> hdsbadfix V1312Sco_R_omlcsf_ecwzr_t V1312Sco_R_omlcsf_ecwzr_tb mask+ manual+ cl_mask+ value=0
今度はvalue=0としてマスク部分のカウントがゼロになるようにする。 このコマンドではmanual=yesとすることにより、CCD端の両側2オーダーずつで 手動でカウントをゼロにする領域を決めることができる。 このときにcl_mask=yesとすると、CCD端でカウントをゼロにした部分も同時にマスクに追加する(上書きなので注意)。
[7] 同様にBlaze Function (FBlaze) にマスクを適用させておく。
     ecl> hdsbadfix FBlaze FBlaze_b mask+ manual- cl_mask- value=0
FBlazeでもvalue=0を指定して、マスク部分の値がゼロになるようにする。
[8] タスク scombineにて天体・Blazeともにオーダーを足し合わせ(combine=sum group=images)、最後にsarithで割って最終スペクトルを得る。 こうすることにより、オーダー端でS/Nを落とすことなく 滑らかに結合することができる。
     ecl> socmbine V1312Sco_R_omlcsf_ecwzr_tb V1312Sco_R_omlcsf_ecwzr_tb_sum combine=sum gorup=images
     ecl> socmbine FBlaze_b FBlaze_b_sum combine=sum gorup=images
     ecl> sarith V1312Sco_R_omlcsf_ecwzr_tb_sum / FBlaze_b_sum V1312Sco_R_Fcalib
赤側と青側のCCDのスペクトルをつなげたい場合などには scombine group=allを使う。
     ecl> socmbine V1312Sco_R_Fcalib,V1312Sco_B_Fcalib V1312Sco_All_Fcalib combine=sum gorup=all
     
Continuum Fitの時と同様に[5]のBlazeの作成・補正までが終了していれば、上記[6]∼[8]は次のコマンドで一括処理できる。
     ecl> hdsmk1d V1312Sco_R_omlcsf_ecwzr V1312Sco_R_Fcalib FBlaze



Blaze function from Flux calib
▲フラックス補正・オーダー結合された完成スペクトル
Modified Blaze function from Flux calib
▲完成スペクトルの一部拡大
(このように複数オーダーにまたがるような輝線もきれいに結合できる。)

Akito Tajitsu updated on Fri Nov 12 17:59:10 JST 2021