SWSのfringeについて 97/07/15 山村 SWSのスペクトルを解析する際に問題となるfringeについて、解説と対処方を まとめます。結論からいえば、いまだ万能な確立した対処法は(アイデアとしては あるものの)実現していません。それでも、個々のケースについては、ある程度の レベルにまでfringeを除去することが出来ます。なお、以下の記述は山村の個人的な 見解(経験)が含まれており必ずしもSWS instrumental teamの統一的見解(そんなもの はないですが)ではないことをご注意下さい。山村自身も、この文書の内容について 全面的な責任は負えません。あしからず。 1. fringeの原因 いうまでもなく、fringeはdetector自身を含む光学系内の干渉によって発生します。 SWSの場合、band3(12〜29micron)でもっとも激しく、band2でもAOT02,06, AOT01 speed4 などの高分解能で明るい天体を観測すると現れてきます(低分解能では fringeがなまされてしまうので見えにくい)。 Fringeはdetectorの感度が細かいスケールで揺らいでいると解釈されます。 実際に、生データ(SPD)におけるfringeの振幅は、天体の強度に比例して強くなって います。各detectorの波長に対する感度補正(responsivity correction)の caribration データ(Relative Spectral Response Function : RSRF)には、 fringeのパターンが含まれており、観測された生データ(SPD)をこれで割り算すること によって、原理的にはfringeは除去されるはずです。しかし、実際には相当量の fringeが残ります。その理由は例えば、 1. dark currentの差し引きが正しくない。 2. 観測データのfringe patternがRSRFのものと違う。 などが考えられます。1.の原因となるのは、noiseやglitchです。dark currentは 通常(Jy換算で)数Jy程度ですから、非常に弱い天体において効いてきます。 実際には、このような天体においては、fringeの振幅よりnose levelの方が結果に 影響を与えると思われるので、AOT02で非常に長時間の積分をするといった特殊な 観測でないと、fringeが問題になってくることはあまりないと(個人的には)思います。 2.について、一番効くと考えられるのがpointingです。SWSのapertureの中のどこに 天体がいるかによって、波長が最大full resolutionの半分程度ずれることが 分かっています。同時に、観測データのfringeの強度も若干ずれると考えられます。 従って、観測データとRSRFのfringeのパターンに位相差や強度差が出来てしまい、 これが補正後にもfringeが残る原因となります。更に、extended sourcesでは、 aperture内のあらゆるところからsignalが入ってくるので、出力は互いに少しずつ ずれたfringeパターンの平均のようなものになります。現行のRSRFは恒星(=点源)の データを基に作られており、したがってextended sourcesでfringeを完全に 除くことは原理的に不可能です(今後これに対してどのような対策が取られるかは おそらく未定だと思います)。 2. データをどう処理すべきか 2-1. まずよく眺める。 まず、データをよく見て、ベースラインのうねりが本当にfringeなのか、 それともノイズなのか、はたまたreal featureなのか(あるいはそれらの混合 なのか)を調べましょう。 データを表示します。plt コマンドについては「stdaaの使い方」を参照のこと。 > a=read_faar('data.arb') > plt, a, band=3 RSRFをoverplotします。 > pltcal, cal, 25, 2.5, aot_band='3a' この場合 cal 変数は使われていない任意の変数です。aot_bandオプションで aot_bandを指定すると、そのaot_bandのRSRFデータを読み込んで、calにセット します。2回目以降はaot_bandオプションをつけなければ同じデータが使われます。 '25'はdetector番号で、band=3のときは25..36のどれかです。[25,26,27]のように 複数指定することも可。次の'2.5'はscaling factorで、この値を調節して、 天体のスペクトルと同じレベルに合わせます。指定しなければ1.0が使われます。 ================================================== pltcal, cal, dets, scale, AOT_BAND=aot_band, OFFSET=offset, NOOPLOT=nooplot, $ XRANGE=xrange, YRANGE=yrange, _EXTRA=extra ; cal : RSRF data ; dets : detectors to plot ; scale : scaling factor ; aot_band : if specified, corresponding RSRF file is read. ; offset : offset value ; /NOOPLOT : no overplot (new plot) ; xrange : X-axis range ; yrange : Y-axis range ; _EXTRA : other options for plot ================================================== *** pltcal を使うこつ *** まず、天体のスペクトルを表示して、大体のレベルを覚えておきます。次に、 > pltcal, cal, 25, aot_band='3x', /nooplot でRSRFを読み込み、表示します(pltcalはdefaultでは現在のスペクトルに overplotするので、/nooplotオプションでRSRFだけ表示する)。xrange=[from, to]で 表示範囲を指定した方がいいかもしれません。ここで、天体のスペクトルに対応する 範囲のRSRFの大体の値をみて、scaling factorを見積もっておきます。その後、 > pltcal, cal, 25, scaling_factor で両者を重ね合わせて、scaling_factorを微調整すればよろしい。fringeの amplitudeを調べるためには両者がほぼ同じレベルになっている必要がありますが、 表示がはみ出たり、見苦しかったり、あるいはfringeのパターンだけを知りたいので あれば、offsetオプションで「ゲタ」をはかせて調節することもできます (その場合はそうしているということを自覚していてください)。 このようにして、スペクトルとRSRFが同じ画面にプロットできたなら、次の点を チェックしましょう。 a) RSRFのfringeパターンとスペクトルに現れている成分は同じか(位相、周波数等)? もし、違っているときにはreal featureまたはnoiseの影響を相当受けているはずです。 それでもfringe除去をしたいときには、十分注意して行いましょう。 b) 強度は? scaleしたRSRFのfringe成分の強度は生データのfringe成分と同じ程度のはずです。 通常スペクトル中に残るfringe強度はどんなに強くても絶対強度の10%以下です。 これより極端に強いときは、リダクションをもう一度見直しましょう。 逆にフリンジ成分が弱くてノイズに埋もれている場合などにはfringe除去はあまり うまくいかないかもしれません(とくに分解能が低いとき)。 2-2. fringe 除去をしない これも一つの対処法です。もし、議論が定性的なものであったり、fringeが 弱かったりして除去がうまく行かない、それでもfringeの影響は無視できない、 ということがあります。特に、band 3A (2C)では、現在の技術ではfringeを完全に 取り除くことは難しく、かえって見苦しい副作用がでたりします。その場合には 潔く(現時点でこれ以上じたばたするのは)あきらめた方が良いでしょう。 このような場合は、できる限り、結果のプロットにはpltcalを用いてRSRFを 示しましょう。全部のdetectorをプロットする必要はありません。どれか一つだけ でもプロットしておくと、その成分がfringeで、どの成分がrealなのかが、 図を見る人に一目瞭然となって、図の信頼性が格段に増します。特に、marginalな detectionを議論しているときには、fringeが見えなくても、あるいは他のbandの 場合でも、その付近のRSRFに怪しいfeatureが無いことを示すのは義務と言えます。 2-3. fringeの除去を試みる fringeが甚だしいときには、次章で説明するような方法でfringeの除去を 試みることが出来ます。現在SWS IAに実装されている(実用化されているとは 言い難い)defringeプログラムは3つあります。 fringes() : sine waveをfitして除く。 ○ : 簡単。比較的安全。 × : 完全には除去しきれない。3Aではうまく行かない。 resp_inter() : 観測に合わせてRSRF(のフリンジ成分)をシフトさせて適応する。 ○ : データによってはほとんど完全に(3A以外)fringeを除去できる。 × : 時間がかかる。バグが多い。AOT01 speed <= 3ではうまく行かない。 aarfringe() : スペクトルをFourier変換してfringe成分を除く。 ○ : 結果を見ながらinteractiveに作業が進められる。 × : fringe以外の成分も削ってしまう可能性あり。 以上のようにそれぞれのプログラムに長所と短所があり、決定的な方法はありません。 時間があれば、総ての方法を試して、もっともうまく行く方法を取るのが良いでしょう。 3. fringes() fringes()は、データにsine waveをfitして除いていくものです。fringes()は stdaaの中からオプションで呼び出すことが出来ます。 > stdaa, 'name', /defringe, other options...... 結果は、name.fsc, name.frb に保存されます。拡張子が異なるので、 通常(defringeなし)のreductionの結果を上書きすることはありません。 stdaaから使うときには、fringes()のオプションのうち2つを指定することが出来ます。 > stdaa, 'name', /defringe, nfringes=4, tol=0.005 nfringesは除去しようとするfringe componentの数を指定するものです。 defaultは4になっています。通常4以上の数を指定してもほとんど効果はありません。 一方、tolはchi^2がこの値より小さくなったら終了せよという値で、 通常0.01〜0.005程度の値が適当なようです。上のように両方指定すると (本来こういう使い方はしませんが)tolの方が優先されます。一般には、default (nfringe=4)のままで使うのが必要かつ十分な結果を与えます。 stdaaからfringes()を呼び出したときには、band 3のみ処理されます。fringesは その他のbandにも適用可能です(効果があるかは別として)。また、fringes()には 上の2つ以外にもいくつかパラメータがあります。その意味についてはヘルプを 参照していただくとして、このような場合にfringes()をstdaaと独立に使う方法を 説明します。 > stdaa, 'name', endp='fcn' ; fluxのcalibration (fluxcon())まで処理する。 > s=read_fspd('tmp.fcn') ; 中間結果を読み込む > dlist=indgen(12)+25 ; detectorのリストを作成(25から始まる12個のindex array) > sout=fringes(s, dlist, options) ; fringes()で処理 > aar=extract_aar(sout) ; AARに変換 > write_fitstable, aar, 'tmp.aar' ; ファイルに書き戻す > stdaa, 'name', startp='aar' ; その後の処理を続ける これから分かるように、fringes()はfluxcon()の直後に使います。したがって、 stdaaで使うとき、startpオプションでaarよりも後のものを指定することは無意味です。 fringesはband 3C, 3D, 3Eには比較的良い結果を与えますが、3Aでは一般に 強いresidualが残ります。これは、3Aにあるfringeのcomponentsの周波数が高く、 接近しているために、一つづつのcomponentをうまく取り出せないからだと 考えられます。 4. resp_inter() resp_inter()は上にも述べたように、RSRFによるresponsivity correction (含むfringeの情報)を行うときに、観測データに合わせてRSRFを波長方向に shiftしたり、なましたりしてから補正を行い、fringeをキャンセルしてしまおうと いうプログラムです。resp_interは多少癖がある(バグもある)プログラムなので、 stdaaから使うことは出来ません。 > stdaa, 'name', endp='drk' ; dark subtraction まで行う。 > d=read_fspd('tmp.drk') ; その結果を読み込む。 > r=resp_inter(d, aot_band=['3a','3c','3d','3e'], nbin=4) ; resp_interを起動 aot_bandオプションは本来なくても良いのですが、現バージョンではこれでband 3の 各aot_band(全部でなくとも良い)を指定しないとバグのため落ちます。 nbinはシフト量等を決めるときに、各aot_band内の何カ所で行うかを指定するものです。 各バンド内をnbin等分して各位置でパラメータを決め、これを内挿して使っている ようです。指定しないときは、プログラムが適当に決めます。resp_inter()には 他にもoptionがありますが、組み合わせによってはやはり落ちたりするので注意が 必要です。詳しくはヘルプを見てください。 resp_inter()を起動すると、2つのwindowが表示され、しばらくするとメニューが 出てきます。よほど特殊なことを行わない限り、「quiet」を選択すれば2度と出て きません(実際にはすぐ後に大きいメニューがでてくる。これについても「quiet」で とりあえずよろしい)。画面にはいろいろな情報が表示されますが、回転が早くて ついていくのは大変でしょう。表示の内容はヘルプに書かれています。 resp_inter()は各aot_bandに対して12個のdetectorのup/down scanを別々に扱うので かなり時間がかかります。終了したなら、 > wdelete > wdelete と2回繰り返して、windowを消してしまいます。その後、 > f=fluxcon(r) > aar=extract_aar(f) でflux calibrationとAARへの変換を行います。上の場合、resp_inter()はband 3にしか 適応していないので、このAAR中のband 1, 2, 4のデータは使えません。 > aar_3=selbands(aar, ['3a','3c','3d','3e']) でband 3のデータのみ取り出し、 > write_fitstable, aar_3, 'tmp.aar' > stdaa, 'name', startp='aar' で残りの処理を続けましょう。 以上のようにresp_inter()は非常に面倒ですが、少なくとも山村がいくつかの データについて試してみたところ、AOT01 speed 4, AOT06のデータについては、 band 3C, 3D, 3Eについてほとんど完全にfringeが除去されることが確認されました (ただし、非常に明るい天体です)。試したデータの3Aにはもともと分子の吸収バンドが あり、これが影響を与えているのか処理した結果にもfringeが残りました。 一方、AOT01 speed 1, 2では処理した結果はかえって悪くなる場合もありました。 resp_inter()は高分解の観測のデータ用だと考えた方が良いと思います。 5. aarfringe() aarfringe()はinteractiveにfringeを除いていくものです。このプログラムに ついてはこの文書を書くまでほとんど使ったことがありませんので、あまり深い ことは分かりません。起動は > out=aarfringe(aar) だけです。入力は任意のAAR形式のファイルで、rebinしたあと(.arb)でも大丈夫です。 むしろその方が良いかも知れません。LWSのデータにも使えます(おそらくISAPの ツールと共通?)。 起動すると大きなパネルがでます。17"のモニタでははみ出してしまいます。 これについては文句が出たので、そのうち修正されると思います。パネルが出たら、 まず左上の「BAND」と「detector」で扱うデータを選びます。「detector」では、 0が12個全部、1-12が各bandの12個のdetectorに順に対応しているようです。 真ん中辺にはデータの処理方法を選択するところがあります。通常はdefaultどおり factorでよいと思いますが、くらい天体でdark currentの影響が大きいと思われる ときには、offsetを試してみるという手もあります。FFT/SIN/DoKは除去の方法で、 まずFFTを試してみましょう。この状態で、右上の「Do It」を押すと計算を始め、 しばらく経つと上段に元のスペクトル、左下にFourieスペクトルが表示されます (中段は?)。もし、スペクトル中に強いラインがあって、結果に影響を与えそうな ときは、中下のリストに中心波長と幅(lmd/dlmdで指定)を与えてマスクします。 表示範囲は、中ほどのパラメータに数字を入力することで変更できます。 Fourierスペクトルの画面で、fringeに対応していると思われる鋭いピークがあれば、 その範囲を左下のパネルで指定します。すると、この範囲のFourieスペクトルは 前後のデータから内挿されます。以上の設定が終わったら、もう一度「Do It」を 押します。すると、指定されたFourier範囲を除いたスペクトルが赤色で表示されます。 結果がOKならば、「Apply」を押して確定します。以後、この操作はいくらでも 続けることが出来ます。最後に、「Done」を押してプログラムを終了します。 aarfringeにはFTの他にも、sine waveのfitting、fringes()と同じような方法 (「DoK」)が選べます。基本的な使い方は同じだと思いますが、そこまで深く 使い込んでいないので、興味のある方はヘルプを参考に追及してみてください。 6. 自分で除く もちろん、各自が自分のプログラムでfringeを除くことも出来ます。 RSRFを使う方法は別として、Fourier変換やSine wave fitを行う場合には 1. 各fringe componentは周波数空間で一定の周期を持つはずである。 2. fringeは基本的には感度ムラである。ただし、dark currentが 大きく影響するようなfluxの弱い天体では「ゲタ」として扱うことも出きる。 という2点を考慮すると良いと思います。 7. 結果の評価 どのような方法を使った場合でも、fringeを除いたデータを元のデータと比較して、 正しく処理されているか、変な成分が副作用として導入されていないか、等を 調べるべきです。また、RSRFとも、もう一度比較してどれくらいの効果が あったのかを検証するべきです。定量的な解析を行う場合にはfringe除去が 与える効果を考慮しなくてはいけないはずですが、それについては山村の知識を 越えているので割愛します。 8. 今後の展望 最初に述べたように、fringeは、RSRFと観測データの間でpointingなどの影響に よって微少の波長のずれ等が発生するために起こります。次期pipeline (OLP ver. 6.1)では、衛星のtelemetryデータからpositionの解析を行い、 それを考慮してcalibration (波長・flux etc.)を行うことが予定されています。 これにより、fringeも大きく減少することが期待されています。 一方、上記のプログラムの他に個人で作成/テスト中のdefringingプログラムがあり、 もしかするとこれらが一般に公開されるかも知れません。現段階であまり無理を しないでしばらく待つというのも一つの手ではあります。 以上 質問・コメントは山村(yamamura@astron.s.u-tokyo.ac.jp)までどうぞ。 他のユーザにも関係しそうな場合は、swsia@tochan.astron.s.u-tokyo.ac.jpに 送ってくださるのが良いかも知れません。