使用頻度の高い 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_hduクラスは,一般の HDU を表現し, fits_imageクラス(Image HDUを表現) または fits_tableクラス(Binar Table or ASCII Table HDUを表現) の基底クラスです. オブジェクト内で, fits_headerクラス(FITSヘッダ全体を表現) のオブジェクトを管理します.
このクラスのメンバ関数は, どのHDUタイプにも共通している部分(主にヘッダ)を扱うために 利用されます.
| クラス | ヘッダファイル | コード | namespace |
|---|---|---|---|
| fits_hdu | #include <sli/fits_hdu.h> |
cc | sli |
SFITSIO に搭載されているヘッダのコメント辞書については, fits_header_record.cc の最初の部分をご覧ください.
| メンバ関数 | 機能 |
|---|---|
| hdutype() | HDU の種別(FITS::IMAGE_HDU,FITS::BINARY_TABLE_HDU 等)を取得 |
| hduname() | HDU の名前(EXTNAME)を取得 |
| assign_hduname() | HDU の名前(EXTNAME)を設定 |
| hduver() | HDU のバージョン(EXTVER)を取得 |
| hduver_is_set() | HDU のバージョン(EXTVER)がセットされているかを返す |
| assign_hduver() | HDU のバージョン(EXTVER)を設定 |
| hdutype_on_header() | ヘッダの情報から HDU の種別を判定して返す |
| メンバ関数 | 機能 |
|---|---|
| header(), header_cs() | fits_headerオブジェクトへの参照を取得 |
| header(…), header_cs(…) | fits_header_recordオブジェクトへの参照を取得 |
| header_index() | キーワードに対応するヘッダレコード番号を取得 |
| header_regmatch() | POSIX拡張正規表現でキーワードを(連続的に)検索 |
| header_value_length() | キーワードに対応する生の文字列値の長さを取得 (存在チェックに使用可) |
| header_length() | ヘッダレコードの長さを取得 |
| メンバ関数 | 機能 |
|---|---|
| header_init() | ヘッダの初期化 |
| header_swap() | ヘッダのスワップ |
| header_reformat() | 全ヘッダレコードの再フォーマットを行なう |
| header_formatted_string() | 全ヘッダレコードのフォーマット済み文字列(80×n文字)を取得 |
| header_fill_blank_comments() | コメントが存在しない場合,現在のヘッダコメント辞書の内容で埋める |
| header_assign_default_comments() | コメントの存在にかかわらず,現在のヘッダコメント辞書の内容で埋める |
| メンバ関数 | 機能 |
|---|---|
| header_update() | 1つのヘッダレコードを追加,更新 |
| header_append() | 1つのヘッダレコードを追加 |
| header_insert() | 1つのヘッダレコードを挿入 |
| header_rename() | 1つのヘッダキーワード名の変更 |
| header_erase() | 1つのヘッダレコードの消去 |
| header_assign() | 1つのヘッダレコードを更新 |
| header_assignf_value() | 1つのヘッダレコードの値を更新 (printf()の記法) |
| header_assignf_comment() | 1つのヘッダレコードのコメントを更新 (printf()の記法) |
| メンバ関数 | 機能 |
|---|---|
| header_update_records() | 複数のヘッダレコードの追加,更新 |
| header_append_records() | 複数のヘッダレコードの追加 |
| header_insert_records() | 複数のヘッダレコードの挿入 |
| header_erase_records() | 複数のヘッダレコードの削除 |
int hdutype() const;
HDUの種別
を返します.
返る値は,
FITS::IMAGE_HDU,
FITS::ASCII_TABLE_HDU,
FITS::BINARY_TABLE_HDU
のいずれかです.
const char *hduname() const;
HDUの名称
(ヘッダのEXTNAMEキーワードの値)
を返します.
設定されていない場合は,NULLを返します.
返される値はオブジェクト内部バッファのアドレスですから, オブジェクトが破棄されたり, 名称が変更された場合は無効になります.
fits_hdu &assign_hduname( const char *name );
HDUの名称
(ヘッダのEXTNAMEキーワードの値)
を変更します.
Primary HDUの場合も指定可能です.
long long hduver() const;
HDUのバージョン
(ヘッダのEXTVERキーワードの値)
を返します.
bool hduver_is_set() const;
HDUのバージョン番号
(ヘッダのEXTVERキーワードの値)
が設定されているか判定します.
fits_hdu &assign_hduver( long long hduver );
バージョン番号
(ヘッダのEXTVERキーワードの値)
を変更します.
Primary HDUの場合も指定可能です.
int hdutype_on_header();
ヘッダの情報から HDUの種別 を判定して返します.
HDU種別が判定できる場合は
FITS::IMAGE_HDU,
FITS::ASCII_TABLE_HDU,
FITS::BINARY_TABLE_HDU,
のいずれかを返し,できない場合は
FITS::ANY_HDU
を返します.
fits_header &header(); ... 1 const fits_header &header() const; ... 2 const fits_header &header_cs() const; ... 3
内部 fits_header オブジェクト(FITSヘッダ全体を表現)に対する参照を返します. メンバ関数2,3は読み取り専用です.
これらのメンバ関数で取得した fits_header オブジェクトへの参照を経由し,ヘッダ情報にアクセスします.
fits_header_record &header( long index0 ); ... 1 fits_header_record &header( const char *keyword0 ); ... 2 fits_header_record &headerf( const char *fmt, ... ); ... 3 const fits_header_record &header( long index0 ) const; ... 4 const fits_header_record &header( const char *keyword0 ) const; ... 5 const fits_header_record &headerf( const char *fmt, ... ) const; ... 6 const fits_header_record &header_cs( long index0 ) const; ... 7 const fits_header_record &header_cs( const char *keyword0 ) const; ... 8 const fits_header_record &headerf_cs( const char *fmt, ... ) const; ... 9
ヘッダレコード番号
index0
または
ヘッダキーワード名
keyword0
に対応する内部
fits_header_record
オブジェクトへの参照を返します.
メンバ関数4〜9は読み取り専用です.
これらのメンバ関数で取得した fits_header_record オブジェクトへの参照を経由し, 1つのヘッダレコード情報にアクセスします.
指定されたヘッダレコードが存在しない場合,メンバ関数1〜3では 新規ヘッダレコードが作られ,メンバ関数4〜9では例外を発生します.
headerf()メンバ関数の場合,
fmt以降の引数をlibcの
printf()のそれと同様に指定し,キーワード名を与えます.
long header_index( const char *keyword ) const; ... 1 long header_index( const char *keyword, bool is_description ) const; ... 2
メンバ関数1は,記述形式
(COMMENTやHISTORYなど)
ではないレコードから
キーワードkeywordを探してそのレコード番号を返します.
記述形式のレコードのみから探す場合,
メンバ関数2を使い,is_descriptionを
true
にセットします.
キーワードが見つからない場合は,負の数を返します.
long header_regmatch( const char *keypat,
ssize_t *rpos = NULL, size_t *rlen = NULL );
long header_regmatch( long index, const char *keypat,
ssize_t *rpos = NULL, size_t *rlen = NULL );
index
で示されたレコードから順に
POSIX拡張正規表現
keypat
にマッチするキーワードを探し,そのレコード番号を返します.
マッチするものが見つからない場合は,
負の数を返します.index
が指定されない場合は,最初のレコードから検索します.
*rpos
には見つかった文字の位置を,
*rlen
にはマッチした文字列の長さを返します.
これらの引数は与えなくてもかまいません.
このメンバ関数では,
記述形式(COMMENTやHISTORYなど)のヘッダレコードは
検索対象になりません.
long header_value_length( const char *keyword ) const; long header_value_length( long index ) const;
キーワード
keyword
またはレコード番号
index
に対応するヘッダレコードが持つ,生の文字列値の長さを取得します.
キーワードおよび値の存在チェックに使用できるメンバ関数です.
'」を含む)の長さlong header_length() const;
ヘッダのレコード数を返します.
返されるレコード数には,END
キーワードレコードは含まれません.
CONTINUEを使った複数レコードにまたがる長いヘッダ値
については,
複数レコードにまたがるヘッダ値を展開した後のレコード数(CONTINUEはカウントせず)です.
fits_hdu &header_init(); fits_hdu &header_init( const fits::header_def defs[] ); fits_hdu &header_init( const fits_header &obj );
ヘッダを消去し,defs
または
obj
が指定された場合はその内容をヘッダにセットします.
配列
defs[]
の最終要素のメンバはすべて
NULL
でなければなりません.
fits::header_defの定義については,
ヘッダレコードを定義するための型(構造体)
または
fits.h
をご覧ください.
fits_hdu &header_swap( fits_header &obj );
指定された
fits_header
オブジェクト
obj
の内容と自身の内容とを入れ替えます.
自身が
fits_hdu
オブジェクトの管理下にある場合,Data Unit に関係する
予約キーワード(BITPIX等)を持つレコードは入れ替わりません.
fits_hdu &header_reformat();
各 fits_header_record オブジェクトが現在保持している 80文字(×n)のフォーマット済み文字列を, 現在のキーワード,値,コメントの内容から作りなおします.
const char *header_formatted_string();
ヘッダの全レコードについて, FITSファイル出力時のフォーマット済み文字列を オブジェクト内部に作成し,そのアドレスを返します.
返される文字列は、
改行を含まない
'\0'
で終端される80×nキャラクタの文字列であり、
ロング値は
CONTINUEキーワードによって分割された形に整形されます。
WCSLIB や WCSToolsのlibwcs と連携する時に使うと便利です.
fits_hdu &header_fill_blank_comments( int hdutype = FITS::ANY_HDU );
全ヘッダレコード(ただし記述型レコードを除く)から
コメントがセットされていないものを調べ,
SFITSIOが持つコメント辞書に該当するキーワードがあれば
その内容でコメント文をセットします.
このコメント辞書は,各HDUタイプ専用の辞書が3つ,汎用の辞書が1つ
から構成され,どれを使うかは引数
hdutype
で指定します(辞書の内容はfits_header_record.ccの最初のあたりをご覧ください).
なお,それぞれのHDU専用の辞書にキーワードが存在しない場合は,
汎用のコメント辞書が使われます.
引数として指定できるのは,
FITS::IMAGE_HDU,
FITS::BINARY_TABLE_HDU,
FITS::ASCII_TABLE_HDU,
FITS::ANY_HDU,
のいずれかで,
FITS::ANY_HDU
が指定された場合と
引数を省略した場合は,HDUのタイプをヘッダの内容から自動判定します.
コメント辞書の変更は, fits::update_comment_dictionary()関数 で行なう事ができます.
fits_hdu &header_assign_default_comments( int hdutype = FITS::ANY_HDU );
全ヘッダレコード(ただし記述型レコードを除く)を調べ,
SFITSIOが持つコメント辞書に該当するキーワードがあれば
その内容でコメント文をセット(上書き)します.
このコメント辞書は,各HDUタイプ専用の辞書が3つ,汎用の辞書が1つ
から構成され,どれを使うかは引数
hdutype
で指定します(辞書の内容はfits_header_record.ccの最初のあたりをご覧ください).
なお,それぞれのHDU専用の辞書にキーワードが存在しない場合は,
汎用のコメント辞書が使われます.
引数として指定できるのは,
FITS::IMAGE_HDU,
FITS::BINARY_TABLE_HDU,
FITS::ASCII_TABLE_HDU,
FITS::ANY_HDU,
のいずれかで,FITS::ANY_HDUが指定された場合と
引数を省略した場合は,HDUのタイプをヘッダの内容から自動判定します.
コメント辞書の変更は, fits::update_comment_dictionary()関数 で行なう事ができます.
fits_hdu &header_update( const char *keyword, const char *value,
const char *comment ); ... 1
fits_hdu &header_update( const fits_header_record &obj ); ... 2
メンバ関数1では,
keywordで指定されたヘッダレコードを,
生の値をvalueで,コメントをcommentで更新します.
更新が不要な場合,valueかcommentのどちらかに
NULLを与えます.
keywordがヘッダに見つからない場合は追加します.
ヘッダのレコードタイプを文字列としたい場合は,value
に
"'ABC'"
のようにセットします.
レコードタイプを数字や論理値にする場合は,valueに
"256","3.14","T"
のようにセットします.
メンバ関数2では,
fits_header_record
オブジェクト
obj
が持つキーワードを自身のヘッダレコードから探し,
存在すれば値とコメントを更新し,そうでなければ新規レコードを追加します.
メンバ関数1,2とも, 記述型レコードを更新,追加する事はできません.
fits_hdu &header_append( const char *keyword );
fits_hdu &header_append( const char *keyword, const char *value,
const char *comment );
fits_hdu &header_append( const char *keyword, const char *description );
fits_hdu &header_append( const fits::header_def &def );
fits_hdu &header_append( const fits_header_record &obj );
キーワードkeyword,値value,
コメントcommentの1つのヘッダレコードを追加します.
descriptionが指定された場合は,
記述形式(COMMENTやHISTORYなどの形式)で追加します.
ヘッダのレコードタイプを文字列としたい場合は,value
に
"'ABC'"
のようにセットします.
レコードタイプを数字や論理値にする場合は,valueに
"256","3.14","T"
のようにセットします.
valueとdescriptionに文字列長の制限はありません
(複数レコードにまたがる長いヘッダ値,コメント文字列に対するCONTINUEキーワードの適用を参照).
ヘッダレコードが80文字以内に収まらない場合でも,
それぞれ適切な方法でファイルに保存されます.
fits::header_defの定義については,
ヘッダレコードを定義するための型(構造体)
または
fits.h
をご覧ください.
fits_hdu &header_insert( long index0, const char *keyword );
fits_hdu &header_insert( const char *keyword0, const char *keyword );
fits_hdu &header_insert( long index0,
const char *keyword, const char *value, const char *comment );
fits_hdu &header_insert( const char *keyword0,
const char *keyword, const char *value, const char *comment );
fits_hdu &header_insert( long index0,
const char *keyword, const char *description );
fits_hdu &header_insert( const char *keyword0,
const char *keyword, const char *description );
fits_hdu &header_insert( long index0,
const fits::header_def &def );
fits_hdu &header_insert( const char *keyword0,
const fits::header_def &def );
fits_hdu &header_insert( long index0,
const fits_header_record &obj );
fits_hdu &header_insert( const char *keyword0,
const fits_header_record &obj );
index0またはkeyword0で指定された位置に,
キーワードkeyword,値value,
コメントcommentの1つのヘッダレコードを挿入します.
descriptionが指定された場合は,
記述形式(COMMENTやHISTORYなどの形式)で挿入します.
ヘッダのレコードタイプを文字列としたい場合は,value
に
"'ABC'"
のようにセットします.
レコードタイプを数字や論理値にする場合は,valueに
"256","3.14","T"
のようにセットします.
valueとdescriptionに文字列長の制限はありません
(複数レコードにまたがる長いヘッダ値,コメント文字列に対するCONTINUEキーワードの適用を参照).
ヘッダレコードが80文字以内に収まらない場合でも,
それぞれ適切な方法でファイルに保存されます.
fits::header_defの定義については,
ヘッダレコードを定義するための型(構造体)
または
fits.h
をご覧ください.
fits_hdu &header_rename( long index0, const char *new_name ); fits_hdu &header_rename( const char *keyword0, const char *new_name );
index0またはkeyword0で指定された
ヘッダレコードのキーワードを
new_nameで指定されたものに変更します.
fits_hdu &header_erase( long index ); fits_hdu &header_erase( const char *keyword );
index
または
keyword
で指定された1つのヘッダレコードを削除します.
fits_hdu &header_assign( long index0, const fits::header_def &def );
fits_hdu &header_assign( const char *keyword0,
const fits::header_def &def );
fits_hdu &header_assign( long index0,
const fits_header_record &obj );
fits_hdu &header_assign( const char *keyword0,
const fits_header_record &obj );
fits_hdu &header_assign( long index0,
const char *keyword, const char *value, const char *comment );
fits_hdu &header_assign( const char *keyword0,
const char *keyword, const char *value, const char *comment );
fits_hdu &header_assign( long index0,
const char *keyword, const char *description );
fits_hdu &header_assign( const char *keyword0,
const char *keyword, const char *description );
index0
または
keyword0
で指定されたヘッダレコードを,
続く引数で指定された内容に更新します.
ヘッダのレコードタイプを文字列としたい場合は,value
に
"'ABC'"
のようにセットします.
レコードタイプを数字や論理値にする場合は,valueに
"256","3.14","T"
のようにセットします.
valueとdescriptionに文字列長の制限はありません
(複数レコードにまたがる長いヘッダ値,コメント文字列に対するCONTINUEキーワードの適用を参照).
ヘッダレコードが80文字以内に収まらない場合でも,
それぞれ適切な方法でファイルに保存されます.
fits::header_defの定義については,
ヘッダレコードを定義するための型(構造体)
または
fits.h
をご覧ください.
fits_hdu &header_assignf_value( long index0,
const char *format, ... );
fits_hdu &header_assignf_value( const char *keyword0,
const char *format, ... );
index0
または
keyword0
で指定されたヘッダレコードの値に,
続く可変引数で指定された値をセットします.
format以降の引数は,libcの
printf()のそれと同様に指定します.
ヘッダのレコードタイプを文字列としたい場合は,値に
"'ABC'"
のようにセットします.
レコードタイプを数字や論理値にする場合は,
値に"256","3.14","T"
のようにセットします.
値に文字列長の制限はありません (複数レコードにまたがる長いヘッダ値を参照). ヘッダレコードが80文字以内に収まらない場合でも, それぞれ適切な方法でファイルに保存されます.
fits_hdu &header_assignf_comment( long index0,
const char *format, ... );
fits_hdu &header_assignf_comment( const char *keyword0,
const char *format, ... );
index0
または
keyword0
で指定されたヘッダレコードのコメントに,
続く可変引数で指定された文字列をセットします.
format以降の引数は,libcの
printf()のそれと同様に指定します.
コメントに文字列長の制限はありません (コメント文字列に対するCONTINUEキーワードの適用を参照). ヘッダレコードが80文字以内に収まらない場合でも, それぞれ適切な方法でファイルに保存されます.
fits_hdu &header_update_records( const fits_header &obj );
fits_headerオブジェクト
obj
が持つキーワード1つ1つを自身のヘッダから探し,
キーワードが存在しない場合は追加し,同一のキーワードが存在する場合は
objが持つ内容で上書きします.
fits_hdu &header_append_records( const fits::header_def defs[] ); fits_hdu &header_append_records( const fits_header &obj );
defs
で指定された内容,または
fits_headerオブジェクト
obj
が持つ内容を,自身のヘッダレコードを追加します.
配列
defs[]
の最終要素のメンバはすべて
NULL
でなければなりません.
fits::header_defの定義については,
ヘッダレコードを定義するための型(構造体)
または
fits.h
をご覧ください.
fits_hdu &header_insert_records( long index0,
const fits::header_def defs[] );
fits_hdu &header_insert_records( const char *keyword0,
const fits::header_def defs[] );
fits_hdu &header_insert_records( long index0,
const fits_header &obj );
fits_hdu &header_insert_records( const char *keyword0,
const fits_header &obj );
自身のヘッダレコードの
index0またはkeyword0で指定された位置に,
defs
で指定された内容,または
fits_headerオブジェクト
obj
が持つ内容を挿入します.
配列
defs[]
の最終要素のメンバはすべて
NULL
でなければなりません.
fits::header_defの定義については,
ヘッダレコードを定義するための型(構造体)
または
fits.h
をご覧ください.
fits_hdu &header_erase_records( long index0, long num_records ); fits_hdu &header_erase_records( const char *keyword0, long num_records );
index0あるいはkeyword0で指定されたレコードから,
num_records個のヘッダレコードを削除します.