rbbt-util 5.26.6 → 5.26.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/rbbt/monitor.rb +1 -1
- data/lib/rbbt/tsv/manipulate.rb +1 -1
- data/lib/rbbt/util/log/progress/report.rb +5 -2
- data/lib/rbbt/util/misc/omics.rb +2 -2
- data/lib/rbbt/util/tmpfile.rb +4 -4
- data/lib/rbbt/workflow/definition.rb +2 -1
- data/lib/rbbt/workflow/examples.rb +1 -1
- data/lib/rbbt/workflow/schedule.rb +123 -112
- data/lib/rbbt/workflow/step/dependencies.rb +14 -18
- data/lib/rbbt/workflow/step/run.rb +8 -9
- data/share/rbbt_commands/workflow/prov +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 73dc573b119d00638cd05d906db7e13ae1d4c1f402bc447192127bf42a2538de
|
4
|
+
data.tar.gz: f18941095a6cd114cffc2140bd5272b9a624bf83b2dd423da91efdb4381c82a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0231c8e2b307671ad8abea117ad86d086fe21a9db202ca8486a16e97b352671f447f67a74fc7bbf0f8fc622f85e996fbacd20eb054e749f11a9a13b0650e0cfd
|
7
|
+
data.tar.gz: 4b347b870203aa41f520cd767a30df6a1ab84b4278d6454923f59f4d8ba30137a8577cf7a1f22aa4b4e5c6a30ec1a5f0884edb79a84706bf988eb76b81589f04
|
data/lib/rbbt/monitor.rb
CHANGED
@@ -173,7 +173,7 @@ module Rbbt
|
|
173
173
|
end
|
174
174
|
else
|
175
175
|
#cmd = "find -L '#{ taskdir }/' -not \\( -path \"#{taskdir}/*.files/*\" -prune \\) -not -name '*.pid' -not -name '*.notify' -not -name '\\.*' 2>/dev/null"
|
176
|
-
cmd = "find -L '#{ taskdir }/' -not \\( -path \"#{taskdir}/.info/*\" -prune \\) -not \\( -path \"#{taskdir}/*.files/*\" -prune \\) -not -name '*.pid' -not -name '*.notify' -not -name '\\.*' \\( -not -type d -o -name '*.files' \\) 2>/dev/null"
|
176
|
+
cmd = "find -L '#{ taskdir }/' -not \\( -path \"#{taskdir}/.info/*\" -prune \\) -not \\( -path \"#{taskdir}/*.files/*\" -prune \\) -not -name '*.pid' -not -name '*.md5' -not -name '*.notify' -not -name '\\.*' \\( -not -type d -o -name '*.files' \\) 2>/dev/null"
|
177
177
|
|
178
178
|
CMD.cmd(cmd, :pipe => true)
|
179
179
|
end
|
data/lib/rbbt/tsv/manipulate.rb
CHANGED
@@ -75,7 +75,7 @@ module Log
|
|
75
75
|
def thr_msg
|
76
76
|
if @history.nil?
|
77
77
|
@history ||= [[@ticks, Time.now] ]
|
78
|
-
|
78
|
+
elsif @last_ticks != @ticks
|
79
79
|
@history << [@ticks, Time.now]
|
80
80
|
max_history ||= case
|
81
81
|
when @ticks > 20
|
@@ -96,13 +96,16 @@ module Log
|
|
96
96
|
@history.shift if @history.length > max_history
|
97
97
|
end
|
98
98
|
|
99
|
+
@last_ticks = @ticks
|
100
|
+
|
99
101
|
@mean_max ||= 0
|
100
|
-
if @history.length >
|
102
|
+
if @history.length > 2
|
101
103
|
|
102
104
|
sticks, stime = @history.first
|
103
105
|
ssticks, sstime = @history[-3]
|
104
106
|
lticks, ltime = @history.last
|
105
107
|
|
108
|
+
|
106
109
|
mean = @mean = (lticks - sticks).to_f / (ltime - stime)
|
107
110
|
short_mean = (lticks - ssticks).to_f / (ltime - sstime)
|
108
111
|
|
data/lib/rbbt/util/misc/omics.rb
CHANGED
@@ -328,8 +328,8 @@ module Misc
|
|
328
328
|
end
|
329
329
|
|
330
330
|
def self.chr_cmp_strict(chr1, chr2)
|
331
|
-
chr1 = chr1.sub(/^chr
|
332
|
-
chr2 = chr2.sub(/^chr
|
331
|
+
chr1 = chr1.sub(/^chr/, '')
|
332
|
+
chr2 = chr2.sub(/^chr/, '')
|
333
333
|
if (m1 = chr1.match(/(\d+)$/)) && (m2 = chr2.match(/(\d+)$/))
|
334
334
|
m1[1].to_i <=> m2[1].to_i
|
335
335
|
elsif chr1 =~ /\d+$/
|
data/lib/rbbt/util/tmpfile.rb
CHANGED
@@ -17,13 +17,13 @@ module TmpFile
|
|
17
17
|
|
18
18
|
# Creates a random file name, with the given suffix and a random number
|
19
19
|
# up to +max+
|
20
|
-
def self.random_name(s = "", max = 10000000)
|
20
|
+
def self.random_name(s = "tmp-", max = 10000000)
|
21
21
|
n = rand(max)
|
22
22
|
s + n.to_s
|
23
23
|
end
|
24
24
|
|
25
25
|
# Creates a random filename in the temporary directory
|
26
|
-
def self.tmp_file(s = "", max=10000000, dir = TMPDIR)
|
26
|
+
def self.tmp_file(s = "tmp-", max=10000000, dir = TMPDIR)
|
27
27
|
File.expand_path(File.join(dir, random_name(s,max)))
|
28
28
|
end
|
29
29
|
|
@@ -31,7 +31,7 @@ module TmpFile
|
|
31
31
|
options, content, erase = content, nil, true if Hash === content
|
32
32
|
options, erase = erase, true if Hash === erase
|
33
33
|
|
34
|
-
prefix = options[:prefix] || ""
|
34
|
+
prefix = options[:prefix] || "tmp-"
|
35
35
|
tmpdir = options[:tmpdir] || TMPDIR
|
36
36
|
max = options[:max] || 10000000
|
37
37
|
tmpfile = tmp_file prefix, max, tmpdir
|
@@ -53,7 +53,7 @@ module TmpFile
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def self.with_dir(erase = true, options = {})
|
56
|
-
prefix = options[:prefix] || ""
|
56
|
+
prefix = options[:prefix] || "tmpdir-"
|
57
57
|
tmpdir = tmp_file prefix
|
58
58
|
|
59
59
|
FileUtils.mkdir_p tmpdir
|
@@ -73,8 +73,9 @@ module Workflow
|
|
73
73
|
if forget
|
74
74
|
self.dependencies = self.dependencies - [dep]
|
75
75
|
self.set_info :dependency, dependencies.collect{|dep| [dep.task_name, dep.name, dep.path]}
|
76
|
+
Open.rm_rf self.files_dir if Open.exist? self.files_dir
|
76
77
|
FileUtils.cp_r dep.files_dir, self.files_dir if Open.exist? dep.files_dir
|
77
|
-
Open.
|
78
|
+
Open.ln_h dep.path, self.tmp_path
|
78
79
|
else
|
79
80
|
Open.link dep.path, self.path
|
80
81
|
end
|
@@ -42,7 +42,7 @@ module Workflow
|
|
42
42
|
dir = Path.setup(dir.dup)
|
43
43
|
input_names.each do |input|
|
44
44
|
file = dir[input].find
|
45
|
-
file = dir.glob(input.to_s + ".*").first if file.nil? or not file.exists?
|
45
|
+
file = dir.glob(input.to_s + ".*").reject{|f| f =~ /\.md5$/}.first if file.nil? or not file.exists?
|
46
46
|
Log.debug "Trying #{ input }: #{file}"
|
47
47
|
next unless file and file.exists?
|
48
48
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Step
|
2
2
|
class ResourceManager
|
3
|
-
class
|
3
|
+
class NotEnoughResources < Exception
|
4
4
|
end
|
5
5
|
|
6
6
|
attr_accessor :cpus, :memory
|
@@ -15,7 +15,7 @@ class Step
|
|
15
15
|
RbbtSemaphore.synchronize(@semaphore) do
|
16
16
|
if (@cpus && cpus && @cpus < cups) ||
|
17
17
|
(@memory && memory && @memory < memory)
|
18
|
-
raise
|
18
|
+
raise NotEnoughResources
|
19
19
|
end
|
20
20
|
begin
|
21
21
|
@cpus -= cpus
|
@@ -61,7 +61,7 @@ class Step
|
|
61
61
|
jdeps.reject!{|dep| dep.done? }
|
62
62
|
@job_deps[job.path] = []
|
63
63
|
jdeps.each do |dep|
|
64
|
-
next if dep.done?
|
64
|
+
#next if dep.done?
|
65
65
|
@dep_jobs[dep.path] ||= []
|
66
66
|
@job_deps[job.path] << dep.path
|
67
67
|
@dep_jobs[dep.path] << job.path
|
@@ -69,128 +69,135 @@ class Step
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
|
73
|
-
def self.ready
|
72
|
+
def ready
|
74
73
|
@job_deps.select do |jobp,deps|
|
75
74
|
(@missing & deps).empty?
|
76
75
|
end.collect{|jobp,deps| jobp}
|
77
76
|
end
|
78
77
|
|
79
|
-
def
|
78
|
+
def used
|
79
|
+
iii @dep_jobs
|
80
|
+
@dep_jobs.select do |dep,jobs|
|
81
|
+
iif [dep, @missing.to_a, jobs]
|
82
|
+
(@missing & jobs).empty?
|
83
|
+
end.keys
|
84
|
+
end
|
85
|
+
|
86
|
+
def next
|
80
87
|
priorities = {}
|
81
88
|
@jobs.each do |job|
|
82
|
-
priorities = 1
|
89
|
+
priorities[job.path] = 1
|
83
90
|
end
|
84
91
|
|
85
92
|
@missing.each do |jobp|
|
86
93
|
end
|
87
94
|
|
88
|
-
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def self._priorities(jobs)
|
94
|
-
job_level = {}
|
95
|
-
jobs.each do |job|
|
96
|
-
job_level[job.path] = 1.0
|
97
|
-
end
|
98
|
-
|
99
|
-
with_deps = jobs.dup
|
100
|
-
dep_jobs = {}
|
101
|
-
job_deps = {}
|
102
|
-
while with_deps.any?
|
103
|
-
job = with_deps.pop
|
104
|
-
level = job_level[job.path]
|
105
|
-
job_deps[job.path] = []
|
106
|
-
jdeps = job.dependencies
|
107
|
-
jdeps += job.inputs.flatten.select{|i| Step === i}
|
108
|
-
|
109
|
-
jdeps.reject!{|dep| dep.done? }
|
110
|
-
jdeps.each do |dep|
|
111
|
-
next if dep.done?
|
112
|
-
dep_jobs[dep.path] ||= []
|
113
|
-
job_level[dep.path] = level / (10 * jdeps.length) if job_level[dep.path].nil? || job_level[dep.path] < level / (10 * jdeps.length)
|
114
|
-
job_deps[job.path] << dep.path
|
115
|
-
dep_jobs[dep.path] << job.path
|
116
|
-
with_deps << dep unless job_deps.include? dep.path
|
95
|
+
ready.first
|
117
96
|
end
|
118
97
|
end
|
119
|
-
[job_level, job_deps, dep_jobs]
|
120
98
|
end
|
121
99
|
|
122
|
-
def self.
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
end
|
100
|
+
#def self._priorities(jobs)
|
101
|
+
# job_level = {}
|
102
|
+
# jobs.each do |job|
|
103
|
+
# job_level[job.path] = 1.0
|
104
|
+
# end
|
105
|
+
|
106
|
+
# with_deps = jobs.dup
|
107
|
+
# dep_jobs = {}
|
108
|
+
# job_deps = {}
|
109
|
+
# while with_deps.any?
|
110
|
+
# job = with_deps.pop
|
111
|
+
# level = job_level[job.path]
|
112
|
+
# job_deps[job.path] = []
|
113
|
+
# jdeps = job.dependencies
|
114
|
+
# jdeps += job.inputs.flatten.select{|i| Step === i}
|
115
|
+
|
116
|
+
# jdeps.reject!{|dep| dep.done? }
|
117
|
+
# jdeps.each do |dep|
|
118
|
+
# next if dep.done?
|
119
|
+
# dep_jobs[dep.path] ||= []
|
120
|
+
# job_level[dep.path] = level / (10 * jdeps.length) if job_level[dep.path].nil? || job_level[dep.path] < level / (10 * jdeps.length)
|
121
|
+
# job_deps[job.path] << dep.path
|
122
|
+
# dep_jobs[dep.path] << job.path
|
123
|
+
# with_deps << dep unless job_deps.include? dep.path
|
124
|
+
# end
|
125
|
+
# end
|
126
|
+
# [job_level, job_deps, dep_jobs]
|
127
|
+
#end
|
128
|
+
|
129
|
+
#def self.produce_jobs(jobs, cpus, step_cpus = {})
|
130
|
+
# require 'fc'
|
131
|
+
|
132
|
+
# step_cpus = IndiferentHash.setup(step_cpus || {})
|
133
|
+
|
134
|
+
# deps = []
|
135
|
+
|
136
|
+
# jobs = [jobs] unless Array === jobs
|
137
|
+
|
138
|
+
# job_level, job_deps, dep_jobs = self._priorities(jobs)
|
139
|
+
|
140
|
+
# jobps = {}
|
141
|
+
# (jobs + jobs.collect{|job| job.rec_dependencies}).flatten.uniq.each do |job|
|
142
|
+
# jobps[job.path] = job
|
143
|
+
# end
|
144
|
+
|
145
|
+
# prio_queue = FastContainers::PriorityQueue.new :max
|
146
|
+
|
147
|
+
# job_deps.each do |jobp,depps|
|
148
|
+
# next if depps.any?
|
149
|
+
# level = job_level[jobp]
|
150
|
+
|
151
|
+
# prio_queue.push(jobp, level)
|
152
|
+
# end
|
153
|
+
|
154
|
+
# queue = RbbtProcessQueue.new cpus
|
155
|
+
|
156
|
+
# missing = job_deps.keys
|
157
|
+
# queue.callback do |jobp|
|
158
|
+
# Log.info "Done: #{jobp}"
|
159
|
+
# missing -= [jobp]
|
160
|
+
|
161
|
+
# job_level, job_deps, dep_jobs = self._priorities(jobs)
|
162
|
+
|
163
|
+
# parentsp = dep_jobs[jobp]
|
164
|
+
|
165
|
+
# parentsp.each do |parentp|
|
166
|
+
# next unless job_deps[parentp].include? jobp
|
167
|
+
# job_deps[parentp] -= [jobp]
|
168
|
+
# if job_deps[parentp].empty?
|
169
|
+
# level = job_level[parentp]
|
170
|
+
# prio_queue.push(parentp, level )
|
171
|
+
# end
|
172
|
+
# end if parentsp
|
173
|
+
# prio_queue_new = FastContainers::PriorityQueue.new :max
|
174
|
+
# while prio_queue.any?
|
175
|
+
# elem = prio_queue.pop
|
176
|
+
# prio_queue_new.push(elem, job_level[elem])
|
177
|
+
# end
|
178
|
+
# prio_queue = prio_queue_new
|
179
|
+
# end
|
180
|
+
#
|
181
|
+
# queue.init do |jobp|
|
182
|
+
# Log.info "Processing: #{jobp}"
|
183
|
+
# job = jobps[jobp]
|
184
|
+
# job_cpus = step_cpus[job.task_name] || 1
|
185
|
+
# sleep 0.5
|
186
|
+
# #job.produce
|
187
|
+
# jobp
|
188
|
+
# end
|
189
|
+
|
190
|
+
# while missing.any?
|
191
|
+
# while prio_queue.empty? && missing.any?
|
192
|
+
# sleep 1
|
193
|
+
# end
|
194
|
+
# break if missing.empty?
|
195
|
+
# jobp = prio_queue.pop
|
196
|
+
# queue.process jobp
|
197
|
+
# end
|
198
|
+
|
199
|
+
# queue.join
|
200
|
+
#end
|
194
201
|
end
|
195
202
|
|
196
203
|
|
@@ -219,9 +226,13 @@ if __FILE__ == $0
|
|
219
226
|
Workflow.require_workflow "HTS"
|
220
227
|
|
221
228
|
jobs = []
|
222
|
-
jobs << Sample.job(:mutect2, "QUINTANA-15")
|
223
|
-
jobs << Sample.job(:mutect2, "QUINTANA-25")
|
224
|
-
jobs << Sample.job(:mutect2, "QUINTANA-
|
229
|
+
# jobs << Sample.job(:mutect2, "QUINTANA-15")
|
230
|
+
# jobs << Sample.job(:mutect2, "QUINTANA-25")
|
231
|
+
# jobs << Sample.job(:mutect2, "QUINTANA-22")
|
232
|
+
jobs << Sample.job(:mutect2, "small")
|
225
233
|
|
226
234
|
sched = Step::Scheduler.new(jobs, 3)
|
235
|
+
iii sched.ready
|
236
|
+
iii sched.used
|
237
|
+
iii sched.next
|
227
238
|
end
|
@@ -119,6 +119,11 @@ class Step
|
|
119
119
|
Log.info str
|
120
120
|
end
|
121
121
|
|
122
|
+
def input_dependencies
|
123
|
+
inputs.flatten.select{|i| Step === i}
|
124
|
+
end
|
125
|
+
|
126
|
+
|
122
127
|
def execute_dependency(dependency, log = true)
|
123
128
|
task_name = self.task_name
|
124
129
|
canfail_paths = self.canfail_paths
|
@@ -247,7 +252,7 @@ class Step
|
|
247
252
|
respawn = rest && rest.include?(:always_respawn)
|
248
253
|
respawn = :always if respawn.nil?
|
249
254
|
|
250
|
-
Misc.bootstrap(list, cpus, :bar => "Bootstrapping dependencies for #{
|
255
|
+
Misc.bootstrap(list, cpus, :bar => "Bootstrapping dependencies for #{self.short_path} [#{cpus}]", :respawn => respawn) do |dep|
|
251
256
|
begin
|
252
257
|
Signal.trap(:INT) do
|
253
258
|
dep.abort
|
@@ -338,7 +343,7 @@ class Step
|
|
338
343
|
|
339
344
|
compute_deps = rec_dependencies.collect do |dep|
|
340
345
|
next unless ComputeDependency === dep
|
341
|
-
dep.rec_dependencies
|
346
|
+
dep.rec_dependencies + dep.inputs.flatten.select{|i| Step === i}
|
342
347
|
end.compact.flatten.uniq
|
343
348
|
|
344
349
|
canfail_paths = self.canfail_paths
|
@@ -353,24 +358,15 @@ class Step
|
|
353
358
|
raise $! unless canfail_paths.include? step.path
|
354
359
|
end
|
355
360
|
next unless step.dependencies and step.dependencies.any?
|
356
|
-
step.dependencies.each do |step_dep|
|
361
|
+
(step.dependencies + step.input_dependencies).each do |step_dep|
|
357
362
|
next if step_dep.done? or step_dep.running? or (ComputeDependency === step_dep and (step_dep.compute == :nodup or step_dep.compute == :ignore))
|
358
363
|
dep_step[step_dep.path] ||= []
|
359
364
|
dep_step[step_dep.path] << step_dep
|
360
365
|
end
|
361
|
-
step.inputs.each do |inputs|
|
362
|
-
inputs = [inputs] unless Array === inputs
|
363
|
-
inputs.each do |step_dep|
|
364
|
-
next unless Step === step_dep
|
365
|
-
next if step_dep.done? or step_dep.running? or (ComputeDependency === step_dep and (step_dep.compute == :nodup or step_dep.compute == :ignore))
|
366
|
-
dep_step[step_dep.path] ||= []
|
367
|
-
dep_step[step_dep.path] << step_dep
|
368
|
-
end
|
369
|
-
end
|
370
366
|
end
|
371
367
|
|
372
368
|
produced = []
|
373
|
-
dependencies.each do |dep|
|
369
|
+
(dependencies + input_dependencies).each do |dep|
|
374
370
|
next unless ComputeDependency === dep
|
375
371
|
if dep.compute == :produce
|
376
372
|
dep.produce
|
@@ -382,16 +378,16 @@ class Step
|
|
382
378
|
|
383
379
|
required_dep_paths = []
|
384
380
|
dep_step.each do |path,list|
|
385
|
-
required_dep_paths << path if list.length > 1
|
381
|
+
#required_dep_paths << path if list.length > 1
|
382
|
+
required_dep_paths << path if (list & dependencies).any?
|
386
383
|
end
|
387
384
|
|
388
385
|
required_dep_paths.concat dependencies.collect{|dep| dep.path}
|
389
|
-
|
390
|
-
|
391
|
-
end.flatten)
|
386
|
+
|
387
|
+
required_dep_paths.concat input_dependencies.collect{|dep| dep.path}
|
392
388
|
|
393
389
|
required_dep_paths.concat(dependencies.collect do |dep|
|
394
|
-
[dep.path] + dep.
|
390
|
+
[dep.path] + dep.input_dependencies
|
395
391
|
end.flatten)
|
396
392
|
|
397
393
|
log :dependencies, "Dependencies for step #{Log.color :yellow, task.name.to_s || ""}"
|
@@ -238,15 +238,6 @@ class Step
|
|
238
238
|
:versions => Rbbt.versions
|
239
239
|
})
|
240
240
|
|
241
|
-
|
242
|
-
begin
|
243
|
-
run_dependencies
|
244
|
-
rescue Exception
|
245
|
-
Open.rm pid_file if Open.exists?(pid_file)
|
246
|
-
stop_dependencies
|
247
|
-
raise $!
|
248
|
-
end
|
249
|
-
|
250
241
|
new_inputs = []
|
251
242
|
@inputs.each_with_index do |input,i|
|
252
243
|
name = @task.inputs[i]
|
@@ -305,6 +296,14 @@ class Step
|
|
305
296
|
set_info :inputs, Misc.remove_long_items(Misc.zip2hash(task.inputs, info_inputs))
|
306
297
|
end
|
307
298
|
|
299
|
+
begin
|
300
|
+
run_dependencies
|
301
|
+
rescue Exception
|
302
|
+
Open.rm pid_file if Open.exists?(pid_file)
|
303
|
+
stop_dependencies
|
304
|
+
raise $!
|
305
|
+
end
|
306
|
+
|
308
307
|
set_info :started, (start_time = Time.now)
|
309
308
|
log :started, "Starting step #{Log.color :yellow, task.name.to_s || ""}"
|
310
309
|
|
@@ -117,7 +117,7 @@ if options[:plot]
|
|
117
117
|
nodes <- read.csv("#{node_info_file}", header=T, as.is=T)
|
118
118
|
links <- read.csv("#{edge_file}", header=T, as.is=T)
|
119
119
|
|
120
|
-
|
120
|
+
rbbt.require('igraph')
|
121
121
|
|
122
122
|
net <- graph.data.frame(links, nodes, directed=T)
|
123
123
|
net <- simplify(net, remove.multiple = F, remove.loops = T)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.26.
|
4
|
+
version: 5.26.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -517,8 +517,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
517
517
|
- !ruby/object:Gem::Version
|
518
518
|
version: '0'
|
519
519
|
requirements: []
|
520
|
-
|
521
|
-
rubygems_version: 2.6.13
|
520
|
+
rubygems_version: 3.0.3
|
522
521
|
signing_key:
|
523
522
|
specification_version: 4
|
524
523
|
summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
|