「PIONEチュートリアル-package」の版間の差分

提供: Eospedia
移動: 案内検索
(作成例3(ファイルをまとめる))
行2: 行2:
 
<br>
 
<br>
  
=== 作成例1 ===
+
=== 作成例1(基本) ===
 
 まずは最も単純な例でパッケージを作成してみましょう。[[PIONEチュートリアル#基本1(特定のファイルを出力する)]]のHelloプログラムをパッケージ化してみます。まず[[pione定義書]]にパッケージ化のための情報を書き込みます。<br>
 
 まずは最も単純な例でパッケージを作成してみましょう。[[PIONEチュートリアル#基本1(特定のファイルを出力する)]]のHelloプログラムをパッケージ化してみます。まず[[pione定義書]]にパッケージ化のための情報を書き込みます。<br>
 
<br>
 
<br>
行29: 行29:
  
 
=== 作成例2(アノテーションの追加) ===
 
=== 作成例2(アノテーションの追加) ===
 次はアノテーションを追加してパッケージを作成してみましょう。[[#作成例1]]に追加してみます。<br>
+
 次はアノテーションを追加してパッケージを作成してみましょう。[[#作成例1(基本)]]に追加してみます。<br>
 
<br>
 
<br>
  
行56: 行56:
  
 
=== 作成例3(ファイルをまとめる) ===
 
=== 作成例3(ファイルをまとめる) ===
 パッケージの主な目的は複数の[[pione定義書]]を一つにまとめることなので試してみましょう。今回は[[PIONEチュートリアル#応用1(フローの制御)]]にてルール毎にファイルを単純に分割したファイルをパッケージとしてひとつにまとめてます。アノテーションはメインルールを含むファイルに書きます。<br>
+
 パッケージの主な目的は複数の[[pione定義書]]を一つにまとめることなので試してみましょう。今回は[[PIONEチュートリアル#応用1(フローの制御)]]にてルール毎にファイルを単純に分割したファイルにアノテーションを記述したファイルを追加して、パッケージとしてひとつにまとめてます。<br>
 
<br>
 
<br>
  
Main.pione<br>
+
Annotation.pione<br>
 
<pre>
 
<pre>
 
.@ PackageName :: "CenterGet"
 
.@ PackageName :: "CenterGet"
 
.@ Editor :: "Kinoshita"
 
.@ Editor :: "Kinoshita"
.@ Tag :: "v0.0.3"
+
.@ Tag :: "v0.0.4"
 +
</pre>
 +
<br>
  
 +
Main.pione<br>
 +
<pre>
 
Rule Main
 
Rule Main
 
input '*.mrc'.all
 
input '*.mrc'.all
行156: 行160:
 
/PIONE$ pione package build Package3/
 
/PIONE$ pione package build Package3/
 
info: update the package info file: local:/Eos/tutorial/SampleCode/PIONE/Package3/pione-package.json
 
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.3.ppg has been built successfully.
+
info: Package local:/Eos/tutorial/SampleCode/PIONE/CenterGet(Kinoshita)+v0.0.4.ppg has been built successfully.
 
</pre>
 
</pre>
今回はCenterGet(Kinoshita)+v0.0.3.ppgといったファイルができています。実行例については[[PIONE Webclientチュートリアル#パッケージ(.ppg)ファイルで実行(Eosのコマンド)]]をご覧下さい。<br>
+
今回はCenterGet(Kinoshita)+v0.0.4.ppgといったファイルができています。実行例については[[PIONE Webclientチュートリアル#パッケージ(.ppg)ファイルで実行(Eosのコマンド)]]をご覧下さい。<br>
 
<br>
 
<br>
 
今回は元々一つだった[[pione定義書]]を分割して、また一つにしてパッケージ化しているので一見有用性がないように見えます。しかし、分割したファイルの内の一つを別の処理に差し替えたい場合、共通の処理として再利用したい場合などには非常に有効な手段といえます。<br>
 
今回は元々一つだった[[pione定義書]]を分割して、また一つにしてパッケージ化しているので一見有用性がないように見えます。しかし、分割したファイルの内の一つを別の処理に差し替えたい場合、共通の処理として再利用したい場合などには非常に有効な手段といえます。<br>
行165: 行169:
 
=== 作成例4(一部処理だけ差し替える) ===
 
=== 作成例4(一部処理だけ差し替える) ===
 
 [[#作成例3(ファイルをまとめる)]]の一部を再利用して別の処理を作成してみましょう。前回はInitialにてROIファイルのサイズを(40, 40, 50)固定で設定していました。これを元の.mrcファイルサイズの80%に設定したもので差し替えてパッケージ化してみます。<br>
 
 [[#作成例3(ファイルをまとめる)]]の一部を再利用して別の処理を作成してみましょう。前回はInitialにてROIファイルのサイズを(40, 40, 50)固定で設定していました。これを元の.mrcファイルサイズの80%に設定したもので差し替えてパッケージ化してみます。<br>
 +
<br>
 +
Initial2.pione<br>
 +
<pre>
 +
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
 +
 +
</pre>
 +
<br>
 +
 +
さらにバージョンも変更してみます。<br>
 +
Annotation1.0.pione<br>
 +
<pre>
 +
.@ PackageName :: "CenterGet"
 +
.@ Editor :: "Kinoshita"
 +
.@ Tag :: "v0.1.0"
 +
 +
</pre>
 +
<br>
 +
 +
他のファイルはコピーまたはリンクを作ってパッケージしてみます。<br>
 +
<pre>
 +
 +
</pre>
 +
<br>
 +
 +
今回の入力ファイル<br>
 +
<table>
 +
<tr>
 +
<td>1VOM.mrc</td>
 +
<td></td>
 +
<td>1VOM-N.mrc</td>
 +
<td></td>
 +
</tr>
 +
<tr>
 +
<td>[[画像:Input-1VOM.png]]</td>
 +
<td>[[画像:Input1-1VOM.png]]</td>
 +
<td>[[画像:Input-1VOM-N.png]]</td>
 +
<td>[[画像:Input1-1VOM-N.png]]</td>
 +
</tr>
 +
<tr>
 +
<td>xy平面</td>
 +
<td>yz平面</td>
 +
<td>xy平面</td>
 +
<td>yz平面</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
作成例3の出力ファイル<br>
 +
<table>
 +
<tr>
 +
<td>1VOM.roi</td>
 +
<td></td>
 +
<td>1VOM-N.roi</td>
 +
<td></td>
 +
</tr>
 +
<tr>
 +
<td>[[画像:Outdata-PIONE-Advanced1-1.png]]</td>
 +
<td>[[画像:Outdata1-PIONE-Advanced1-1.png]]</td>
 +
<td>[[画像:Outdata-PIONE-Advanced1-2.png]]</td>
 +
<td>[[画像:Outdata1-PIONE-Advanced1-2.png]]</td>
 +
</tr>
 +
<tr>
 +
<td>xy平面</td>
 +
<td>yz平面</td>
 +
<td>xy平面</td>
 +
<td>yz平面</td>
 +
</tr>
 +
</table>
 +
<br>
 +
 +
今回の出力ファイル<br>
 +
<table>
 +
<tr>
 +
<td>1VOM.roi</td>
 +
<td></td>
 +
<td>1VOM-N.roi</td>
 +
<td></td>
 +
</tr>
 +
<tr>
 +
<td>[[画像:Outdata-PIONE-Package4-1.png]]</td>
 +
<td>[[画像:Outdata1-PIONE-Package4-1.png]]</td>
 +
<td>[[画像:Outdata-PIONE-Package4-2.png]]</td>
 +
<td>[[画像:Outdata1-PIONE-Package4-2.png]]</td>
 +
</tr>
 +
<tr>
 +
<td>xy平面</td>
 +
<td>yz平面</td>
 +
<td>xy平面</td>
 +
<td>yz平面</td>
 +
</tr>
 +
</table>
 +
<br>
 +
サイズの変更をすることができました。<br>
 
<br>
 
<br>

2014年11月20日 (木) 05:09時点における版

 ここでは、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
Input-1VOM.png Input1-1VOM.png Input-1VOM-N.png Input1-1VOM-N.png
xy平面 yz平面 xy平面 yz平面


作成例3の出力ファイル

1VOM.roi 1VOM-N.roi
Outdata-PIONE-Advanced1-1.png Outdata1-PIONE-Advanced1-1.png Outdata-PIONE-Advanced1-2.png Outdata1-PIONE-Advanced1-2.png
xy平面 yz平面 xy平面 yz平面


今回の出力ファイル

1VOM.roi 1VOM-N.roi
Outdata-PIONE-Package4-1.png Outdata1-PIONE-Package4-1.png Outdata-PIONE-Package4-2.png Outdata1-PIONE-Package4-2.png
xy平面 yz平面 xy平面 yz平面


サイズの変更をすることができました。