2009.06.29 v.1.0 市川伸一 IRAF を基本システムとした データ解析ソフトウエア開発 講習会2日目午前テキスト 0.はじめに (1)データ解析ソフトウエアを自力で開発する意義 データ解析ソフトウエアを自分で開発するためには、相応の時間と労力 を投ぜねばならない。また、常に「正しい結果が出ているのか」という不 安が伴う。にもかかわらず、自分で開発すれば「自分のやりたいことがや りたいようにできる」という大きな意義がある。 既存のソフトウエアに頼るのか、自分で開発するのかはそれらの兼ね合 いで定めるべきことであるが、開発の経験を有することは、 ・ソフトウエアの仕組みを理解することが容易になり、既存ソフトウエア をただブラックボックス的に使うだけの段階から、何をしているのか理 解して使うという段階に進歩することができる。 ・普段使っているソフトウエアの確認や補完が比較的容易にできる。 などの面で望ましいことである。 (2)IRAF を基本システムとする利点と欠点 データ解析ソフトウエアを自分で開発する場合には、IRAF のような既存 のシステムを基盤としてその枠組みの中で開発し動作させる方法と、完全に 独自の枠組みの中で開発し動作させる方法がある。 本講習会は、IRAF を基本としたデータ解析ソフトウエアの開発を扱うも のであるが、それには利点と欠点がある。 <利>ヒストリやパラメータ保存などの IRAF の便利な機能が使える。 <利>基本的なルーチンが用意されており、それを用いることができる。 <利>STScI などで現在も開発が進んでおり、そのソースを参考にできる上、 新たな規格にも追随できる可能性が高い。 <利>基盤部分は長年多くの研究者に用いられてきており、誤りが少ないと 思われる※ <欠>IRAF 本体は古いシステムであり、記述言語もきわめて古く、 効率が悪い上に、新たな計算機概念が導入しにくい。 <欠>本体はできあがったシステムであり、完全に好き勝手なことは できにくい。 これらを理解した上で IRAF を基本システムとした開発を行うべきかどうか 判断を下すべきであろう。 ※ソフトウエアの良し悪しの評価には、便利さ、効率/速度、など 様々な観点があるが、最も重要なのは(言うまでもなく)正しさ、 である。 (3)開発の方法 IRAF を基本システムとするデータ解析ソフトウエアの開発には、大きく 分けて、 ・開発したソフトウエアを IRAF のタスクにするなど、IRAF の中に 組み込んで用いる。 ・IRAF の外部(OS から直に動かす等)から IRAF のタスクなどと共に動かす。 の2つのやり方がある。また、手法(言語)としては、 ・CL スクリプトでタスクを組み合わせて用いる方法、 ・SPP(IRAF 記述言語)、F77/VOS,CVOS、IMFORT などの IRAF で用意されて いる言語(インターフェース)を用いる方法、 ・CFITSIO や XPA などの天文ライブラリを一般のプログラム言語から呼び 出して使い、さらに、IRAF のタスクともどもスクリプト言語で動かす方法、 などがある。 本講習ではその中で、 (A)F77/VOS と CDL を用いた IRAF のタスクを作る。 (B)XPA を用いたシェルスクリプトを IRAF のタスクとする。 (C)データベース(PostgreSQL)を検索する Java プログラムを IRAF のタスクとする。 (D)統計解析パッケージ R を用いて画像の統計量を求める IRAF の タスクを作る。 (E)FITSIO を用いた Fortran プログラムを IRAF のタスクとする。 (F)OS から直接 IRAF のタスクを呼ぶ(2種類)。 について解説と実習を行う。要するに、A〜Eは「いろいろなプログラムを IRAF のタスクにできる」ということである。 (4)テストプログラムとテストデータ 本講習は多岐にわたっており時間的な余裕がないため、あらかじめ用意 してあるテストプログラムを(コンパイルして)走らせてみるにとどめる。 テストプログラムとテストデータは、/data/ichikawa 下に用意してある。 テストプログラムは、4つのディレクトリに納められている。 上記のAが kspkg、Bが ktpkg、C、D、Eが kupkg、Fが kvpkg である。 なお、テストプログラムは本講習のために特別に作成した、または既存のプ ログラムを改造したもので、「とってつけた」風のものばかりで、説明やエ ラー処理を大幅に省略するなど単純化してあるので注意されたい。また、プ ログラム中の各所に書かれたファイルパス等は本講習のための環境設定に依 ったものであり、マシン環境によって適宜変更する必要があることにも留意 されたい。 テストデータはディレクトリ TestData 下にある。2007-11-14 に取得され たすばる望遠鏡 Suprime-Cam データのうち、 10チップ分 一揃 (10frames) 5番チップのみ10枚 (10frames) 5番チップのみ5枚×圧縮(5frames:ファイル名を SUPC にしてある) の25フレーム分を用意してある。ワイルドカードを試してみる等に備えて 複数のデータを用意してある次第である。なお、圧縮済みデータ(SUPC*)は、 そのままでは DS9 と CFITSIO/FITSIO 以外のソフトウエアで扱うことができ ないので注意されたい。本講習では「ファイル名」とは SUPAxxxxxxxx.fits、 「フレームID」とは SUPAxxxxxxxx (拡張子を除く)、を指すこととする。 1.講習と実習 (0)実習の準備 テストプログラムを走らせるために以下の準備を行うこと。 (1) マシンにログインし、端末エミュレータを開く。 (2) ホームディレクトリに uparm/, login.cl, loginuser.cl があれば消すか、 待避(改名するか移動する)する。本講習で設定する環境は、前後の講習 と共通ではないので注意が要る。 (3) 実習用ディレクトリ /adc/data に移る。そこに uparm/, login.cl, loginuser.cl があれば消すか待避する。/data/ichikawa 下のファイル、 ディレクトリを全てコピーする。 (4) mkiraf を行って IRAF を使う準備をする(xgterm を指定)。 (5) xgterm を起動する。 (6) 端末エミュレータ上と xgterm上で source cshrc を実行して環境を 設定する(プロンプトがかわるはず)。 (7) ds9 を起動する。 (8) xgterm 上で IRAF を起動する(cl を実行する)。 実習が終了したら、テストプログラム、テストデータ、uparm/, login.cl, loginuser.cl 等を消去、または待避すること。 (A)F77/VOS と CDL を用いる(テストプログラムはディレクトリ kspkg 下)。 <解説> loginuser.cl 中でパッケージ kspkg として定義してあり、さらに kspkg.cl で 4つのタスク(+4つの隠しタスク)が定義されている。 mstat 画像の中2箇所の統計量を求める。 「2箇所」を定義したファイルは隠しパラメータになっている (mstat.cl, stat1.f, stat00.f, stat1.par, area)。 add 画像に定数を加えて別の画像を出力する。 (add.cl, add1.f, add1.par)。 p 画像中の指定カラム(横方向)をプロットする。 「指定カラム」は隠しパラメータになっている。 (p.cl, plot1.f, plot1.par)。 d 画像を DS9 に表示し、キーボードの'q'以外のキーを押した時の カーソルの画像上での位置と値を読み出す。'q'キーを押すと 終了する。 (d.cl, disp0.f, disp0.par)。CDL を用いている。 プログラムは mkpkg, x_kspkg.x, kspkg.cl, kspkg.par を準備した上で、 mkpkg を実行するとコンパイルされる。なお、F77/VOS を用いた Fortran プログラムは単独でもタスクとして動くが、利便性を増すために cl スク リプトを被せている。また、CDL は IRAF の枠組みの中でなくとも動く。 <実行例> まずコンパイルする(端末エミュレータ)。 guest01@new-r01[11]% cd kspkg guest01@new-r01[12]% mkpkg guest01@new-r01[13]% cd .. xgterm の上(IRAF 起動済み)で、 ecl> cd /adc/data (順に実行している場合は不要) ecl> cd TestData ecl> kspkg ..... kspkg> mstat input file ?: SUPA0058360* ..... kspkg> add input file ?: SUPA00583865.fits output file ?: Z583865.fits ←名前は何でも良い。 value to be added ?: 100.0 kspkg> p file list ?: SUPA00583600.fits kspkg> d Input file list : SUPA00583795.fits f 833 410 17681.000 g 1233 410 17911.000 h 1577 442 17895.000 j 1553 626 17926.000 このあと q キーを押した。 (B)XPA を用いたシェルスクリプトを IRAF のタスクとする(テストプログラムは ディレクトリ ktpkg の下)。 <解説> loginuser.cl 中でパッケージ ktpkg として定義してあり、さらに ktpkg.cl で 2つのタスク(+2つの隠しタスク)が定義されている。 ktdisp 画像を DS9 に表示し、付随情報を文字で表し、ハードコピー (JPEG)を作成する。 (ktdisp.cl hdjpeg.csh)。 dispx 画像を DS9 に表示し、スケールや色を自動的に変える(2回 変えて元に戻る)。 (dispx.cl, dispxx.csh)。 いずれも XPA を用いて DS9 を制御している。hdjpeg.csh, dispxx.csh は OS から直接動かすこともできる(ただし、dispxx.csh では画像ファイル名を フルパスで入れること)。 <実行例> ecl> cd /adc/data (順に実行している場合は不要) ecl> cd TestData (順に実行している場合は不要) ecl> ktpkg (順に実行している場合は kspkg> bye の後で) ..... ktpkg> ktdisp frame to display ?: SUPA00583605.fits Hardcopy ? (no): yes ----- SUPA00583605.fits z1=11720.96 z2=12808.13 /adc/data 下にできた JPEG 画像を ブラウザで見てみよう( URL に file:///adc/data を指定)。 ktpkg> dispx frame to display ?: SUPA00583805.fits ----- SUPA00583805.fits (C)データベース(PostgreSQL)を検索する Java プログラムを IRAF のタスクとする(テストプログラムはディレクトリ kupkg の下)。 <解説> loginuser.cl 中でパッケージ kupkg として定義してあり、さらに kupkg.cl で 3つのタスク(+3つの隠しタスク)が定義されている。 selframe あらかじめ求められている平均値(中央の値から overscan の値を引いたもの)を PostgreSQL データベースから取りだし、 5000 以上 30000 未満のフレームを選びだす(OK と出す)。 開始フレームID から10おきに5つ出すようになっている。 (selframe.cl, meancount.sh, getCount.java)。 meancount.sh は、環境(クラスパス)設定のために用いている。 getCount.java は、Makefile を用意した上で make でコンパイルできる。 なお、このプログラムはデータが手元にあるかどうかには関わりなく動かせる。 また、PostgreSQL のテーブル定義は以下の通りであり、 create table SUP_STAT ( FRAME_ID varchar(12) primary key, DATE_OBS varchar(10), MJD numeric(20,8), DATA_TYP varchar(20), FILTER01 varchar(16), EXPTIME numeric(7,1), NAXIS1 smallint, NAXIS2 smallint, mean23 double precision null, sd23 double precision null, mean00 double precision null, sd00 double precision null ); サーバーは別のネットワーク上(ファイアウォールの彼方)にある。 <実行例> まずコンパイルする(端末エミュレータ:Eのプログラムもコンパイルされる)。 guest01@new-r01[21]% cd kupkg guest01@new-r01[22]% make guest01@new-r01[23]% cd .. そして xgterm の上(IRAF 起動済みのはず)で、 ecl> cd /adc/data (順に実行している場合は不要) ecl> cd TestData (順に実行している場合は不要) ecl> kupkg (順に実行している場合は ktpkg> bye の後で) ..... kupkg> selframe start frame id ?: SUPA00583765 SUPA00583765 = OK 7692.83594 SUPA00583775 = OK 7681.59668 SUPA00583785 = OK 7554.17188 SUPA00583795 = OK 7568.47754 SUPA00583805 = OK 7745.42481 SUPA00583815 (D)統計解析パッケージ R を用いて画像の統計量を求める IRAF の タスクを作る(テストプログラムはディレクトリ kupkg の下)。 <解説> loginuser.cl 中でパッケージ kupkg として定義してあり、さらに kupkg.cl で 3つのタスク(+3つの隠しタスク)が定義されている。 qmean 画像の第2四分位数(中央値)、第1四分位数、第3四分位数を 求めた上で、画像そのままの統計値、3-sigma rejection を かけた後の統計値、四分位数範囲内の画素の統計値、をそれぞれ 求める。四分位数は統計解析パッケージ R を用いて求める。 (qmean.cl, runR.csh)。 <実行例> ecl> cd /adc/data (順に実行している場合は不要) ecl> cd TestData (順に実行している場合は不要) ecl> kupkg (順に実行している場合は不要) ..... kupkg> qmean file name ?: SUPA00583795.fits ----- SUPA00583795.fits 17401. 17547. 17669. # IMAGE NPIX MEAN STDDEV MIN MAX ... SUPA00583795.fits 8528000 17582. 1980. 8756. 48212. ... # IMAGE NPIX MEAN STDDEV MIN MAX ... SUPA00583795.fits 8163259 17533. 180.6 16951. 18129. ... # IMAGE NPIX MEAN STDDEV MIN MAX ... SUPA00583795.fits 4287064 17543. 75.45 17401. 17669. ... (E)FITSIO を用いた Fortran プログラムを IRAF のタスクとする (テストプログラムはディレクトリ kupkg の下)。 <解説> loginuser.cl 中でパッケージ kupkg として定義してあり、さらに kupkg.cl で 3つのタスク(+3つの隠しタスク)が定義されている。 cselect 画像の情報を読み出す。FITSIO を使うことにより、通常の画像 だけでなく、圧縮(今回は Rice 法)された画像もそのまま扱う ことができる。 (cselect.cl, getFHK.f)。 FITSIO を用いたプログラムは IRAF の枠組みの中でなくとも動く。 なお、今回の圧縮画像(SUPC*)は DS9 でも直接扱うことができる。 <実行例> getFHK.f は、上記Cでコンパイルされたはずである。 ecl> cd /adc/data (順に実行している場合は不要) ecl> cd TestData (順に実行している場合は不要) ecl> kupkg (順に実行している場合は不要) ..... kupkg> cselect file name ? : SUPA005838?5.fits SUPA00583805.fits RXJ0451 OBJECT 2007-11-14 W-C-IC 240. SUPA00583825.fits Abell611 OBJECT 2007-11-14 W-C-IC 240. SUPA00583835.fits Abell611 OBJECT 2007-11-14 W-C-IC 240. SUPA00583845.fits Abell611 OBJECT 2007-11-14 W-C-IC 240. SUPA00583855.fits Abell611 OBJECT 2007-11-14 W-C-IC 240. SUPA00583865.fits Abell611 OBJECT 2007-11-14 W-C-IC 240. kupkg> cselect file name ? (SUPA00583865.fits): SUPC583* SUPC583465.fits Abell68 OBJECT 2007-11-14 W-C-IC 240. SUPC583475.fits Abell68 OBJECT 2007-11-14 W-C-IC 240. SUPC583485.fits Abell68 OBJECT 2007-11-14 W-C-IC 240. SUPC583495.fits Abell68 OBJECT 2007-11-14 W-C-IC 240. SUPC583505.fits Abell68 OBJECT 2007-11-14 W-C-IC 240. F.OS から直接 IRAF のタスクを呼ぶ(2種類:テストプログラムは ディレクトリ kvpkg の下)。 <解説> imstatz.cl 画像の統計量を求める。画像そのままの統計値と、 3-sigma rejection をかけた後の統計値を求める。 このプログラムは、cl.e をシェルとして動かしている。 パラメータはタスク名の後に書き並べる。 imstaty.csh 画像の統計量を求める。画像そのままの統計値と、 3-sigma rejection をかけた後の統計値を求める。 このプログラムは、IRAF のバイナリを直接動かしている (タスク名が第一引数になる。パラメータは IRAF 中で、 ecl> dpar imstat > parimstat としてファイルに落し、適当に書き換えて準備しておく)。 <実行例> 端末エミュレータにて guest01@new-r01[31]% cd TestData guest01@new-r01[32]% ../kvpkg/imstatz.cl SUPA00583785.fits # IMAGE NPIX MEAN STDDEV MIN MAX ... SUPA00583785.fits 8528000 17566. 1976. 8733. 48666. ... # IMAGE NPIX MEAN STDDEV MIN MAX ... SUPA00583785.fits 8164318 17517. 182.2 16931. 18117. ... guest01@new-r01[33]% ../kvpkg/imstaty.csh SUPA00583785.fits # IMAGE NPIX MEAN STDDEV MIN MAX ... SUPA00583785.fits 8528000 17566. 1976. 8733. 48666. ... # IMAGE NPIX MEAN STDDEV MIN MAX ... SUPA00583785.fits 8164318 17517. 182.2 16931. 18117. ... 2.ドキュメントの在処 本講習で用いた手法等のドキュメントは以下の場所にある。WEB 上から なくなってしまう場合も考えられるので、主要なものは講習会の WEB ペー ジに、テストプログラム等とともに置いておく予定である。 A Fortra-77 Interface for IRAF http://www.stsci.edu/ftp/documents/stsdas-docs/F77VOS.ps A Reference Guide for the IRAF Client Display Library (CDL) http://iraf.noao.edu/x11iraf/x11iraf-v2.0BETA-src.tar.gz の中。 Host CL Scripting Capability http://iraf.noao.edu/iraf/web/new_stuff/cl_host.html XPA http://hea-www.harvard.edu/RD/xpa/ FITSIO User's Guide http://heasarc.gsfc.nasa.gov/docs/software/fitsio/fitsio.html の下。 CFITSIO におけるデータ圧縮について: http://heasarc.gsfc.nasa.gov/docs/software/fitsio/compression.html 以下に開発の際に参考になるドキュメントやソフトウエア(ライブラリ) の一部をあげた。基本的に無料で使えるもののみをあげている。 IRAF http://iraf.noao.edu/ http://iraf.net/ SLALIB (Positional Astronomy Library) http://www.starlink.rl.ac.uk/star/docs/sun67.htx/sun67.html なお、SLALIB は IRAF の中に含まれている(math$slalib 下)。 CVOS (IRAF C interface) http://www.stsci.edu/resources/software_hardware/stsdas/cvos_stsci Gemini IRAF Package http://www.gemini.edu/sciops/data/dataSoftware.html STScI software (STSDAS,TABLES,,,) http://www.stsci.edu/resources/software_hardware FITS http://fits.gsfc.nasa.gov/ http://fits.gsfc.nasa.gov/fits_libraries.html http://heasarc.gsfc.nasa.gov/docs/heasarc/fits/java/v1.0/ SOFA (Standards Of Fundamental Astronomy) http://www.iau-sofa.rl.ac.uk/ WCStools http://tdc-www.cfa.harvard.edu/software/wcstools/ Starlink (general-purpose data reduction software) http://starlink.jach.hawaii.edu/starlink R (統計解析パッケージ) http://cran.r-project.org/ http://aoki2.si.gunma-u.ac.jp/R/ http://www.okada.jp.org/RWiki/ Ptplot (Java ベースのプロットプログラム) http://ptolemy.eecs.berkeley.edu/java/ptplot/ PGPLOT http://www.astro.caltech.edu/~tjp/pgplot/ GNUPLOT http://www.gnuplot.info/ GSL (GNU Scientific Library) http://www.gnu.org/software/gsl/ PostgreSQL http://www.postgresql.jp/ 以上。