RELION の 2D / 3D classification で、iteration ごとに各クラスの割合がどう変化したかをプロットしたいと言われたので、スクリプトを作った。
for i in `seq 0 20`; do j=`printf %03d $i`; echo -n $j" "; relion_star_printtable run_it${j}_model.star data_model_classes _rlnClassDistribution | tr '\n' ' '; echo; done > dist.dat
relion_star_printtable がクラスごとに改行してしまうので、tr を使って置換するなど、ちょっとダサいことになっている。
こうすると、run_it_0NN_model.star (NN = 00 .. 20) から、割合を切り出して行に並べたデータファイル dist.dat
000 0.200000 0.200000 0.200000 0.200000 0.200000 001 0.200000 0.200000 0.200000 0.200000 0.200000 002 0.199695 0.201143 0.198778 0.200882 0.199502 003 0.214579 0.171917 0.207016 0.180553 0.225935 004 0.228429 0.149543 0.176681 0.134442 0.310905 005 0.105184 0.321839 0.107021 0.308757 0.157199 (後略)
ができるので、gnuplot で
plot for [i=2:6] 'dist.dat' using 1:i with line title "Class ".(i-1)
などとしてプロットする。for を使うには、比較的新しいバージョンが必要。
4.6 ではできたが、4.2 ではダメだった。
なお、ファイル数 (20) やクラス数 (5) を指定しなくて済むようにするのを、読者の練習課題とする。