IRAF (Image Reduction and Analysis Facility)は、国立光学天文台(NOAO)で開発されたソフトウェア群で、ピクセルアレイ形式の天体画像やスペクトルの縮小処理を目的としています。これは主に、 CCDなどのイメージングアレイ検出器から取得したデータです。メインフレームやデスクトップコンピュータの主要なオペレーティングシステムすべてに対応しています。IRAFはクロスプラットフォーム設計で、VMSやUNIX系オペレーティングシステムをサポートしています。以前のバージョンではCygwinによってMicrosoft Windowsでの利用が可能でしたが、現在はWindows Subsystem for Linuxで利用できます。現在では主にmacOSとLinuxで使用されています。
IRAFコマンド(タスクとも呼ばれる)はパッケージ構造に整理されています。IRAFには追加のパッケージを追加できます。パッケージには他のパッケージを含めることができます。NOAOや外部開発者によって提供されるパッケージは多数あり、多くの場合、特定の研究分野や施設に焦点を当てています。
IRAFで利用可能な機能には、画像内の天体のフラックスと位置の較正、検出器ピクセル間の感度変動の補正、複数の画像の合成、スペクトル内の吸収線または放出線の赤方偏移の測定などが含まれます。
IRAFは天文学者の間では依然として非常に人気がありますが、組織的な開発とメンテナンスは停止されました。IRAFは現在、コミュニティソフトウェアとして維持されています。[ 1 ] [ 2 ]
IRAFプロジェクトは1981年秋にキットピーク国立天文台で開始されました。1982年には予備設計とコマンド言語(CL)の最初のバージョンが完成しました。IRAFグループが設立されました。IRAFシステムの設計者であり主任プログラマーはダグ・トディでした。1983年、宇宙望遠鏡科学研究所は、SDASデータ解析システムの環境としてIRAFを選択し、システムをVMSに移植しました。IRAFの最初の内部リリースは1984年でした。いくつかの外部サイトへの限定的な配布の後、最初の一般公開は1987年でした。[ 3 ]
1990年代半ばに、当時見られた問題に対処するために「Open IRAF」プロジェクトが開始されました。これには、言語バインディング、完全なIRAF環境なしでIRAFコンポーネントを使用する方法、新しいデータ型、動的にロード可能なユーザーコードが含まれていました。[ 4 ]このプロジェクトは完了しませんでした。
1990年代末、IRAFの開発はシステムが成熟したとみなされたため大幅に減速した。2005年にユーザーサポートはWebフォーラムに移管され、コアシステムの新規開発は公式に非常に低いレベルにまで縮小された。[ 5 ]しかし、IRAF開発者のボランティア活動は継続され、非公式の中間バージョンがいくつか配布された。[ 6 ]
2006年から2009年にかけて、宇宙科学研究所(日本)でIRAFを64ビットに移植する最初の試みが行われた。[ 7 ]この試みは新しい公式IRAFバージョンには発展しなかったものの、NOAOによる64ビット移植に大きく貢献した。
NOAOは2007年に開発作業を再開し[ 8 ] 、 システムを64ビットに移植し、仮想天文台の機能を追加しました。この段階は2013年にバージョン2.16.1のリリースをもって終了しました。
2017年にソースコードがGitHubに移行されました。Debian向けにIRAFソフトウェアをパッケージ化する取り組みの一環として、残っていた非フリーのソースコードが削除され、それ以降はコミュニティのみによってメンテナンスされています。いくつかのプレリリースを経て、2022年初頭にバージョン2.17がリリースされました。[ 9 ]
2023年、NOIRLab (NOAOの後継組織)は開発を再開し、従来のGeminiデータ処理パイプラインをサポートする範囲に限定した独自のリリース2.18を作成した。 [ 10 ]関連する変更は後にコミュニティリリース2.18に統合された。[ 11 ]
IRAF のライセンスは、一般的にMIT ライセンススキームに従います。古いバージョンには、非フリー ソフトウェアが含まれていました。特に、NCARグラフィックス コードが 2.16 で削除されるまで IRAF の再配布を制限していました。[ 13 ]また、古いバージョンでは、別のライセンスの下でNumerical Recipesブックから取得したコードを使用していました。このコードは、2.16.1 以降のバージョンで削除されるか、オープンソースに置き換えられました。[ 14 ]これにより、Debian [ 15 ]や Ubuntuなどの主流の Linux ディストリビューションで IRAF パッケージを配布できるようになりました。
実行時IRAFシステムは4つの基本コンポーネントで構成されています。[ 16 ]
システムに依存するのはHSIのみです。他のすべてのコンポーネントは、HSIが提供する機能を利用することで移植可能です。そのため、新しいシステムへの移植には、このコンポーネントの変更のみで済みます。しかし、当初の設計は暗黙のうちに32ビットデータ型の普遍的な使用を前提としていたため、64ビットへの移植にはHSIだけでなく、システム全体のすべてのコンポーネントにおいて多大な労力が必要となりました。
アプリケーションパッケージは、サブパッケージとタスクに再帰的に構造化されています。これらは、一般的なシステムおよび基本的なデータ処理ユーティリティと、天文データの削減および解析に特化したパッケージの2つのクラスに分類できます。タスクは主にSPPとCLで記述されています。
システムパッケージはIRAFの基本パッケージに含まれており、CL用のツール、便利なオペレーティングシステムユーティリティ、基本的な科学ユーティリティ、画像処理用ユーティリティなどを提供します。
noaoパッケージは、光学天文学データの解析に使用されます。これらのタスクのほとんどは汎用的なものですが、imredパッケージには特定の観測機器向けのデータ処理タスクも含まれています。重要なパッケージには以下のようなものがあります。

IRAFの強みの一つは、特定の問題を解決したり、特殊なデータ削減パイプラインを実装したりする様々な外部パッケージが存在することでした。パッケージの中には、
しかし、これらのパッケージの多くはもはやメンテナンスされていません。[ 18 ] 64ビットへの移植にもかなりの労力が必要で、すべての外部パッケージが移植されたわけではないため、32ビット環境でのみ使用可能です。
IRAFでは、ユーザーが独自のタスクを作成する方法が主に2つあります。1つはコンパイルされないプロシージャ(コマンド言語、CL)スクリプトを作成する方法です。もう1つはコンパイルされたサブセットプリプロセッサ(SPP)プログラムを使用する方法です。どちらの方法についてもチュートリアルドキュメントが用意されています。[ 19 ]
コマンド言語(CL)は、コンピュータ端末上のユーザーと実行中のアプリケーションプログラムとの間のコマンドおよびランタイムをサポートするインターフェースとして機能します。ユーザーはCLにコマンドを入力すると、CLはコマンドを実行するために必要なタスクやファイル操作を実行します。後のバージョンでは、オリジナルのCLはECLに拡張され、編集可能なコマンドラインが主な利点となっています。仮想天文台(VOCL)への直接アクセスを可能にするバージョンも開発されました。
CL は主にシェルとして機能し、システムやアプリケーションとの連携を組織します。CL が実行できるタスクには、コンパイル済みの IRAF 実行可能ファイルの一部であるネイティブ タスク、スクリプト (CL で記述されたタスクである CL タスク)、および外部タスク (CL によって実行される外部プログラムまたはスクリプト) の 3 種類があります。各タスクには、パラメータ ファイルが存在する場合があります。このファイルには、タスクで使用される各パラメータの説明が含まれており、CL が認識して管理する必要があります。[ 20 ]
以下はCLで書かれたシンプルなHello Worldスクリプトです。
{ print ( 'こんにちは、世界!! ' ) }CL スクリプトには通常、サフィックスが付いており、 Common Lispコード ファイル.clと競合する可能性があります。
サブセットプリプロセッサ言語(SPP)は、IRAFの初期に計画されたIRAFプリプロセッサ言語のサブセットを実装しています。SPP言語はRatfor言語に基づいています。字句形式、演算子、および制御フロー構造は、Ratforが提供するものと同一です。主な違いは、データ型、プロシージャの形式、インライン文字列と文字定数の追加、配列に対する角括弧の使用、およびタスクステートメントです。提供される入出力機能はかなり異なります。[ 21 ]
IRAFに付属するxcプログラムは、SPPプログラムをFortran 66に変換し、そこからf2cを使用してCコードに変換します。
プリプロセッサは、makeのようなビルド自動化ツールであるmkpkg 、汎用型を型依存のソースコードに変換するツールであるgeneric 、およびSPP出力を生成するために修正されたyaccであるxyaccによって補完されます。
以下は、SPPで記述されたシンプルな「Hello World」プログラムです。
task hello # CL呼び出し可能タスクprocedure hello () # 共通プロシージャbegin call printf ( "hello, world \n " ) endSPP プログラムには通常サフィックスが付き、汎用ツール.xで前処理する必要があるものにはサフィックスが付きます。.gx
完全な IRAF 作業環境には、通常、他に 2 つのアプリケーションが必要です。グラフィック ウィンドウを備えた拡張 xterm ウィンドウ (xgterm と呼ばれ、別の x11iraf パッケージで配布されます) と、「イメージ サーバー」と呼ばれる画像表示プログラムです。最も人気のある 2 つのイメージ サーバーは、SAOImageDS9 ( SAO製) とximtool (NOAO 製、こちらも x11iraf パッケージで配布) です。[ 22 ]
xgtermとコマンド言語の代替として、PythonパッケージのPyRAFを使用できます。PyRAFはCLスクリプトをPythonスクリプトに変換できます。また、グラフィックウィンドウ(TkまたはMatplotlibベース)も提供します。コマンドシェルとしては、PythonまたはIPythonコマンドシェル、あるいはCLコマンドシェルの外観と操作感に非常によく似た特別なモードを使用できます。[ 23 ]