NIC Web
staff/new_pipeline_memo
をテンプレートにして作成
開始行:
* About this document [#cbbbbaab]
NIC の実験用パイプライン (仮名: NICtools) 開発のための個...
このパイプラインのメリットは以下のようなものと思われます。
- フラットフレームを作るのが少しだけ楽
- ダークフレームを作るのが少しだけ楽
- 縦縞パターンを少しだけきれいに引ける
- (試験中: 未実装) ubercalibration で測光精度をあげられる
- パラメーターを変えて色々試しやすいように作ってある(つも...
- 解析の各段階の順番を入れ替えたりするのが簡単
- IRAF に頼らないですむ
- 加えて、オンサイトのサーバー (venezia) 上では、観測中の...
ただし、IDL が必要。「fits の読み書きは面倒なので金で解決...
名前を仮に NICtools とか称していたが、どうやら NICMOS の...
This is a memorandum for developing the new (experimental...
(created by T. Saito)
* Basic procedures: What does NICtools do? [#d4a97fb0]
ここで行う操作は、以下のとおり。
+ フラットフレームを作る : countplot.pro, flatsearch.pro,...
+ ダークフレームを作る : countplot.pro, mkdark.pro
+ (*) オブジェクトフレームからダークを引く : fits_sub.pro
+ (*) スカイフレームを作る (オブジェクトフレームから or ...
+ (*) オブジェクトフレームからスカイを引く : fits_sub.pro
+ (*) 検出器の固有パターン (縦縞) を引く : column_pattern...
+ (*) フラット補正 : flatfield_fits.pro
+ (*) バッドピクセル補正 : fixpix.pro
+ (*) アストロメトリー : wcssolve.pro (solvewcs.pro)
上記 (*) をいっぺんにやる primred.pro を整備してある。
* Getting started [#z6d818eb]
- 下記のパイプラインサーバーで環境を整備している。
ホスト名: venezia
IPアドレス: 192.168.42.58
システム: RedHat Enterprize Linux 9
アカウント: nhao (いつもの)
- インストールする場合
-- IDL 環境を整備する
--- Extract the sources into your desired path: [[Downloa...
--- パスを通す。IDL では !path という環境変数の末尾にでも...
IDL> !path = !path + ':ソースを展開したディレクトリー名'
--- astrolib をインストール: [[https://idlastro.gsfc.nasa...
--- Coyote Graphics ライブラリーをインストール: [[http://...
--- ATV をインストール: [[https://www.physics.uci.edu/~ba...
// --- Mankoff ライブラリー (KDM-IDL) をインストール (現...
// IDL> ipm, /install, 'https://github.com/mankoff/kdm-i...
-- 作業ディレクトリーには、下記のようなサブディレクトリー...
<current>/raw : 生データ格納用
<current>/reduced : 処理済みデータ格納用
<current>/reduced/wcs: Astrometry.net の出力するファイル...
<current>/calib : キャリブレーションデータ (フラッ...
<current>/common : その他の諸々のデータ格納用 (optio...
<current>/lists : パイプラインに入力するファイル (...
<current>/cat : SExtractor が出力するカタログの格...
<current>/output : IDL-based なコマンドが出力するデ...
--- 'common' ディレクトリーに下記のバッドピクセルリストを...
+++ &ref(J_badpix.lst);
+++ &ref(H_badpix.lst);
+++ &ref(K_badpix.lst);
-- SExtractor をインストール
--- 測光・アストロメトリーに使う。その他、ubercalibration...
--- 下記の設定ファイルなどを作業ディレクトリーにおいてお...
+++ &ref(./nic_phot.sex);
+++ &ref(./nic_phot.param);
+++ &ref(./default.conv);
-- Astrometry.net をインストール
--- [[https://astrometry.net/doc/>https://astrometry.net/...
--- インデックスファイルをダウンロードしておく。 一番小さ...
* 観測中のユーティリティー (venezia のみ) [#y1a95c13]
- disp_latest: 最新のフレームを表示する
IDL> disp_latest (H バンド最新画像を表示)
IDL> disp_latest, 'j' (J バンド最新画像を表示)
IDL> disp_latest, /test (TL で取ったテスト撮像を表...
IDL> disp_latest, id=20 (21 番目のフレームを表示 -...
IDL> disp_latest, date=240807 (日付を指定)
- diff_latest: 最新と一つ前のフレームの差分を取って表示する
IDL> diff_latest (H バンド最新画像)
IDL> diff_latest, 'k' (バンドを指定: この例では ...
IDL> diff_latest, frame=16 (フレーム番号を指定: この...
IDL> diff_latest, sky=15 (差し引くフレーム番号を指...
IDL> diff_latest, /col (簡易的に縦縞パターンを差...
- rtcount: 当日撮ったフレームのカウント(中央値)を、フレー...
IDL> rtcount (H バンドで当日撮った全フ...
IDL> rtcount, 10, 20 (フレーム番号を指定: この...
IDL> rtcount, band='k' (バンドを指定: この例では ...
* データをローカルにコピーする [#e8ccf2b5]
- venezia 上では、data_retrieve.sh というスクリプトが作っ...
venezia% data_retrieve.sh -d YYMMDD
-- このコマンドで、gamera:/nicdata/nic/obsdata/YYMMDD 以...
-- 「-d YYMMDD」で日付を指定 (省略すると前日のデータがコ...
- venezia 以外では、作業用のデータディレクトリーに raw と...
- リストを作る (IDL 上で)
-- ファイル名をいちいち打ち込むのはかなり面倒なので、IDL ...
-- ここの例では jlist, hlist, klist というリスト(文字列の...
IDL> mklists, jlist, hlist, klist
IDL> print, jlist[10]
raw/j240807_0011.fits
* フラットフレームを作る [#h42433c6]
** 考え方 [#j5b5d55b]
- カウントの高いフレームと、カウントの低いフレームのペア...
** 手順 [#yf4bab59]
// - まずはリストを用意。この例では生データが raw ディレ...
// IDL> jlist = file_search('raw/j*.fits')
// ==> フラットの生画像リスト: jlist[0:149]
- 上記で作成したリストで例えば jlist[0] から jlist[149] ...
- それらのカウントを大まかに調べる。'countplot' で、フレ...
IDL> countplot, jlist, 0, 149
- この結果を見てカウント値が適切な範囲のフレーム番号を調...
-- 飽和していない: カウント < 5000 とかで、かつ、夕暮れに...
-- 高カウントと低カウントのペアで差がおおよそ 2000 以上に...
-- 中央値が 5000 を超えると、飽和したときのパターンが現れ...
e.g., IDL> quadhist, jlist[50]
- 低カウント側は大抵潤沢に取れる
-- ただし、星が写り込んでいないか必ず目で見てチェックする...
e.g., IDL> quadhist, jlist[120]
- 上記で選んだ高カウントと低カウントのフレームを同数用意...
e.g.,
flatsearch, jlist[25:45], jlist[128:148] (ペアを作っ...
mkflat, jlist[25:45], jlist[128:148], 'calib/jflat_22032...
- もちろん、下記のように手動でやってもバチは当たらない。
e.g.,
high-count は jlist[25:45], low-countは jlist[128:148] ...
IDL> for i=0,9 do fits_sub, jlist[i+25], jlist[i+128], '...
IDL> for i=10,21 do fits_sub, jlist[i+25], jlist[i+128],...
出来上がった差のフレームを中央値でスタックする ('medstac...
IDL> jflatlist = file_search('calib/jflat_*.fits')
IDL> medstack, jflatlist, 'calib/jflat_220329.fits', /sc...
-- medstack に /scale, /norm の2つのオプションを付けると...
-- カウントの上限・下限を high, low という2つの変数で指...
-- さらに、/display というオプションを付けて走らせると、...
* ダークフレームを作る [#p7d84725]
** 考え方 [#l7aeb9c5]
- NIC は検出器の挙動があまり安定していない。とくにJバンド...
- 「典型的な」ダークのカウントがほしいので、象限ごとのカ...
- 取りはじめのフレームなどは、ノイズが大きかったり、カウ...
- カウントを調べる 'countplot'、画像を見つつ象限ごとの統...
** 手順 [#g7b26b23]
- 観測の最後に20枚のダークを取ったとする
- 下記の例は、象限間の中央値のばらつきが 2.8σ 以内、フレ...
IDL> countplot, jlist, 226, 245, /dark, sigma_a=2.8, sig...
IDL> medstack, jlist[frame_in], 'calib/jdark30.fits'
-- ここで 'frame_in' は、使えるフレーム(ばらつきが指定し...
- なお、この自動的なフラッギングは、いつもうまくいくとは...
* オブジェクトフレームからダークを引く [#r614760a]
- ターゲット天体は M37、6点ディザーで観測し、スカイは別口...
Object frames: jlist[150:155]
Sky frames : jlist[162:167]
- まずは入力ファイル・出力ファイルのリストを作る。
IDL> jrlist = [jlist[150:155], jlist[162:167]]
IDL> jdlist = jrlist.replace('raw', 'reduced')
IDL> jdlist = jdlist.replace('.fits', '_M37_d.fits')
- それを for ループで食わせて、ダークを引く: 'j*_M37_d.fi...
IDL> for i=0,n_elements(jdlist)-1 do fits_sub, jrlist[i]...
* スカイフレームを作る [#g5c4e4ee]
- ここではスカイフレームを別途取得する例を紹介するが、混...
- 'medstack' は中央値で画像を重ね合わせる。'/scale' オプ...
IDL> medstack, jdlist[6:11], 'calib/jM37_sky.fits', /scale
* オブジェクトフレームからスカイを引く [#w59e9ab4]
- 'fits_sub' を使ってオブジェクトフレームからスカイを引く...
IDL> jslist = (jdlist[0:5]).replace('_d', '_s')
IDL> for i=0,5 do fits_sub, jdlist[i], 'calib/jM37_sky.f...
* 検出器の固有パターン(縦縞)を差し引く [#f1b8628f]
** やっている内容など [#k9c11497]
- 検出器の読み出し関連の回路の電位変動により、NIC には縦...
- 'column_pattern' では、上下半分ずつ、各列ごとの「ゲタ」...
- この縦縞状のゲタ成分は、数値としては小さく (< 100 とか)...
** 手順 [#n4c5ed46]
- 下記の通り、デフォルトでやるのは至ってシンプル。
IDL> jclist = jslist.replace('_s', '_c')
IDL> for i=0,n_elements(jslist)-1 do column_pattern, jsl...
- 結果が思わしくない場合には、sigma-clipping のパラメータ...
e.g.,
IDL> column_pattern, infile, outfile, niter=5, clip=1.0
niter : 繰り返しの回数 (default = 4)
clip : 除外するしきい値をσ(標準偏差)単位で (default =...
* フラット補正 [#c98e0b33]
- 'flatfield_fits' を使って、上記で作ったフラットフレーム...
IDL> jflist = jclist.replace('_c', '_f')
IDL> for i=0,n_elements(jflist)-1 do flatfield_fits, jcl...
- ここではフラット補正を縦縞パターン差し引きの後にやって...
* バッドピクセル補正 [#d90d84e6]
- 'fixpix'を使い、バッドピクセルのリストを食わせて、入力...
IDL> jxlist = jflist.replace('_f', '_x')
IDL> for i=0,n_elements(jxlist)-1 do fixpix, 'common/J-b...
- この'fixpix' は、IRAF の fixpix タスクと同様、単純な線...
- この補正はどの段階でやっても大した差はない。ただしアス...
* アストロメトリー [#r9976004]
- 現状 NICtools では Astrometry.net を使っている。一番視...
- ここでは上記の 'fixpix' を直前に適用したものと仮定して...
IDL> jwlist = jxlist.replace('_x', '_w')
IDL> for i=0,n_elements(jxlist)-1 do solvewcs, jxlist[i]...
- 現在のところ、WCS 貼り付けの成功率はあまり高いとは言え...
- (2022-10-25追記) 天体検出に SExtractor を使うオプション...
-- コマンドに /sex というオプションをつけると、天体検出に...
IDL> jwlist = jxlist.replace('_x', '_w')
IDL> for i=0,n_elements(jxlist)-1 do solvewcs, jxlist[i]...
-- 追々、改善していく予定。
終了行:
* About this document [#cbbbbaab]
NIC の実験用パイプライン (仮名: NICtools) 開発のための個...
このパイプラインのメリットは以下のようなものと思われます。
- フラットフレームを作るのが少しだけ楽
- ダークフレームを作るのが少しだけ楽
- 縦縞パターンを少しだけきれいに引ける
- (試験中: 未実装) ubercalibration で測光精度をあげられる
- パラメーターを変えて色々試しやすいように作ってある(つも...
- 解析の各段階の順番を入れ替えたりするのが簡単
- IRAF に頼らないですむ
- 加えて、オンサイトのサーバー (venezia) 上では、観測中の...
ただし、IDL が必要。「fits の読み書きは面倒なので金で解決...
名前を仮に NICtools とか称していたが、どうやら NICMOS の...
This is a memorandum for developing the new (experimental...
(created by T. Saito)
* Basic procedures: What does NICtools do? [#d4a97fb0]
ここで行う操作は、以下のとおり。
+ フラットフレームを作る : countplot.pro, flatsearch.pro,...
+ ダークフレームを作る : countplot.pro, mkdark.pro
+ (*) オブジェクトフレームからダークを引く : fits_sub.pro
+ (*) スカイフレームを作る (オブジェクトフレームから or ...
+ (*) オブジェクトフレームからスカイを引く : fits_sub.pro
+ (*) 検出器の固有パターン (縦縞) を引く : column_pattern...
+ (*) フラット補正 : flatfield_fits.pro
+ (*) バッドピクセル補正 : fixpix.pro
+ (*) アストロメトリー : wcssolve.pro (solvewcs.pro)
上記 (*) をいっぺんにやる primred.pro を整備してある。
* Getting started [#z6d818eb]
- 下記のパイプラインサーバーで環境を整備している。
ホスト名: venezia
IPアドレス: 192.168.42.58
システム: RedHat Enterprize Linux 9
アカウント: nhao (いつもの)
- インストールする場合
-- IDL 環境を整備する
--- Extract the sources into your desired path: [[Downloa...
--- パスを通す。IDL では !path という環境変数の末尾にでも...
IDL> !path = !path + ':ソースを展開したディレクトリー名'
--- astrolib をインストール: [[https://idlastro.gsfc.nasa...
--- Coyote Graphics ライブラリーをインストール: [[http://...
--- ATV をインストール: [[https://www.physics.uci.edu/~ba...
// --- Mankoff ライブラリー (KDM-IDL) をインストール (現...
// IDL> ipm, /install, 'https://github.com/mankoff/kdm-i...
-- 作業ディレクトリーには、下記のようなサブディレクトリー...
<current>/raw : 生データ格納用
<current>/reduced : 処理済みデータ格納用
<current>/reduced/wcs: Astrometry.net の出力するファイル...
<current>/calib : キャリブレーションデータ (フラッ...
<current>/common : その他の諸々のデータ格納用 (optio...
<current>/lists : パイプラインに入力するファイル (...
<current>/cat : SExtractor が出力するカタログの格...
<current>/output : IDL-based なコマンドが出力するデ...
--- 'common' ディレクトリーに下記のバッドピクセルリストを...
+++ &ref(J_badpix.lst);
+++ &ref(H_badpix.lst);
+++ &ref(K_badpix.lst);
-- SExtractor をインストール
--- 測光・アストロメトリーに使う。その他、ubercalibration...
--- 下記の設定ファイルなどを作業ディレクトリーにおいてお...
+++ &ref(./nic_phot.sex);
+++ &ref(./nic_phot.param);
+++ &ref(./default.conv);
-- Astrometry.net をインストール
--- [[https://astrometry.net/doc/>https://astrometry.net/...
--- インデックスファイルをダウンロードしておく。 一番小さ...
* 観測中のユーティリティー (venezia のみ) [#y1a95c13]
- disp_latest: 最新のフレームを表示する
IDL> disp_latest (H バンド最新画像を表示)
IDL> disp_latest, 'j' (J バンド最新画像を表示)
IDL> disp_latest, /test (TL で取ったテスト撮像を表...
IDL> disp_latest, id=20 (21 番目のフレームを表示 -...
IDL> disp_latest, date=240807 (日付を指定)
- diff_latest: 最新と一つ前のフレームの差分を取って表示する
IDL> diff_latest (H バンド最新画像)
IDL> diff_latest, 'k' (バンドを指定: この例では ...
IDL> diff_latest, frame=16 (フレーム番号を指定: この...
IDL> diff_latest, sky=15 (差し引くフレーム番号を指...
IDL> diff_latest, /col (簡易的に縦縞パターンを差...
- rtcount: 当日撮ったフレームのカウント(中央値)を、フレー...
IDL> rtcount (H バンドで当日撮った全フ...
IDL> rtcount, 10, 20 (フレーム番号を指定: この...
IDL> rtcount, band='k' (バンドを指定: この例では ...
* データをローカルにコピーする [#e8ccf2b5]
- venezia 上では、data_retrieve.sh というスクリプトが作っ...
venezia% data_retrieve.sh -d YYMMDD
-- このコマンドで、gamera:/nicdata/nic/obsdata/YYMMDD 以...
-- 「-d YYMMDD」で日付を指定 (省略すると前日のデータがコ...
- venezia 以外では、作業用のデータディレクトリーに raw と...
- リストを作る (IDL 上で)
-- ファイル名をいちいち打ち込むのはかなり面倒なので、IDL ...
-- ここの例では jlist, hlist, klist というリスト(文字列の...
IDL> mklists, jlist, hlist, klist
IDL> print, jlist[10]
raw/j240807_0011.fits
* フラットフレームを作る [#h42433c6]
** 考え方 [#j5b5d55b]
- カウントの高いフレームと、カウントの低いフレームのペア...
** 手順 [#yf4bab59]
// - まずはリストを用意。この例では生データが raw ディレ...
// IDL> jlist = file_search('raw/j*.fits')
// ==> フラットの生画像リスト: jlist[0:149]
- 上記で作成したリストで例えば jlist[0] から jlist[149] ...
- それらのカウントを大まかに調べる。'countplot' で、フレ...
IDL> countplot, jlist, 0, 149
- この結果を見てカウント値が適切な範囲のフレーム番号を調...
-- 飽和していない: カウント < 5000 とかで、かつ、夕暮れに...
-- 高カウントと低カウントのペアで差がおおよそ 2000 以上に...
-- 中央値が 5000 を超えると、飽和したときのパターンが現れ...
e.g., IDL> quadhist, jlist[50]
- 低カウント側は大抵潤沢に取れる
-- ただし、星が写り込んでいないか必ず目で見てチェックする...
e.g., IDL> quadhist, jlist[120]
- 上記で選んだ高カウントと低カウントのフレームを同数用意...
e.g.,
flatsearch, jlist[25:45], jlist[128:148] (ペアを作っ...
mkflat, jlist[25:45], jlist[128:148], 'calib/jflat_22032...
- もちろん、下記のように手動でやってもバチは当たらない。
e.g.,
high-count は jlist[25:45], low-countは jlist[128:148] ...
IDL> for i=0,9 do fits_sub, jlist[i+25], jlist[i+128], '...
IDL> for i=10,21 do fits_sub, jlist[i+25], jlist[i+128],...
出来上がった差のフレームを中央値でスタックする ('medstac...
IDL> jflatlist = file_search('calib/jflat_*.fits')
IDL> medstack, jflatlist, 'calib/jflat_220329.fits', /sc...
-- medstack に /scale, /norm の2つのオプションを付けると...
-- カウントの上限・下限を high, low という2つの変数で指...
-- さらに、/display というオプションを付けて走らせると、...
* ダークフレームを作る [#p7d84725]
** 考え方 [#l7aeb9c5]
- NIC は検出器の挙動があまり安定していない。とくにJバンド...
- 「典型的な」ダークのカウントがほしいので、象限ごとのカ...
- 取りはじめのフレームなどは、ノイズが大きかったり、カウ...
- カウントを調べる 'countplot'、画像を見つつ象限ごとの統...
** 手順 [#g7b26b23]
- 観測の最後に20枚のダークを取ったとする
- 下記の例は、象限間の中央値のばらつきが 2.8σ 以内、フレ...
IDL> countplot, jlist, 226, 245, /dark, sigma_a=2.8, sig...
IDL> medstack, jlist[frame_in], 'calib/jdark30.fits'
-- ここで 'frame_in' は、使えるフレーム(ばらつきが指定し...
- なお、この自動的なフラッギングは、いつもうまくいくとは...
* オブジェクトフレームからダークを引く [#r614760a]
- ターゲット天体は M37、6点ディザーで観測し、スカイは別口...
Object frames: jlist[150:155]
Sky frames : jlist[162:167]
- まずは入力ファイル・出力ファイルのリストを作る。
IDL> jrlist = [jlist[150:155], jlist[162:167]]
IDL> jdlist = jrlist.replace('raw', 'reduced')
IDL> jdlist = jdlist.replace('.fits', '_M37_d.fits')
- それを for ループで食わせて、ダークを引く: 'j*_M37_d.fi...
IDL> for i=0,n_elements(jdlist)-1 do fits_sub, jrlist[i]...
* スカイフレームを作る [#g5c4e4ee]
- ここではスカイフレームを別途取得する例を紹介するが、混...
- 'medstack' は中央値で画像を重ね合わせる。'/scale' オプ...
IDL> medstack, jdlist[6:11], 'calib/jM37_sky.fits', /scale
* オブジェクトフレームからスカイを引く [#w59e9ab4]
- 'fits_sub' を使ってオブジェクトフレームからスカイを引く...
IDL> jslist = (jdlist[0:5]).replace('_d', '_s')
IDL> for i=0,5 do fits_sub, jdlist[i], 'calib/jM37_sky.f...
* 検出器の固有パターン(縦縞)を差し引く [#f1b8628f]
** やっている内容など [#k9c11497]
- 検出器の読み出し関連の回路の電位変動により、NIC には縦...
- 'column_pattern' では、上下半分ずつ、各列ごとの「ゲタ」...
- この縦縞状のゲタ成分は、数値としては小さく (< 100 とか)...
** 手順 [#n4c5ed46]
- 下記の通り、デフォルトでやるのは至ってシンプル。
IDL> jclist = jslist.replace('_s', '_c')
IDL> for i=0,n_elements(jslist)-1 do column_pattern, jsl...
- 結果が思わしくない場合には、sigma-clipping のパラメータ...
e.g.,
IDL> column_pattern, infile, outfile, niter=5, clip=1.0
niter : 繰り返しの回数 (default = 4)
clip : 除外するしきい値をσ(標準偏差)単位で (default =...
* フラット補正 [#c98e0b33]
- 'flatfield_fits' を使って、上記で作ったフラットフレーム...
IDL> jflist = jclist.replace('_c', '_f')
IDL> for i=0,n_elements(jflist)-1 do flatfield_fits, jcl...
- ここではフラット補正を縦縞パターン差し引きの後にやって...
* バッドピクセル補正 [#d90d84e6]
- 'fixpix'を使い、バッドピクセルのリストを食わせて、入力...
IDL> jxlist = jflist.replace('_f', '_x')
IDL> for i=0,n_elements(jxlist)-1 do fixpix, 'common/J-b...
- この'fixpix' は、IRAF の fixpix タスクと同様、単純な線...
- この補正はどの段階でやっても大した差はない。ただしアス...
* アストロメトリー [#r9976004]
- 現状 NICtools では Astrometry.net を使っている。一番視...
- ここでは上記の 'fixpix' を直前に適用したものと仮定して...
IDL> jwlist = jxlist.replace('_x', '_w')
IDL> for i=0,n_elements(jxlist)-1 do solvewcs, jxlist[i]...
- 現在のところ、WCS 貼り付けの成功率はあまり高いとは言え...
- (2022-10-25追記) 天体検出に SExtractor を使うオプション...
-- コマンドに /sex というオプションをつけると、天体検出に...
IDL> jwlist = jxlist.replace('_x', '_w')
IDL> for i=0,n_elements(jxlist)-1 do solvewcs, jxlist[i]...
-- 追々、改善していく予定。
ページ名: