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: fits_tableクラス

fits_tableクラスは,ASCII Table HDU または Binary Table HDU を表現します. fits_hduクラス を継承し,オブジェクト内で fits_headerクラス(FITSヘッダ全体を表現), fits_table_colクラス(テーブルのカラムを表現) mdarrayクラス(バイナリテーブルのヒープ) のオブジェクトを管理します.

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

メンバ関数一覧

HDUやヘッダに関するメンバ関数:

メンバ関数機能
fits_hduクラスのメンバ関数 がそのまま使えます.
init() オブジェクトの初期化・コピー
swap() 2つのオブジェクト間での内容のスワップ
copy() 自身の内容を指定オブジェクトへコピー
ascii_to_binary() アスキーテーブルをバイナリテーブルに変換

カラム情報用ヘッダレコードの操作に関するメンバ関数:

メンバ関数機能
col_header(), col_header_cs() カラムの定義のヘッダレコードへの参照を取得
col_header_index() 指定されたカラム定義のヘッダレコードの番号を返す
update_col_header() カラムの定義のヘッダレコードの更新
erase_col_header() カラムの定義のヘッダレコードの削除
rename_col_header() ユーザ定義のカラム用ヘッダキーワードの名前
sort_col_header() カラム用ヘッダキーワードをカラム順にソート
user_col_keywords() ユーザ定義のカラムキーワードのポインタ配列を取得
is_user_col_keyword() 引数のキーワードがユーザ定義のカラムキーワードかどうかを返す
append_a_user_col_keyword() ユーザ定義のカラムキーワードを1つ追加
erase_a_user_col_keyword() ユーザ定義のカラムキーワードを1つ削除

カラム(列)の操作に関するメンバ関数:

メンバ関数機能
col(), col_cs() 自身が管理している fits_table_colオブジェクトへの参照を返す
col_index() カラム名からカラムの番号を取得
col_name() カラムの番号からカラム名を取得
col_length() カラム(列)の長さを返す
assign_col_name() カラム名を設定
assign_null_svalue() NULL文字列の設定
append_cols() カラムの追加
insert_cols() カラムの挿入
erase_cols() カラムの消去
swap_cols() カラムの入れ替え
append_a_col() 1個のカラムを追加
insert_a_col() 1個のカラムの挿入
erase_a_col() 1個のカラムの消去
put_a_col() 1個のカラムの上書き
define_a_col() カラムの定義の変更

ロウ(行)の操作に関するメンバ関数:

メンバ関数機能
row_length() ロウ(行)の長さを返す
resize_rows() テーブル行数の変更
append_rows() 新しい行の追加
insert_rows() 新しい行の挿入
erase_rows() 行の消去
clean_rows() 全ての行のセルの値を初期化(デフォルト値をセット)
move_rows() テーブルの行から行へのコピー
swap_rows() 行と行との入れ替え
flip_rows() 行の順序の反転
import_rows() テーブルのインポート

可変長配列のヒープの操作に関するメンバ関数(低レベル):

メンバ関数機能
heap_length() ヒープ領域のバイト長を返す
resize_heap() ヒープ領域のサイズを変更
get_heap() 可変長配列用のヒープデータを外部バッファへコピー
put_heap() 外部バッファのデータを可変長配列用のヒープ領域にコピー
reverse_heap_endian() ヒープ領域の一部のバイトオーダを反転
heap_ptr(), heap_ptr_cs() ヒープ領域の先頭アドレスを返す
heap_array_cs() ヒープ領域を管理するmdarrayオブジェクトの参照を返す (読み取りのみ)
reserved_area_length() Data Unit中の予約領域(Reserved Area)のバイトサイズを返す
resize_reserved_area() Data Unit中の予約領域(Reserved Area)のバイト長を変更

HDUやヘッダに関するメンバ関数

init()

fits_table &init();
fits_table &init( const fits_table &obj );
fits_table &init( const fits::table_def defs[] );

ヘッダとテーブルの内容を初期化します.

obj が指定された場合は,その内容をコピーします. defs が指定されば場合には,それに従って カラムを作成します.

配列 defs[] の最終要素のメンバはすべて NULL でなければなりません.

fits::table_defの定義については, バイナリテーブル・ASCIIテーブルを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

swap()

fits_table &swap( fits_table &obj );

自身と obj との中身を交換します.

返り値
自身の参照

copy()

void copy( fits_table *dest ) const;

自身の内容を dest で示されたオブジェクトにコピーします.


ascii_to_binary()

fits_table &ascii_to_binary();

当該テーブルがアスキーテーブルの属性となっていた場合, 属性をバイナリテーブルに変換します.

属性をバイナリテーブルにすると, FITSファイル上のアスキーテーブルの TFORMn の値(fits::table_def構造体tdispメンバの値)は, バイナリテーブルとして保存される時には TFORMn のコメント部分に保存されます.

TNULLn の値も,TNULLn のコメント部分に保存されます(値は未定義となります).

返り値
自身の参照

カラム情報用ヘッダレコードの操作に関するメンバ関数

col_header(), col_header_cs()

fits_header_record &col_header( const char *col_name, const char *kwd );
fits_header_record &col_header( long col_index, const char *kwd );
const fits_header_record &col_header( const char *col_name, 
                                      const char *kwd ) const;
const fits_header_record &col_header( long col_index, 
                                      const char *kwd ) const;
const fits_header_record &col_header_cs( const char *col_name, 
                                         const char *kwd ) const;
const fits_header_record &col_header_cs( long col_index, 
                                         const char *kwd ) const;

kwd で指定されたカラムキーワードの プレフィックス(例: TTYPE)を持つヘッダレコードのうち, col_index あるいは col_name で示されたカラムに対応するヘッダレコードオブジェクトへの参照を返します.

.col_header() に続くメンバ関数として, .svalue().dvalue().lvalue() 等が使えます. これらについては, fits_header_recordクラス を参照してください.

返り値
内部 fits_header_record オブジェクトへの参照

col_header_index()

long col_header_index( const char *col_name, const char *kwd ) const;
long col_header_index( long col_index, const char *kwd ) const;

kwd で指定されたカラムキーワードのプレフィックス (例: TTYPE)を持つヘッダレコードのうち, col_index あるいは col_name で示されたカラムに対応するヘッダレコードの番号を返します.


update_col_header()

fits_table &update_col_header( const char *col_name, 
                               const char *kwd, const char *val, const char *com );
fits_table &update_col_header( long col_index, 
                               const char *kwd, const char *val, const char *com );

kwd で指定されたカラムキーワードのプレフィックス (例: TTYPE)を持つヘッダレコードのうち, col_index あるいは col_name で示されたカラムに対応するヘッダレコードを更新し, 同時にオブジェクト内部の管理情報も更新します.

返り値
自身の参照

erase_col_header()

fits_table &erase_col_header( const char *col_name, const char *kwd );
fits_table &erase_col_header( long col_index, const char *kwd );

kwd で指定されたカラムキーワードの プレフィックス(例: TTYPE)を持つヘッダレコードのうち, col_index あるいは col_name で示されたカラムに対応するヘッダレコードを削除します. 同時にオブジェクト内部の管理情報も更新します.

返り値
自身の参照

rename_col_header()

fits_table &rename_col_header( const char *old_kwd, const char *new_kwd );

ユーザ定義のカラム用ヘッダレコードのキーワードプレフィックス (ヘッダの TXFLDKWD の値(csv形式)に保存されている文字列値) の1つを, old_kwd から new_kwd へ名前を変更します. FITS規約で定められたキーワード(TTYPE等)については 変更できません.

返り値
自身の参照

sort_col_header()

fits_table &sort_col_header();

すべてのカラム用ヘッダレコードを,カラム順にソートします.

返り値
自身の参照

user_col_keywords()

const char *const *user_col_keywords() const;        ... 1
const tarray_tstring &user_col_keywords_cs() const;  ... 2

メンバ関数1は,ユーザ定義のカラムキーワードのポインタ配列(読み取り専用)を返します.

メンバ関数2は, ユーザ定義のカラムキーワードを保存している文字列配列オブジェクトの参照(読み取り専用)を返します.

返される文字列配列には, ヘッダの TXFLDKWD の値(csv形式)に保存される文字列が格納されています.


is_user_col_keyword()

bool is_user_col_keyword( const char *kwd ) const;

引数のキーワードがユーザ定義のカラムキーワードかどうか (ヘッダの TXFLDKWD の値(csv形式)に存在するか) を返します.


append_a_user_col_keyword()

fits_table &append_a_user_col_keyword( const char *kwd );

ユーザ定義のカラムキーワード(TLMAXTLMIN等)を1つ追加します. 指定されたキーワードプレフィックスは ヘッダの TXFLDKWD の値(csv形式)に追加されます.


erase_a_user_col_keyword()

fits_table &erase_a_user_col_keyword( const char *kwd );

ユーザ定義のカラムキーワード(TLMAXTLMIN等)を1つ削除します. 指定されたキーワードプレフィックスは ヘッダの TXFLDKWD の値(csv形式)から削除されます.


カラム(列)の操作に関するメンバ関数

col(), col_cs()

fits_table_col &col( long col_index );                        ... 1
fits_table_col &col( const char *col_name );                  ... 2
fits_table_col &colf( const char *fmt, ... );                 ... 3
const fits_table_col &col( long col_index ) const;            ... 4
const fits_table_col &col( const char *col_name ) const;      ... 5
const fits_table_col &colf( const char *fmt, ... ) const;     ... 6
const fits_table_col &col_cs( long col_index ) const;         ... 7
const fits_table_col &col_cs( const char *col_name ) const;   ... 8
const fits_table_col &colf_cs( const char *fmt, ... ) const;  ... 9

カラム番号 col_index または カラム名 col_name に対応する内部 fits_table_col オブジェクトへの参照を返します. メンバ関数4〜9は読み取り専用です.

取得した fits_table_col オブジェクトへの参照を経由し, テーブルのカラムデータへアクセスします.

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

返り値
内部 fits_table_col オブジェクトへの参照

col_index()

long col_index( const char *col_name ) const;

col_name で指定されたカラムの番号を返します.


col_name()

const char *col_name( long col_index ) const;

col_index で指定されたカラムの名前を返します.


col_length()

long col_length() const;

テーブルのカラム数を返します.


assign_col_name()

fits_table &assign_col_name( long col_index, const char *newname );
fits_table &assign_col_name( const char *col_name, const char *newname );

col_index あるいは col_name で示されたカラムの名前を newname に設定します.

返り値
自身の参照

assign_null_svalue()

fits_table &assign_null_svalue( const char *snull );

内部 fits_table_colオブジェクトの svalue()assign( const char * ) で使用するNULL文字列値を設定します.

デフォルトでは, svalue() と assign( const char * ) では "NULL" がヌル文字列として 使用されますが, このメンバ関数を使う事でヌル文字列を変更する事ができます.

返り値
自身の参照

append_cols()

fits_table &append_cols( const fits::table_def defs[] );
fits_table &append_cols( const fits_table &src );

テーブルに(複数の)カラムを追加します.

defs が指定された場合には,それに従ってカラムを追加します. 配列 defs[] の最終要素のメンバはすべて NULL でなければなりません.

srcが指定された場合は, srcの持つカラムの定義だけでなくデータ領域もコピーされますが, 自身の行数が十分でない場合はすべての行がコピーされません.

fits::table_defの定義については, バイナリテーブル・ASCIIテーブルを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

insert_cols()

fits_table &insert_cols( long index, const fits::table_def defs[] );
fits_table &insert_cols( const char *col_name, const fits::table_def defs[] );
fits_table &insert_cols( long index, const fits_table &src );
fits_table &insert_cols( const char *col_name, const fits_table &src );

index あるいは col_name で指定されたカラムの前に,(複数の)カラムを挿入します.

defs が指定された場合には,それに従ってカラムを挿入します. 配列 defs[] の最終要素のメンバはすべて NULL でなければなりません.

srcが指定された場合は, srcの持つカラムの定義だけでなくデータ領域もコピーされますが, 自身の行数が十分でない場合はすべての行がコピーされません.

fits::table_defの定義については, バイナリテーブル・ASCIIテーブルを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

erase_cols()

fits_table &erase_cols( long index, long num_cols );
fits_table &erase_cols( const char *col_name, long num_cols );

index あるいは col_name で指定されたカラムから num_cols 個のカラム群を消去します.

返り値
自身の参照

swap_cols()

fits_table &swap_cols( long index0, long num_cols, long index1 );
fits_table &swap_cols( const char *col_name0, long num_cols, const char *col_name1 );

index0あるいは col_name0で指定されたカラムから num_cols個のカラム群を, index1あるいは col_name1で指定されたカラムから num_cols個のカラム群と入れ替えます.

num_colsによって,2つのカラム群が重なる場合は, num_colsの値を減らして入れ替えを行ないます.

返り値
自身の参照

append_a_col()

fits_table &append_a_col( const fits::table_def &def );
fits_table &append_a_col( const fits_table_col &src );

テーブルに1つのカラムを追加します.

def が指定された場合には,それに従ってカラムを追加します.

srcが指定された場合は, srcの持つカラムの定義だけでなくデータ領域もコピーされますが, 自身の行数が十分でない場合はすべての行がコピーされません.

fits::table_defの定義については, バイナリテーブル・ASCIIテーブルを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

insert_a_col()

fits_table &insert_a_col( long col_index, const fits::table_def &def );
fits_table &insert_a_col( const char *col_name, const fits::table_def &def );
fits_table &insert_a_col( long col_index, const fits_table_col &src );
fits_table &insert_a_col( const char *col_name, const fits_table_col &src );

col_index あるいは col_name で指定されたカラムの前に,1つのカラムを挿入します.

def が指定された場合には,それに従ってカラムを挿入します.

srcが指定された場合は, srcの持つカラムの定義だけでなくデータ領域もコピーされますが, 自身の行数が十分でない場合はすべての行がコピーされません.

fits::table_defの定義については, バイナリテーブル・ASCIIテーブルを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

erase_a_col()

fits_table &erase_a_col( long col_index );
fits_table &erase_a_col( const char *col_name );

col_index あるいは col_name で指定された 1つのカラムを消去します.

返り値
自身の参照

put_a_col()

fits_table &put_a_col( long col_index, const fits_table_col &src );
fits_table &put_a_col( const char *col_name, const fits_table_col &src );

col_index あるいは col_name で指定されたカラムを src の持つカラムの定義で上書きし,セル値をコピーします.

自身の行数が十分でない場合はすべての行がコピーされません.

返り値
自身の参照

define_a_col()

fits_table &define_a_col( long col_index, const fits::table_def &def );
fits_table &define_a_col( const char *col_name, const fits::table_def &def );

col_index あるいは col_name で指定されたカラムの定義を変更します.

def で行なうカラム設定のうち,変更したくない項目については, def のメンバに NULL を代入します.

fits::table_defの定義については, バイナリテーブル・ASCIIテーブルを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

ロウ(行)の操作に関するメンバ関数

row_length()

long row_length() const;

テーブルの行数を返します.


resize_rows()

fits_table &resize_rows( long num_rows );

テーブルの行数を num_rows 行に変更します.

返り値
自身の参照

append_rows()

fits_table &append_rows( long num_rows );

テーブルの最後に, num_rows 個の新しい行を追加します.

新しいセルには,デフォルト値がセットされます. デフォルト値の初期設定値は, 論理型の場合は 'F', 文字列型の場合は ' ' からなる文字列, その他の型の場合は 0 です. デフォルト値は assign_default() メンバ関数で変更できます.

返り値
自身の参照

insert_rows()

fits_table &insert_rows( long index, long num_rows );

index で指定された行の直前に, num_rows 個の新しい行を挿入します.

新しいセルには,デフォルト値がセットされます. デフォルト値の初期設定値は, 論理型の場合は 'F', 文字列型の場合は ' ' からなる文字列, その他の型の場合は 0 です. デフォルト値は assign_default() メンバ関数で変更できます.

返り値
自身の参照

erase_rows()

fits_table &erase_rows( long index, long num_rows );

index で指定された行から num_rows 個の行を削除します.

返り値
自身の参照

clean_rows()

fits_table &clean_rows();
fits_table &clean_rows( long row_index, long num_rows );

すべてのカラムにおいて, index で指定された行から num_rows 個の行をデフォルト値にします. 引数が指定されない場合は,すべての行が対象です.

デフォルト値の初期設定値は, 論理型の場合は 'F', 文字列型の場合は ' ' からなる文字列, その他の型の場合は 0 です. デフォルト値は assign_default() メンバ関数で変更できます.

返り値
自身の参照

move_rows()

fits_table &move_rows( long src_index, long num_rows, long dest_index );

すべてのカラムにおいて, src_index で指定された行から num_rows 個の行を, dest_index で指定された行から始まる行へコピーします.

返り値
自身の参照

swap_rows()

fits_table &swap_rows( long index0, long num_rows, long index1 );

すべてのカラムにおいて, index0で指定された行から num_rows個の行を, index1で指定された行から num_cols個の行と入れ替えます.

num_colsによって,重なる行がある場合は, num_colsの値を減らして入れ替えを行ないます.

返り値
自身の参照

flip_rows()

fits_table &flip_rows( long index, long num_rows );

すべてのカラムにおいて, indexで指定された行から num_rows個の行について, 行の順序を反転させます.

返り値
自身の参照

import_rows()

fits_table &import_rows( long dest_index, bool match_by_name,
                         const fits_table &from, 
                         long idx_begin = 0, long num_rows = FITS::ALL );

テーブルオブジェクト fromidx_begin から num_rows 個の行を, dest_index で指定された行から num_rows個の行へインポート(必要に応じて型変換を行なってコピー)します. インポートは,すべてのカラムが対象です.

from のそれぞれのカラムを, 当該オブジェクトのどのカラムへ割り当てるかは, match_by_name で決めます. match_by_nametrue の場合,カラム名が一致するものを探し,一致すればインポートします. match_by_namefalseの場合, カラム番号0から順にインポートします.

fromの持つカラムと 当該オブジェクトの持つカラムのデータ型は,一致している必要はありません. 一致しない場合は,値を変換してインポートします.

返り値
自身の参照

可変長配列のヒープの操作に関するメンバ関数(低レベル)

heap_length()

size_t heap_length();

テーブルに属しているヒープ領域のバイト長を返します.


resize_heap()

fits_table &resize_heap( size_t sz );

オブジェクト内部のヒープバッファの大きさを sz バイトに変更します.

返り値
自身の参照

get_heap()

ssize_t get_heap( void *dest_buf, size_t buf_size ) const;
ssize_t get_heap( long offset, void *dest_buf, size_t buf_size ) const;

可変長配列用のヒープバッファ上のデータを, offsetで指定された位置から最大で buf_sizeバイト, dest_bufへコピーします.

ヒープバッファはビッグエンディアンでデータが格納されているため, dest_buf で指定したデータはエンディアンを変換して使います.

返り値
非負の値: バッファ長が十分な場合にコピーできるバイト数.
負の値(エラー): 引数不正でコピーされなかった場合.

put_heap()

ssize_t put_heap( const void *src_buf, size_t buf_size );
ssize_t put_heap( long offset, const void *src_buf, size_t buf_size );

src_bufのデータを, オブジェクト内部のヒープバッファへ offsetで指定された(ヒープの)バイト位置から 最大でbuf_sizeバイトコピーします.

put_heap()メンバ関数を使う前に, src_bufで指定したデータは ビッグデンディアンに変換しておく必要があります.

返り値
非負の値: src_bufのバッファ長が十分な場合にコピーできるバイト数.
負の値(エラー): 引数不正でコピーされなかった場合.

reverse_heap_endian()

fits_table &reverse_heap_endian( long offset, int type, long length );

オブジェクト内部のヒープバッファのアドレス offset から始まるバイトデータを, データ型type とする長さ length の配列とみなし, 必要に応じてその部分のバイトオーダを反転させます.

type指定できる値 は次のとおりです:
FITS::SHORT_TFITS::LONG_TFITS::LONGLONG_TFITS::FLOAT_TFITS::DOUBLE_TFITS::COMPLEX_TFITS::DOUBLECOMPLEX_T

バイトオーダの反転が行なわれるのは, 指定されたデータ型の計算機におけるエンディアンがlittle-endianの場合です. 逆に,big-endianの計算機においては,このメンバ関数は何もしません.

返り値
自身の参照

heap_ptr(), heap_ptr_cs()

void *heap_ptr();
const void *heap_ptr() const;
const void *heap_ptr_cs() const;

可変長配列用のヒープバッファの先頭アドレスを返します.

ヒープバッファ上のデータはビッグエンディアンで格納され, アライメントも保証されません. したがって,先頭以外のアドレスから値を読む場合, ヒープ上の必要な部分を別バッファにバイト単位でコピーし, 別バッファでエンディアンを変換してから 読まなければなりません(書き込む場合はその逆を行なう必要があります).

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

一般的な用途には, get_heap()または, put_heap() の使用をお勧めします.


heap_array_cs()

const mdarray &heap_array_cs() const;

テーブルのヒープ領域を管理している内部オブジェクト(配列オブジェクト)の参照(読み取り専用)を返します.


reserved_area_length()

long long reserved_area_length() const;

バイナリテーブルHDUにおいて,Data Unit中の 予約領域(Reserved Area)のバイトサイズを返します.


resize_reserved_area()

fits_table &resize_reserved_area( long long val );

バイナリテーブルHDUにおいて, Data Unit中の予約領域(Reserved Area)のバイト長を変更します.

返り値
自身の参照