使用頻度の高い 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拡張 |
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 |
メンバ関数 | 機能 |
---|---|
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)のバイト長を変更 |
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
をご覧ください.
fits_table &swap( fits_table &obj );
自身と
obj
との中身を交換します.
void copy( fits_table *dest ) const;
自身の内容を
dest
で示されたオブジェクトにコピーします.
fits_table &ascii_to_binary();
当該テーブルがアスキーテーブルの属性となっていた場合, 属性をバイナリテーブルに変換します.
属性をバイナリテーブルにすると,
FITSファイル上のアスキーテーブルの
TFORM
n
の値(fits::table_def構造体の
tdisp
メンバの値)は,
バイナリテーブルとして保存される時には
TFORM
n
のコメント部分に保存されます.
TNULL
n
の値も,TNULL
n
のコメント部分に保存されます(値は未定義となります).
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クラス
を参照してください.
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
で示されたカラムに対応するヘッダレコードの番号を返します.
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
で示されたカラムに対応するヘッダレコードを更新し,
同時にオブジェクト内部の管理情報も更新します.
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
で示されたカラムに対応するヘッダレコードを削除します.
同時にオブジェクト内部の管理情報も更新します.
fits_table &rename_col_header( const char *old_kwd, const char *new_kwd );
ユーザ定義のカラム用ヘッダレコードのキーワードプレフィックス
(ヘッダの
TXFLDKWD
の値(csv形式)に保存されている文字列値)
の1つを,
old_kwd
から
new_kwd
へ名前を変更します.
FITS規約で定められたキーワード(TTYPE
等)については
変更できません.
fits_table &sort_col_header();
すべてのカラム用ヘッダレコードを,カラム順にソートします.
const char *const *user_col_keywords() const; ... 1 const tarray_tstring &user_col_keywords_cs() const; ... 2
メンバ関数1は,ユーザ定義のカラムキーワードのポインタ配列(読み取り専用)を返します.
メンバ関数2は, ユーザ定義のカラムキーワードを保存している文字列配列オブジェクトの参照(読み取り専用)を返します.
返される文字列配列には,
ヘッダの
TXFLDKWD
の値(csv形式)に保存される文字列が格納されています.
bool is_user_col_keyword( const char *kwd ) const;
引数のキーワードがユーザ定義のカラムキーワードかどうか
(ヘッダの
TXFLDKWD
の値(csv形式)に存在するか)
を返します.
fits_table &append_a_user_col_keyword( const char *kwd );
ユーザ定義のカラムキーワード(TLMAX
,TLMIN
等)を1つ追加します.
指定されたキーワードプレフィックスは
ヘッダの
TXFLDKWD
の値(csv形式)に追加されます.
fits_table &erase_a_user_col_keyword( const char *kwd );
ユーザ定義のカラムキーワード(TLMAX
,TLMIN
等)を1つ削除します.
指定されたキーワードプレフィックスは
ヘッダの
TXFLDKWD
の値(csv形式)から削除されます.
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では例外を発生します.
long col_index( const char *col_name ) const;
col_name
で指定されたカラムの番号を返します.
const char *col_name( long col_index ) const;
col_index
で指定されたカラムの名前を返します.
long col_length() const;
テーブルのカラム数を返します.
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
に設定します.
fits_table &assign_null_svalue( const char *snull );
内部
fits_table_colオブジェクトの
svalue()
,
assign( const char * )
で使用するNULL文字列値を設定します.
デフォルトでは,
svalue() と assign( const char * ) では "NULL"
がヌル文字列として
使用されますが,
このメンバ関数を使う事でヌル文字列を変更する事ができます.
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
をご覧ください.
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
をご覧ください.
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
個のカラム群を消去します.
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
の値を減らして入れ替えを行ないます.
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
をご覧ください.
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
をご覧ください.
fits_table &erase_a_col( long col_index ); fits_table &erase_a_col( const char *col_name );
col_index
あるいは
col_name
で指定された
1つのカラムを消去します.
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
の持つカラムの定義で上書きし,セル値をコピーします.
自身の行数が十分でない場合はすべての行がコピーされません.
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
をご覧ください.
long row_length() const;
テーブルの行数を返します.
fits_table &resize_rows( long num_rows );
テーブルの行数を
num_rows
行に変更します.
fits_table &append_rows( long num_rows );
テーブルの最後に,
num_rows
個の新しい行を追加します.
新しいセルには,デフォルト値がセットされます.
デフォルト値の初期設定値は,
論理型の場合は 'F'
,
文字列型の場合は ' '
からなる文字列,
その他の型の場合は 0
です.
デフォルト値は
assign_default()
メンバ関数で変更できます.
fits_table &insert_rows( long index, long num_rows );
index
で指定された行の直前に,
num_rows
個の新しい行を挿入します.
新しいセルには,デフォルト値がセットされます.
デフォルト値の初期設定値は,
論理型の場合は 'F'
,
文字列型の場合は ' '
からなる文字列,
その他の型の場合は 0
です.
デフォルト値は
assign_default()
メンバ関数で変更できます.
fits_table &erase_rows( long index, long num_rows );
index
で指定された行から
num_rows
個の行を削除します.
fits_table &clean_rows(); fits_table &clean_rows( long row_index, long num_rows );
すべてのカラムにおいて,
index
で指定された行から
num_rows
個の行をデフォルト値にします.
引数が指定されない場合は,すべての行が対象です.
デフォルト値の初期設定値は,
論理型の場合は 'F'
,
文字列型の場合は ' '
からなる文字列,
その他の型の場合は 0
です.
デフォルト値は
assign_default()
メンバ関数で変更できます.
fits_table &move_rows( long src_index, long num_rows, long dest_index );
すべてのカラムにおいて,
src_index
で指定された行から
num_rows
個の行を,
dest_index
で指定された行から始まる行へコピーします.
fits_table &swap_rows( long index0, long num_rows, long index1 );
すべてのカラムにおいて,
index0
で指定された行から
num_rows
個の行を,
index1
で指定された行から
num_cols
個の行と入れ替えます.
num_cols
によって,重なる行がある場合は,
num_cols
の値を減らして入れ替えを行ないます.
fits_table &flip_rows( long index, long num_rows );
すべてのカラムにおいて,
index
で指定された行から
num_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 );
テーブルオブジェクト
from
の
idx_begin
から
num_rows
個の行を,
dest_index
で指定された行から
num_rows
個の行へインポート(必要に応じて型変換を行なってコピー)します.
インポートは,すべてのカラムが対象です.
from
のそれぞれのカラムを,
当該オブジェクトのどのカラムへ割り当てるかは,
match_by_name
で決めます.
match_by_name
が
true
の場合,カラム名が一致するものを探し,一致すればインポートします.
match_by_name
が
false
の場合,
カラム番号0から順にインポートします.
from
の持つカラムと
当該オブジェクトの持つカラムのデータ型は,一致している必要はありません.
一致しない場合は,値を変換してインポートします.
size_t heap_length();
テーブルに属しているヒープ領域のバイト長を返します.
fits_table &resize_heap( size_t sz );
オブジェクト内部のヒープバッファの大きさを
sz
バイトに変更します.
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
で指定したデータはエンディアンを変換して使います.
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
のバッファ長が十分な場合にコピーできるバイト数.
fits_table &reverse_heap_endian( long offset, int type, long length );
オブジェクト内部のヒープバッファのアドレス
offset
から始まるバイトデータを,
データ型を
type
とする長さ
length
の配列とみなし,
必要に応じてその部分のバイトオーダを反転させます.
type
に
指定できる値
は次のとおりです:
FITS::SHORT_T
,
FITS::LONG_T
,
FITS::LONGLONG_T
,
FITS::FLOAT_T
,
FITS::DOUBLE_T
,
FITS::COMPLEX_T
,
FITS::DOUBLECOMPLEX_T
.
バイトオーダの反転が行なわれるのは, 指定されたデータ型の計算機におけるエンディアンがlittle-endianの場合です. 逆に,big-endianの計算機においては,このメンバ関数は何もしません.
void *heap_ptr(); const void *heap_ptr() const; const void *heap_ptr_cs() const;
可変長配列用のヒープバッファの先頭アドレスを返します.
ヒープバッファ上のデータはビッグエンディアンで格納され, アライメントも保証されません. したがって,先頭以外のアドレスから値を読む場合, ヒープ上の必要な部分を別バッファにバイト単位でコピーし, 別バッファでエンディアンを変換してから 読まなければなりません(書き込む場合はその逆を行なう必要があります).
返される値はオブジェクト内部バッファのアドレスですから, オブジェクトが破棄されたり, サイズが変更された場合は無効になります.
一般的な用途には,
get_heap()
または,
put_heap()
の使用をお勧めします.
const mdarray &heap_array_cs() const;
テーブルのヒープ領域を管理している内部オブジェクト(配列オブジェクト)の参照(読み取り専用)を返します.
long long reserved_area_length() const;
バイナリテーブルHDUにおいて,Data Unit中の 予約領域(Reserved Area)のバイトサイズを返します.
fits_table &resize_reserved_area( long long val );
バイナリテーブルHDUにおいて, Data Unit中の予約領域(Reserved Area)のバイト長を変更します.