アストロメトリ用カタログファイルの作成¶
Note
このページは HSC パイプラインバイナリ配布所の astrometry.net 用カタログの作り方 をもとに作成されています。 このページ以外にも こちら にもアストロメトリ用カタログファイルの作成について紹介されていますので、参考にしてください。
Warning
以下、アストロメトリ用カタログファイルの作成は setup-hscpipe を実行し、HSC pipeline のセットアップが完了している環境を前提としています。もしまだセットアップが完了していない場合は、 まずはじめに setup-hscpipe を実行してください。
HSC pipeline 中では、Astrometry.net (座標決めを行うパッケージ)を介して観測領域の座標が決定されます。そのため、 自前で用意するアストロメトリ用カタログファイルは、Astrometry.net が読める形式のファイル (index ファイル)でなくてはいけません。ここでは、index ファイルを作成し、 HSC pipeline で読み込む形式に登録し、セットアップするまでを以下の 6 つのプロセスに分けて紹介します。
- カタログを用意する
- 用意したカタログを FITS BinTable に変換する
- FITS BinTable を領域毎に切り分ける
- astrometry.net で使用される index ファイルを作成する
- HSC pipeline 内で使用できる形に変換する
- 自前のアストロメトリ用カタログファイルをインストール・セットアップする
- hanaco で自前のアストロメトリ用カタログファイルをインストール・セットアップする
カタログを用意する¶
天体データの等級原点と座標決めに用いるための天体カタログを用意します。恐らく色々とやり方はあるかもしれませんが、 今回は ds9 を用いてアストロメトリ用カタログファイルを用意していきます。もし自身の計算機に ds9 がインストールされていない場合は、こちら から入手してください。
まず最初に ds9 を開きます。開いたら、メニューバーの Analysis の中の Catalogs を選択します。 すると、波長毎で様々な天体カタログが出てきます。HSC は可視撮像カメラなので、Catalogs の中から Optical を選択しましょう。すると、GSC, SDSS, Tycho など可視の天体カタログが表示されます。 今回は SDSS 領域ではない天域のアストロメトリ用カタログファイルを作りたいので、 これら多くの天体カタログの中から SDSS 以外のカタログを選択してください(図1)。 図1 では天体カタログとして USNO-A2.0 を選んでいます。
Warning
アストロメトリ用カタログファイルは、座標決めだけでなく等級原点決めにも用いられます。そこで、 自身が観測した filter と同じ filter の等級情報がある天体カタログを選ぶと良いでしょう。 もし自身が観測した filter と同じ filter の等級情報がない場合は(例えば NB filter の観測をした場合など)、 座標決めだけ HSC pipeline を介して行い、等級原点決めは自身で行ってください。
いずれかの天体カタログを選択すると、別ウィンドウで選択したカタログ内の天体のリストが表示されます。 この時、観測したい天域の画像を一緒に開いていると、開いている画像内の天体リストが表示されます(例 図1)。 画像を開いていない場合、天体リストは表示されません。
別ウィンドウが開いたら、次にこのウィンドウ内に自身が作りたい天域内の天体リストを表示させます。 そこで別ウィンドウの Object 欄(図2 上の赤枠)の α, δ に、自身の観測領域の中心座標(RA, DEC)と、 観測領域のサイズ を記入します。実際の観測ではモザイクやディザリングを行うため、 観測領域のサイズは大きめに記入しておくようにしましょう。記入し終わったら別ウィンドウ左下にある Retrieve ボタンを押すと(図2 下の赤枠)、 天体カタログから自身で設定した天域内にある天体リストが読み込まれます。しばらくすると、 別ウィンドウに天体リスト一覧が、メインの ds9 ウィンドウにはその天体リストの位置が表示されます。
自身の観測領域内の天体リストが得られたら、このリストを保存します。別ウィンドウの File から
Save ... を選択し、適当なディレクトリに天体リストを書き出してください(図3)。
この時点では、保存する天体リストファイルの拡張子は何でも構いません。
デフォルトでは .xml
の形式で保存されます。
最後に、出力した天体リストファイルから 天体ID, RA, DEC, 等級情報 を抜き出し、
.csv
形式のファイルに変換します。最終的に作成するカタログの中身は以下のような形式にしてください。
Warning
pipeline で使用する際には、フィルタ名は小文字で指定してください (g, r, i, z, y,...)。 小文字で指定されていない場合、エラーが出る可能性があります。
id,ra,dec,ra_err,dec_err,starnotgal,r,u,g,i,z,r_err,u_err,g_err,i_err,z_err
1237645879551066262,348.90252656,1.27188781,0.01384772,0.01628234,0,19.410612,18.237537,17.581324,17.201529,16.901588,0.046767,8.25278E-3,7.026487E-3,8.094831E-3,0.021641
1237645879562862699,15.89612394,1.26484677,0.01108913,7.81238953E-3,0,20.149837,19.282238,19.031107,18.95554,18.782871,0.046607,0.011408,0.012107,0.017041,0.054156
:
:
(最初の二行はSDSS DR8より)
# 各カラムの説明
#
# id : 天体の ID
# ra : ra [degree]
# dec : dec [degree]
# ra_err : ra 誤差
# dec_err : dec 誤差
# starnotgal : 星の場合は 1 / それ以外は 0
# r, u, ... : 各フィルタでの等級
# r_err, u_err, ... : 各等級の誤差
ds9 を用いて出力した天体リストファイルには、 天体カタログに関する記述や天体リストを作成した天域に関する情報も記載されています(図4 赤枠以外の箇所)。 カタログ作成に必要な天体リストは 図4 の赤枠で囲った箇所に記載されていますので、 そこから必要な情報を抜き出して自前のカタログを作成してください。作成例を以下に表示します。
# エディターを開いてヘッダー部を削除
# 天体リスト行中の余計な文字をスペースに置換
emacs ds9.xml
#(以下のようなファイルになる)
# 例では ra, dec, 天体 ID, ra, dec, b-band 等級, r-band 等級, epoch の順
183.366106 +04.427859 0900-07101388 183.366106 +04.427859 18.3 18.0 1957.321
183.366917 +04.587284 0900-07101405 183.366917 +04.587284 18.7 18.4 1957.321
183.367778 +04.625575 0900-07101414 183.367778 +04.625575 18.6 18.3 1957.321
# 編集した天体リストファイルから必要な情報を抜き出して `.csv` 形式のファイルを作成する
# 簡単のため、天体リストファイル中の全ての天体は星(starnotgal = 1)と、以下を仮定
# ra_err = 0
# dec_err = 0
# b_err = 0
# r_err = 0
awk '{print $3,$4,$5,0,0,1,$6,$7,0,0}' ds9.xml > test.csv
# エディターを開いて `.csv` ファイルの一行目に以下を追加
emacs test.csv
id,ra,dec,ra_err,dec_err,starnotgal,b,r,b_err,r_err
用意したカタログを FITS BinTable に変換する¶
用意した .csv
のカタログを FITS BinTable に変換します。変換スクリプト
(csv-to-fits.py
)
をダウンロードしてから、以下のようにスクリプトを実行してください。
# test.csv カタログを FITS BinTable に変換
#
# USAGE: python csv-to-fits.py <入力 `.csv` ファイル名> <出力 `.fits` ファイル名>
python csv-to-fits.py test.csv test.fits
Warning
ds9 から作った test.csv には天体の等級列に稀に NaN, inf 以外の文字(A, * など) が含まれていることがあります。こうした文字が残っていると csv-to-fits.py は正しく実行されません。 csv-to-fits.py の実行前に test.csv の中身をよく確認し 、 Nan, inf 以外の文字が含まれる行は削除する ようにしましょう。
FITS BinTable を領域毎に切り分ける¶
自前カタログ中の天体がいる天域を、同じ表面積をカバーするように切り分けます (Healpix: Hierarchical Equal Area isoLatitude Pixelization のピクセルごとに切り分ける)。 例では作業ディレクトリを作成し、その中で自前カタログ(FITS BinTable)の切り分けを行っています。
# 作業ディレクトリの作成
mkdir workdir
# Healpix のピクセルごとに切り分け
#
# USAGE: hpsplit -o <出力カタログ名> -r <RA列の名前(例 ra)> -d <DEC列の名前(例 dec)> -m <Healpix 周囲の余白 [degree]> <入力 FITS BinTable> -n <Healpix 個数>
#
# パラメータ詳細
# -o : 細分化した後の出力されるカタログファイル名を指定
# -r -d : RA, DEC 列のヘッダー表記
# -m 1 : Healpix 周囲の余白 [degree]。デフォルトは 0
# -n 2 : 切り分ける Healpix 個数
hpsplit -o workdir/cat-%i.fits -r ra -d dec -m 1 test.fits -n 2
astrometry.net で使用される index ファイルを作成する¶
Healpix のピクセルごとに切り分けたカタログファイルから、 astrometry.net で使用される index ファイルを作成します。作成方法は以下の通りです。
Warning
mosaic.py で行われる等級原点決めにもアストロメトリ用カタログファイルの情報が参照されます。 そのため、ここで設定するデフォルトの filter は、自身が解析する HSC filter と波長帯が近いものがよいでしょう。
# デフォルトにするフィルターを指定
filter=r
# index ファイルの出力ディレクトリを作成
mkdir output
# workdir の中に生成された全ての FITS BinTable から index ファイルを作成
find workdir -name "cat-*.fits" -print0 | while read -r -d '' catalog
do
# catalog="workdir/cat-*.fits" から index="output/index-*.fits" を生成
index="${catalog/"workdir/cat-"/output/index-}"
# index="output/index-*.fits" から拡張子 .fits を除く
index="${index%.*}"
# プリセット 0
#
# USAGE: build-astrometry-index -i <入力 FITS BinTable> -o <出力 index ファイル> -P <スケール数> -S <指定した列で並べ直し> -n <Healpix の 1 cell の星の個数> -r <重複する場合は削除する半径 [arcsec]> -j <カタログ天体の位置誤差 [arcsec]> -E
#
# パラメータ詳細
# -v : パラメータを追加する際のおまじない
# -i : 入力するカタログファイル
# -o : 出力 index ファイル名
# -P : スケール数。観測領域のサイズによって変わる(0, 2, 4, 6, 8, 10 for 6 arcmin, 12 arcmin, 24 arcmin, 1 deg, 2 deg, 4 deg 領域)
# -S : カタログを並べ直す際にどの列にするか指定。デフォルト filter の列が降順になっていれば指定する必要はない
# -n : Healpix の 1 cell の星の個数
# -r : 天体が重複した場合、削除する半径 [arcsec]。デフォルトでは重複削除は行わない
# -j : カタログ天体の位置誤差 [arcsec]。デフォルトでは 1 [arcsec]
# -E : カタログ内の天体が Healpix を満たしているかチェックする
build-astrometry-index -v -i $catalog -o $index-0.fits -P 0 -S $filter -n 100 -r 1 -j 0.4 -E
# プリセット 1, 2, 3
# p の値は観測領域に応じて適宜変更する
for p in {1..3}
do
build-astrometry-index -v -1 $index-0.fits -o $index-$p.fits -P $p -S $filter -n 100 -r 1 -j 0.4 -E
done
done
index ファイルを生成したディレクトリ(例の場合は output)が 自前のアストロメトリ用カタログディレクトリ となります。 index ファイルが生成できたら、自前のアストロメトリ用カタログディレクトリ下に index ファイルに関する記述をする config ファイルを作成します。
emacs output/andConfig.py
andConfig.py の中身は以下です。
import os.path
import os
import glob
root.starGalaxyColumn = "starnotgal"
filters = ("b", "r") # 最初に用意したカタログ内のフィルターを列挙
root.defaultMagColumn = "r" # デフォルトにするフィルター
root.magColumnMap = dict([(f,f) for f in filters])
root.magErrorColumnMap = dict([(f, f + "_err") for f in filters])
root.indexFiles = [os.path.basename(path) for path in glob.glob(os.path.join(os.environ["ASTROMETRY_NET_DATA_DIR"], "index-*.fits"))]
HSC pipeline 内で使用できる形に変換する¶
自前のアストロメトリ用カタログディレクトリを HSC pipeline で使用できるようにします。
mkdir -p output/ups
touch output/ups/astrometry_net_data.table
自前のアストロメトリ用カタログファイルをインストール・セットアップする¶
index ファイルのあるディレクトリを適当な名前に変え、アストロメトリファイルのあるディレクトリ下に配置します。
# index ファイルのあるディレクトリ名を変更
mv output testcatalog
# testcatalog ディレクトリをアストロメトリファイルのあるディレクトリ下に配置
mv testcatalog ~/pipe/hscpipe/astrometry_net_data/
この時、testcatalog の名前の先頭は以下のように設定しなければなりません。
- sdss* : カタログを SDSS から取ってきた場合、”sdss”をカタロディレクトリ名の先頭につけて下さい。
- ps1* : カタログを Pan-STARRS から取ってきた場合、”ps1”をカタログディレクトリ名の先頭につけて下さい。
- hsc* : 本来は HSC 自身からのカタログを用いる場合のものですが、 色補正をしないオプションとして使えます。
ここで、 HSC pipeline filter 対応表 の (1) の注釈がついたフィルターでのアストロメトリ用カタログファイルを作成したい場合は、hsc を先頭につけてください。
次に、自前のアストロメトリ用カタログディレクトリを EUPS に登録します。
Warning
HSC データ解析用共同利用計算機(hanaco)を使用される場合は、この方法では登録できませんので、 hanaco で自前のアストロメトリ用カタログファイルをインストール・セットアップする を参照して下さい。
# 自前のアストロメトリ用カタログディレクトリの EUPS への登録
#
# USAGE: eups declare -m <登録する自前のアストロメトリ用カタログファイル> -r <登録する自前のアストロメトリ用カタログディレクトリ> <パッケージ名(例 astrometry_net_data)> <バージョン名(例 test_catalog)>
eups declare -m ~/pipe/hscpipe/astrometry_net_data/test_catalog/ups/astrometry_net_data.table -r ~/pipe/hscpipe/astrometry_net_data/testcatalog astrometry_net_data testcatalog
最後に、以下のように自前のアストロメトリ用カタログをセットアップすれば完了です。
# 自前のアストロメトリ用カタログのセットアップ
setup astrometry_net_data testcatalog
hanaco で自前のアストロメトリ用カタログファイルをインストール・セットアップする¶
hanaco にて上記の方法で自前のアストロメトリ用カタログを登録しようとすると、EUPS の登録で失敗します。 これを回避するために、以下のように自身の EUPS レポジトリを作成し、そこに登録をするようにして下さい。
# 個人用 EUPS レポジトリの場所を指定 (どこでもよいです。)
myeups=/data/<user name>/eups-4.0.1
# EUPS レポジトリを作成
mkdir -p $myeups/ups_db
# EUPS_PATH に自分で作成したものを前置
export EUPS_PATH=$myeups:$EUPS_PATH
# 登録
eups declare -m /data/<user name>/astrometry_net_data/test_catalog/ups/astrometry_net_data.table -r /data/<user name>/astrometry_net_data/testcatalog astrometry_net_data testcatalog
# この時、エラーが出て登録できない場合は --nolocks オプションを追加して下さい。
登録された自前のアストロメトリ用カタログをセットアップするコマンドは、以下のように作ることができます。
# 自身の .bashrc に以下を追記
setup-myhscpipe()
{
setup-hscpipe &&
export EUPS_PATH=/data/<user name>/eups-4.0.1:$EUPS_PATH
}
このように設定したら、次回からはセットアップのために setup-myhscpipe を使って下さい。