電顕で撮影した画像を次々処理したいということでツールを作ってみた
コンセプトは
基本webはdhtmlxを使ってるので大抵のブラウザで動くかと.
認証が必須でAD認証を使ってます. LDAPでも動くかもしれない.
relionからMotionCor2,Gctfを使ってるので nvidia カードを持つ計算ノードは必須.
(RelionMotioncorrとctffind4でも可能)
500MBなイメージを連続(1枚/1min)で出る環境なら1070を2枚は欲しいかな. っでないと自転車操業状態.
さらに同時に2Dを行うならもう一枚は欲しいかな.
PostgreSQL/mariadb/SQLiteらのデータベースは使ってません.
撮影終了後にrelionを開くと「Import」「Motion correction」「CTF estimetion」が完了となっている画面になります
全体像
撮影画像を右クリックしてメニュー操作すると
下記のような画面が表示されて、Gautomatch、RelionLoG、crYOLOらによる粒子のpickができる。
(各pickツールのパラメーターを調整しつつ粒子のpick具合を繰り返し確認できます)
パラメータを調整しながら何度でも条件検討が行えます。
使用するpickツールとそのパラメータが決まったら、いくつまで粒子を集めるかを指定します。
(190506更新)
指定した粒子数で2D Classificationが行われます。
また1万粒子毎とかで2D Classificationも行えます。
表現としてありかは微妙ですが、下記は横軸にclass、縦軸をiterとしてます。
(190506更新)
1万粒子毎とかでの表示切り替えは下記のようにプルダウンで行います
ctffind4,gctfの計算値からヒストグラムの表示も可能です
参照論文
「Automated data collection in single particle electron microscopy」
https://academic.oup.com/jmicro/article/65/1/43/2579697
web画面のボタンをポチッと押せば、それが全体のトリガーとなるのだが、より細かい内容を明記すると
「ポチッ」と押下した後、特定のフォルダを監視します。
ファイルが電顕から届いたら inotify-tools で「CLOSE_WRITE,CLOSE」を確認して、ジョブコントロール(PBSpro)へ処理を流します。
ですから、ファイルが届くたびにジョブが発行されるのですが、このジョブは「その届いたファイルを処理」するのではなく、
「未処理のファイルがあったら実行する」内容になっている(relionの「--only_do_unfinished」を活用)
初回は、届いたファイルのみを処理するであろうが、二回目のジョブはそれまで届いたファイルを処理します。
そうなると余分なジョブが発生してしまうが、それを抑えるために、ジョブ発行数は6本までとかに制限しています。
留意点
ジョブを発行するタイミングをinotify-toolsの「CLOSE_WRITE,CLOSE」に依存しているので、
電顕から届くファイルはLinuxファイルシステムに置く必要がある。
電顕から届くファイルがwindowsServerに溜まるので、それをwindowsOS提供のnfsでexportして、linuxがそれをnfs mountすれば、
監視ができるかと思ったのだが、無理でした。同様にwindows共有で提供して、linux側からsmbmount(cifsmount)しても駄目だった..
この場合、linux側でsmb共有フォルダを用意して、そこにwindows側が書き込めば大丈夫となった。
参照inotify-tools/WindowsPC
(1909)この部分に修正を加えた。電顕からのファイルを溜めるフォルダをwindows共有させ、cifs mountでマウントさせ、
60秒に一度とかで rsync を発行させるようにした。inotify-toolsを使ったトリガーには変更ないが、
windows側にあるファイルをsilo側でrsyncを使って持ってこさせた。
これでwindows --> siloサーバ(Linux) への転送アプリを使わなくても大丈夫。
次のイメージファイルが届く前に計算を終えさせる必要がある。
relion謹製MotionCorrで4k,8kでの計算時間を調べてみた。
結果、4k画像であれば、2coreで [1枚/1分] に十分に間に合いそうである。
263MB 4k画像ファイル, Ryzen7(8c/16t), gcc | ||||
core | 1core | 2core | 3core | 4core |
time | 62sec | 30sec | 22sec | 16sec |
次に8kの画像であるが、intelマシンではこうなった
530MB 8k画像ファイル, i9-7960X(16c/32t) | コンパイラ | |||
core | 4core | 8core | 16core | |
time | 2m47.646s | 1m32.670s | 1m5.247s | gcc |
time | 1m16.285s | 0m44.405s | 0m34.189s | icc |
同じデータをRyzen7で回してみた
530MB 8k画像ファイル, Ryzen7(8c/16t) | コンパイラ | ||
core | 4core | 8core | |
time | 2m3.169s | 1m19.468s | gcc |
time | 2m0.333s | 1m20.464s | gcc7 |
time | 2m12.625s | 1m30.408s | icc |
どうも8kで回すにはハイスペックが必要みたい...