「PIONEチュートリアル-package」の版間の差分
(→作成例3(ファイルをまとめる)) |
|||
行56: | 行56: | ||
=== 作成例3(ファイルをまとめる) === | === 作成例3(ファイルをまとめる) === | ||
− | パッケージの主な目的は複数の[[pione定義書]]を一つにまとめることなので試してみましょう。今回は[[PIONEチュートリアル#応用1(フローの制御)]] | + | パッケージの主な目的は複数の[[pione定義書]]を一つにまとめることなので試してみましょう。今回は[[PIONEチュートリアル#応用1(フローの制御)]]にてルール毎にファイルを単純に分割したファイルにアノテーションを記述したファイルを追加し、パッケージとしてひとつにまとめます。<br> |
<br> | <br> | ||
2014年11月20日 (木) 05:13時点における版
ここでは、PIONEのパッケージ作成について示します。これにより複数のpione定義書を1つにまとめることができ、PIONE-WebClientで使用するときに1つのファイルを選ぶだけで済むので、ユーザが内部の処理の組み合わせを考えることなく複雑な処理を行うことができます。
作成例1(基本)
まずは最も単純な例でパッケージを作成してみましょう。PIONEチュートリアル#基本1(特定のファイルを出力する)のHelloプログラムをパッケージ化してみます。まずpione定義書にパッケージ化のための情報を書き込みます。
.@ PackageName :: "HelloWorld" Rule Main output 'message.txt' Action echo "Hello PIONE world !" > message.txt End
このファイルはこちらからダウンロードできます。ここでPackageNameはパッケージ化したときの名前を指します。
次に下記のコマンドを入力するとパッケージが作成されます。
$ pione package build Package1 info: update the package info file: local:/Eos/tutorial/SampleCode/PIONE/Package1/pione-package.json info: Package local:/Eos/tutorial/SampleCode/PIONE/HelloWorld.ppg has been built successfully.
これによりHelloWorld.ppgというパッケージファイルができます。なおPackage1はHelloプログラムを格納しているディレクトリ名です。
主にpione定義書へのパッケージ情報(アノテーション)の追記とパッケージ化のコマンドでパッケージが作成される仕組みになっています。
作成例2(アノテーションの追加)
次はアノテーションを追加してパッケージを作成してみましょう。#作成例1(基本)に追加してみます。
.@ PackageName :: "HelloWorld" .@ Editor :: "Kinoshita" .@ Tag :: "v0.0.1" Rule Main output 'message.txt' Action echo "Hello PIONE world !" > message.txt End
このファイルはこちらからダウンロードできます。ここでEditorは作者名、タグはバージョンNo. などを付けます。使用する(した)パッケージの区別がつきやすくするために書くようにしましょう。では、同様にパッケージを作成してみます。
/PIONE$ pione package build Package2/ info: update the package info file: local:/Eos/tutorial/SampleCode/PIONE/Package2/pione-package.json info: Package local:/Eos/tutorial/SampleCode/PIONE/HelloWorld(Kinoshita)+v0.0.1.ppg has been built successfully.
今回はHelloWorld(Kinoshita)+v0.0.1.ppgといったファイルができています。実行例についてはPIONE Webclientチュートリアル#パッケージ(.ppg)ファイルで実行をご覧下さい。
作成例3(ファイルをまとめる)
パッケージの主な目的は複数のpione定義書を一つにまとめることなので試してみましょう。今回はPIONEチュートリアル#応用1(フローの制御)にてルール毎にファイルを単純に分割したファイルにアノテーションを記述したファイルを追加し、パッケージとしてひとつにまとめます。
Annotation.pione
.@ PackageName :: "CenterGet" .@ Editor :: "Kinoshita" .@ Tag :: "v0.0.4"
Main.pione
Rule Main input '*.mrc'.all output '*.roi' output '*.tiff' Flow rule Initial rule First rule Second rule Final End
Initial.pione
Rule Initial input '*.mrc' output '{$I[1][1]}.parameters' Action echo "40 40 50" > {$O[1]} End
First.pione
Rule First input '*.mrc' output '{$I[1]}.info' Action mrcImageInfo -I -i {$I[1]} \ | head -2 | tail -1 \ | awk '{printf("%s %s %s", $3, $4, $5)}' \ | tr -c '[0-9]' ' ' \ > {$O[1]} End
Second.pione
Rule Second input '*.mrc' input '{$I[1]}.info' input '{$I[1][1]}.parameters' output '{$I[1][1]}.roi' Action Center_x=$(awk '{printf("%s\n", $1)}' {$I[2]}) Center_y=$(awk '{printf("%s\n", $2)}' {$I[2]}) Center_z=$(awk '{printf("%s\n", $3)}' {$I[2]}) N_x=$(awk '{printf("%s\n", $1)}' {$I[3]}) N_y=$(awk '{printf("%s\n", $2)}' {$I[3]}) N_z=$(awk '{printf("%s\n", $3)}' {$I[3]}) mrcImageCenterGet -i {$I[1]} -o {$O[1]} \ -Cx $Center_x -Cy $Center_y -Cz $Center_z \ -Nx $N_x -Ny $N_y -Nz $N_z End
Final.pione
Rule Final input '*.mrc' input '{$I[1][1]}.roi' output '{$I[1]}-1.tiff' output '{$I[2]}-1.tiff' output '{$I[1]}-2.tiff' output '{$I[2]}-2.tiff' Action mrcImageProjection -i {$I[1]} -o {$I[1]}.2d mrc2tiff -i {$I[1]}.2d -o {$O[1]} mrcImageProjection -i {$I[1]} -o {$I[1]}.2d1 -m 1 mrc2tiff -i {$I[1]}.2d1 -o {$O[3]} mrcImageProjection -i {$I[2]} -o {$I[2]}.2d mrc2tiff -i {$I[2]}.2d -o {$O[2]} mrcImageProjection -i {$I[2]} -o {$I[2]}.2d1 -m 1 mrc2tiff -i {$I[2]}.2d1 -o {$O[4]} End
これらからパッケージを作成します。
/PIONE$ pione package build Package3/ info: update the package info file: local:/Eos/tutorial/SampleCode/PIONE/Package3/pione-package.json info: Package local:/Eos/tutorial/SampleCode/PIONE/CenterGet(Kinoshita)+v0.0.4.ppg has been built successfully.
今回はCenterGet(Kinoshita)+v0.0.4.ppgといったファイルができています。実行例についてはPIONE Webclientチュートリアル#パッケージ(.ppg)ファイルで実行(Eosのコマンド)をご覧下さい。
今回は元々一つだったpione定義書を分割して、また一つにしてパッケージ化しているので一見有用性がないように見えます。しかし、分割したファイルの内の一つを別の処理に差し替えたい場合、共通の処理として再利用したい場合などには非常に有効な手段といえます。
作成例4(一部処理だけ差し替える)
#作成例3(ファイルをまとめる)の一部を再利用して別の処理を作成してみましょう。前回はInitialにてROIファイルのサイズを(40, 40, 50)固定で設定していました。これを元の.mrcファイルサイズの80%に設定したもので差し替えてパッケージ化してみます。
Initial2.pione
Rule Initial input '*.mrc' output '{$I[1][1]}.parameters' Action mrcInfo -i {$I[1]} \ | head -1 \ | awk '{printf("%s %s %s", $4, $5, $6)}' \ | tr -c '[0-9]' ' ' \ > TMP awk '{printf("%d %d %d", $1*4/5, $2*4/5, $3*4/5)}' TMP \ > {$O[1]} End
さらにバージョンも変更してみます。
Annotation1.0.pione
.@ PackageName :: "CenterGet" .@ Editor :: "Kinoshita" .@ Tag :: "v0.1.0"
他のファイルはコピーまたはリンクを作ってパッケージしてみます。
今回の入力ファイル
1VOM.mrc | 1VOM-N.mrc | ||
![]() |
![]() |
![]() |
![]() |
xy平面 | yz平面 | xy平面 | yz平面 |
作成例3の出力ファイル
1VOM.roi | 1VOM-N.roi | ||
![]() |
![]() |
![]() |
![]() |
xy平面 | yz平面 | xy平面 | yz平面 |
今回の出力ファイル
1VOM.roi | 1VOM-N.roi | ||
![]() |
![]() |
![]() |
![]() |
xy平面 | yz平面 | xy平面 | yz平面 |
サイズの変更をすることができました。