SFITSIO-1.4.0 / SLLIB-1.4.0 の紹介

2013年3月 広島大学 談話会 資料

山内@国立天文台 天文データセンター


本談話会の内容



CREDITS

SLLIB,SFITSIO は宇宙研の赤外の皆様,宇宙研のデータセンターの皆様の 貴重な協力と支援のもので開発されてきたソフトウェアです.

特に宇宙研のデータセンターでは,これらのソフトウェアの価値に 多大なるご理解をいただき, 優秀な人材と多額な資金を惜しみなく SLLIB と SFITSIO の開発 (試験・マニュアル作成・翻訳) に投入してくださいました.

感謝を表明したいと思います.


イントロダクション --- SFITSIO,SLLIB とは?

データセンター・解析プロジェクトなどでの業務や, 真面目にデータ解析を行ないたい天文学者のための, 「FITS I/O 環境」と「スクリプト言語のようなプログラミング言語環境」を提供する, C/C++ のライブラリ・セット.

メモリ管理,配列の選択・コピーなどの 「相対的に科学と距離のある部分」に関する数々の無駄な労力を除去し, プログラマが 科学の本質部分のコーディングに集中でき, 「正しさ」と「透明さ」を保ちつつ, 高いパフォーマンスを狙える開発環境 の整備を目的としている.

SFITSIO -- FITS I/O ライブラリ

SLLIB -- 科学用途の言語環境

SFITSIO,SLLIBに共通


イントロダクション --- SFITSIO,SLLIB 開発の動機

開発のキッカケ(問題提起)

C++標準ライブラリをみてみると,これまた失望する事に…

C++の言語仕様は優れているのだが…

では,スクリプト言語はどうか?

スクリプト言語にも長所と短所があり, C/C++ に対する需要は無くなりそうにない.

C/C++環境のイマイチの現状を改善するには…

次の2つを作れば良さそうである:


SFITSIO,SLLIB の開発方針

どんなライブラリを目指しているか?

技術的な方針


最新安定版 SFITSIO-1.4.0,SLLIB-1.4.0 の現状

SFITSIO-1.4.0,SLLIB-1.4.0 に共通する特徴

SFITSIO-1.4.0 の主な特徴

SLLIB-1.4.0 の主な特徴

ソフトウェア品質

速度性能

SLLIB,SFITSIOを利用・検討しているプロジェクト

宇宙研ではすでにアーカイブの業務や衛星プロジェクトでの基幹システムにて, 採用実績を有する.


SFITSIO, SLLIB を使うと,開発手順はこうなる

即,本質的なところからコーディングを開始


SLLIB を使ったコードの例

ストリーム

ヘッダ

#include <sli/stdstreamio.h>
#include <sli/digeststreamio.h>
他

使用例


文字列

ヘッダ

#include <sli/tstring.h>

使用例


文字列配列

ヘッダ

#include <sli/tarray_tstring.h>

使用例


多次元配列

内部では単純な1次元バッファを持つ. メンバ関数の引数は 0-indexed である.

基底クラス「mdarray」

型も配列長も可変だが, 型に依存したメンバ関数が使えない.

継承クラス「mdarray_int」「mdarray_float」「mdarray_double」など

通常はこちらを使う. 型が固定である事以外のデメリットはない. 異なる型どおしでも,演算が可能.

ヘッダ

#include <sli/mdarray.h>             /* mdarrayクラスとその継承クラス */
#include <sli/mdarray_statistics.h>  /* 統計用の関数 */
#include <sli/mdarray_math.h>        /* 配列に対する数学関数 */

使用例


SFITSIO を使ったコードの例

画像,テーブル,ヘッダ,HDUとも, メンバ関数の引数は常に 0-indexed である (ファイル読み取り時の範囲指定時のみ,1-indexed でも記述可能).

ヘッダ

#include <sli/fitscc.h>
#include <sli/fits_image_statistics.h>

典型的な使い方


新規 FITS を作るのに便利な「FITSテンプレート」

「FITSテンプレート」とは,新規 FITS の元となる, FITSヘッダのようなテキストファイルである. SFITSIO は,曖昧な FITS テンプレートから, 正しい FITS を生成してくれる.


ヘッダだけの高速読み取り

データセンターなどでは,大量の FITS ファイルを管理するために, FITS ヘッダを高速に読み取る必要がある.

FITS ヘッダをマネージするための fits_header クラスが持つ read_stream() を使えば, Data Unit を読まずにファイルへのアクセスを終了する事が可能. もちろん,圧縮ファイルでも高速アクセスが可能.


今後の予定


おねがい


まとめ


おまけ: SIMD命令について