このページでは、位置座標と等級が求められている2つの天体カタログに対して、 座標の変換式を求めて同定も行う自作のプログラムを公開し、 使用法などを説明しています。たとえば、測光ソフトでどのピクセルに何等の星が あるかというリストをつくった後に、カタログの赤道座標と比較して 座標の変換をしたり、カタログの等級と比較したりできます。 また、3つのフィルターでとった画像の座標系を決めて、合成カラー画像を 作ったりできます。
座標の変換式を求める根本部分は、Tabur (2007, PASA, 24, 189)によって 提案されたOptimistic Pattern Matching (OPM)というアルゴリズムに 基づいています。OPMアルゴリズムは、IRAFのxyxymatchタスクなどが 採用している従来の方法よりも速いと期待されています。 コードはC言語で書かれており、適当なC言語のライブラリがあれば、 結果を図示したり、求めた座標の変換式をそのままFITS画像のWCSに 入力したりもできます。
本ソフトは、学術的な目的であれば、自由に利用できます (著作権情報はこちら)。 論文などで引用、あるいは謝辞に入れてくださる場合は、 こちらを参考にしてください。
V. Tabur,
"Fast algorithms for matching CCD images to a stellar catalogue",
Publications of the Astronomical Society of Australia, Volume 24,
Issue 4, pp. 189-198. (2007)
(プレプリントがarXiv:0710.3618v1[astro-ph]で入手できます)
(Tabur自身によるソフトのページがこちらにあります)
以下のファイルをダウンロードして、適当なディレクトリに置いてください。
ファイルサイズは約1.4MBです。
OPM1_4.tgz
Unix系の計算機環境でのインストール方法は以下の通りです。
結果を図示するプログラムを使いたいときには
make plotがうまく行えなかったあなた、ヘッダファイルが読込めなかったか、 PGPLOTライブラリとうまくリンクできなかったのかも知れません。 MakefileにあるPGDIRとCPGLIBSを適当に書き換えてください。
求めた座標の変換式をFITS画像のWCS(World Coordinate System)に 埋め込むことができます。本ソフト中では cfitsioのライブラリを利用して、ヘッダを編集します。 cfitsioが利用できる方は、MakefileのFITSDIR(fitsio.hが存在するディレクトリ)と FITSLIBS(ライブラリの呼び方)の設定を確認の上、
以下は、結果を図示するためのプログラムで、 PGPLOT が必要です。コンパイル方法については、こちら を参照してください。
以下は、求めた変換式からWCSを埋め込むためのプログラムで、 cfitsio が必要です。コンパイル方法については、こちら を参照してください。なお、FITSへの埋め込みは行わずに、 必要なヘッダのキーワードと値だけを表示するプログラム (calc_wcs_header)もあります。
コンパイルに成功したら、example1のディレクトリにいってみてください。 input1とinput2という2つのファイルがあります。 これは、2つの天体リストから「x y mag」を切り取ってきたものです。 input1の方はある画像のピクセル座標と機械等級、input2の方は カタログから取ってきた赤経赤緯とすでに補正された等級が並んでいます。 input1の座標がinput2の座標と合うように変換を行うので、 以下ではinput1を対象入力ファイル、input2を基準入力ファイルと呼びます。
まず、local_coordinate_RADecを使って、 赤道座標を局所平面座標に変換します。
../local_coordinate_RADec input2 input2b 17:46:10.6 -28:53:48.1 240
このデータの中心赤道座標と、視野サイズ(約480秒)の半分の値を与えました。 input2の座標を変換したinput2bという新しいファイルがつくられました。 これで、input1とinput2bを比較することができます。
次にopmを動かすときに必要なパラメータファイルをつくります。 ここではパラメータファイルの名前をparamとします。
../get_default_param param
このparamファイルにはデフォルトのパラメータが入っていますので、 必要な変更を行います。(適当なエディタを使っください。)
それでは、opmプログラムを動かしましょう。
../opm input1 input2b output param
計算はすぐに終わって、outputファイルが出力されます。 outputにはここに書いてあるような、 データが並びます。また、ファイルの最初の部分には、 使用したパラメータの値と、変換式が #で始まるコメント行として書かれています。 verboseモードならば、 モニターにもいろいろなログが 出力され、最後の部分に変換式が出ます。
plotモードのプログラムまでコンパイルしてあれば、 このoutputファイルを使っていろいろな図をプロットすることができます。
../plot_dxdy output 1
../plot_magdel output
../plot_map output 0 0 60
../calc_wcs_header output 17:46:10.6 -28:53:48.1
とすると、以下のような結果が表示されます。 また、cfitsioモードの put_wcs_headerを使えば、 これらのヘッダをFITS画像に直接書き込むことができます。WCSAXES 2 CTYPE1 'RA---TAN' CTYPE2 'DEC--TAN' CRPIX1 552.8094323 CRPIX2 489.5252822 CD1_1 -1.2666667e-04 CD1_2 1.1111111e-06 CD2_1 1.3888889e-06 CD2_2 1.2583333e-04 LONPOLE 180 CRVAL1 266.5441667 CRVAL2 -28.8966944 CUNIT1 'deg ' CUNIT2 'deg '
opmの結果得られるファイルは
id1 x1org y1org x1 y1 m1 id2 x2 y2 m2 flag
という書式です。それぞれの値の意味は以下の通り。
../plot_dxdy output 1
求めた変換式による変換を行ったあとの座標のずれを 3つの図によって図示しています。左側がどちらの方向にどれだけずれているかを (dx, dy)としてプロットしたもの、中央と右側の図はx方向のずれ、y方向のずれを ヒストグラムでプロットしたものです。2番目の引数はヒストグラムを プロットするサイズ(の半分)です。同定の時に指定した、OPMの パラメータTOLERANCEを入れてください。../plot_magdel output
2つの入力ファイルの等級の差を図示しています。 x軸は基準入力ファイルでの等級、y軸は2つの等級の差をプロットしています。 上側にばらっと広がった分布になっていて何か系統的な誤差が 等級に混ざっているようです。それはともかくとして、多くの星は 直線でプロットした-19.91等(メジアン)の差をもっていて、 この値を加えれば等級のおおよその補正が行えると考えられます。../plot_map output 0 0 60
基準入力ファイルの座標で(0, 0)を中心としてプラスマイナス60の範囲の チャートをプロットします。 基準入力ファイルの天体が赤、対象入力ファイルの天体が白で、 flag=0だったものが丸、flag=1だったものはバツ印として プロットされています。たとえば、使い方の説明 は上記の条件を満たしています。対応する画像の名前が***.fitsだとしたら、
put_wcs_header ***.fits output 17:46:10.6 -28:53:48.1
とすれば、必要なヘッダが書き込まれます。なお、 calc_wcs_headerを使えば、 使い方の説明に書いた通り FITSIOによる書き込みは行わずに、 必要なキーワードと値をモニターに表示することができます。
次の例として、3枚の画像について座標系を求めて、合成カラー画像を 作ってみましょう。そのために cfitsioモードのプログラム put_wcs_headerを利用します。 また、カラー画像を表示するためのソフトとして、 ds9を使います。 FITSIOをインストールしていない場合は、calc_wcs_header でWCSのパラメータを計算させてそれを何か別の方法でFITS画像に埋め込む こともできます。また、ds9は他のFITS画像表示ソフトでも代用できるでしょう。
example2のディレクトリに行くと、j.fits, h.fits, k.fitsという3枚の FITS画像が置いてあります。 それぞれJ(約1.2μm) H(約1.6μm) K(約2.2μm)という 3つのフィルターを使ってとった画像です。 そして、j.xym, h.xym, k.xymが写っている星のXY座標と等級、 catalog.xymが対応する領域のカタログ(2MASS)の局所平面座標(単位・秒)と Hバンド等級のファイルです。 catalog.xymの中心座標は、17:47:11.13 -26:49:10.4 (J2000)に対応しています。
以下のように、opmコマンドと put_wcs_headerコマンドを使うと、 各画像に必要なWCS情報が入ります。これをds9のRGBモードで表示すると カラー画像が見られます。(残念ながらあまりカラフルな星の無い領域ですが)
../opm j.xym catalog.xym j.match param
../opm h.xym catalog.xym h.match param
../opm k.xym catalog.xym k.match param
../put_wcs_header j.fits j.match 17:47:11.13 -26:49:10.4
../put_wcs_header h.fits h.match 17:47:11.13 -26:49:10.4
../put_wcs_header k.fits k.match 17:47:11.13 -26:49:10.4
ds9 -minmax -log -rgb -red k.fits -green h.fits -blue j.fits &
「x y mag」という書式の2つのファイルを準備してください。 x yは局所平面座標にしてください (ピクセル座標かだいたい共通する視野中心への接平面へ投影した座標)。 赤道座標になっている場合は、 local_coordinate_RADecやlocal_coordinate_degree を利用すれば、局所平面座標が得られます。 次にパラメータファイルを用意してください。 get_default_paramを使えば、デフォルトの 値を集めたパラメータファイルが作られますので、それを編集してください。 特に、MIRROR, MAGNIFY, XCENTER, YCENTER, HALFSIZE, TOLERANCEなどの パラメータに注意してください。
OPMプログラムの通常の入力は「x y mag」が各行に一つずつというものですが、 自分が持っているファイルをそのまま入力させたいとか、等級の誤差などの いろいろな情報も同じプログラムの中で処理させたいということがあります。 そのときは、original_data.hとoriginal_data.cを編集して、opm_original.cを 利用することを考えてください。 (C言語について、ポインタの扱いや分割コンパイルなどにあまり慣れていない人は、 通常のopmによる出力ファイルを適当に処理した方が容易でしょう。 system関数やシェルスクリプトを書けば、いくらでも処理を自動化できます。) 自分のファイルを入力する例を、example3のディレクトリで 試すことができます。とりあえず、OPMディレクトリでopm_originalを コンパイルしてから、example3でopm_originalを実行してみてください。
ここで与えられているinput1は通常の入力形式である「x y m」という 書式のファイルですが、input2はもっといろいろな情報を各行各天体に対して 含まれています。
(input2の先頭5行) 17455437-2856402 -213.0 -172.2 8.542 0.027 6.889 0.046 6.193 0.026 AAA 17462835-2854488 233.1 -60.9 9.086 0.032 7.279 0.034 6.516 0.026 AAA 17461524-2850035 61.0 224.5 11.828 0.023 8.921 0.044 7.291 0.027 AAA 17460427-2857365 -83.0 -228.5 12.846 0.023 9.161 0.022 7.371 0.023 AAA 17460419-2856511 -84.1 -183.0 8.930 0.034 7.918 0.055 7.421 0.018 AAA先頭から、ID(赤経赤緯を名前にしたもの)、局所平面座標でのx, y(秒角単位)、 Jバンド等級、Jバンド誤差、Hバンド等級、Hバンド誤差、Kバンド等級、Kバンド誤差、 JHKバンドそれぞれの精度を表すフラッグという書式です。このファイルをそのまま opmに入力することはできませんが、opm_originalを使うことで そのまま入力してしまい JHK3バンドの等級を出力ファイルに含めることができます。 (ただし、この例のoutputは通常の出力形式と異なるので、plotモードのプログラムに そのまま入力することはできません。)
このプログラムのメインはopm_original.cですが、original_data.[c,h]で 独自のファイル形式の入出力を加えている以外は、通常のメインプログラムopm.cと ほとんど同じです。original_data.[c,h]には、独自の書式のファイルを 入力したり(load_original_data)、そのデータをopmで操作する構造体(xym)に 変換したり(set_original_xym)、独自の形式で出力したり (output_matched_result_original)といった関数が記述されています。 細かい説明は省略しますが、独自のデータ形式へのポインタを保持するために、 xym構造体には、(void *)型のdata変数が定義されています。 xym構造体の中身はxym.c以外のソースから直接見ることはできませんが、 set_xym関数で入力し、get_xym_data関数でdata変数を取り出すことができます。 original_data.[c,h]を編集することによって、入出力の形式を 自分で好きなような形に変えられるはずです。opm_original.cとoriginal_data.[c,h] はそれぞれバックアップがありますので、自分のデータに あった入出力や処理を加えたいときには、これらのソースファイルを 編集してみて下さい。
データの性質によっては、同定するのが難しい場合があります。 以下では、いくつか考えられる原因とその対処法を説明します。
時折、plot_dxdyの結果が
となるような変なずれ方が残ってしまう場合があります。 これは回転すべきずれが残っていて、画像の右と左で 系統的に反対方向へずれていると考えられます。 少しずれていてもTOLERANCEの半径以内に入ってしまうので 同定したことになっています。経験的には、TOLERANCEが 大きすぎるとき、あるいはNITERが小さすぎるときに このような事態が生じるようです。上の図は、TOLERANCE=1.0、 NITER=3で同定させた結果ですが、NITERはそのままで TOLERANCEを0.5に変えると以下の図のようにうまく変換できました。 本来、+-0.1程度のずれで同定できるはずなので、最初のTOLERANCE=1は 大きすぎたと考えられます。
本同定ソフトは、Taburによって提案されたOptimistic Patter Matching (OPM) というアルゴリズムに基づいています。この方法の大まかな流れは以下の通りです。
本ソフトは、基本的にTaburの論文のアルゴリズムを採用していますが、 いくつか元の論文の記述とは異なる方法で計算している部分があります。
OPM: a pattern matching software
Copyright (c) 2007-2008 Noriyuki Matsunaga
本ソフトウェアは、学術的な目的において、 個人・団体によらずに使用・改良・再配布を許可します。 ただし、再配布を行う場合は、オリジナルの内容が それとわかる状態で一緒にダウンロードされるようにして、 本利用条件を変更せずにReadMeなどへ提示してください。 商用目的のためには、原則的にすべての内容について 利用を禁止します。もしそのような希望があれば、松永までご相談下さい。 著作権は放棄しておらず、松永典之個人に帰属します。
本ソフトは、Tabur (2007)の記述に基づき、 松永個人が作成したものです。最低限の動作確認は しているつもりですが、自己責任で使用してください。 本ソフトのコンパイル・使用などすべての動作で起きうる不利益に関する 一切の責任を放棄します。 また、Taburが記述した通りに動作することを 保証するものではありません。
また、本ソフトに含まれるコードのうち、thdrad.ctmat.cwcs.cは
田辺俊彦氏が作成したものを再利用しました。したがって、
それらに対する著作権は田辺氏にあります。田辺氏のご好意により、
本ソフトで利用し、他のファイルと同様に公開できることを
この場を借りて感謝いたします。なお、それらのプログラムが、
本ソフト内で正しく利用され、本来の機能を発揮しているか
どうかの判断は、松永の責任において行いました。
thdrad.c, tmat.c, wcs.c: Copyright (c) 2007 Toshihiko Tanabe
ソフトウェアの性能に関わるような改良を 加えられた場合は、ぜひとも 松永 までご連絡ください。
論文などで引用、あるいは謝辞に入れてくださる場合は、 以下の例を参考にしてください。
Copyright (c) 2007-2008 Noriyuki Matsunaga