CrystFEL の hdfsee メモ

CrystFEL 付属の HDF 画像ビューア hdfsee の使い勝手がイマイチなので、いろいろ改造している。素直な GTK アプリケーションなので、触るべきところは自明だが、一応メモ:

ソースコード

ソースコードは hdfsee.c, hdfsee-render.c, dw-hdfsee.c と同名のヘッダファイル。hdfsee.c にエントリポイントがあり、コマンドライン引数の解釈など。dw-hdfsee.c が GUI やロジックの本体。hdfsee-render.c は回折画像のレンダラ。スポットや解像度リングは dw-hdfsee.c の担当。

デバッグ

デフォルトで作られる Makefile は初めから -g フラグを立てているので、そのままデバッグできる。src/hdfsee はスクリプトであり、本体は src/.lib/hdfsee である。gdbデバッグするときは、これを指定しよう。

全体の構造

MDI で複数の画像を開ける。DisplayWindow構造体が1つのビュー・ウィンドウに対応。データと表示設定を保持している。

例えば Intensity Boost の値は boostint に保存されている。これらの値をいじったあと、displaywindow_update(dw) とすれば画面が更新される。

描画の流れ

cairo_surface_t *surf バッファが repaint イベントで、画面に bitblt される。このバッファを更新するのが、draw_stuff 関数。 回折画像はパネルごとに GdkPixbuf **pixbufs (n_pixbufs (=検出器のタイル数)分の配列へのポインタ)に入っていて、draw_panel_recangle で .geom ファイルの情報に基づいて適切な位置にレンダリングされる。 draw_stuff では、他にも解像度リング(draw_ring) やスポットなども描かれる。