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テンプレート

SFITSIOには, 曖昧な文法でFITSの内容を定義できるテンプレートファイルから, データが入っていない新規FITSファイル(fitsccクラスのオブジェクト)を作成する 「テンプレート機能」を持っています. このテンプレートファイルは, FITSヘッダに類似したテキスト形式のファイルで, 普通のテキストエディタで作成します. CFITSIOにもほぼ同じテンプレート機能があり, 様々なFITSフォーマットを管理する等の目的で使われています.


Image HDUの作成例

まず,プライマリHDUのみを作成するテンプレートファイルの例を次に示します.

#
# Test for Primary only
#
NAXIS2 = 16
NAXIS1 = 16
BITPIX = 32
FMTTYPE = ASTRO-X xxx image format
CHECKSUM = 
DATASUM  = 
COMMENT ----------------------------------------------------------------
EQUINOX = 2000.0
CTYPE1  = RA---TAN
CTYPE2  = DEC--TAN
CRPIX1  = 0.0
CRPIX2  = 0.0
CRVAL1  = 0.0
CRVAL2  = 0.0
CDELT1  = 0.1
CDELT2  = 0.1
PC1_1   = 1.0
PC1_2   = 0.0
PC2_1   = 0.0
PC2_2   = 1.0
COMMENT ----------------------------------------------------------------
MESSAGE = 'FITS (Flexible Image Transport System) format is &' / In SFITSIO,
CONTINUE  'defined in "Astronomy and Astrophysics", volume 376, &' / this 
CONTINUE  'page 359; bibcode: 2001A&A...376..359H' / message is not written 
CONTINUE  automatically.

テンプレートでは, キーワードの位置,= 記号の位置,値の位置,コメントの位置は 順序があっていれば任意で, 横方向の長さ制限はなく,長い文字列値では CONTINUE は あってもなくても良いというかなり緩いルールで記述できます. なお,先頭が「#」で始まる行はコメント文であり,この部分は無視されます.

では,このテンプレートから作られたFITSファイルのヘッダを見てみましょう.

SIMPLE  =                    T / conformity to FITS standard
BITPIX  =                   32 / number of bits per data pixel
NAXIS   =                    2 / number of data axes
NAXIS1  =                   16 / length of data axis 1
NAXIS2  =                   16 / length of data axis 2
EXTEND  =                    F / possibility of presence of extensions
FMTTYPE = 'ASTRO-X xxx image format' / type of format in FITS file
FTYPEVER=                    0 / version of FMTTYPE definition
CHECKSUM= 'ZlBRfj9OZjAOdj9O'   / HDU checksum : 2012-01-17T06:07:12
DATASUM = '0       '           / data unit checksum : 2012-01-17T06:07:12
COMMENT ----------------------------------------------------------------
EQUINOX =               2000.0 / equinox of celestial coordinate system
CTYPE1  = 'RA---TAN'           / type of celestial system and projection system
CTYPE2  = 'DEC--TAN'           / type of celestial system and projection system
CRPIX1  =                  0.0 / pixel coordinate at reference point
CRPIX2  =                  0.0 / pixel coordinate at reference point
CRVAL1  =                  0.0 / world coordinate at reference point
CRVAL2  =                  0.0 / world coordinate at reference point
CDELT1  =                  0.1 / world coordinate increment at reference point
CDELT2  =                  0.1 / world coordinate increment at reference point
PC1_1   =                  1.0 / matrix of rotation (1,1)
PC1_2   =                  0.0 / matrix of rotation (1,2)
PC2_1   =                  0.0 / matrix of rotation (2,1)
PC2_2   =                  1.0 / matrix of rotation (2,2)
COMMENT ----------------------------------------------------------------
MESSAGE = 'FITS (Flexible Image Transport System) format is defined in &'
CONTINUE  '"Astronomy and Astrophysics", volume 376, page 359; bibcode: &'
CONTINUE  '2001A&A...376..359H&'
CONTINUE  '' / In SFITSIO, this message is not written automatically.
END

このように,SFITSIOのテンプレート機能を使うと, FITSヘッダを定義する時に,ユーザが書かなければならない項目を 最低限で済ませる事ができます. 上記のテンプレートの例では,SIMPLEEXTENDNAXIS キーワードおよびFITSの標準的なキーワードに対するコメントを省略していますが, SFITSIOは自動的に必要なキーワードとコメントとを可能な限り補完し, キーワードの順序をFITS規約に合うように調整します.


Binary Table HDUの作成例

次はバイナリテーブルを作成する場合のテンプレートの例です.

#
# Primary
#
FMTTYPE  = 'ASTRO-X XXXX table format'
FTYPEVER = 101
EXTNAME  = 'Primary'
ORIGIN   = 'JAXA'
#
# 2nd HDU : Binary Table
#
XTENSION = BINTABLE
NAXIS2 = 24
PCOUNT = 65536
THEAP  = 32768
EXTNAME = XXXX_TEST
TXFLDKWD = 'TNOTE,TDESC,TLMIN,TLMAX,TDMIN,TDMAX'
 TTYPE#  = TIME
 TALAS#  = DATE
 TFORM#  = 1D
 TDESC#  = 'This is time' / description of this field
 TTYPE#  = COUNTER
 TFORM#  = 8J
 TLMIN#  = 1
 TLMAX#  = 16777216
 TDMIN#  = 0
 TDMAX#  = 0
 TTYPE#  = XNAME
 TFORM#  = 16A
 TTYPE#  = VLA
 TFORM#  = 1PJ(0)
 TNOTE#  = 'You can define variable length array in SFITSIO template&'
 CONTINUE  '' / annotation of this field

バイナリテーブルの場合は,プライマリHDUに関する記述を完全に省略する事も できますし,この例のように定義したいキーワードのみ書く事もできます.

2つめのHDUの定義は,必ず「XTENSION」キーワードから開始し, BITPIXNAXISNAXIS1NAXIS2PCOUNTGCOUNTTFIELDS を省略可能です.なお,この例で使っている TXFLDKWDキーワードは SFITSIO の独自規約で, FITS規約には存在しないテーブルカラムのキーワード (例えば,TLMINnTLMAXn 等) を宣言するためのものです.

カラム(フィールド)の定義については, 「TTYPE#」のように,キーワードの数字のかわりにえ 「#」記号を書くと,自動ナンバリングを行ないます. ただし,

 TTYPE#  = TIME
 TTYPE#  = COUNTER
 TFORM#  = 1D
 TFORM#  = 8J

のような並びの場合は,期待通りの動作をしないのでご注意ください.

では,テンプレートから作成したFITSファイルのヘッダを見てみましょう.

SIMPLE  =                    T / conformity to FITS standard                   
BITPIX  =                   16 / number of bits per data pixel                 
NAXIS   =                    0 / number of data axes                           
EXTEND  =                    T / possibility of presence of extensions
FMTTYPE = 'ASTRO-X XXXX table format' / type of format in FITS file            
FTYPEVER=                  101 / version of FMTTYPE definition                 
EXTNAME = 'Primary '           / name of this HDU                              
ORIGIN  = 'JAXA    '           / organization responsible for the data         
END                                                                            
XTENSION= 'BINTABLE'           / type of extension                             
BITPIX  =                    8 / number of bits per data element
NAXIS   =                    2 / number of data axes                           
NAXIS1  =                   64 / width of table in bytes                       
NAXIS2  =                   24 / number of rows in table                       
PCOUNT  =                65536 / length of reserved area and heap
GCOUNT  =                    1 / number of groups                              
TFIELDS =                    4 / number of fields in each row                  
THEAP   =                32768 / byte offset to heap area                      
EXTNAME = 'XXXX_TEST'          / name of this HDU                              
TXFLDKWD= 'TALAS,TDESC,TNOTE,TLMIN,TLMAX,TDMIN,TDMAX' / extended field keywords
TTYPE1  = 'TIME    '           / field name                                    
TALAS1  = 'DATE    '           / aliases of field name                         
TFORM1  = '1D      '           / data format : 8-byte REAL                     
TDESC1  = 'This is time'       / description of this field                     
TTYPE2  = 'COUNTER '           / field name                                    
TFORM2  = '8J      '           / data format : 4-byte INTEGER                  
TLMIN2  =                    1 / minimum value legally allowed                 
TLMAX2  =             16777216 / maximum value legally allowed                 
TDMIN2  =                    0 / minimum data value                            
TDMAX2  =                    0 / maximum data value                            
TTYPE3  = 'XNAME   '           / field name                                    
TFORM3  = '16A     '           / data format : STRING                          
TTYPE4  = 'VLA     '           / field name                                    
TFORM4  = '1PJ(0)  '           / data format : variable length of 4-byte INTEGER
TNOTE4  = 'You can define variable length array in SFITSIO template&'          
CONTINUE  '' / annotation of this field                                        
END                                                                            

SFITSIOテンプレートのルール

SFITSIOのテンプレート機能は,次のルールにより動作します.

  1. テンプレートファイルはplain textとし, 改行コードはUNIXまたはDOS形式に限ります.
  2. 先頭が「#」記号の行は無視されます.
  3. タブ文字は空白に置き換えられます.
  4. キーワードの位置,「=」記号の位置,値の位置,「/」 の位置,コメント文の位置は, それらの順序がFITSヘッダと同様であれば任意です. ただし,空白またはタブ文字が行の先頭から8文字続いた場合は, 「空白8文字キーワード」のレコードを作ります.
  5. テンプレートのカラム長(横方向の長さ)に制限はありません.
  6. 長い文字列値は,1行にそのまま記述しても, CONTINUE を使って複数行に分けて記述してもかまいません. ただし,CONTINUEを使った場合は テンプレート上の接続文字「&」の位置が FITSファイルのヘッダに反映されるとは限りません.
  7. 文字列値は,数字や論理値(T または F)と解釈できない場合は クォーテーションを省略できます. ただし,CONTINUE を伴なう場合は, クォーテーションを省略しない事を推奨します.
  8. 1行に非常に長い COMMENT レコードが書かれた場合 は,複数の COMMENT レコードに分けてヘッダに保存されます (できるだけ空白文字で分けるようにしています).
  9. 2つめ以降のHDUに関する記述は,必ず「XTENSION」で始めなければ なりません.
  10. XTENSION」キーワードとテーブルのカラム(フィールド) に関するキーワードを除き,キーワードの順序は任意です.
  11. テンプレート上のキーワードの順序は,FITS規約に合わないものを除き, FITSファイルでのヘッダに反映されます.
  12. Image HDUでは,SIMPLENAXISEXTENDPCOUNTGCOUNT キーワードを省略できます.
  13. Binary Table HDU または ASCII Table HDUでは, BITPIXNAXISNAXIS2PCOUNTGCOUNTTFIELDS キーワードを省略できます. Binary Table HDUでは,NAXIS1も省略できます.
  14. TTYPEn 等のテーブルのカラム(フィールド)に関する記述では, キーワードの数字 n のかわりに「#」記号を与える事により, 自動的にカラム番号を割り当てます. この自動ナンバリングは, 最初に現れた「#」記号付きキーワードをトリガとして ナンバリングのためのカウンタを増やす事により行われます.
  15. /」以降のコメントが省略された場合, FITS標準のキーワードを持つレコードついては確実に SFITSIO搭載のデフォルトのコメントで自動補完します. FITS標準以外のキーワードについては, 一般的なものについてのみ自動補完します. SFITSIO に搭載されているヘッダのコメント辞書については, fits_header_record.cc の最初の部分をご覧ください.
  16. 「キーワード =/ コメント」の形式のレコードを作る場合は, 「=」記号を省略する事はできません.
  17. 現在のバージョンでは,テンプレート上のキーワードの小文字・大文字は 区別しませんが, 将来の拡張を考え, キーワードは大文字で書いた方が良いでしょう.