cctbx.xfel 読解メモその2

長くなったので項目を分けた。

xfel/command_line/frame_extractor.pyは DIALS の処理結果を cctbx.xfel 用の pickle に変換するもののようだ。xfel/command_line/frame_unpickler.py はその逆?

xfel/command_line/metrology.py は、detector metrology refinement を実行するコマンド。実体は、その1で述べたように xfel.metrology 以下にある mark??.py だが、現在のバージョンでは、mark10.py を使っているようだ。精密化サイクルとしては、

C.run_cycle_a()
C.run_cycle_b(0)

C.run_cycle_a()
C.run_cycle_b(1)

C.run_cycle_a() 

という呼び出しになっている。cycle a と b は、ファイル末尾のコメントに説明がある(mark9 で導入)。前者では、tile xy, frame xy, frame distance, frame rotz であり、後者では rotx, roty が精密化される。# post-refinement との関係

xfel/metrology/mark0.py は、もっとも原始的なモジュール。指数付け・積分結果を読み込み、観測されたスポット重心と prediction の並進ズレを計算する。prediction は rstbx/bandpass モジュールを用いて計算される(parameters_bp3 でパラメータを登録、use_case_bp3 で計算実行)。subpixel_joint_model は bandpass モジュールの計算内部で呼び出される。

xfel/metrology/mark3.py は、並進だけでなく、タイルの回転も考慮(回転中心はタイル中心)してフィットする。仕組みはさきほどと同じであり、最小化ターゲットは RMSD。

post-refinement と partiality の補正は、xfel/command_line/cxi_merge.py で行われる。特に scaling_manager::scale_all である。Postrefinement を行うかどうかは postrefinement.enable で設定される。さらに、モデルとして postrefinement.algorithm で rs か Deff を選択できる。ここでの target は I によるもので(fvec_callable)、spot 位置による制約はかかっていない。Deff は、mosaicity (ML_half_mosaicity_deg) と、mosaic block size (ML_domain_size_ang) から計算される。

mosaic model refinement の実装は、xfel/mono_simulation/mono_treatment.py にある。これは、例えば labelit/dptbx/refinement.py から呼び出される。rstbx/bandpass/use_case_bp3 のかわりに、xfel/mono_simulation/bandpass_gaussian.h を使っている(#なぜ?)。labelit 経由でのユースケースは不明。

delta psi refinement なら DIALS の algorithms/refinement/parameterisation/prediction_parameters_stills.py にも実装されているが、mosaic model の精密化は未実装である。