Python Scripting on IRAF
(PyRAF を用いたデータ処理入門）
高田 唯史(国立天文台・天文データセンター）

今日の講習内容• Pythonについて(すごく簡単に）• PyRAFを知る（インタラクティブに使ってみる）• Pythonを使ったスクリプトを作って、PyRAFを用いた画像処理を行ってみる1

Pythonについて• オブジェクト指向スクリプト言語• 1990年にオランダ人Guido van Rossum氏によって開発されたプログラミング言語• その可読性の高さ、利用のしやすさ、拡張性の高さなどから世界的に利用者が広がり、将来性も豊かであるとされている• フリーソフトであり、関連する様々なライブラリも大変多く出回っている• Python Software Foundationがライセンスを持つ
http://www.python.org/

PyRAFについて• STScIの中で開発が進んでいるstsci_pythonソフト
ウェア群の中核をなすもの
http://www.stsci.edu/resources/software_hardware/pyraf/stsci_python
http://www.stsci.edu/resources/software_hardware/pyraf/stsci_python• clの短所を乗り越えるため、幅広く利用されているス

クリプト言語でIRAF環境を利用できるように考えられたもの（特にエラー処理など）• 「IDLのようなコマンドラインによるデータアクセスとデータを巧みに扱える環境の提供」を目的とする• 2003年ぐらいにはかなりしっかりとした形になってきていた。

2

PyRAFとIRAF
いままでのIRAFユーザー

PyRAFユーザー

clPython
IRAF Wrapper(PyRAF)

IRAF本体（実行プログラムとかclスクリプト）

PyRAFを使うメリット• Pythonの文法を知っていれば簡単にスクリプトが組める• しかもPythonは比較的簡単にある程度のレベルのプログラミングが出来るようになる（という話だ、、）• Pythonの参考書・WEBサイトは非常に多い• 外部ソフトウェアとの連携が簡単（豊富なライブラリ：
今日の例はプロッティング用ソフト）• clでは出来ないことがいくつか出来る• 既に枯れていると思われるIRAFのタスクを一般的なスクリプト言語からIRAFと連携良く（しかも安定して）呼べる3

PyRAFとIRAF（ｃｌ）で出来ることの違いbyeはないはない((タスクunloadができない）• PyRAFにはPyRAFにはbye
タスクunloadができない）
GOTO文が使えない文が使えない• PyRAFではPyRAFではGOTObackground処理は出来ない処理は出来ない• PyRAFではPyRAFではbackground• Error traceback はCL line numberを出力しない
numberを出力しない• 上矢印キーでヒストリー参照でき、左右矢印で編集可能のパターンマッチができる等• CtrlCtrl-Rキーでhistoryキーでhistoryのパターンマッチができる等• Tabキーでコマンド補完
Tabキーでコマンド補完できる。
• セッション情報をファイルに書ける。またそれをrestore
セッション情報をファイルに書ける。またそれをrestoreできる。
• グラフ・ウィンドウを複数開ける(helpもそこで参照可能）もそこで参照可能）• パラメータエディット(パラメータエディット(epar)epar)がGUIでできるGUIでできる(help(詳細はPyRAF
詳細はPyRAF Tutorialなどを参照のこと）
Tutorialなどを参照のこと）

PyRAFを使うための準備（能書きはここまでで、とにかく触って覚えよう）• IRAFを利用できる環境に自分たちの環境を設定する
作業用のディレクトリにおいて、% xgterm （xgtermを起動）% mkiraf （IRAFの環境を整備）(terminal-typeはxgtermを指定すること）% ds9 & (SAOimage DS9が起動できることを確認)

4

PyRAFをインタラクティブで使ってみる• eparの実行・確認(helpとの連動）• 複数のウィンドウを起動する• Historyやコマンド補完機能の確認• displayタスクの実行 --> display dev$pix 1 fill+• imexamineタスクの実行--> imexamine（’ｒ’や’e’といった基本的なコマンド確認）• Python-likeなタスクの実行方法--> iraf.display（”dev$pix”,1,fill=yes） 等

PyRAFを用いたPythonスクリプトを書く準備• スクリプトの基本（”Hello Python”と書こう！！）• 標準入出力とループの回し方• 関数の定義の仕方と使い方• リストの使い方（配列に相当）• 条件分岐の方法5

実習1-1：Hello Pythonと出力しよう• Pythonプログラムの走らせ方を学ぶ• 他の文字を出力したり、色々試してみよう

参考プログラム/data/takata/Python/hello.py

実習１-２：入出力とループの回し方• 標準入力からのファイル名獲得とループ
ファイル： /data/takata/Python/list_files.py• ファイルリスト(ファイル）からの情報取り込み
ファイル： /data/takata/Python/list_files2.py

6実習１-3：関数の定義と使い方• あるリスト(配列）の値に“ paper”という文字を付け加えて返す関数
サンプルプログラム/data/takata/Python/def_check.py

実習１-４：条件分岐• If文を使って条件分岐の基本を知る• Forループの中で用いるのでインデントをしっ
かりと

サンプルプログラム/data/takata/Python/check_if.py7

(実習２）imstatを使って複数のFITSファイルの統計量を測定する• ファイルは以下のものを使用する/data/takata/Image/FImage_R??.fits• サンプルプログラムは以下のものを使用する/data/takata/PyRAF/imstat_all.py• 課題： サンプルプログラムを改良して、各画像ファイルの[100:500,100:500]の領域の平均値とメジアン値、モード値を求めなさい

実習３：複数の画像をDS9に並べて表示するプログラムを書いてみる• IRAFのdisplayコマンドを用いる• 最後にタイル状に並べてみる(DS9の機能）• ４つまでしかこの環境では表示できない？
使用するデータ：/data/takata/Image/Image_R0?.fits
サンプルプログラム:/data/takata/PyRAF/display_all.py

8実習４：画像のヘッダーの情報を取得する• 画像ファイルがどの日時（UT）に取得されたかをヘッダー情報から得る• imgetsタスクを用いること
使用データ：/data/takata/Image/Image_R0?.fits

サンプルプログラム:/data/takata/PyRAF/read_header.py(課題）/data/takata/Imageの中からRRバンドで取得されたデータのファイル名を得て全て並べなさい。
イル名を(ヒント：FILTER01キーワードの値が“W-C-RC”のものがそれ。）

実習５：複数画像のシフトアンドアッドを行うプログラムを書いてみる• displayで表示した画像をimexamineで調べ、全てのフレームに写っている共通の天体の（ｘ、ｙ）座標を測る。（Stdout=1オプションを利用する）• 測定した（ｘ、ｙ）座標をoffset情報を格納するファイルに書き込む• imcombineを用いてoffset情報を使いながら足し合わせる
サンプルプログラム： /data/takata/PyRAF/shift_add.py
データ： /data/takata/Image/Image_R0?.fits• 応用課題：画像ファイルもリストファイルにする

9ディザリング

実習６：imstatで得た情報をグラフにしてみる。
• Imstatで画像の平均値を取得• 取得した情報をPythonのリストに格納• Matplotlibを用いてグラフを作成• （結果のグラフをEPSファイル出力する）
サンプルプログラム：/data/takata/PyRAF/plot_imstats.py
データ： /data/takata/Image/Image_R0?.fits• 応用課題：横軸をデータ取得時間にしてプロットしてみよう。

※ Matplotlibについては http://matplotlib.sourceforge.net/index.html を参照

10

終わりに
• 今回の講習内容はあくまでもPyRAFへの入口に過ぎない• これ以外にもいくつもの便利な機能と合体して、使いやすいプログラムを比較的簡単にできる(ハズ）、、、 （ネットワーク経由型など)• Pythonの外部ライブラリとうまく共用すれば、画像処理結果の分かり易い記述や、GUIを用いた画像処理＋表示ソフトを組める• PyRAFへのタスクの登録、エラー処理、イベント処理など
は本講習の範疇に含めなかったが、PyRAFのTutorialを読むと結構色々わかります。
より良い使い方を知った方は、是非とも本講習会で披露して欲しい。

参考資料(Python)

みんなのPython改訂版

はじめてのPython3

柴田 淳 (著)

紫藤 貴文 (著)ソフトバンククリエイティブ

工学社

初めてのPython第3版
Mark Lutz (著), 夏目大 (翻訳)オライリージャパン

11

PyRAFの参考資料
PyRAFホームページ
http://www.stsci.edu/resources/software_hardware/pyraf

PyRAFドキュメント群
http://stsdas.stsci.edu/stsci_python_epydoc/
PyRAF Tutorial (May 2002)
PyRAF Programmer‘s Guide (Version 1.0, May 2004)
Interactive Data Analysis with Python Tutorial (May 2007)
The PyRAF Tutorial
http://stsdas.stsci.edu/pyraf/doc.old/pyraf_tutorial/pyraf_tutorial.html

A Quick Tour of Python
http://stsdas.stsci.edu/pyraf/doc.old/python_quick_tour/

12