pione 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +13 -0
- data/Rakefile +3 -3
- data/example/DeferredChoice/DeferredChoice.pione +50 -0
- data/example/Fib/Fib.pione +17 -16
- data/example/SingleParticlesWithRef/SingleParticlesWithRef.Display2.pione +128 -0
- data/lib/pione.rb +1 -0
- data/lib/pione/agent/broker.rb +18 -4
- data/lib/pione/agent/task-worker.rb +19 -21
- data/lib/pione/command-option/task-worker-owner-option.rb +1 -1
- data/lib/pione/command/basic-command.rb +13 -8
- data/lib/pione/command/front-owner-command.rb +1 -1
- data/lib/pione/command/pione-broker.rb +2 -1
- data/lib/pione/command/pione-client.rb +41 -2
- data/lib/pione/command/pione-syntax-checker.rb +14 -3
- data/lib/pione/command/pione-task-worker.rb +4 -1
- data/lib/pione/command/pione-tuple-space-provider.rb +6 -7
- data/lib/pione/model/assignment.rb +6 -0
- data/lib/pione/model/message.rb +7 -3
- data/lib/pione/model/variable.rb +11 -0
- data/lib/pione/parser/common-parser.rb +36 -14
- data/lib/pione/parser/document-parser.rb +82 -5
- data/lib/pione/parser/rule-definition-parser.rb +2 -30
- data/lib/pione/system/config.rb +54 -6
- data/lib/pione/system/document.rb +13 -4
- data/lib/pione/system/global.rb +8 -8
- data/lib/pione/system/init.rb +3 -0
- data/lib/pione/transformer/document-transformer.rb +5 -1
- data/lib/pione/transformer/rule-definition-transformer.rb +8 -14
- data/lib/pione/tuple-space/tuple-space-receiver.rb +1 -1
- data/lib/pione/version.rb +2 -1
- data/pione.gemspec +2 -0
- data/test/parser/spec_document-parser.rb +5 -0
- data/test/parser/spec_document-parser.yml +62 -0
- data/test/{spec_document.rb → system/spec_document.rb} +22 -2
- data/test/test-util.rb +3 -3
- data/test/transformer/spec_rule-definition-transformer.rb +68 -73
- metadata +46 -5
- data/example/Fib/FibBC.pione +0 -56
data/History.txt
ADDED
data/Rakefile
CHANGED
@@ -3,13 +3,13 @@ require "bundler/gem_tasks"
|
|
3
3
|
$stand_alone = "bin/pione-client --stand-aline"
|
4
4
|
|
5
5
|
desc 'generate HTML API documentation'
|
6
|
-
task
|
7
|
-
sh
|
6
|
+
task 'html' do
|
7
|
+
sh 'bundle exec yard doc -o html --hide-void-return --no-api --private'
|
8
8
|
end
|
9
9
|
|
10
10
|
desc 'Show undocumented function list'
|
11
11
|
task 'html:undoc' do
|
12
|
-
sh 'yard stats --list-undoc --no-api --private'
|
12
|
+
sh 'bundle exec yard stats --list-undoc --no-api --private'
|
13
13
|
end
|
14
14
|
|
15
15
|
desc 'count characters in input direcotry'
|
@@ -0,0 +1,50 @@
|
|
1
|
+
Rule Main
|
2
|
+
output 'result.txt'
|
3
|
+
param $DIALOG := "zenity"
|
4
|
+
Flow
|
5
|
+
rule UserSelect.params({DIALOG: $DIALOG})
|
6
|
+
rule A
|
7
|
+
rule B
|
8
|
+
rule C
|
9
|
+
End
|
10
|
+
|
11
|
+
Rule UserSelect
|
12
|
+
output 'a.txt:b.txt:c.txt'
|
13
|
+
param $DIALOG
|
14
|
+
feature +Interactive
|
15
|
+
Action
|
16
|
+
if [ "{$DIALOG}" = "zenity" ]
|
17
|
+
then
|
18
|
+
zenity --list --title "select action" --column rule "rule A" "rule B" "rule C" > rule.txt
|
19
|
+
else
|
20
|
+
xmessage -print -center -buttons "rule A,rule B,rule C" "select action" > rule.txt
|
21
|
+
fi
|
22
|
+
RULE=`cat rule.txt`
|
23
|
+
case "$RULE" in
|
24
|
+
"rule A") touch a.txt ;;
|
25
|
+
"rule B") touch b.txt ;;
|
26
|
+
"rule C") touch c.txt ;;
|
27
|
+
esac
|
28
|
+
End
|
29
|
+
|
30
|
+
Rule A
|
31
|
+
input 'a.txt'
|
32
|
+
output 'result.txt'
|
33
|
+
Action
|
34
|
+
echo 'You selected rule A' > {$O[1]}
|
35
|
+
End
|
36
|
+
|
37
|
+
Rule B
|
38
|
+
input 'b.txt'
|
39
|
+
output 'result.txt'
|
40
|
+
Action
|
41
|
+
echo 'You selected rule B' > {$O[1]}
|
42
|
+
End
|
43
|
+
|
44
|
+
Rule C
|
45
|
+
input 'c.txt'
|
46
|
+
output 'result.txt'
|
47
|
+
Action
|
48
|
+
echo 'You selected rule C' > {$O[1]}
|
49
|
+
End
|
50
|
+
|
data/example/Fib/Fib.pione
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
param $NUM := 3
|
2
|
+
|
1
3
|
Rule Main
|
2
4
|
output 'result.txt'
|
3
|
-
param $NUM := 3
|
4
5
|
Flow
|
5
|
-
rule Fib
|
6
|
-
rule Result
|
6
|
+
rule Fib.params({N: $NUM})
|
7
|
+
rule Result.params({N: $NUM})
|
7
8
|
End
|
8
9
|
|
9
10
|
Rule Fib0
|
@@ -19,38 +20,38 @@ Action
|
|
19
20
|
End
|
20
21
|
|
21
22
|
Rule Fib
|
22
|
-
output 'fib{$
|
23
|
-
param $
|
23
|
+
output 'fib{$N}.txt'
|
24
|
+
param $N
|
24
25
|
Flow
|
25
|
-
case $
|
26
|
+
case $N
|
26
27
|
when 0
|
27
28
|
rule Fib0
|
28
29
|
when 1
|
29
30
|
rule Fib1
|
30
31
|
else
|
31
|
-
$P1 := $
|
32
|
-
$P2 := $
|
33
|
-
rule Fib.params({
|
34
|
-
rule Fib.params({
|
35
|
-
rule Calc.params({
|
32
|
+
$P1 := $N - 2
|
33
|
+
$P2 := $N - 1
|
34
|
+
rule Fib.params({N: $P1})
|
35
|
+
rule Fib.params({N: $P2})
|
36
|
+
rule Calc.params({N: $N, P1: $P1, P2: $P2})
|
36
37
|
end
|
37
38
|
End
|
38
39
|
|
39
40
|
Rule Calc
|
40
41
|
input 'fib{$P1}.txt'
|
41
42
|
input 'fib{$P2}.txt'
|
42
|
-
output 'fib{$
|
43
|
-
param $
|
43
|
+
output 'fib{$N}.txt'
|
44
|
+
param $N
|
44
45
|
param $P1
|
45
46
|
param $P2
|
46
47
|
Action
|
47
|
-
|
48
|
+
echo "`cat {$I[1]}` + `cat {$I[2]}`" | bc > {$O[1]}
|
48
49
|
End
|
49
50
|
|
50
51
|
Rule Result
|
51
|
-
input 'fib{$
|
52
|
+
input 'fib{$N}.txt'
|
52
53
|
output 'result.txt'
|
53
|
-
param $
|
54
|
+
param $N
|
54
55
|
Action
|
55
56
|
cat {$I[1]} > {$O[1]}
|
56
57
|
End
|
@@ -0,0 +1,128 @@
|
|
1
|
+
#
|
2
|
+
# Eos for 3D reconstrucion from 2D rois using 3D initail reference
|
3
|
+
#
|
4
|
+
|
5
|
+
#
|
6
|
+
# Variables
|
7
|
+
#
|
8
|
+
|
9
|
+
# Target structure name
|
10
|
+
$TARGET := "all"
|
11
|
+
|
12
|
+
#
|
13
|
+
# Search Area for 3D
|
14
|
+
#
|
15
|
+
|
16
|
+
# Rot1
|
17
|
+
$ROT1MIN := 0
|
18
|
+
$ROT1MAX := 359
|
19
|
+
$ROT1D := 30
|
20
|
+
$nRot1 := 12
|
21
|
+
|
22
|
+
# Rot2
|
23
|
+
$ROT2MIN := 0
|
24
|
+
$ROT2MAX := 359
|
25
|
+
$ROT2D := 30
|
26
|
+
$nRot2 := 12
|
27
|
+
|
28
|
+
# Rot3
|
29
|
+
$ROT3MIN := 0
|
30
|
+
$ROT3MAX := 0
|
31
|
+
$ROT3D := 30
|
32
|
+
$nRot3 := 1
|
33
|
+
|
34
|
+
# For 2D
|
35
|
+
$STEP := 12
|
36
|
+
$ROTMIN := 0
|
37
|
+
$ROTMAX := 359
|
38
|
+
$nROT := 360 / $STEP
|
39
|
+
|
40
|
+
# Pad size for 2D
|
41
|
+
$PAD_W := 64
|
42
|
+
$PAD_H := 64
|
43
|
+
|
44
|
+
#
|
45
|
+
# Rules
|
46
|
+
#
|
47
|
+
|
48
|
+
Rule Main
|
49
|
+
input '*.roi'.all
|
50
|
+
input '{$TARGET}.ref3d'
|
51
|
+
input '{$TARGET}.ref2d'
|
52
|
+
output '{$TARGET}.3d'
|
53
|
+
output 'checked'
|
54
|
+
Flow
|
55
|
+
rule Create3dinfo
|
56
|
+
rule Create3dlst
|
57
|
+
rule Create3d
|
58
|
+
rule ShowResult
|
59
|
+
End
|
60
|
+
|
61
|
+
Rule Create3dinfo
|
62
|
+
input '*.roi'
|
63
|
+
input '{$TARGET}.ref2d'
|
64
|
+
output '{$*}.corinfo'
|
65
|
+
output '{$*}.fit'
|
66
|
+
output '{$*}.3dinfo'
|
67
|
+
Flow
|
68
|
+
rule ConvertRoiToPad
|
69
|
+
rule ConvertPadToCorinfo
|
70
|
+
rule ConvertCorinfoTo3dinfo
|
71
|
+
End
|
72
|
+
|
73
|
+
# .roi.pad
|
74
|
+
Rule ConvertRoiToPad
|
75
|
+
input '*.roi'
|
76
|
+
output '{$*}.pad'
|
77
|
+
Action
|
78
|
+
mrcImageWindowing -i {$*}.roi -o {$*}.mask -W 0.1 0.0 0.05 0.0 -m 18
|
79
|
+
mrcImagePad -i {$*}.mask -o {$*}.padtmp -W {$PAD_W} -H {$PAD_H} -m 3
|
80
|
+
mrcImageWindowing -i {$*}.padtmp -o {$*}.pad -W 0.1 0.0 0.1 0.0 -m 2
|
81
|
+
End
|
82
|
+
|
83
|
+
# .pad.corinfo
|
84
|
+
Rule ConvertPadToCorinfo
|
85
|
+
input '*.pad'
|
86
|
+
input '{$TARGET}.ref2d'
|
87
|
+
output '{$*}.corinfo'
|
88
|
+
output '{$*}.fit'
|
89
|
+
Action
|
90
|
+
mrcImageAutoRotationCorrelation -i {$*}.pad -r {$TARGET}.ref2d -O {$*}.corinfo -fit {$*}.fit -cor {$*}.cormap -n {$nROT} -m 18 -range {$ROTMIN} {$ROTMAX} -Iter 2 -nRot2 {$nRot2} -nRot1 {$nRot1} -nRot3 {$nRot3} 2> /dev/null
|
91
|
+
End
|
92
|
+
|
93
|
+
# .corinfo.3dinfo
|
94
|
+
Rule ConvertCorinfoTo3dinfo
|
95
|
+
input '*.corinfo'
|
96
|
+
output '{$*}.3dinfo'
|
97
|
+
Action
|
98
|
+
awk '/Cor/ { print $7,$16,$2,$3,$4,$5,$9,$11,$12}' {$*}.corinfo | sort -r | sed -e s/.pad/.fit/ > {$*}.3dinfolst
|
99
|
+
head -n 1 {$*}.3dinfolst | awk '{print $2,$3,$4,$5,$6,$1}' > {$*}.3dinfo
|
100
|
+
End
|
101
|
+
|
102
|
+
# .3dinfo.3dlst
|
103
|
+
Rule Create3dlst
|
104
|
+
input '*.3dinfo'.all
|
105
|
+
output '{$TARGET}.3dlst'
|
106
|
+
Action
|
107
|
+
cat {$I[1].join(" ")} | sort > {$TARGET}.3dlst
|
108
|
+
End
|
109
|
+
|
110
|
+
# .3dlst.3d
|
111
|
+
Rule Create3d
|
112
|
+
input '{$TARGET}.3dlst'
|
113
|
+
input '*.fit'.all
|
114
|
+
output '{$TARGET}.3d'
|
115
|
+
Action
|
116
|
+
mrc2Dto3D -I {$TARGET}.3dlst -o {$TARGET}.3d -InterpolationMode 2 -Double -DoubleCounter {$TARGET}.3dcounter -CounterThreshold 0.5 -m 1 -WeightMode 2
|
117
|
+
End
|
118
|
+
|
119
|
+
# show result by Display2
|
120
|
+
Rule ShowResult
|
121
|
+
input '{$TARGET}.3d'
|
122
|
+
output 'checked'
|
123
|
+
feature +Interactive
|
124
|
+
Action
|
125
|
+
Display2 -i '{$TARGET}.3d'
|
126
|
+
echo "I checked the result." > checked
|
127
|
+
End
|
128
|
+
|
data/lib/pione.rb
CHANGED
data/lib/pione/agent/broker.rb
CHANGED
@@ -106,7 +106,7 @@ module Pione
|
|
106
106
|
|
107
107
|
# Return excess number of workers belongs to this broker.
|
108
108
|
def excess_task_workers
|
109
|
-
@task_worker_resource - @task_workers.size
|
109
|
+
@task_worker_resource - @task_workers.size - @spawnings
|
110
110
|
end
|
111
111
|
|
112
112
|
# Return task wainting workers.
|
@@ -128,7 +128,14 @@ module Pione
|
|
128
128
|
def create_task_worker(tuple_space_server)
|
129
129
|
connection_id = Util.generate_uuid
|
130
130
|
@assignment_table[connection_id] = tuple_space_server
|
131
|
-
|
131
|
+
Thread.new do
|
132
|
+
begin
|
133
|
+
@spawnings += 1
|
134
|
+
Agent[:task_worker].spawn(Global.front, connection_id, @features)
|
135
|
+
ensure
|
136
|
+
@spawnings -= 1
|
137
|
+
end
|
138
|
+
end
|
132
139
|
end
|
133
140
|
|
134
141
|
# Deletes unavilable tuple space servers.
|
@@ -197,8 +204,11 @@ module Pione
|
|
197
204
|
attr_reader :tuple_space_servers
|
198
205
|
attr_reader :task_worker_resource
|
199
206
|
|
207
|
+
# current spawning task worker number
|
208
|
+
attr_reader :spawnings
|
209
|
+
|
200
210
|
# @api private
|
201
|
-
def initialize(data={})
|
211
|
+
def initialize(features, data={})
|
202
212
|
super()
|
203
213
|
@task_workers = []
|
204
214
|
@tuple_space_servers = []
|
@@ -206,6 +216,8 @@ module Pione
|
|
206
216
|
@sleeping_time = data[:sleeping_time] || 1
|
207
217
|
@assignment_table = {}
|
208
218
|
@tuple_space_server_lock = Mutex.new
|
219
|
+
@spawnings = 0
|
220
|
+
@features = features
|
209
221
|
|
210
222
|
# balancer
|
211
223
|
@balancer = EasyBalancer.new(self)
|
@@ -265,7 +277,9 @@ module Pione
|
|
265
277
|
|
266
278
|
# Transits to the state +sleeping+.
|
267
279
|
def transit_to_sleeping
|
268
|
-
|
280
|
+
if @tuple_space_servers.size == 0 or excess_task_workers == 0
|
281
|
+
sleep 1
|
282
|
+
end
|
269
283
|
end
|
270
284
|
end
|
271
285
|
|
@@ -25,28 +25,26 @@ module Pione
|
|
25
25
|
# @return [Thread]
|
26
26
|
# worker monitor thread
|
27
27
|
def self.spawn(front, connection_id, features=nil)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
Process.abort("You cannot run pione-task-worker.")
|
47
|
-
end
|
48
|
-
return thread
|
28
|
+
args = [
|
29
|
+
"pione-task-worker",
|
30
|
+
"--parent-front", Global.front.uri,
|
31
|
+
"--connection-id", connection_id
|
32
|
+
]
|
33
|
+
args << "--debug" if Pione.debug_mode?
|
34
|
+
args << "--show-communication" if Global.show_communication
|
35
|
+
args << "--features" << features if features
|
36
|
+
pid = Process.spawn(*args)
|
37
|
+
thread = Process.detach(pid)
|
38
|
+
# connection check
|
39
|
+
while thread.alive?
|
40
|
+
break if front.task_worker_front_connection_id.include?(connection_id)
|
41
|
+
sleep 0.1
|
42
|
+
end
|
43
|
+
# error check
|
44
|
+
unless thread.alive?
|
45
|
+
Process.abort("You cannot run pione-task-worker.")
|
49
46
|
end
|
47
|
+
return thread
|
50
48
|
end
|
51
49
|
|
52
50
|
define_state :task_waiting
|
@@ -25,13 +25,18 @@ module Pione
|
|
25
25
|
end
|
26
26
|
|
27
27
|
module InstanceInterface
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
# Setup program name. If the setup process is failed, program name is not
|
29
|
+
# changed.
|
30
|
+
#
|
31
|
+
# @return [void]
|
32
|
+
def setup_program_name
|
33
|
+
begin
|
34
|
+
name, b = self.class.program_name
|
35
|
+
tail = self.instance_exec(&b)
|
36
|
+
$PROGRAM_NAME = "%s %s" % [name, tail]
|
37
|
+
rescue Exception
|
38
|
+
nil
|
39
|
+
end
|
35
40
|
end
|
36
41
|
|
37
42
|
# Returns program message.
|
@@ -65,7 +70,7 @@ module Pione
|
|
65
70
|
parse_options
|
66
71
|
validate_options
|
67
72
|
prepare
|
68
|
-
|
73
|
+
setup_program_name
|
69
74
|
start
|
70
75
|
end
|
71
76
|
|
@@ -16,6 +16,7 @@ TXT
|
|
16
16
|
|
17
17
|
def initialize
|
18
18
|
@task_worker = [Util.core_number - 1, 1].max
|
19
|
+
@features = nil
|
19
20
|
end
|
20
21
|
|
21
22
|
def create_front
|
@@ -30,7 +31,7 @@ TXT
|
|
30
31
|
|
31
32
|
def prepare
|
32
33
|
super
|
33
|
-
@broker = Pione::Agent[:broker].new(task_worker_resource: @task_worker)
|
34
|
+
@broker = Pione::Agent[:broker].new(@features, task_worker_resource: @task_worker)
|
34
35
|
@tuple_space_receiver = Pione::TupleSpaceReceiver.instance
|
35
36
|
end
|
36
37
|
|