RELION に mrcs 形式の particle をインポートする

公開データセットを使って RELION の練習をしている。高分解能データが触ってみたいので、 EMPIAR ID 10029 にある GroEL のシミュレーションデータを使うことにした。EMAN2もっと低分解能の GroEL を題材にしたチュートリアル と同じように処理したところ、8コアのマシン単独で約 2.5 日間かかり、5.8 Å (at FSC 0.143) となった。RELION だとどうなるか試してみるのが目的だ。

Prepare input files - Relion にあるようにして、STAR ファイルを作る。defocus 値などを EMAN2 の処理結果から引きぬかなければならない。

EMAN2 に含まれている e2refinetorelion2d.py によると、info/*.json にある defocus 値を 10000 倍したものを rlnDefocusU と V に設定し、rlnDefocusAngle は 0 でいいらしい。問題は rlnAmplitudeContrast である。json ファイル中には % で記述されているようなので、JSON ファイルに 10 とあれば STAR ファイルには 0.1 を指定すればよさそうだが、コードでは 10 で割っている。そもそも コードだと ampcont をパースした値を defocus 用の変数 DEF1, DEF2 に格納してるが、バグだろうか。

そのへんを配慮しつつ、json2star.sh を作った。

#!/bin/bash

name=`basename $1`
defocus=`grep defocus $1 | cut -d: -f2 | tr -d ,`
defocus=`echo $defocus*10000 | bc`
ampcont=`grep ampcont $1 | cut -d: -f2 | tr -d ,`
ampcont=`echo "scale=1;$ampcont/100" | bc`
voltage=`grep voltage $1 | cut -d: -f2 | tr -d ,`
nptcl=`grep ptcl_repr $1 | head -n1| cut -d: -f2 | tr -d ,`
cs=`grep \"cs\" $1 | cut -d: -f2 | tr -d ,`
imgname=Micrographs/${name%_info.*}.mrcs

relion_star_datablock_stack $nptcl $imgname $imgname $defocus $defocus 0 $voltage $cs $ampcont

これを

relion_star_loopheader rlnImageName rlnMicrographName rlnDefocusU rlnDefocusV rlnDefocusAngle rlnVoltage rlnSphericalAberration rlnAmplitudeContrast > particles_all.star
for f in info/micrograph_0*.json; do bash json2star.sh $f; done >> particles_all.star

などとして実行し、particles_all.star を作る。

中身は、

data_
loop_
_rlnImageName
_rlnMicrographName
_rlnDefocusU
_rlnDefocusV
_rlnDefocusAngle
_rlnVoltage
_rlnSphericalAberration
_rlnAmplitudeContrast
000001@Micrographs/micrograph_001.mrcs Micrographs/micrograph_001.mrcs 22770.0018882751460000 22770.0018882751460000 0 300.0 2.700000047683716 .1 
000002@Micrographs/micrograph_001.mrcs Micrographs/micrograph_001.mrcs 22770.0018882751460000 22770.0018882751460000 0 300.0 2.700000047683716 .1 
000003@Micrographs/micrograph_001.mrcs Micrographs/micrograph_001.mrcs 22770.0018882751460000 22770.0018882751460000 0 300.0 2.700000047683716 .1 
000004@Micrographs/micrograph_001.mrcs Micrographs/micrograph_001.mrcs 22770.0018882751460000 22770.0018882751460000 0 300.0 2.700000047683716 .1 
000005@Micrographs/micrograph_001.mrcs Micrographs/micrograph_001.mrcs 22770.0018882751460000 22770.0018882751460000 0 300.0 2.700000047683716 .1
(中略)
000199@Micrographs/micrograph_001.mrcs Micrographs/micrograph_001.mrcs 22770.0018882751460000 22770.0018882751460000 0 300.0 2.700000047683716 .1 
000200@Micrographs/micrograph_001.mrcs Micrographs/micrograph_001.mrcs 22770.0018882751460000 22770.0018882751460000 0 300.0 2.700000047683716 .1 
000001@Micrographs/micrograph_002.mrcs Micrographs/micrograph_002.mrcs 22949.998378753660000 22949.998378753660000 0 300.0 2.700000047683716 .1 
000002@Micrographs/micrograph_002.mrcs Micrographs/micrograph_002.mrcs 22949.998378753660000 22949.998378753660000 0 300.0 2.700000047683716 .1 
000003@Micrographs/micrograph_002.mrcs Micrographs/micrograph_002.mrcs 22949.998378753660000 22949.998378753660000 0 300.0 2.700000047683716 .1 
(後略)

のような感じになっている。rlnImageName が物理的なファイル名であり、rlnMicrographName がノイズ補正などに使われるグループ名(Prepare input files - Relion 参照)らしい。これを RELION GUI の Display ボタンで表示できることを確認した。

次に、これを relion_preprocess で処理して、蛋白質を白・背景を黒になるように反転し、強度を正規化する。

relion_preprocess --o imported --operate_on particles_all.star --norm --bg_radius 70 --norm --white_dust -1 --black_dust -1 --invert_contrast

ここで --operate_on オプションを使うのがポイントである。どこにも使い方が書いてないので一晩悩み、ダミーの box ファイルを作るとか迷走してしまった。最終的に、Classification example - Relion がヒントになった。

これで imported.star と imported.mrcs (全部の画像が入った巨大なファイル)ができた。今、2D classification を走らせているが、一応動いているようだ。結果がちゃんとしているかは、今後確認する。→ 8/6 うまく三次元再構成できることを確認した。