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_hduクラス

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 の最初の部分をご覧ください.


メンバ関数一覧

HDUに関するメンバ関数:

メンバ関数機能
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() コメントの存在にかかわらず,現在のヘッダコメント辞書の内容で埋める

1つのヘッダレコードを操作するメンバ関数:

メンバ関数機能
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() 複数のヘッダレコードの削除

HDUに関するメンバ関数

hdutype()

int hdutype() const;

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


hduname()

const char *hduname() const;

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

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


assign_hduname()

fits_hdu &assign_hduname( const char *name );

HDUの名称 (ヘッダのEXTNAMEキーワードの値) を変更します.

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

返り値
自身の参照

hduver()

long long hduver() const;

HDUのバージョン (ヘッダのEXTVERキーワードの値) を返します.


hduver_is_set()

bool hduver_is_set() const;

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

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

assign_hduver()

fits_hdu &assign_hduver( long long hduver );

バージョン番号 (ヘッダのEXTVERキーワードの値) を変更します.

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

返り値
自身の参照

hdutype_on_header()

int hdutype_on_header();

ヘッダの情報から HDUの種別 を判定して返します.

HDU種別が判定できる場合は FITS::IMAGE_HDUFITS::ASCII_TABLE_HDUFITS::BINARY_TABLE_HDU, のいずれかを返し,できない場合は FITS::ANY_HDU を返します.


ヘッダ操作のための基本的なメンバ関数

header(), header_cs()

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 オブジェクトへの参照

header(…), header_cs(…)

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()のそれと同様に指定し,キーワード名を与えます.

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

header_index()

long header_index( const char *keyword ) const;                       ... 1
long header_index( const char *keyword, bool is_description ) const;  ... 2

メンバ関数1は,記述形式 (COMMENTHISTORYなど) ではないレコードから キーワードkeywordを探してそのレコード番号を返します.

記述形式のレコードのみから探す場合, メンバ関数2を使い,is_descriptiontrue にセットします.

キーワードが見つからない場合は,負の数を返します.


header_regmatch()

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 にはマッチした文字列の長さを返します. これらの引数は与えなくてもかまいません.

このメンバ関数では, 記述形式(COMMENTHISTORYなど)のヘッダレコードは 検索対象になりません.


header_value_length()

long header_value_length( const char *keyword ) const;
long header_value_length( long index ) const;

キーワード keyword またはレコード番号 index に対応するヘッダレコードが持つ,生の文字列値の長さを取得します.

キーワードおよび値の存在チェックに使用できるメンバ関数です.

返り値
正の値: 生の文字列値(「'」を含む)の長さ
0: 値が存在しない場合
負の値: キーワードが存在しない場合

header_length()

long header_length() const;

ヘッダのレコード数を返します.

返されるレコード数には,END キーワードレコードは含まれません. CONTINUEを使った複数レコードにまたがる長いヘッダ値 については, 複数レコードにまたがるヘッダ値を展開した後のレコード数(CONTINUEはカウントせず)です.


ヘッダ全体の操作に関するメンバ関数

header_init()

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 をご覧ください.

返り値
自身の参照

header_swap()

fits_hdu &header_swap( fits_header &obj );

指定された fits_header オブジェクト obj の内容と自身の内容とを入れ替えます.

自身が fits_hdu オブジェクトの管理下にある場合,Data Unit に関係する 予約キーワード(BITPIX等)を持つレコードは入れ替わりません.

返り値
自身の参照

header_reformat()

fits_hdu &header_reformat();

fits_header_record オブジェクトが現在保持している 80文字(×n)のフォーマット済み文字列を, 現在のキーワード,値,コメントの内容から作りなおします.

返り値
自身の参照

header_formatted_string()

const char *header_formatted_string();

ヘッダの全レコードについて, FITSファイル出力時のフォーマット済み文字列を オブジェクト内部に作成し,そのアドレスを返します.

返される文字列は、 改行を含まない '\0' で終端される80×nキャラクタの文字列であり、 ロング値は CONTINUEキーワードによって分割された形に整形されます。

WCSLIB や WCSToolsのlibwcs と連携する時に使うと便利です.

返り値
フォーマット済み文字列のアドレス

header_fill_blank_comments()

fits_hdu &header_fill_blank_comments( int hdutype = FITS::ANY_HDU );

全ヘッダレコード(ただし記述型レコードを除く)から コメントがセットされていないものを調べ, SFITSIOが持つコメント辞書に該当するキーワードがあれば その内容でコメント文をセットします. このコメント辞書は,各HDUタイプ専用の辞書が3つ,汎用の辞書が1つ から構成され,どれを使うかは引数 hdutype で指定します(辞書の内容はfits_header_record.ccの最初のあたりをご覧ください). なお,それぞれのHDU専用の辞書にキーワードが存在しない場合は, 汎用のコメント辞書が使われます.

引数として指定できるのは, FITS::IMAGE_HDUFITS::BINARY_TABLE_HDUFITS::ASCII_TABLE_HDUFITS::ANY_HDU, のいずれかで, FITS::ANY_HDU が指定された場合と 引数を省略した場合は,HDUのタイプをヘッダの内容から自動判定します.

コメント辞書の変更は, fits::update_comment_dictionary()関数 で行なう事ができます.

返り値
自身の参照

header_assign_default_comments()

fits_hdu &header_assign_default_comments( int hdutype = FITS::ANY_HDU );

全ヘッダレコード(ただし記述型レコードを除く)を調べ, SFITSIOが持つコメント辞書に該当するキーワードがあれば その内容でコメント文をセット(上書き)します. このコメント辞書は,各HDUタイプ専用の辞書が3つ,汎用の辞書が1つ から構成され,どれを使うかは引数 hdutype で指定します(辞書の内容はfits_header_record.ccの最初のあたりをご覧ください). なお,それぞれのHDU専用の辞書にキーワードが存在しない場合は, 汎用のコメント辞書が使われます.

引数として指定できるのは, FITS::IMAGE_HDUFITS::BINARY_TABLE_HDUFITS::ASCII_TABLE_HDUFITS::ANY_HDU, のいずれかで,FITS::ANY_HDUが指定された場合と 引数を省略した場合は,HDUのタイプをヘッダの内容から自動判定します.

コメント辞書の変更は, fits::update_comment_dictionary()関数 で行なう事ができます.

返り値
自身の参照

1つのヘッダレコードを操作するメンバ関数

header_update()

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で更新します. 更新が不要な場合,valuecommentのどちらかに NULLを与えます. keywordがヘッダに見つからない場合は追加します.

ヘッダのレコードタイプを文字列としたい場合は,value"'ABC'" のようにセットします. レコードタイプを数字や論理値にする場合は,value"256""3.14""T" のようにセットします.

メンバ関数2では, fits_header_record オブジェクト obj が持つキーワードを自身のヘッダレコードから探し, 存在すれば値とコメントを更新し,そうでなければ新規レコードを追加します.

メンバ関数1,2とも, 記述型レコードを更新,追加する事はできません.

返り値
自身の参照

header_append()

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が指定された場合は, 記述形式(COMMENTHISTORYなどの形式)で追加します.

ヘッダのレコードタイプを文字列としたい場合は,value"'ABC'" のようにセットします. レコードタイプを数字や論理値にする場合は,value"256""3.14""T" のようにセットします.

valuedescriptionに文字列長の制限はありません (複数レコードにまたがる長いヘッダ値コメント文字列に対するCONTINUEキーワードの適用を参照). ヘッダレコードが80文字以内に収まらない場合でも, それぞれ適切な方法でファイルに保存されます.

fits::header_defの定義については, ヘッダレコードを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

header_insert()

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が指定された場合は, 記述形式(COMMENTHISTORYなどの形式)で挿入します.

ヘッダのレコードタイプを文字列としたい場合は,value"'ABC'" のようにセットします. レコードタイプを数字や論理値にする場合は,value"256""3.14""T" のようにセットします.

valuedescriptionに文字列長の制限はありません (複数レコードにまたがる長いヘッダ値コメント文字列に対するCONTINUEキーワードの適用を参照). ヘッダレコードが80文字以内に収まらない場合でも, それぞれ適切な方法でファイルに保存されます.

fits::header_defの定義については, ヘッダレコードを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

header_rename()

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で指定されたものに変更します.

返り値
自身の参照

header_erase()

fits_hdu &header_erase( long index );
fits_hdu &header_erase( const char *keyword );

index または keyword で指定された1つのヘッダレコードを削除します.

返り値
自身の参照

header_assign()

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" のようにセットします.

valuedescriptionに文字列長の制限はありません (複数レコードにまたがる長いヘッダ値コメント文字列に対するCONTINUEキーワードの適用を参照). ヘッダレコードが80文字以内に収まらない場合でも, それぞれ適切な方法でファイルに保存されます.

fits::header_defの定義については, ヘッダレコードを定義するための型(構造体) または fits.h をご覧ください.

返り値
自身の参照

header_assignf_value()

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文字以内に収まらない場合でも, それぞれ適切な方法でファイルに保存されます.

返り値
自身の参照

header_assignf_comment()

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文字以内に収まらない場合でも, それぞれ適切な方法でファイルに保存されます.

返り値
自身の参照

複数のヘッダレコードを操作するメンバ関数

header_update_records()

fits_hdu &header_update_records( const fits_header &obj );

fits_headerオブジェクト obj が持つキーワード1つ1つを自身のヘッダから探し, キーワードが存在しない場合は追加し,同一のキーワードが存在する場合は objが持つ内容で上書きします.

返り値
自身の参照

header_append_records()

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 をご覧ください.

返り値
自身の参照

header_insert_records()

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 をご覧ください.

返り値
自身の参照

header_erase_records()

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

返り値
自身の参照