rbbt-util 5.14.28 → 5.14.29

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46848d2c59e5582f44b698be77f427d886682c4f
4
- data.tar.gz: c3ae39b55c1f9d44975679aa2916cdcb198cd7e1
3
+ metadata.gz: 1ed65d89a02680821214ab3141ef167565045291
4
+ data.tar.gz: 95402199abefb0228dc7788731a1c2b0487c9bf6
5
5
  SHA512:
6
- metadata.gz: 6fe50e3bb01ed9b718f71a19f29b5697af0aacbc9ce602b93f802ba1400074491782f32774cb56d832c50befd99386566732e8a9941ba2500957e2f66ef1d9b5
7
- data.tar.gz: 600ac43a4bd563779943a3061a151d3dacb5b3d2cfa5ff98d7f90f600bc29578bd34c3161af06d8d97ec7d32f1c9896f21518ff0cd2837f00f569d2348894d6c
6
+ metadata.gz: 8643b977a908ea2447d070aef682d4f5bafc3360f380cbc3b43be992ba6bad689cfba5ee2ed546fce64672f133fb5f2676b13e4088d6a60f0c91ba2bef741108
7
+ data.tar.gz: 25b4bf073c68ee563eb17d77b00af6a38f9d25d10520f834167bb94e6b8daea866c048264f97a9b6afc2917d7d32b16c4b41a52aa123176541b3e84f8bd83b3b
@@ -70,7 +70,7 @@ module Association
70
70
  source_type = Entity.formats[source_field]
71
71
  target_type = Entity.formats[target_field]
72
72
 
73
- source_entities = entities[:source] || entities[source_field] || entities[Entity.formats[source_field].to_s]
73
+ source_entities = entities[:source] || entities[source_field] || entities[Entity.formats[source_field].to_s]
74
74
  target_entities = entities[:target] || entities[target_field] || entities[Entity.formats[target_field].to_s]
75
75
 
76
76
  [source_entities, target_entities]
@@ -89,7 +89,11 @@ module Association
89
89
  end
90
90
 
91
91
  matches = source.uniq.inject([]){|acc,e|
92
- acc.concat(match(e))
92
+ if block_given?
93
+ acc.concat(match(e))
94
+ else
95
+ acc.concat(match(e))
96
+ end
93
97
  }
94
98
 
95
99
  return matches if target == :all or target == "all"
@@ -133,12 +133,13 @@ module Association
133
133
  target_field = tsv.fields.first
134
134
 
135
135
  if source_final_format and source_field != source_final_format and
136
- Entity.formats[source_field] and
137
- Entity.formats[source_final_format].all_formats.include? source_field
136
+ Entity.formats[source_field]
137
+
138
138
  Log.debug("Changing source format from #{tsv.key_field} to #{source_final_format}")
139
139
 
140
140
  tsv.with_unnamed do
141
- tsv = tsv.change_key source_final_format, :identifiers => Organism.identifiers(tsv.namespace), :persist => true
141
+ identifiers = tsv.identifiers || Organism.identifiers(tsv.namespace)
142
+ tsv = tsv.change_key source_final_format, :identifiers => identifiers, :persist => true
142
143
  end
143
144
  end
144
145
 
@@ -221,7 +222,14 @@ module Association
221
222
 
222
223
  case file
223
224
  when Proc
224
- return load_tsv(file.call, options)
225
+ res = file.call
226
+ tsv = case res
227
+ when TSV, Path
228
+ return load_tsv(res, options)
229
+ else
230
+ tsv = TSV.open(res, :unnamed => true)
231
+ return load_tsv(tsv, options)
232
+ end
225
233
  when TSV
226
234
  key_field, *fields = all_fields = file.all_fields
227
235
  else
@@ -257,6 +265,7 @@ module Association
257
265
  tsv = load_tsv(file, options)
258
266
 
259
267
  tsv.annotate(data)
268
+
260
269
  data.serializer = tsv.type
261
270
 
262
271
  tsv.with_unnamed do
@@ -358,7 +358,7 @@ class KnowledgeBase
358
358
  end
359
359
  end
360
360
 
361
- def subset(name, entities)
361
+ def subset(name, entities, &block)
362
362
  entities = case entities
363
363
  when :all
364
364
  {:target => :all, :source => :all}
@@ -374,18 +374,20 @@ class KnowledgeBase
374
374
 
375
375
  repo = get_index name
376
376
 
377
- begin
378
- s = repo.subset_entities(entities)
379
- setup(name, s)
380
- rescue Exception
381
- target = entities[:target]
382
- source = entities[:source]
383
- if target or source
384
- entities[:target] = source
385
- entities[:source] = target
386
- end
387
- setup(name, repo.reverse.subset_entities(entities), true)
388
- end
377
+ matches = begin
378
+ s = repo.subset_entities(entities, &block)
379
+ setup(name, s)
380
+ rescue Exception
381
+ target = entities[:target]
382
+ source = entities[:source]
383
+ if target or source
384
+ entities[:target] = source
385
+ entities[:source] = target
386
+ end
387
+ setup(name, repo.reverse.subset_entities(entities, &block), true)
388
+ end
389
+
390
+ block_given? ? matches.select(&block) : matches
389
391
  end
390
392
 
391
393
  def translate(entities, type)
data/lib/rbbt/persist.rb CHANGED
@@ -218,7 +218,7 @@ module Persist
218
218
  end
219
219
 
220
220
  def self.get_result(path, type, persist_options, lockfile, &block)
221
- res = yield
221
+ res = yield path
222
222
  stream = res if IO === res
223
223
  stream = res.stream if res.respond_to? :stream
224
224
 
@@ -317,6 +317,7 @@ module Persist
317
317
  if FalseClass === persist_options[:persist]
318
318
  yield
319
319
  else
320
+ persist_options[:update] ||= true if persist_options[:persist].to_s == "update"
320
321
  other_options = Misc.process_options persist_options, :other
321
322
  path = persistence_path(name, persist_options, other_options || {})
322
323
 
@@ -47,8 +47,9 @@ module Rake
47
47
  Rake::Task.clear
48
48
  Rake::FileTask.clear_files
49
49
  end
50
- rescue
50
+ rescue Exception
51
51
  Log.error "Error in rake: #{$!.message}"
52
+ Log.exception $!
52
53
  Kernel.exit! -1
53
54
  end
54
55
  }
data/lib/rbbt/resource.rb CHANGED
@@ -122,7 +122,12 @@ module Resource
122
122
  raise "Resource is missing and does not seem to be claimed: #{ self } -- #{ path } "
123
123
  end
124
124
 
125
- final_path = path.respond_to?(:find) ? (force ? path.find(:default) : path.find) : path
125
+ if path.respond_to?(:find)
126
+ final_path = force ? path.find(:default) : path.find
127
+ else
128
+ final_path = path
129
+ end
130
+
126
131
  if not File.exists? final_path or force
127
132
  Log.medium "Producing: #{ final_path }"
128
133
  lock_filename = Persist.persistence_path(final_path, {:dir => Resource.lock_dir})
@@ -9,7 +9,7 @@ module TSV
9
9
  attr_accessor :unnamed, :serializer_module, :entity_options, :entity_templates
10
10
 
11
11
  def info
12
- {:key_field => key_field, :fields => fields, :namespace => namespace, :entity_options => entity_options, :type => type, :filename => filename, :identifiers => identifiers, :unnamed => unnamed}.delete_if{|k,v| v.nil? }
12
+ {:key_field => key_field, :fields => fields, :namespace => namespace, :entity_options => entity_options, :type => type, :filename => filename, :identifiers => identifiers, :unnamed => unnamed, :cast => cast}.delete_if{|k,v| v.nil? }
13
13
  end
14
14
 
15
15
  def annotate(tsv)
@@ -182,7 +182,7 @@ module TSV
182
182
  unless TSV === other
183
183
  other_identifier_file = other.identifier_files.first if other.respond_to? :identifier_files
184
184
  other = TSV.open(other, :persist => options[:persist_input] == true)
185
- other.identifiers = other_identifier_file
185
+ other.identifiers ||= other_identifier_file
186
186
  end
187
187
 
188
188
  fields = other.fields - [key_field].concat(self.fields) if fields.nil? or fields == :all
@@ -45,6 +45,7 @@ module TSV
45
45
  str = TSV.header_lines(key_field, fields, options)
46
46
 
47
47
  Thread.pass while IO.select(nil, [@in_stream],nil,1).nil?
48
+
48
49
  @in_stream.puts str
49
50
  end
50
51
 
@@ -631,10 +631,11 @@ module TSV
631
631
  self
632
632
  end
633
633
 
634
- def transpose(key_field)
634
+ def transpose(key_field="Unkown ID")
635
635
  raise "Transposing only works for TSVs of type :list" unless type == :list
636
636
  new_fields = keys
637
- new = TSV.setup({}, :key_field => key_field, :fields => new_fields, :type => type, :filename => filename, :identifiers => identifiers)
637
+ new = self.annotate({})
638
+ TSV.setup(new, :key_field => key_field, :fields => new_fields, :type => type, :filename => filename, :identifiers => identifiers)
638
639
 
639
640
  through do |key, values|
640
641
  fields.zip(values) do |new_key, value|
@@ -643,10 +644,6 @@ module TSV
643
644
  end
644
645
  end
645
646
 
646
- new.entity_options = entity_options
647
- new.entity_templates = entity_templates
648
- new.namespace = namespace
649
-
650
647
  new
651
648
  end
652
649
  end
@@ -0,0 +1,20 @@
1
+ module TSV
2
+ def self.read_matrix(tsv, field_format = "ID", value_format = "Value")
3
+ tsv = TSV.open(tsv) unless TSV === tsv
4
+
5
+ key_field, *fields = tsv.all_fields
6
+ options = tsv.options.merge(:key_field => key_field, :fields => [field_format, value_format], :type => :double, :cast => nil)
7
+
8
+ options[:filename] ||= tsv.filename
9
+ options[:identifiers] ||= tsv.identifier_files.first
10
+
11
+ dumper = TSV::Dumper.new(options)
12
+
13
+ dumper.init
14
+ TSV.traverse tsv, :into => dumper do |key, values|
15
+ [key, [fields, values]]
16
+ end
17
+
18
+ dumper.stream
19
+ end
20
+ end
@@ -1,7 +1,7 @@
1
1
  require 'rbbt/util/cmd'
2
2
  module TSV
3
3
  class Parser
4
- attr_accessor :stream, :filename, :header_hash, :sep, :sep2, :type, :key_position, :field_positions, :cast, :key_field, :fields, :fix, :select, :serializer, :straight, :take_all, :zipped, :namespace, :first_line, :stream, :preamble
4
+ attr_accessor :stream, :filename, :header_hash, :sep, :sep2, :type, :key_position, :field_positions, :cast, :key_field, :fields, :fix, :select, :serializer, :straight, :take_all, :zipped, :namespace, :first_line, :stream, :preamble, :identifiers
5
5
 
6
6
  class SKIP_LINE < Exception; end
7
7
  class END_PARSING < Exception; end
@@ -392,6 +392,8 @@ module TSV
392
392
  @type ||= Misc.process_options(options, :type) || :double
393
393
  @type ||= :double
394
394
 
395
+ @identifiers = Misc.process_options(options, :identifiers)
396
+
395
397
  @filename = Misc.process_options(options, :filename)
396
398
  @filename ||= stream.filename if stream.respond_to? :filename
397
399
 
@@ -472,6 +474,7 @@ module TSV
472
474
  data.fields = @fields
473
475
  data.namespace = @namespace
474
476
  data.filename = @filename
477
+ data.identifiers = @identifiers
475
478
  data.cast = @cast if Symbol === @cast
476
479
  data
477
480
  end
@@ -559,6 +562,8 @@ module TSV
559
562
  break
560
563
  end
561
564
  rescue END_PARSING
565
+ stream.close unless stream.closed?
566
+ begin stream.join; rescue Exception; end if stream.respond_to? :join and not stream.joined?
562
567
  break
563
568
  rescue Errno::EPIPE
564
569
  Log.error "Pipe closed while parsing #{Misc.fingerprint stream}: #{$!.message}"
@@ -572,7 +577,7 @@ module TSV
572
577
  end
573
578
  ensure
574
579
  stream.close unless stream.closed?
575
- stream.join if stream.respond_to? :join
580
+ stream.join if stream.respond_to? :join and not stream.joined?
576
581
  end
577
582
 
578
583
  self
data/lib/rbbt/tsv/util.rb CHANGED
@@ -167,7 +167,7 @@ module TSV
167
167
  str = ""
168
168
  str << preamble.strip << "\n" if preamble and not preamble.empty?
169
169
  if fields
170
- str << "#" << key_field << sep << fields * sep << "\n"
170
+ str << "#" << (key_field || "ID") << sep << fields * sep << "\n"
171
171
  end
172
172
 
173
173
  str
data/lib/rbbt/tsv.rb CHANGED
@@ -17,6 +17,7 @@ require 'rbbt/tsv/field_index'
17
17
  require 'rbbt/tsv/parallel'
18
18
  require 'rbbt/tsv/stream'
19
19
  require 'rbbt/tsv/melt'
20
+ require 'rbbt/tsv/matrix'
20
21
 
21
22
  module TSV
22
23
  class << self
data/lib/rbbt/util/R.rb CHANGED
@@ -26,7 +26,7 @@ source('#{UTIL}');
26
26
  Log.debug{"R Script:\n#{ cmd }"}
27
27
 
28
28
  if options.delete :monitor
29
- io = CMD.cmd('R --vanilla --slave --quiet', options.merge(:in => cmd, :pipe => true, :log => true))
29
+ io = CMD.cmd('R --vanilla', options.merge(:in => cmd, :pipe => true, :log => true))
30
30
  while line = io.gets
31
31
  puts line
32
32
  end
data/lib/rbbt/util/cmd.rb CHANGED
@@ -104,7 +104,8 @@ module CMD
104
104
  pipe = options.delete(:pipe)
105
105
  post = options.delete(:post)
106
106
  log = options.delete(:log)
107
- dont_close_in = options.delete(:dont_close_in)
107
+ no_fail = options.delete(:no_fail)
108
+ dont_close_in = options.delete(:dont_close_in)
108
109
 
109
110
  log = true if log.nil?
110
111
 
@@ -205,7 +206,7 @@ module CMD
205
206
  end
206
207
 
207
208
  #SmartIO.tie sout, pid, cmd, post, in_content, sin, serr
208
- ConcurrentStream.setup sout, :pids => [pid], :autojoin => true
209
+ ConcurrentStream.setup sout, :pids => [pid], :autojoin => true, :no_fail => no_fail
209
210
 
210
211
  sout
211
212
  else
@@ -217,7 +218,7 @@ module CMD
217
218
  serr.close
218
219
  end
219
220
 
220
- ConcurrentStream.setup sout, :pids => [pid], :autojoin => true
221
+ ConcurrentStream.setup sout, :pids => [pid], :autojoin => true, :no_fail => no_fail
221
222
  out = StringIO.new sout.read
222
223
  sout.close unless sout.closed?
223
224
 
data/lib/rbbt/util/log.rb CHANGED
@@ -142,7 +142,7 @@ module Log
142
142
  message ||= block.call if block_given?
143
143
  return if message.nil?
144
144
 
145
- time = Time.now.strftime("%m/%d/%y-%H:%M:%S")
145
+ time = Time.now.strftime("%m/%d/%y-%H:%M:%S.%L")
146
146
 
147
147
  sev_str = severity.to_s
148
148
 
@@ -38,7 +38,12 @@ module Bgzf
38
38
  pos = 0
39
39
  while true do
40
40
  blockdata_offset = tell
41
- block = read_block
41
+ block = begin
42
+ read_block
43
+ rescue Exception
44
+ raise "BGZF seems to be buggy so some compressed files will not decompress right. Try uncompressing #{filename}" if $!.message =~ /BGFZ.*expected/
45
+ raise $!
46
+ end
42
47
  break unless block
43
48
  index << [pos, blockdata_offset]
44
49
  pos += block.length
@@ -1,8 +1,8 @@
1
1
  module ConcurrentStream
2
- attr_accessor :threads, :pids, :callback, :abort_callback, :filename, :joined, :aborted, :autojoin, :lockfile
2
+ attr_accessor :threads, :pids, :callback, :abort_callback, :filename, :joined, :aborted, :autojoin, :lockfile, :no_fail
3
3
 
4
4
  def self.setup(stream, options = {}, &block)
5
- threads, pids, callback, filename, autojoin, lockfile = Misc.process_options options, :threads, :pids, :callback, :filename, :autojoin, :lockfile
5
+ threads, pids, callback, filename, autojoin, lockfile, no_fail = Misc.process_options options, :threads, :pids, :callback, :filename, :autojoin, :lockfile, :no_fail
6
6
  stream.extend ConcurrentStream unless ConcurrentStream === stream
7
7
 
8
8
  stream.threads ||= []
@@ -10,6 +10,7 @@ module ConcurrentStream
10
10
  stream.threads.concat(Array === threads ? threads : [threads]) unless threads.nil?
11
11
  stream.pids.concat(Array === pids ? pids : [pids]) unless pids.nil? or pids.empty?
12
12
  stream.autojoin = autojoin
13
+ stream.no_fail = no_fail
13
14
 
14
15
  callback = block if block_given?
15
16
  if stream.callback and callback
@@ -60,7 +61,7 @@ module ConcurrentStream
60
61
  @pids.each do |pid|
61
62
  begin
62
63
  Process.waitpid(pid, Process::WUNTRACED)
63
- raise ProcessFailed.new "Error joining process #{pid} in #{self.inspect}" unless $?.success?
64
+ raise ProcessFailed.new "Error joining process #{pid} in #{self.inspect}" unless $?.success? or no_fail
64
65
  rescue Errno::ECHILD
65
66
  end
66
67
  end
@@ -76,12 +77,13 @@ module ConcurrentStream
76
77
  end
77
78
 
78
79
  def join
80
+ @joined = true
81
+
79
82
  join_threads
80
83
  join_pids
81
84
 
82
85
  join_callback
83
86
 
84
- @joined = true
85
87
  lockfile.unlock if lockfile and lockfile.locked?
86
88
  close unless closed?
87
89
  end
@@ -132,7 +132,7 @@ module Open
132
132
  CMD.cmd("grep #{invert ? '-v' : ''}", "-w" => true, "-f" => f, :in => stream, :pipe => true, :post => proc{FileUtils.rm f})
133
133
  end
134
134
  else
135
- CMD.cmd("grep #{invert ? '-v ' : ''} '#{grep}' -", :in => stream, :pipe => true, :post => proc{stream.force_close if stream.respond_to? :force_close})
135
+ CMD.cmd("grep #{invert ? '-v ' : ''} '#{grep}' -", :in => stream, :pipe => true, :post => proc{begin stream.force_close; rescue Exception; end if stream.respond_to?(:force_close)})
136
136
  end
137
137
  end
138
138
 
data/lib/rbbt/workflow.rb CHANGED
@@ -216,6 +216,10 @@ module Workflow
216
216
  def exec_exports
217
217
  @exec_exports ||= []
218
218
  end
219
+
220
+ def all_exports
221
+ @all_exports ||= asynchronous_exports + synchronous_exports + exec_exports
222
+ end
219
223
 
220
224
  # {{{ JOB MANAGEMENT
221
225
  DEFAULT_NAME="Default"
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbbt-util'
4
+ require 'rbbt/util/simpleopt'
5
+
6
+ $0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands
7
+
8
+ options = SOPT.setup <<EOF
9
+
10
+ Check the integrity of a BGZF file
11
+
12
+ $ rbbt check_bgzf <filename.bgz>
13
+
14
+ -h--help Print this help
15
+
16
+ EOF
17
+
18
+ rbbt_usage and exit 0 if defined? rbbt_usage and (options[:help] or ARGV.empty?)
19
+
20
+ file = ARGV.shift
21
+
22
+ begin
23
+ Open.read(file)
24
+ rescue Exception
25
+ puts Log.color :red, "#{ file } is Broken"
26
+ exit -1
27
+ 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.14.28
4
+ version: 5.14.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-16 00:00:00.000000000 Z
11
+ date: 2014-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -176,6 +176,7 @@ files:
176
176
  - lib/rbbt/tsv/filter.rb
177
177
  - lib/rbbt/tsv/index.rb
178
178
  - lib/rbbt/tsv/manipulate.rb
179
+ - lib/rbbt/tsv/matrix.rb
179
180
  - lib/rbbt/tsv/melt.rb
180
181
  - lib/rbbt/tsv/parallel.rb
181
182
  - lib/rbbt/tsv/parallel/through.rb
@@ -254,6 +255,7 @@ files:
254
255
  - share/rbbt_commands/benchmark/pthrough
255
256
  - share/rbbt_commands/benchmark/throughput
256
257
  - share/rbbt_commands/benchmark/tsv
258
+ - share/rbbt_commands/check_bgzf
257
259
  - share/rbbt_commands/color
258
260
  - share/rbbt_commands/conf/web_user/add
259
261
  - share/rbbt_commands/conf/web_user/list