PIONEチュートリアル-package
ここでは、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といったファイルができています。
作成例3(ファイルをまとめる)
パッケージの主な目的は複数のpione定義書を一つにまとめることなので試してみましょう。今回はPIONEチュートリアル#応用1(フローの制御)にてルール毎にファイルを単純に分割してみます。なお、それぞれのルールは別々のスクリプトで実行されるのでEosのコマンドを実行するルールは環境ファイルを読み込むようにします。
Main.pione
.@ PackageName :: "CenterGet" .@ Editor :: "Kinoshita" .@ Tag :: "v0.0.1" Rule Main input '*.mrc'.all input 'Eos_env' output '*.roi' output '*.tiff' Flow rule Initial rule First rule Second rule Final End
Initial.pione
.@ PackageName :: "CenterGet"
.@ Editor :: "Kinoshita"
.@ Tag :: "v0.0.1"
Rule Initial
input '*.mrc'
output '{$I[1][1]}.parameters'
Action
echo "40 40 50" > {$O[1]}
End
First.pione
.@ PackageName :: "CenterGet"
.@ Editor :: "Kinoshita"
.@ Tag :: "v0.0.1"
Rule First
input '*.mrc'
input 'Eos_env'
output '{$I[1]}.info'
Action
source {$I[2]}
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
.@ PackageName :: "CenterGet"
.@ Editor :: "Kinoshita"
.@ Tag :: "v0.0.1"
Rule Second
input '*.mrc'
input '{$I[1]}.info'
input '{$I[1][1]}.parameters'
input 'Eos_env'
output '{$I[1][1]}.roi'
Action
source {$I[4]}
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
.@ PackageName :: "CenterGet"
.@ Editor :: "Kinoshita"
.@ Tag :: "v0.0.1"
Rule Final
input '*.mrc'
input '{$I[1][1]}.roi'
input 'Eos_env'
output '{$I[1]}-1.tiff'
output '{$I[2]}-1.tiff'
output '{$I[1]}-2.tiff'
output '{$I[2]}-2.tiff'
Action
source {$I[3]}
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:/Users/teppeikinoshita/Eos/tutorial/SampleCode/PIONE/Package3/pione-package.json info: Package local:/Users/teppeikinoshita/Eos/tutorial/SampleCode/PIONE/CenterGet(Kinoshita)+v0.0.1.ppg has been built successfully.
今回はCenterGet(Kinoshita)+v0.0.1.ppgといったファイルができています。