使用頻度の高い 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
個のヘッダレコードを削除します.