cctbx.xfel に含まれる cxi.postrefine の使い方のメモ。たぶん世界初。
Indexing individual stills - cctbx_xfel が参考になる。インストール方法も、この wiki を参照のこと。
画像の変換
まず、画像を pickle 形式に変換する。
cxi.image2pickle *.img
少なくとも、BL-41XU の MX225HE の画像や、MOSFLM のチュートリアルに含まれているデータセット(いずれも MarCCD 形式)では上手くいった。ヘッダの値が正しくない場合は、wiki にあるコマンドライン・オプションを使って、上書きすべし。
指数付けと積分
検出器のゲインを調べて(iMOSFLM の Experiment Settings ダイアログを見るとよい)、
integration.detector_gain=0.87
などと書いた index.phil を作る。
これと変換後の画像を cxi.index で処理する。
cxi.index -d -o index target=index.phil *.pickle
これで、index ディレクトリに int_****.pickle というファイルができる。
マージ
target_space_group=P43212 pixel_size_mm=0.07324 target_unit_cell=78.4,78.4,37.5,90,90,90 run_no=1 d_min=2.5 d_max=100
などと書いた pr.phil を作る。空間群とピクセルサイズ(これは画像ファイルから読んでほしいよね)は、記述がないとメッセージで教えてくれるが、他が抜けていると意味不明なエラーを出して死ぬ。ソースコードを眺めながら、必要なパラメータを特定した。格子定数は cxi.index が出力したものは無視して、ここの値を使うようだ。格子定数は分解能の計算にも使われるので、指定が不適切だと、全ての反射が reject されてしまう。d_min に 0 はダメ。
これで準備完了。
cxi.postrefine input=pr.phil index/int*.pickle
などとすると、run_no で指定した名前のフォルダができて、その中にログとマージ後の mtz ファイルが出力される。最初のパスでとりあえずフレーム間のスケール+マージをして(CrystFEL の process_hkl --scale に相当)、それをリファレンスに使って post-refinement (partialator に相当)が行われる。
しかしながら、
WARNING mod_leastsqr.calc_spot_radius: Rh is woryingly large: 0.131488514426
という警告が大量に出て、ちゃんと動いていないようなので、現在原因追求中。これは、mod_leastsqr.py の find_spot_radius (逆空間での格子点の半径 = mosaicity + divergence + etc を見積もる関数)が出している。
CrystFEL の stream ファイルから、cxi.index が出力するのと同じ形式の pickle ファイルを作るコンバータも書いたが、上の問題があるため、動作確認できていない。第一段階のマージ後の統計値はまともそうなのだが。