PIONEチュートリアル-package

提供: Eospedia
2014年11月20日 (木) 01:36時点におけるKinoshita (トーク | 投稿記録)による版

移動: 案内検索

 ここでは、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(フローの制御)にてルール毎にファイルを単純に分割したファイルをパッケージとしてひとつにまとめてます。

Main.pione

.@ PackageName	:: "CenterGet"
.@ Editor		:: "Kinoshita"
.@ Tag			:: "v0.0.2"

Rule Main
	input '*.mrc'.all
	output '*.roi'
	output '*.tiff'
Flow
	rule Initial
	rule First
	rule Second
	rule Final
End


Initial.pione

.@ PackageName	:: "CenterGet"
.@ Editor		:: "Kinoshita"
.@ Tag			:: "v0.0.2"

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.2"

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

.@ PackageName	:: "CenterGet"
.@ Editor		:: "Kinoshita"
.@ Tag			:: "v0.0.2"

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

.@ PackageName	:: "CenterGet"
.@ Editor		:: "Kinoshita"
.@ Tag			:: "v0.0.2"

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.2.ppg has been built successfully.

今回はCenterGet(Kinoshita)+v0.0.2.ppgといったファイルができています。実行例についてはPIONE Webclientチュートリアル#パッケージ(.ppg)ファイルで実行(Eosのコマンド)をご覧下さい。

今回は元々一つだったpione定義書を分割して、また一つにしてパッケージ化しているので一見有用性がないように見えます。しかし、分割したファイルの内の一つを別の処理に差し替えたい場合、共通の処理として再利用したい場合などには非常に有効な手段といえます。

作成例4(一部処理だけ差し替える)

 #作成例3(ファイルをまとめる)の一部を再利用して別の処理を作成してみましょう。