読者です 読者をやめる 読者になる 読者になる

どせいたんさき。

ナスダヨー

zero padding の量をまちがった fits を食わせると SFITSIO が死ぬ

問題

すばる望遠鏡 COMICS で取得した昔の fits ファイルをそのまま SFITSIO で読み込もうとすると

fits_hdu::header_load(): [ERROR] unsupported FITS type
fits_hdu::header_load(): [ERROR] this->header_load(tmp_header) failed.

というエラーが出て死ぬ.

原因

fits ファイルの中にはデータセクションの末尾をゼロ (0x00) でパディングされている.このゼロパディングの量が間違った fits ファイルを読み込むと, SFITSIO が新しい fits ファイルがやってきたのではないかと勘違いしてゼロパディングされた領域を新しい fits ヘッダとして読み込んでしまい,上記のようなエラーを出してしまうらしい.

f:id:xr0038:20141112135806p:plain:w600

解決策

現状では SFITSIO 以外のソフトウェアで一度 fits ファイルを開いて別ファイルとして保存するしかない.

簡単なパッチを書いて対策しようかとも思ったが,下手にいじると SFITSIO のコアな部分とバッティングしかねない.ゼロパディングの量についてある程度情報をまとめてから SFITSIO 開発者の方に連絡をとってみようと思っている.

余談

zero padding については pyfits でも問題になっていたことがあったようだ.

Fixed a crash when opening a file with extra zero padding at the end. Though FITS files should not have such padding, it's not explictly forbidden by the format either, and PyFITS shouldn't stumble over it. (#106)

pyfits 3.1 : Python Package Index