本家様 http://www.mrc-lmb.cam.ac.uk/kzhang/
Gctfと同じサイトです
現時点(170928)では最新版が Gautomatch_v0.56 で、ダウンロードサイトを訪れると cuda8.0 に対応して
各種sm毎にバイナリーが用意されている。
利用するnvidiaのカードがMaxwellベースの「GM20{0|4|6}」チップならsm_52、Pascalベースの「GP10{2|4|6|7|8}」チップならsm_61で用意する。カードによる下位互換性はあるようなので「GP102」搭載カードでも「sm_51」のプログラムは動く
ここでは
[root@c ~]# mkdir /Appl/Gautomatch/v0.56
[root@c ~]# cd /Appl/Gautomatch/v0.56
[root@c v0.56]# curl -R -O http://www.mrc-lmb.cam.ac.uk/kzhang/Gautomatch/Gautomatch_v0.56/Gautomatch_v0.56_sm52_cu8.0
[root@c v0.56]# chmod +x ./Gautomatch_v0.56_sm52_cu8.0
[root@c v0.56]# ln -s Gautomatch_v0.56_sm52_cu8.0 gautomatch
[root@c v0.56]# ln -s Gautomatch_v0.56_sm52_cu8.0 Gautomatch
[root@c ~]# rm /Appl/Gautomatch/cr ; ln -s /Appl/Gautomatch/v0.56 /Appl/Gautomatch/cr
サンプルファイルがあるので、それに実行方法らが記載されている。
下記はサンプルファイルの一部で「ribosome_automatch_test8.png」である。
こんな感じで粒子をpickできるよとの資料みたい。実行方法は同封の「readme.txt」を参照のこと
ここではこの画像を再現してみた。
対象となる画像ファイルが「test8.mrc」で
[saber@e ~]$ gautomatch --apixM 1.34 --diameter 240 --min_dist 200 --cc_cutoff 0.25 --speed 1 test8.mrc
より「test8_automatch.box」「test8_automatch.star」「test8_nonunique.box」「test8_rejected.box」「test8_rejected.star」が得られた。「test8_automatch.box」の中身は下記のようになっている。
1121 27 238 238 0.642691 0 0.000000
2019 71 238 238 0.599376 0 0.000000
2835 21 238 238 0.430485 0 0.000000
357 143 238 238 0.508037 0 0.000000
921 129 238 238 0.636458 0 0.000000
2343 89 238 238 0.366626 0 0.000000
2645 127 238 238 0.646135 0 0.000000
:
gautomatchはそのまま実行したら1プロセス、1GPUでしか走らない. 4GPUマシンなら4つ同時に動かしたいものである.
方法はいろいろあるのだが、ここでは parallel コマンドを併用してみる
下記はmrcファイルの在処に移って、parallelコマンドで4同時並行に実行する方法です。
「-j4」は4同時を意味して、「--gid」はGautomatchでの使用するGPUデバイスID(0,1,2,3)を指定します。
ここで「'$*1'」として「{%}」はparallelの「-j」と連動していて「同時並行プロセスの何番目のプロセス」を示します。
っで1番目のプロセスなら「--gid $(1-1)」で「--gid 0」と指定され、2番目なら「--gid $(2-1)」で「--gid 1」となります.
「yum --enablerepo=epel install parallel 」*epelで入手可能
cd MotionCorr/job002/Micrographs/
ls *.mrc | parallel -j4 Gautomatch --gid '$(({%} - 1))' --speed 1 --apixM 1.47 --diameter 150 --cc_cutoff 0.5 --lave_D 150 --lsigma_D 300 {}
「test8_automatch.box」の中身からその並びは x, y, height, width,,,だろうか....
この値を使って、画像上に四角を載せてみる。
まず、mrcファイルでの扱いは難しいので、jpegに変換。EMAN2パッケージの「e2proc2d.py」を使用
[saber@e ~]$ e2proc2d.py test8.mrc test8.jpeg
Shrinkはしてません
その後、下記のようなphpスクリプトで描かせてみた
<?php
$f = "test8.jpeg";
$box="test8_automatch.box";
$img = ImageCreateFromJPEG( $f );
imagesetthickness($img, 5);
$color = imagecolorallocate($img, 255, 0, 255);
$fp=fopen($box,"r");
if($fp){
while(($b=fgets($fp,4096)) !== false){
if ( preg_match("/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/",$b,$m) ){
imagerectangle ($img, $m[1] , $m[2], ($m[1] + $m[3]), ($m[2] + $m[3]), $color);
}
}
fclose($fp);
}
imagejpeg($img, "test8_particle.jpeg");
imagedestroy($img);
?>
っが、
と合わない。どうやら画像側の上下の反転が必要なようで、ImageMagickのconvrtを使って反転
[saber@e ~]$ convert -flip test8.jpeg test8_flip.jpeg
この「test8_flip.jpeg」を先ほどのphpスクリプトに流すと、
あとphpスクリプトと微調整して
となる。一応近いかな
なぜ「flip」が必要かは原点の取り方なのか良く分からない...
phpスクリプトで、「imagerectangle」部分を
- imagerectangle ($img, $m[1] , $m[2], ($m[1] + $m[3]), ($m[2] + $m[3]), $color);
+ imagerectangle ($img, $m[1] , (4096 - ($m[2] + $m[3])) , ($m[1] + $m[3]), (4096 - $m[2]) , $color);
とすると上下の反転せずとも粒子のpick場所を正しく表示できるけど...
そもそも「ribosome_automatch_test8.png」でなぜ反転させたのか?
ほか、relion-tutorialで出されているFalconの画像でも行ってみた
計算パラメータは下記として
[saber@e ~]$ gautomatch --apixM 3.54 --diameter 200 --min_dist 200 --cc_cutoff 0.25 --speed 1 Falcon_2012_06_12-14_33_35_0.mrc
Gautomatchで推定された粒子が下記と成る
一方で、この「Falcon_2012_06_12-14_33_35_0.mrc」をrelionの「manual-picking」で開くと上下の反転されて表示される
Gautomatchを使ってこんなアプリを作ってみた。
満足がいくまでパラメータを変更していただき、その値を使って対象ファイルからparticleをpickするもの。