rbbt-util 5.5.1 → 5.5.2
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.
- checksums.yaml +8 -8
- data/lib/rbbt/tsv/accessor.rb +9 -1
- data/lib/rbbt/tsv/util.rb +1 -0
- data/lib/rbbt/util/R.rb +10 -9
- data/lib/rbbt/util/cmd.rb +6 -6
- data/lib/rbbt/util/log.rb +5 -2
- data/lib/rbbt/util/misc.rb +4 -5
- data/lib/rbbt/util/simpleopt.rb +1 -1
- data/lib/rbbt/workflow.rb +5 -4
- data/lib/rbbt/workflow/accessor.rb +5 -3
- data/lib/rbbt/workflow/step.rb +3 -3
- data/share/rbbt_commands/app/start +0 -2
- data/test/rbbt/association/test_index.rb +2 -2
- data/test/rbbt/test_association.rb +7 -9
- data/test/rbbt/test_knowledge_base.rb +5 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NTE0ZTY1ZWVjMjZjMzBlMTQzNjNlMzlmYjY1NzBjNDFjZTc1NzExMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OWM2NGYwNDA0ODA4Y2FiNGQzMzE4ZjUwZDBiYTdiYmM2ZGVhYTc0ZQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ODg1YTYxNGE5NWZkY2YyYmUzYmQ5ODlkZjQ0ZDgzZGZlNzA1YzZmNGU0NDZm
|
10
|
+
YzM2OGI3Y2RiOGMwNTI0ZDAyOWFiOTRjYmY5ODVmMjJkZjBlYTVkMWI2NTJj
|
11
|
+
ZGUyOGE4YWVmMjQyMzg2OGU2YzhjNjU3MDc5YTcwN2VjNDQwY2M=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTk5NDg5OWZhYzU4ZDA3ODJlZjJmZDU2MTk5ZmJiNzJmNThhZWZhNmMxOWFj
|
14
|
+
YTY4MWI3Yjg5NmVmZWFkYTc5Mjk0OGI1YWQ3ZDc4NzJjNzIxZGE3ZTBkMjU2
|
15
|
+
ODM4ZGIwNDhhMThlNzRhNDQ2M2E1Y2QxNjg4YTkyZWZmYjU1NmI=
|
data/lib/rbbt/tsv/accessor.rb
CHANGED
@@ -537,7 +537,15 @@ end
|
|
537
537
|
|
538
538
|
def value_peek
|
539
539
|
peek = {}
|
540
|
-
|
540
|
+
i = 0
|
541
|
+
begin
|
542
|
+
through do |k,v|
|
543
|
+
peek[k] = v
|
544
|
+
i += 1
|
545
|
+
raise "STOP" if i > 10
|
546
|
+
end
|
547
|
+
rescue
|
548
|
+
end
|
541
549
|
peek
|
542
550
|
end
|
543
551
|
|
data/lib/rbbt/tsv/util.rb
CHANGED
data/lib/rbbt/util/R.rb
CHANGED
@@ -22,7 +22,7 @@ source('#{UTIL}');
|
|
22
22
|
cmd << command
|
23
23
|
end
|
24
24
|
|
25
|
-
Log.debug
|
25
|
+
Log.debug{"R Script:\n#{ cmd }"}
|
26
26
|
|
27
27
|
if options.delete :monitor
|
28
28
|
io = CMD.cmd('R --vanilla --slave --quiet', options.merge(:in => cmd, :pipe => true))
|
@@ -35,19 +35,16 @@ source('#{UTIL}');
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def self.interactive(init_file, options = {})
|
39
|
-
CMD.cmd("env R_PROFILE='#{init_file}' xterm R")
|
40
|
-
end
|
41
|
-
|
42
38
|
def self.interactive(script, options = {})
|
43
39
|
TmpFile.with_file do |init_file|
|
44
40
|
Open.write(init_file) do |file|
|
45
41
|
file.puts "# Loading basic rbbt environment"
|
42
|
+
file.puts "library(utils);\n"
|
46
43
|
file.puts "source('#{R::UTIL}');\n"
|
47
44
|
file.puts
|
48
45
|
file.puts script
|
49
46
|
end
|
50
|
-
CMD.cmd("env R_PROFILE='#{init_file}' xterm R")
|
47
|
+
CMD.cmd("env R_PROFILE='#{init_file}' xterm \"$RHOME/bin/R\"")
|
51
48
|
end
|
52
49
|
end
|
53
50
|
|
@@ -98,10 +95,14 @@ if (! is.null(data)){ rbbt.tsv.write('#{f}', data); }
|
|
98
95
|
end
|
99
96
|
end
|
100
97
|
|
101
|
-
def R_interactive(
|
98
|
+
def R_interactive(pre_script = nil)
|
102
99
|
TmpFile.with_file do |f|
|
103
|
-
|
104
|
-
|
100
|
+
TmpFile.with_file(pre_script) do |script_file|
|
101
|
+
Open.write(f, self.to_s)
|
102
|
+
script = "data_file = '#{f}';\n"
|
103
|
+
script << "script_file = '#{script_file}';\n" if pre_script
|
104
|
+
R.interactive(script)
|
105
|
+
end
|
105
106
|
end
|
106
107
|
end
|
107
108
|
end
|
data/lib/rbbt/util/cmd.rb
CHANGED
@@ -29,10 +29,10 @@ module CMD
|
|
29
29
|
rescue
|
30
30
|
end
|
31
31
|
|
32
|
-
Log.debug
|
32
|
+
Log.debug{"Process #{ cmd } succeded" if $? and $?.success? and log}
|
33
33
|
|
34
34
|
if $? and not $?.success?
|
35
|
-
Log.debug
|
35
|
+
Log.debug{"Raising exception" if log}
|
36
36
|
exception = CMDError.new "Command [#{@pid}] #{@cmd} failed with error status #{$?.exitstatus}"
|
37
37
|
original_close
|
38
38
|
raise exception
|
@@ -52,7 +52,7 @@ module CMD
|
|
52
52
|
|
53
53
|
def force_close
|
54
54
|
if @pid
|
55
|
-
Log.debug
|
55
|
+
Log.debug{"Forcing close by killing '#{@pid}'" if log}
|
56
56
|
begin
|
57
57
|
Process.kill("KILL", @pid)
|
58
58
|
Process.waitpid(@pid)
|
@@ -158,8 +158,8 @@ module CMD
|
|
158
158
|
|
159
159
|
exit(-1)
|
160
160
|
rescue Exception
|
161
|
-
Log.debug
|
162
|
-
Log.debug
|
161
|
+
Log.debug{ "CMDError: #{$!.message}" } if log
|
162
|
+
Log.debug{ "Backtrace: \n" + $!.backtrace * "\n" } if log
|
163
163
|
raise CMDError, $!.message
|
164
164
|
end
|
165
165
|
}
|
@@ -173,7 +173,7 @@ module CMD
|
|
173
173
|
serr = serr.first
|
174
174
|
|
175
175
|
|
176
|
-
Log.debug
|
176
|
+
Log.debug{"CMD: [#{pid}] #{cmd}" if log}
|
177
177
|
|
178
178
|
if in_content.respond_to?(:read)
|
179
179
|
Thread.new do
|
data/lib/rbbt/util/log.rb
CHANGED
@@ -17,12 +17,15 @@ module Log
|
|
17
17
|
@logfile = nil
|
18
18
|
end
|
19
19
|
|
20
|
-
|
20
|
+
WHITE, DARK, GREEN, YELLOW, RED = ["0;37m", "0m", "0;32m", "0;33m", "0;31m"].collect{|e| "\033[#{e}"}
|
21
|
+
|
22
|
+
SEVERITY_COLOR = [WHITE, GREEN, YELLOW, RED,WHITE, GREEN, YELLOW].collect{|e| "\033[#{e}"}
|
21
23
|
|
22
24
|
def self.log(message = nil, severity = MEDIUM, &block)
|
23
25
|
message ||= block
|
26
|
+
return if message.nil?
|
24
27
|
severity_color = SEVERITY_COLOR[severity]
|
25
|
-
font_color = {
|
28
|
+
font_color = {true => WHITE, false => DARK}[severity >= INFO]
|
26
29
|
|
27
30
|
return if severity < self.severity
|
28
31
|
message = message.call if Proc === message
|
data/lib/rbbt/util/misc.rb
CHANGED
@@ -46,7 +46,7 @@ module Misc
|
|
46
46
|
when (ref.length == 1 and m.length == 1)
|
47
47
|
m
|
48
48
|
else
|
49
|
-
Log.debug
|
49
|
+
Log.debug{"Cannot understand: #{[ref, m]} (#{ muts })"}
|
50
50
|
'-' * ref.length + m
|
51
51
|
end
|
52
52
|
end
|
@@ -223,11 +223,11 @@ module Misc
|
|
223
223
|
end
|
224
224
|
when TSV
|
225
225
|
obj.with_unnamed do
|
226
|
-
"TSV:{"<< fingerprint(obj.all_fields|| []).inspect << "
|
226
|
+
"TSV:{"<< fingerprint(obj.all_fields|| []).inspect << ";" << fingerprint(obj.keys).inspect << "}"
|
227
227
|
end
|
228
228
|
when Hash
|
229
229
|
if obj.length > 10
|
230
|
-
"H:{"<< fingerprint(obj.keys) << "
|
230
|
+
"H:{"<< fingerprint(obj.keys) << ";" << fingerprint(obj.values) << "}"
|
231
231
|
else
|
232
232
|
new = "{"
|
233
233
|
obj.each do |k,v|
|
@@ -941,6 +941,7 @@ end
|
|
941
941
|
return false
|
942
942
|
end
|
943
943
|
|
944
|
+
# WARN: probably not thread safe...
|
944
945
|
def self.in_dir(dir)
|
945
946
|
old_pwd = FileUtils.pwd
|
946
947
|
res = nil
|
@@ -948,8 +949,6 @@ end
|
|
948
949
|
FileUtils.mkdir_p dir unless File.exists? dir
|
949
950
|
FileUtils.cd dir
|
950
951
|
res = yield
|
951
|
-
rescue
|
952
|
-
raise $!
|
953
952
|
ensure
|
954
953
|
FileUtils.cd old_pwd
|
955
954
|
end
|
data/lib/rbbt/util/simpleopt.rb
CHANGED
@@ -166,7 +166,7 @@ module SOPT
|
|
166
166
|
|
167
167
|
if shortcuts.include? short
|
168
168
|
i[:short] = short_for(i[:long])
|
169
|
-
Log.debug
|
169
|
+
Log.debug{ "Short for #{ long } is taken. Changed to #{i[:short]}" }
|
170
170
|
else
|
171
171
|
shortcuts << i[:short] if short
|
172
172
|
end
|
data/lib/rbbt/workflow.rb
CHANGED
@@ -38,10 +38,10 @@ module Workflow
|
|
38
38
|
begin
|
39
39
|
$LOAD_PATH.unshift(File.join(File.dirname(File.expand_path(filename)), 'lib'))
|
40
40
|
require filename
|
41
|
-
Log.
|
41
|
+
Log.debug{"Workflow loaded from: #{ filename }"}
|
42
42
|
return true
|
43
43
|
rescue Exception
|
44
|
-
Log.warn
|
44
|
+
Log.warn{"Error loading workflow: #{ filename }"}
|
45
45
|
raise $!
|
46
46
|
end
|
47
47
|
end
|
@@ -86,7 +86,7 @@ module Workflow
|
|
86
86
|
# Already loaded
|
87
87
|
begin
|
88
88
|
Misc.string2const wf_name
|
89
|
-
Log.debug
|
89
|
+
Log.debug{"Workflow #{ wf_name } already loaded"}
|
90
90
|
return true
|
91
91
|
rescue Exception
|
92
92
|
end
|
@@ -97,13 +97,14 @@ module Workflow
|
|
97
97
|
if Hash === remote_workflows and remote_workflows.include?(wf_name)
|
98
98
|
url = remote_workflows[wf_name]
|
99
99
|
require_remote_workflow(wf_name, url)
|
100
|
-
Log.debug
|
100
|
+
Log.debug{"Workflow #{ wf_name } loaded remotely: #{ url }"}
|
101
101
|
return
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
105
|
# Load locally
|
106
106
|
|
107
|
+
Log.info{"Loading workflow #{wf_name}"}
|
107
108
|
require_local_workflow(wf_name) || require_local_workflow(Misc.snake_case(wf_name)) || raise("Workflow not found or could not be loaded: #{ wf_name }")
|
108
109
|
end
|
109
110
|
|
@@ -26,11 +26,13 @@ class Step
|
|
26
26
|
def info
|
27
27
|
return {} if not Open.exists? info_file
|
28
28
|
begin
|
29
|
-
|
30
|
-
|
29
|
+
Misc.insist(2, 0.5) do
|
30
|
+
Open.open(info_file) do |file|
|
31
|
+
INFO_SERIALIAZER.load(file) || {}
|
32
|
+
end
|
31
33
|
end
|
32
34
|
rescue Exception
|
33
|
-
Log.debug
|
35
|
+
Log.debug{"Error loading info file: " + info_file}
|
34
36
|
raise $!
|
35
37
|
end
|
36
38
|
end
|
data/lib/rbbt/workflow/step.rb
CHANGED
@@ -77,10 +77,10 @@ class Step
|
|
77
77
|
self
|
78
78
|
else
|
79
79
|
begin
|
80
|
-
Log.debug
|
80
|
+
Log.debug{"Waiting for pid: #{@pid}"}
|
81
81
|
Process.waitpid @pid
|
82
82
|
rescue Errno::ECHILD
|
83
|
-
Log.debug
|
83
|
+
Log.debug{"Process #{ @pid } already finished: #{ path }"}
|
84
84
|
end if Misc.pid_exists? @pid
|
85
85
|
@pid = nil
|
86
86
|
end
|
@@ -176,7 +176,7 @@ class Step
|
|
176
176
|
begin
|
177
177
|
run(true)
|
178
178
|
rescue Step::Aborted
|
179
|
-
Log.debug
|
179
|
+
Log.debug{"Forked process aborted: #{@path}"}
|
180
180
|
log :aborted, "Aborted"
|
181
181
|
raise $!
|
182
182
|
rescue Exception
|
@@ -3,11 +3,11 @@ require 'rbbt/workflow'
|
|
3
3
|
require 'rbbt/association'
|
4
4
|
require 'rbbt/association/index'
|
5
5
|
|
6
|
-
Workflow.require_workflow "Genomics"
|
7
|
-
require 'rbbt/entity/gene'
|
8
6
|
class TestAssociationIndex < Test::Unit::TestCase
|
9
7
|
|
10
8
|
def setup
|
9
|
+
Workflow.require_workflow "Genomics"
|
10
|
+
require 'rbbt/entity/gene'
|
11
11
|
end
|
12
12
|
|
13
13
|
def teardown
|
@@ -6,8 +6,6 @@ require 'rbbt/entity'
|
|
6
6
|
require 'rbbt/util/tmpfile'
|
7
7
|
require 'test/unit'
|
8
8
|
|
9
|
-
Workflow.require_workflow "Genomics"
|
10
|
-
require 'rbbt/entity/gene'
|
11
9
|
|
12
10
|
Workflow.require_workflow "TSVWorkflow"
|
13
11
|
|
@@ -35,18 +33,18 @@ class TestAssociations < Test::Unit::TestCase
|
|
35
33
|
FileUtils.rm_rf DAssocs
|
36
34
|
end
|
37
35
|
|
38
|
-
def
|
36
|
+
def test_simple_open
|
39
37
|
database = Association.open(FAssocs, {}, :dir => DAssocs)
|
40
38
|
assert_equal ["C", "K"], database["c"]["Entity2"]
|
41
39
|
end
|
42
40
|
|
43
|
-
def
|
41
|
+
def test_source_open
|
44
42
|
database = Association.open(FAssocs, {:source => "Entity2", :zipped => true}, :dir => DAssocs)
|
45
43
|
assert_equal ["c", "3", 'cc', "PTEN"], database["C"].flatten
|
46
44
|
assert_equal ["c", "4", 'kk', "PTEN"], database["K"].flatten
|
47
45
|
end
|
48
46
|
|
49
|
-
def
|
47
|
+
def test_target_open
|
50
48
|
database = Association.open(FAssocs, {:source => "Entity2", :target => "Entity3", :zipped => true}, :dir => DAssocs)
|
51
49
|
assert_equal ["cc", "c", "3", "PTEN"], database["C"].flatten
|
52
50
|
assert_equal ["kk", "c", "4", "PTEN"], database["K"].flatten
|
@@ -71,24 +69,24 @@ class TestAssociations < Test::Unit::TestCase
|
|
71
69
|
end
|
72
70
|
|
73
71
|
|
74
|
-
def
|
72
|
+
def test_gene_open
|
75
73
|
database = Association.open(FAssocs, {:source => "Gene=~Associated Gene Name", :target => "Entity3", :zipped => true}, :dir => DAssocs)
|
76
74
|
assert_equal ["aa"], database["TP53"].first
|
77
75
|
end
|
78
76
|
|
79
|
-
def
|
77
|
+
def test_gene_open_translate
|
80
78
|
tp53 = Gene.setup("TP53", "Associated Gene Name", "Hsa/jan2013")
|
81
79
|
database = Association.open(FAssocs, {:source => "Gene=~Associated Gene Name", :source_format => "Ensembl Gene ID", :target => "Entity3", :zipped => true}, :dir => DAssocs)
|
82
80
|
assert_equal ["aa"], database[tp53.ensembl].first
|
83
81
|
end
|
84
82
|
|
85
|
-
def
|
83
|
+
def test_gene_target_open_translate
|
86
84
|
tp53 = Gene.setup("TP53", "Associated Gene Name", "Hsa/jan2013")
|
87
85
|
database = Association.open(FAssocs, {:target => "Gene=~Associated Gene Name=>Ensembl Gene ID", :source => "Entity3", :zipped => true}, :dir => DAssocs)
|
88
86
|
assert_equal [tp53.ensembl], database["aa"].first
|
89
87
|
end
|
90
88
|
|
91
|
-
def
|
89
|
+
def test_ICGC
|
92
90
|
assoc = Association.open(Open.open('ftp://data.dcc.icgc.org/current/Chronic_Lymphocytic_Leukemia-ISC_MICINN-ES/simple_somatic_mutation.CLLE-ES.tsv.gz'),
|
93
91
|
{ :source => "gene_affected=~Ensembl Gene ID=>Associated Gene Name", :target => "icgc_donor_id=~Sample",
|
94
92
|
:fields => ['consequence_type'],
|
@@ -4,12 +4,13 @@ require 'test/unit'
|
|
4
4
|
require 'rbbt/knowledge_base'
|
5
5
|
require 'rbbt/sources/pina'
|
6
6
|
|
7
|
-
require 'rbbt/workflow'
|
8
|
-
Workflow.require_workflow "Genomics"
|
9
|
-
require 'genomics_kb'
|
10
|
-
|
11
7
|
class TestKnowledgeBase < Test::Unit::TestCase
|
12
8
|
def setup
|
9
|
+
require 'rbbt/workflow'
|
10
|
+
Workflow.require_workflow "Genomics"
|
11
|
+
require 'genomics_kb'
|
12
|
+
|
13
|
+
|
13
14
|
KnowledgeBase.knowledge_base_dir = Rbbt.tmp.knowledge_base_test.find
|
14
15
|
@kb = Genomics.knowledge_base
|
15
16
|
end
|
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.5.
|
4
|
+
version: 5.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|