使用頻度の高い API について,主要な内容を記述した, ビギナー向けのリファレンスマニュアルです.
SLLIB クラス: | ストリーム / 文字列 / 文字列配列 / 文字列連想配列 / 多次元配列 |
SLLIB クラス用関数: | 多次元配列用の統計用関数 / 多次元配列用の数学関数 / 多次元配列用の複素関数 |
SLLIB クラス以外: | 定数・型の定義 / C99互換の複素数・複素関数 |
SFITSIO クラス: | fitscc / fits_hdu / fits_image / fits_table / fits_table_col / fits_header / fits_header_record |
SFITSIO クラス以外: | 関数 / 定数・型の定義 / FITSファイルの部分読み出し機能 / FITSテンプレート / 規約外FITS拡張 |
fitsccクラス
の
read_stream()
または
access_stream()
では,次のコードのようにIRAF風の表記により n次元の画像や
テーブルの一部分だけを読み出す事が可能です.
sz = fits.read_stream("image.fits.gz[1:100,*]");
特定のHDUだけを読み取る事も可能で,これにより, 途中から不正なデータが現れるFITSファイルや, 非標準な規約のHDUが追加されているFITSファイルも,その一部分を読み取る事ができます.
この部分読み出し機能では,FITS ファイルの内容すべてをメモリに取り込む事はなく, ディスクのシーケンシャルリードと順方向のシーク(可能な場合)により実現しています. したがって, メモリに載らないような巨大な FITS ファイルでも(圧縮ファイルであっても), 必要な部分を読み出す事ができます.
SFITSIOでは,IRAF/CFITSIOの場合と同様の記法と, SFITSIOで新たに定義した「より論理的な」記法の, 2通りをサポートしています.
元のFITSファイル中の複数のHDUの中から,1つのHDUを選び, 画像の一部を読み取る指定が可能です.典型的には次のような形です.
sz = fits.read_stream("image.fits.gz[1][1:100,*]");
この記法による表現は,SFITSIO内部でこの後で解説する
SFITSIO公式の記法に変換され,FITSファイルの部分読みが実行されます.
上記の例の場合,ファイル名を含む引数は
"image.fits.gz[1[1:100,*]]"
と変換されます.
この後で解説しますが,画像の領域指定の部分については,
画像の反転「"[100:1,*]"
」「"[-*,*]"
」,
0-indexedを示す丸括弧「"(0:99,*)"
」も,IRAF/CFITSIO的な記法でも
使う事ができます.
SFITSIO公式の記法では,より論理的で現代的な表現となっており, 従来できなかった複数のHDUの選択が可能になっています.
[
」「]
」のペアは
一組だけとし,[]
の中にセミコロン区切りで
複数のHDUに関する指定を書く.
myfile.fits[HDU指定A; HDU指定B; ... HDU指定Z]
[]
か ()
で
画像の領域またはテーブルの領域を指定できる.
myfile.fits[HDU指定A[1-indexedによる領域指定]; ...] myfile.fits[HDU指定A(0-indexedによる領域指定); ...]
*
」と書いても良い.なお,指定可能な次元数に制限は無い.
myfile.fits[HDU指定A[開始点:終了点,*, ...]; ...]
::
」で区切る.
myfile.fits[HDUタイプ::HDU名::HDUバージョン[...]; ...]HDUのタイプは「
i
」「b
」「a
」で
それぞれImage,バイナリテーブル,ASCIIテーブルを意味する.::
」で区切られた要素が2つの場合は,
HDUタイプが省略されたものとみなす.
{
n}
」で
読むべきHDUの数を限定できる.
EXTNAME
の値文字列か数字(常に0-indexed)で指定する.
名前指定の場合,シェルのマッチと同一の動作となる.
:
B」
において B <
A の場合,
あるいは範囲指定の表記が「-*
」の場合,
オブジェクト内の要素順は逆転する.
myfile.fits[0;1;4]
myfile.fits[-2]
myfile.fits[EVENT*]
myfile.fits[EVENT*{2}]
myfile.fits[b::*::*]
myfile.fits[1[1:100,*]] myfile.fits[1(0:99,*)]
myfile.fits[1[100:1,*]] myfile.fits[1[-*,*]]
myfile.fits[0(*,*,0)]
myfile.fits[EVENT[1:10,1:100]] myfile.fits[EVENT(0:9,0:99)] myfile.fits [EVENT [TIME;*TEMP*, 1:100] ]