======= SWS IA の使用法に関するメモ by I.Yamamura ======= 96/11/18 First virsion 97/04/02 日本語化+増補 97/04/09 Cal. filesのup dateに対応。やまむら's commandsの追加。 97/04/10 stdaa におけるflaggingについて捕捉。 97/04/11 stdaa に /upref オプションを追加。Web pageの解説 97/04/21 stdaa の flagging の方法を変更。/noflagging オプションを追加。 97/04/28 sec. 7.0にcalsetの説明を追加。 0. IAのファイル (SRONと同じディレクトリ構成になっている) /rog01/mcc/IAS_ROOT : IAの実体 /rog01/mcc/bin : セットアップファイルなど /rog01/mcc/IDL : IDLのサブルーチン等 /rog01/idl : /usr/local/lib/idlへリンク ~yamamura/ia/pro : 山村製のユーティリティ等 IAS_ROOT/tst/cal : キャリブレーションデータ IAS_ROOT/tst/utl : ほとんどのIAのプログラム 1. IAの起動(と終了) % source /rog01/mcc/bin/setup_ia % source ~yamamura/ia/pro/setup_ia_yamamura (必要なら) % ia > exit 2. IDLの基本 function : out=function(in, options) subroutine : subroutine, in, options optionの指定 : /option or option=value データ範囲の指定 : [1,2,4] --- 1, 2, and 4 'retall' : 途中で止まった時に、元のレベルに戻るおまじない。 3. SWSのデータ構造 ERD ; Edited Raw Data. 生データ。 SPD ; Standard Processed Data. 時系列データ。 AAR ; Auto Analysis Results. 最終結果。波長順に並び変えられたデータ。 Vilspaから来たCD-ROMの中ではそれぞれ、swer.fit(とその他のファイル)、 swsp.fit、swaa.fitとなっている。データ構造は、 > showstruct, 変数名 で見られる。 4. 良く使うIAのコマンド > ? ; ヘルプを開く(IDL ver3.6のみ) > write_fitstable, [spd|aar], 'filename' ; データの書き込み > ploterd, erd, (options) ; plot ERD data > plotspd, spd, (options) ; plot SPD data > plotaar, aar, (options) ; plot AAR data --- some useful options --- band=[1|2|3|4] ; specify band to plot det=[1-52] ; specify detector number to plot /flag ; plot flag /status ; plot status range=[from, to] ; データ範囲の指定 xrange=[from, to] ; X軸の範囲指定 yrange=[from, to] ; Y軸の範囲指定 itk=[from, to] ; (ERD,SPDのみ)時間での範囲指定(単位sec) xaxis='wave' etc ; (SPDのみ) X軸の表示内容の指定 yaxis='wave' etc ; (SPDのみ) Y軸の表示内容の指定 psym=n ; プロットのマークの指定 5. キャリブレーション SWSのキャリブレーションのデータは、IAS_ROOT/tst/calの下にあり、 キャリブレーションの内容毎に別々のファイルに収められている。 1996年11月より、観測時期によって異なるキャリブレーションパラメータが 適用されるよう(なことがあっても大丈夫なよう)にファイルの管理方法が 改められ、それ以降のファイルには*_???.fitsのようにバージョン番号が 付けられるようになった。これらのファイルは stimedep_base.fitsあるいは stimedep_test.fitsというテーブルによって管理されている。 「test」はテスト中のバージョン、「base」は(一応)動作確認済みの バージョンということになっている。どのバージョンを使うかは、 cal_selectというsubroutineで各キャリブレーション毎に選択できる。 もっとも重要なスペクトルの形やfluxのキャリブレーションに関しては、 cal25_*で各AOT_BAND内の相対的な感度補正をして形を整えた後に、 cal13によって各バンド内に定義された「key wavelength」における detector output vs. real fluxのfactorを掛けることにより絶対fluxを 決めている。97年4月より、band=4を除いてこれらのキャリブレーション ファイルは、軌道上での実際の天体の測定を元にしたものに更新された。 6. Detector,AOT_bandについて SWSは12個ずつ4組のdetectorによってGratingモードを、別の4つの detectorによってFPモードをカバーしている。Detectorの番号は波長の 短いバンドから順に、1-12, 13-24, 25-36, 37-48, 48,49,50,51と番号が ふられている。但し、FPモードのdetectorの一部は特性が悪いため実際には 使われていない。 Gratingモードは、さらにaperture(=filter)とgratingの分散orderによって 細分されている。各々のカバーする波長域とresolutionは打ち上げ後に改定され 新しいバージョンのマニュアルに載っているが、便宜のためにここに再録する。 ============================================================================ section band order aperture area detector wavelength resolution detector filter ("x") type (micron) No. ---------------------------------------------------------------------------- SW-gr 1A 4 1 t Al2O3 14x20 InSb 2.38-2.60 1870-2110 1-12 SW-gr 1B 3 1 t Al2O3 14x20 InSb 2.60-3.02 1470-1750 1-12 SW-gr 1D 3 1 t LiF 14x20 InSb 3.02-3.52 1750-2150 1-12 SW-gr 1E 2 1 t LiF 14x20 InSb 3.52-4.08 1290-1540 1-12 SW-gr 2A 2 1 t LiF 14x20 Si:Ga 4.08-5.30 1540-2130 13-24 SW-gr 2B 1 1 t LiF 14x20 Si:Ga 5.30-7.00 930-1250 13-24 SW-gr 2C 1 1 t SrF2 14x20 Si:Ga 7.00-12.0 1250-2450 13-24 ---------------------------------------------------------------------------- LW-gr 3A 2 1 r Al2O3 14x27 Si:As 12.0-16.5 1250-1760 25-36 LW-gr 3C 2 1 r LiF 14x27 Si:As 16.5-19.5 1760-2380 25-36 LW-gr 3D 1 1 r LiF 14x27 Si:As 19.5-27.5 980-1270 25-36 LW-gr 3E 1 1 r SrF2 20x27 Si:As 27.5-29.0 1300 25-36 LW-gr 4 1 1 r SrF2 20x33 Ge:Be 29.0-45.2 1020-1630 37-48 ---------------------------------------------------------------------------- LW-fp 5A 3 1 r Al2O3 10x39 Si:Sb 11.4-12.2 20600-24000 49,50 LW-fp 5B 2 1 r Al2O3 10x39 Si:Sb 12.2-16.0 24000-32000 49,50 LW-fp 5C 2 1 r LiF 10x39 Si:Sb 16.0-19.0 32000-34500 49,50 LW-fp 5D 1 1 r LiF 10x39 Si:Sb 19.0-26.0 34500-35500 49,50 LW-fp 6 1 1 r SrF2 17x40 Ge:Be 26.0-44.5 29000-31000 51,52 ============================================================================ t = transmission, r = reflection * band 3A-3Dのareaはdetectorの大きさがlimitとなっており、実際には14"x20"。 * 表のresolutionはAOT02,06の場合。AOT01の場合はspeedに応じて以下の factor分だけ悪くなる。speed 1 and 2 : 1/8、3 : 1/4、4 : 1/2。 * band 2と4のdetectorには memory effectがある。 7. リダクションの実際 7.-1 概要 イ. キャリブレーションファイルの選択 ロ. ERD->SPDの変換(非常に古いデータ以外必要なし) ハ. Memory effectの補正 ニ. Dark currentの決定と差引 ホ. Responsivityの補正 ヘ. Flux calibration ト. SPD->AARへの変換 チ. bad dataの切捨て リ. 'flat fielding' ル. sigma clipping ヲ. rebinning IDLの問題で、しばしば作業途中でメモリ不足でエラーが発生することがある。 この場合、一旦IDLを終了して再度起動しなければならない。そのため、適宜 途中結果をファイルに保存しておくことを勧める。 7.0 キャリブレーションファイルの選択 > cal_select デフォルトは全部BASEを使うようになっているはず。以下のファイルに ついては、TESTを使うように勧められている。 cal8, cal13, cal16e, cal19 cal25_1A,1B,1D,1E,2A,2B,3A,3C,3D,3E (つまり、4,5,6以外全部) OKボタンで設定が完了する。 Saveボタンで任意のファイルに結果をsaveできる。このファイルは、 Loadボタンで読み込むことができる。また、いちいちcal_selectの パネルを開くのが面倒臭いという場合は、 > load_cal_selection, 'cal_select.dat' のようにして直接読み込み、設定できる。バッチ処理する時には便利。 なお、推奨のcalibrationファイルの設定が、 ~yamamura/ia/pro/cal_select.dat にある。 % sourc ~yamamura/ia/pro/setup_ia_yamamura をした後なら、 > setcal でこのファイルが読み込まれて設定される。 7.1 ERD -> SPD Pipeline ver 5.0以降(昨年夏以降に届いたCD)では必要なし。 データは、一つのディレクトリに次のような名前で入っていることが必要。 CD-ROM中 disk中 ???/*.fit -> *???.fits ????????/*.fit -> *????????.fits ???および????????はrev.番号および観測番号である。 > erd=read_ferd('DATA_NUMBER') > spd=dspd(erd) > write_fitstable, spd, 'spd_file' 7.2 SPD -> AAR > spd=read_fspd('spd_file') ; SPD ファイルを読む。上でERDから作った場合にはもちろん必要なし。 > spd=antimem(spd) ; Memory effectの補正。のはずだが、未だdetectorの特性が完全には 把握されていないので、実際にはデータのflaggingをしているだけ。 ただし、この作業は次のdarkの決定に大きく影響するので、省けない。 > spd=dark(spd) ; dark currentの決定。各々のdarkの測定点から一次元の内挿あるいは外挿 を行なって、観測中のdarkを決めている。 > spd=cleanstruct(spd) ; flagされたbad dataのお掃除。必須ではない。 # この辺りで一度データを良く見て、悪い部分(darkの差引、noise)を 除くと良い。除き方については8.1を参照。 > spd=respcal(spd) ; responsivityの補正 > spd=fluxcon(spd) ; flux calibration # 必要なら defringe を行なう。8.2参照。 > aar=extract_aar(spd) ; SPD -> AARへformat変換 > write_fitstable, aar, 'aar_file' ; この状態がおおむねCD-ROMに入っているAARだと思って良い。 もちろん、キャリブレーション等のパラメータが新しくなっている分、 IAでやり直す意味は十分にある。 7.3 AARの処理 > aac=cutbandedge(aar) ; 山村製のcommand。AOT01では、定義された波長域より多少 余分にスキャンしている。それらのうち使えない部分を除く。 out = cleanstruct(in, aot_??=[from, to])で自分でもできる。 01以外のAOTでは必要ない。 # さらに、データを良く眺めて質の悪いものを除く。8.1参照。 > aff=sws_flatfield(aac, 0, clip=3) ; 各バンドの12個のdetectorのデータは本来一致するべきだが、 実際には特性の違いなどによってばらついている。これを揃える 作業を行なう。具体的には、各バンドのデータ全体の平均を基準 として、各々のdetector/scan毎に計算したレベルとの差を補正する。 デフォルトでは単純にスペクトルをシフト(/offset)するが、 /scalingオプションをつけると、ずらすのではなくfactorをかけて 補正する。どちらを使うかはpolicyの問題だが、fluxの小さい天体では darkの誤差が効いていると考えれば/offsetを使うのが良く、明るい 天体ではmemory effect等が原因と考えて/scalingに押しつけるのがよいか。 > asc=sigclip(aff, resolution=RES) ; RESは観測のresolution(おおよそでよい)。各resolution bin毎に standard deviationを計算し、そこから外れているもの(default=3sigma) はcosmic ray spike等のノイズだと考えてflagする。 > arb=sws_rebin(asc, resolution=RES) ; 与えたresolutionでbinningする。デフォルトは'flux conserving average' だが、method='mean' or 'median'を指定すると単純平均や中間値を とることもできる。輝線の強度を測定する時などはdefaultがよい。 # 上記の3つのfunctionには、lines=0というオプションをつけることができる。 これは、AOT02,06,07の場合に有効となるが、これらの観測モードでは 各バンドの各々のスキャン毎(すなわちup/downを別々)に'line'という 番号が付けられており、デフォルトでは個々のline毎に上記の作業を行なう。 すると、rebinした後でも同じ波長域に複数のスペクトルが現れて、 意図した結果にならないことがある。lines=0を指定すると、同じAOT_BANDに あるデータは一括して扱うので、上記の問題はなくなる。 ただし、どのように扱えば最良の結果が出るのかは、実際にいろいろ 試してみて探すしかない。 > write_fitstable, arb, 'aar_file' 8. ちょっとしたテクニック 8.1 Bad dataの切捨て (a) SPD SPDは時系列データなので、あるdetectorの「この時刻からここまで」 と指定して捨てることができる。例えば、ある時刻のdarkがおかしい時に その前後のscanのみを捨てるといったことが出来る。これを簡単に行なう のが山村製のcommand、'flgspd'で、使い方は、 > out_spd=flgspd(in_spd, ndet, from, to) ここで、ndetはdetectorの番号(1回に一つ)、from, toはファイル頭からの 相対時刻(秒)で、これはplotspdで表示されるものと同じである。 (b) AAR 一方、AARは波長vs.fluxのデータなので、あるdetectorのある波長域を 捨てることができる。上と同様'flgaar'というcommandがあり、 > out_aar=flgaar(in_aar, ndet, from, to) のように使う。ただし、from, toはここでは波長(micron)で指定する。 例えば、band 1dと1eの重なった部分の1d側だけ捨てたいときには、 aot_bands='1d' のように指定することが出来る。 (c) cleanstruct 既に出てきたcleanstruct()がシステム標準の「お掃除」commandである。 使い方の例を挙げると、 > out=cleanstruct(in, det=[det1,det2,....]) ; detで指定されたdetector(複数指定可)のデータを消去する。 > out=cleanstruct(in, lines=lines) ; linesで指定されたscanを消す(AARのみ)。 > out=cleanstruct(in, band_1a=[from, to]) ; band 1Aの[from, to]で指定された波長域以外を消去。もちろん 他のバンドも同様に扱える。 以上のcommandの他にも、selbands(), selscan()(9.参照)で 特定のデータを捨てることができる。 8.2 fringe 特にband 3には顕著なfringeが現れる。これを取り除く方法(+tool)が いくつか検討されているが、その中で一応実用化されているのが'fringe' というプログラムである。これは、スペクトルにsine waveを当てはめて、 もっともresidualが小さくなるものを探し、それを除いていくというもの。 使い方は次の通り。7.2に書いたようにこのプログラムはfluxcon()の直後の SPDに適用する。 > dlist=indgen(12)+25 ; 適用するdetectorのリスト。この場合band 3のdetectorである25-36。 > out_spd=fringes(in_spd, dlist, nfringes=nfringes) ; nfringesは取り除くsine成分の数。通常4程度が適当とされる。 ただし、実用化されているとはいっても未だに試験中のプログラムであり、 効果は保証されない。特にband 3Aは非常に近い周波数のfringe成分が混在 しており、良好な結果が得られることは少ない。 9. その他の山村製のcommand 御自由にお使い下さい。ただし、無保証です。 > out_aar=selbands(in_aar, bands=['1a','1b'...]) 特定(複数指定可)のAOT_BANDのデータを抜き出す。 また、/removeオプションにより、条件にあったデータ「以外」を 抜き出すこともできる。 > out_aar=seldets(in_aar, det=['1a','1b'...]) 特定(複数指定可)のdetectorのデータを抜き出す。 /removeオプションもある。 > out_aar=sellines(in_aar, lines) 特定(複数指定可)のline番号のデータを抜き出す。 /removeオプションもある。 > out_aar=selscan(in_aar, scan) scanは -1 or 1。Up scan(1:波長が短くなる方向)または Down scan (-1:波長が長くなる方向)のデータのみ取り出す。 /removeオプションもある。 > out_spd=seldark(in_spd) darkの測定の部分のみ抜き出す。 > out_aar=diet(in_aar) sigclip()などは、不必要なデータをflag outするだけで消去は しないので、plotaarなどでは表示されてしまうことがある。 diet()はflagが立ったデータを実際に消去する。 > aartxt, aar, file='file.txt' AARをテキストに落す。フォーマットは、 wavelength(micron), Flux(Jy), Error(Jy)。 > aartxtd, aar 同様にAARをテキストファイルにするが、detectorやscanの情報を 含んでいる。データを自分でいじりたい場合に便利。フォーマットは、 detector No., Scan(up=1/down=-1), wavelength(micron), Flux(Jy) > plt, aar データプロット。さまざまなオプションがある。 使用例: > plt, aar, band=1, ti='TITLE' ; band 1のみプロットして、'TITLE'という文字列をタイトルにつける。 > plt, aar, aff=aff, fpsym=4, /xlog, /ylog ; aarを実線、affをダイアモンドでプロットし、かつX,Y軸とも 対数スケールにする。 > plot5, aar ; スペクトル全体と、band毎の計5つのプロットを一枚に描く。 > pson (, file=filename) プロットをPostScript (landscape)ファイルに出力する。 > psvon (, file=filename) プロットをPostScript (portrait)ファイルに出力する。 > psoff PostScriptファイルへの出力を終了し、ファイルを閉じる。 > xrange, from, to > yrange, from, to X軸およびY軸の描画範囲を設定する。 10. 山村製パイプラインstdaa > stdaa, 'name', (res=res), (options) ; 一通りのリダクションをやってくれる。'name'は適当な名前で、 SPDから始める場合、name.spdというファイルがなければならない。 ERDから始める場合には、erd='????????'というオプションをつける。 ????????は観測番号。この場合、name.spdというファイルを作る。 結果は、name.asc(sws_rebinの直前)、name.arb(直後)の2種類を作る。 resはresolution。省略時はAOT01->300、02,06,07->1600が仮定される。 stdaaは途中経過をtmp.???というファイルに保存する。 ???は以下のものがある。 'drk' : dark後。calibration前。 'fcn' : calibration後。AARに変換(or fringe処理)前。 'aar' : AARに変換後。不必要なデータを掃除する前。 'aac' : 不必要なデータを掃除した後。flat_fielding前。 'aff' : flat_fielding後。sigma clipping前。 'name.asc' : sigma clipping後。rebinning前。 startp, endpオプションによって、任意の場所から開始、終了できる。 例: > stdaa, 'name, res=res, startp='fcn', endp='aff' ; はcalibration後のSPDファイルから始め、flat_fielding後のデータを saveして終了する。 その他のoptionとして、 /merge : 2つのbandのデータが重なる部分では両方のbandの データを平均する。 /scaling : flatfieldでscan間の際をfactorを掛けることで補正する。 /defringes : Do Kester's defringeプログラムで処理する。 /nosetcal : デフォルトでは~yamamura/ia/cal_select.datを読み込んで calibration でーたの設定を行なうが、これをやらない。 /noref : デフォルトでは「ある方法」により、sws_flatfieldのための referenceスペクトルを作成しているが、それをやらない。 /upref : デフォルトではdown scanのみからreferenceスペクトルを 作っているが、upスキャンのみからつくる。また、upref<0を与えると、 up/down両方から作成する。 /nolines : sws_rebinにおいて、同じ波長帯の異なるline番号の データを平均する。AOT02,06,07ではこれがデフォルト。 /noflagging : flagging ファイル(name_fla.pro name_fls.pro)を使わない。 order=order : sws_flatfield()に与えるfittingの次数。 method='method' : rebinningの方法 stdaaは各々のデータのAOTモードを自動的に検知して、「適切」な 処理をしてくれるが、基本的にはAOT01のデータ用に作ったものなので、 その他のモードでは、必ずしも最適な結果を残すとは限らない。 (出来る範囲で動作確認はしていますが。) # stdaa でのデータのflaggingについて stdaaはSPDの処理中(darkの直後)にname_fls.pro、AARの処理中 (extract_aarの直後)にname_fla.proというsubroutine(function)を 探し、見つかれば実行している。デフォルトあるいは/noflaggingオプションを 指定したときはclean_structのみ行う。 ここで"name"の部分は、stdaaの引数と同じく「天体名」である。    もしflagしたいことがある時は、 % cp ~yamamura/ia/pro/tmpl_fla(or fls).pro ./name_fla(or fls).pro のように、これらのプログラムをデータのあるディレクトリにコピーし、 一行目のプログラム名とファイル名の、'name'の部分を直し、 8.1のような内容をプログラムに書き加えると、以後その処理をする。 (このような仕様にすることで、同じディレクトリに複数のデータがあるときも 対応できるようになった)。 Appendix. A.1 SWSのスペクトルにはresponsivity curveに起因すると思われる 偽のfeatureが未だに残っている。特に、10.05micron, 11.05micronに 現れる鋭いpeakは偽物である可能性が大きいとされてる。微妙な detectionを議論する場合には、responsivity curveをスペクトルと一緒に プロットして、チェックすることを勧める。方法は例えば、 > plotaar, aar ; まずデータをplot > c=readcal('25_3d') ; cal. fileの読みだし > oplot, c.data.lambda30, c.data.respons30(*適当なfactor) ; overlay A.2 宇宙線の影響等によって、時々darkのレベルが突然変わることがある。 例えば、 > plotspd, select(spd, test_status(spd.data.status, /dark)) でdarkの測定部分のみをプロットして、レベルが極端に変わっていないかどうか チェックするとよい。 A.3 ヘルプ画面が見られない時、探している項目が見つからない時は /rog01/mcc/IAS_ROOT/tst/utlの下に大概のプログラムの実体があるので 直接各プログラムの先頭の説明を参照する。また、たまにhelp(とファイル 先頭の説明書)と実際のプログラムが一致していないことがあるので、 プログラムの先頭の変数/オプションのリストも参照すると良い。 A.4 その他SWSのデータ(リダクション)で良くわからないことがあったら、 yamamura@astron.s.u-tokyo.ac.jpまで遠慮なく聞いて下さい。 A.5 SWS IA Web page (日本のユーザー用) http://tochan.astron.s.u-tokyo.ac.jp/~swsia