SLLIB + SFITSIO ダイジェスト版 HTML マニュアル

使用頻度の高い 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拡張

SFITSIO: fitsccクラス

fitsccクラスは,FITSファイル全体を表現します. オブジェクト内で, fits_imageクラス(Image HDUを表現) または fits_tableクラス(Binar Table or ASCII Table HDUを表現) のオブジェクトを管理します. FITS ファイルとの I/O, HDU を表現するオブジェクトへのアクセス, HDU の追加・削除などを行なうには, このクラスのメンバ関数を使用します.

fitscc クラスは単独のクラスです.継承関係はありません.

クラスヘッダファイルコードnamespace
fitscc #include <sli/fitscc.h> cc sli

メンバ関数一覧

基本機能のためのメンバ関数:

メンバ関数機能
init() オブジェクトの初期化・コピー
read_stream() FITSファイルの読み取り
write_stream() FITSファイルへの書き出し
access_stream() コマンド経由でのFITSファイルの読み書き
read_template() テンプレートファイルの読み取り
stream_length() 出力される非圧縮FITSファイルのバイト長を取得
index(), indexf() 指定された HDU 名に対応する HDU 番号を返す
hdu(), hdu_cs() 自身が管理している fits_hdu オブジェクトへの参照を返す
image(), image_cs() 自身が管理している fits_image オブジェクトへの参照を返す
table(), table_cs() 自身が管理している fits_table オブジェクトへの参照を返す
hdutype() HDU の種別(FITS::IMAGE_HDU,FITS::BINARY_TABLE_HDU 等)を取得
hduname() HDU の名前(EXTNAME)を取得
assign_hduname() HDU の名前(EXTNAME)を設定
hduver_is_set() HDU のバージョン(EXTVER)がセットされているかを返す
hduver() HDU のバージョン(EXTVER)を取得
assign_hduver() HDU のバージョン(EXTVER)を設定

HDUの編集のためのメンバ関数:

メンバ関数機能
append_image() Image HDU の追加
append_table() ASCII Table または Binary Table HDU の追加
insert_image() Image HDU の挿入
insert_table() ASCII Table または Binary Table HDU の挿入
erase() HDU の削除

基本機能のためのメンバ関数

init()

fitscc &init();
fitscc &init( const fitscc &obj );

オブジェクトの内容すべて破棄し,初期化し ます. 引数が指定されている場合は,オブジェクト objの 内容をすべて自身にコピーします.

返り値
自身の参照

read_stream()

ssize_t read_stream( const char *path );            ... 1
ssize_t readf_stream( const char *path_fmt, ... );  ... 2

path で指定されたファイルあるいは URL(file://http://ftp://に対応) からFITSファイルを読み込み,内容すべてまたは 一部 をオブジェクトに取り込みます.

pathのファイル名,httpサーバから得たMIMEヘッダから判断 して,必要な場合はzlib,bzlib経由で読み込みを行ないます (これは,SLLIBのdigeststreamioクラス で行なっています). ftpサーバから読み込む場合は,pathftp://username:password@hostname/… の書式で,ユーザ名とパスワードを設定できます. ユーザ名とパスワードを設定しない場合は, 匿名(anonymous)でアクセスします.

引数path"image.fits.gz[1:100,*]" のような文字列を与えてFITSファイルの部分読み出し(画像・テーブルに対応) を行なう場合の […] 内の文法については, FITSファイルの部分読み出し機能の解説 をご覧ください. SFITSIOの部分読み出し機能では, FITSファイルの内容すべてをメモリに取り込む事はなく, ディスクのシーケンシャルリードと順方向のシーク(可能な場合)により実現しています. したがって,メモリに載らないような巨大なFITSファイルでも (圧縮ファイルであっても), 必要な部分を読み出す事ができます.

readf_stream()メンバ関数の場合, path_fmt以降の引数をlibcの printf()のそれと同様に指定します.

返り値
非負の値: 読み込んだストリームのバイトサイズ(圧縮ファイルの場合は展開後のサイズ)
負の値(エラー): ファイルが見つからないなど,ストリームの読み込みに失敗した場合.

write_stream()

ssize_t write_stream( const char *path );            ... 1
ssize_t writef_stream( const char *path_fmt, ... );  ... 2

オブジェクトの内容すべてを path で指定されたファイルへ書き出します.

pathのファイル名から判断して, 必要な場合はzlib,bzlib経由で書き込みを行ないます (これは,SLLIBのdigeststreamioクラス で行なっています). ftpサーバへ書き込む場合は,pathftp://username:password@hostname/… の書式で,ユーザ名とパスワードを設定できます. ユーザ名とパスワードを設定しない場合は, 匿名(anonymous)でアクセスします.

writef_stream()メンバ関数の場合, path_fmt以降の引数をlibcの printf()のそれと同様に指定します.

返り値
非負の値: 書き込んだストリームのバイトサイズ(圧縮ファイルの場合は圧縮前のサイズ)
負の値(エラー): パーミッションに問題がある場合などの理由で, ストリームの書き込みに失敗した場合.

access_stream()

ssize_t access_stream( const char *path );
ssize_t accessf_stream( const char *path_fmt, ... );

これらのメンバ関数の引数は, スクリプト言語Perlのopen()のそれに似ており, pathあるいはpath_fmtがファイルやURLを 示している場合はそれに対して読み込みか書き込みを行ないます. また,コマンドを示している場合はそれを実行し,パイプで接続して, パイプ経由で読み込みか書き込みを行ないます (これは,SLLIBのdigeststreamioクラス で行なっています).

読み込みか書き込みかは,pathあるいはpath_fmtが ファイルやURLを示している場合は, "< infile.fits""> outfile.fits" のように 「<」あるいは「>」をつけて表現します. 「<」がある場合は読み込みを行ない(EXAMPLE-1参照), 「>」がある場合は書き込みを行ないます. 「<」「>」の指定が無い場合は, 読み込みを行ないます. 圧縮されたファイル(gzipかbzip2形式)が指定された場合, 自動的に圧縮・伸長します.

pathあるいはpath_fmtが コマンドを示している場合, "command |""| command" のように, 「|」をpathの最後か先頭につけて表現します. 「|」がpathの最後につけられている場合は, 指定したコマンドを実行してパイプで接続し, そのコマンドの標準出力からの出力を FITSファイルの内容として読み込みます:

    fitscc fits;
    r_size = fits.accessf_stream("wget -O - %s | gzip -dc |",
                                 "https://foo/secret.fits.gz");

|」がpathの先頭につけられている場合は, 指定したコマンドを実行してパイプで接続し, このコマンドに対して FITSファイルの内容を書き出します. pathあるいはpath_fmtがコマンドの場合, 「/bin/sh -c コマンド」の形で実行しますので, pathにはパイプやリダイレクトの記号 (|,<,>)を含む事ができます.

引数path"image.fits.gz[1:100,*]" のような文字列を与えてFITSファイルの部分読み出し(画像・テーブルに対応) を行なう場合の […] 内の文法については, FITSファイルの部分読み出し機能の解説 をご覧ください.

accessf_stream()メンバ関数の場合, path_fmt以降の引数をlibcの printf()のそれと同様に指定します.

返り値
非負の値: 読み書きしたストリームのバイトサイズ(圧縮ファイルの場合は圧縮前のサイズ)
負の値(エラー): ファイルが見つからないなど,ストリームの読み込みに 失敗した場合,やパーミッションに問題がある場合などの理由で, ストリームの書き込みに失敗した場合

read_template()

ssize_t read_template( const char *path );
ssize_t readf_template( const char *path_fmt, ... );

pathで指定されたパスあるいは URL(file://http://ftp://に対応) から FITSテンプレート (SFITSIO: FITSテンプレート を参照) を読み込み, その内容に従ってfitsccオブジェクトを新規に作成します. pathのファイル名,httpサーバから得たMIMEヘッダから判断 して,必要な場合はzlib,bzlib経由で読み込みを行ないます. ftpサーバから読み込む場合は,pathftp://username:password@hostname/… の書式で,ユーザ名とパスワードを設定できます. ユーザ名とパスワードを設定しない場合は, 匿名(anonymous)でのアクセスとなります.

readf_template()メンバ関数の場合, path_fmt以降の引数をlibcの printf()のそれと同様に指定します.

返り値
0: 正常終了
負の値(エラー): ファイルが見つからないなど,ストリームの読み込みに失敗した場合.

stream_length()

ssize_t stream_length();

システムヘッダ(NAXISなど,SFITSIO側で自動的に整備されるFITSヘッダ項目)を再編し, write_stream()で書き出されるファイルサイズを返します.

返り値
非負の値: ストリームへ書き出されるサイズ
負の値(エラー): エラーが発生した場合(debugモードのみ)

index(), indexf()

long index( const char *name ) const;
long indexf( const char *fmt, ... ) const;

HDU名 name の番号を返します. "Primary" だけは特別で, ヘッダキーワードEXTNAMEが設定されていない場合でも, プライマリHDUが存在すれば,常に0番を返します.

見つからない場合は,負の値を返します.

name_fmt以降の引数は, libcのprintf()のそれと同様に指定可能です.


hdu(), hdu_cs()

fits_hdu &hdu( long index );                          ... 1
fits_hdu &hdu( const char *hduname );                 ... 2
const fits_hdu &hdu( long index ) const;              ... 3
const fits_hdu &hdu( const char *hduname ) const;     ... 4
const fits_hdu &hdu_cs( long index ) const;           ... 5
const fits_hdu &hdu_cs( const char *hduname ) const;  ... 6

HDU番号 index または HDU名 hduname に対応する内部 fits_hdu オブジェクトへの参照を返します. メンバ関数3〜6は読み取り専用です.

これらのメンバ関数で取得した fits_hdu オブジェクトへの参照を経由し, ヘッダ情報とそれに基いた情報にアクセスします. これらのメンバ関数はどのタイプのHDUに対しても使えますが, 画像やテーブルのデータへアクセスする事はできません.

指定されたHDUが存在しない場合,メンバ関数1,2では 新規Image HDUが作られ,メンバ関数3〜6では例外を発生します.

返り値
内部 fits_hdu オブジェクトへの参照
注意
Image HDUを表現する fits_imageクラス および,Binary/ASCII Table HDUを表現する fits_tableクラス は,一般のHDUを表現する fits_hduクラス を継承しています.

image(), image_cs()

fits_image &image( long index );                          ... 1
fits_image &image( const char *hduname );                 ... 2
const fits_image &image( long index ) const;              ... 3
const fits_image &image( const char *hduname ) const;     ... 4
const fits_image &image_cs( long index ) const;           ... 5
const fits_image &image_cs( const char *hduname ) const;  ... 6

HDU番号 index または HDU名 hduname に対応する内部 fits_image オブジェクトへの参照を返します. メンバ関数3〜6は読み取り専用です.

これらのメンバ関数はImage HDUに対して使用します. 取得した fits_image オブジェクトへの参照を経由し, ヘッダや画像データへアクセスします.

指定されたImage HDUが存在しない場合,メンバ関数1,2では 新規Image HDUが作られ,メンバ関数3〜6では例外を発生します.

返り値
内部 fits_image オブジェクトへの参照
注意
Image HDUを表現する fits_imageクラス は,一般のHDUを表現する fits_hduクラス を継承しています.

table(), table_cs()

fits_table &table( long index );                          ... 1
fits_table &table( const char *hduname );                 ... 2
const fits_table &table( long index ) const;              ... 3
const fits_table &table( const char *hduname ) const;     ... 4
const fits_table &table_cs( long index ) const;           ... 5
const fits_table &table_cs( const char *hduname ) const;  ... 6

HDU番号 index または HDU名 hduname に対応する内部 fits_table オブジェクトへの参照を返します. メンバ関数3〜6は読み取り専用です.

これらのメンバ関数はBinary Table HDU または ASCII Table HDU に対して使用します. 取得した fits_table オブジェクトへの参照を経由し, ヘッダやテーブルのデータへアクセスします.

指定された Binary Table HDU または ASCII Table HDU が存在しない場合, メンバ関数1,2では 新規Binary Table HDUが作られ,メンバ関数3〜6では例外を発生します.

返り値
内部 fits_table オブジェクトへの参照
注意
Binary/ASCII Table HDUを表現する fits_tableクラス は,一般のHDUを表現する fits_hduクラス を継承しています.

hdutype()

int hdutype( long index ) const;
int hdutype( const char *name ) const;

index または name で指定された HDUの種別 を返します.返る値は, FITS::IMAGE_HDUFITS::ASCII_TABLE_HDUFITS::BINARY_TABLE_HDU のいずれかです.


hduname()

const char *hduname( long index ) const;

indexで指定されたHDUの名称 (ヘッダのEXTNAMEキーワードの値) を返します. 設定されていない場合は,NULLを返します.

返される値はオブジェクト内部バッファのアドレスですから, オブジェクトが破棄されたり, 名称が変更された場合は無効になります.


assign_hduname()

fitscc &assign_hduname( long index, const char *name );

indexで指定されたHDUの名称 (ヘッダのEXTNAMEキーワードの値) を変更します.

Primary HDUの場合も指定可能です.

返り値
自身の参照

hduver_is_set()

bool hduver_is_set( long index ) const;
bool hduver_is_set( const char *name ) const;

index または name で指定されたHDUのバージョン番号 (ヘッダのEXTVERキーワードの値) が設定されているか判定します.

返り値
HDUのバージョン番号が設定されていればtrue, そうでなければfalse

hduver()

long long hduver( long index ) const;
long long hduver( const char *name ) const;

index または name で指定されたHDUのバージョン (ヘッダのEXTVERキーワードの値) を返します.


assign_hduver()

fitscc &assign_hduver( long index, long long ver );

indexで指定されたHDUのバージョン番号 (ヘッダのEXTVERキーワードの値) を変更します.

Primary HDUの場合も指定可能です.

返り値
自身の参照

HDUの編集のためのメンバ関数

append_image()

fitscc &append_image( const char *hduname, long long hduver );
fitscc &append_image( const char *hduname, long long hduver,
                      int type, long naxis0 = 0, long naxis1 = 0, long naxis2 = 0 );
fitscc &append_image( const char *hduname, long long hduver,
                      int type, long naxisx[], long ndim, bool init_buf );
fitscc &append_image( const char *hduname, long long hduver,
                      const fits_image &src );
fitscc &append_image( const fits_image &src );

Image HDUを追加します. 引数hdunameは,HDUの名前を指定し, hduverはそのバージョンを指定します. これらの値はFITSヘッダのEXTNAMEEXTVER に反映されます. 引数hdunameNULLを指定すると, この機能を無効にできます.

typeには 画像のデータ型 として FITS::DOUBLE_TFITS::FLOAT_TFITS::LONGLONG_TFITS::LONG_TFITS::SHORT_TFITS::BYTE_T のいずれかを指定します.

naxis0naxis1naxis2はそれぞれ, 軸 x, y, z のピクセル数を指定します. naxis1naxis2は省略可能で, naxis0だけを指定した時は一次元, naxis1までを指定した時は二次元となります. 三次元を越える場合や画像バッファを初期化したくない場合は, 各軸のピクセル数を配列naxisxに, 次元数をndimに, 画像バッファの初期化実施の有無をinit_bufに 指定します.

自身にImage HDUを追加し,既存のImage HDUの内容をそこにコピーする場合は, コピー元としてsrcを指定します.

返り値
自身の参照

append_table()

fitscc &append_table( const char *hduname, long long hduver,
                      bool ascii = false );
fitscc &append_table( const char *hduname, long long hduver,
                      const fits::table_def defs[], bool ascii = false );
fitscc &append_table( const char *hduname, long long hduver,
                      const fits_table &src );
fitscc &append_table( const fits_table &src );

Ascii Table HDU または Binary Table HDU を追加します. 引数 asciitrue の場合は, Ascii Table HDU を追加します. 引数hdunameは,HDUの名前を指定し, hduverはそのバージョンを指定します. これらの値はFITSヘッダのEXTNAMEEXTVERに 反映されます. 引数 hdunameNULL を指定すると,この機能を無効にできます.

構造体の配列 defs で,アスキーテーブルまたはバイナリテーブルの定義を与えます. fits::table_def構造体のメンバは次のようになっています:

    typedef struct {
        const char *ttype;          /* カラム名 */
        const char *ttype_comment;
        const char *const *talas;   /* カラム名の別名 */
        const char *const *telem;   /* 要素名 */
        const char *tunit;          /* 物理単位 */
        const char *tunit_comment;
        const char *tdisp;          /* ディスプレイフォーマット */
        const char *tform;          /* カラムの型 */
        const char *tdim;           /* 配列の指定 */
        const char *tnull;          /* ブランクの値 */
        const char *tzero;          /* ゼロ点 */
        const char *tscal;          /* スケーリングファクター */
    } fits::table_def;

わかりやすさのため, この構造体のメンバ名はバイナリテーブルのヘッダのキーワード名を そのまま使っています. バイナリテーブルの場合は,それぞれのメンバに TTYPEnTFORMn 等の値をそのまま代入すれば良いようになっています.

一方,アスキーテーブルの場合は,この構造体のメンバ名は ヘッダのキーワード名と一対一になっていないので注意してください. まず,メンバ tformには,必ず数字+「A」の形で カラムの文字列の長さを "16A" のように指定します(ただし, "120A10" のような指定はできません). また,telemtdimの指定は無意味です. tdispには,アスキーテーブルの TFORMn の指定を与え, これはSFITSIOのメンバ関数の引数の値(数値または文字列)を アスキーテーブルに書き込む時に, 引数の値から文字列に変換するフォーマットとして利用されます. 指定できる形式は, AwIwFw.dEw.dDw.d のいずれかです.

指定が不要な項目は,NULL"" を代入します. 配列 defs の最後では,すべてのメンバがNULLになっている必要があります.

自身に Binary Table HDU または ASCII Table HDU を追加し, 既存の Binary Table HDU または ASCII Table HDU の内容をそこにコピーする場合は, コピー元としてsrcを指定します.

テンプレート機能 (read_template()SFITSIO: FITSテンプレート を参照) を使うと,新規のバイナリテーブルをテキストファイルで定義でき, 様々な場面で柔軟に対応できます.

返り値
自身の参照

insert_image()

fitscc &insert_image( long index0, 
                      const char *hduname, long long hduver );
fitscc &insert_image( const char *hduname0,
                      const char *hduname, long long hduver );
fitscc &insert_image( long index0,
                      const char *hduname, long long hduver,
                      int type, long naxis0 = 0, long naxis1 = 0, long naxis2 = 0 );
fitscc &insert_image( const char *hduname0,
                      const char *hduname, long long hduver,
                      int type, long naxis0 = 0, long naxis1 = 0, long naxis2 = 0 );
fitscc &insert_image( long index0,
                      const char *hduname, long long hduver,
                      int type, long naxisx[], long ndim, bool init_buf );
fitscc &insert_image( const char *hduname0,
                      const char *hduname, long long hduver,
                      int type, long naxisx[], long ndim, bool init_buf );
fitscc &insert_image( long index0,
                      const char *hduname, long long hduver, 
                      const fits_image &src );
fitscc &insert_image( const char *hduname0,
                      const char *hduname, long long hduver,
                      const fits_image &src );
fitscc &insert_image( long index0, const fits_image &src );
fitscc &insert_image( const char *hduname0, const fits_image &src );

index0 または hduname0 で指定されたHDUの前に Image HDU を挿入します.

引数 index0 または hduname0 より後の引数の仕様は, append_image()メンバ関数の場合と同様です.

返り値
自身の参照

insert_table()

fitscc &insert_table( long index0, 
                      const char *hduname, long long hduver, bool ascii=false );
fitscc &insert_table( const char *hduname0, 
                      const char *hduname, long long hduver, bool ascii=false );
fitscc &insert_table( long index0,
                      const char *hduname, long long hduver,
                      const fits::table_def defs[],
                      bool ascii = false );
fitscc &insert_table( const char *hduname0,
                      const char *hduname, long long hduver,
                      const fits::table_def defs[],
                      bool ascii = false );
fitscc &insert_table( long index0,
                      const char *hduname, long long hduver,
                      const fits_table &src );
fitscc &insert_table( const char *hduname0,
                      const char *hduname, long long hduver,
                      const fits_table &src );
fitscc &insert_table( long index0, const fits_table &src );
fitscc &insert_table( const char *hduname0, const fits_table &src );

index0 または hduname0 で指定されたHDUの前に Ascii Table HDU または Binary Table HDU を挿入します. ただし,Primary HDUの前に挿入する事はできません.

index0 または hduname0 より後の引数の仕様は, append_table() の場合と同様です.

返り値
自身の参照

erase()

fitscc &erase( long index );
fitscc &erase( const char *hduname );

index または hduname で指定されたHDUを削除します.

ただし,Primary HDU の次のHDUが Image HDU ではない場合, Primary HDU を削除する事はできません.

返り値
自身の参照