rbbt-util 5.25.46 → 5.25.47

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: d7a6bfb0c182d36d1323ddefe70c93f57e173c55
4
- data.tar.gz: fff96627b902d989f53d92a4fe6f327502f75c89
3
+ metadata.gz: 07dd5ab637d8ab626487a17775efe56830ba49d3
4
+ data.tar.gz: 83b9ca45962531d0a320c31fe6624b2dceb939fe
5
5
  SHA512:
6
- metadata.gz: 9cd88404da356142456ea01f3efdb78ec784613a4b7670a4826ca40a4a8d74275632c7cf7ba521437b1554332e713b02904da2735fc30489bdaed9cc858f5e9e
7
- data.tar.gz: 26d5b2fc59d6cd3446dfb7de5094c5dec73b44ab9e438e451f160bee3b9a3eddbdb3b49f5614bfc4fb40048bafe7b745360185a203147c0a9d9f2b23b441ae15
6
+ metadata.gz: e92de8699285124584a83188e1475dd957e5bf6e20b568aebb2c7c06104e763ec2063275e09c8273778e2d5f111c8793f0fc242a0a64ff14797714a0b106a23e
7
+ data.tar.gz: c0dd02ec8593f146a2b06a9bfd66360e2e30769e45f5dd8445865fc981672d97243699076b74abbece10197a1eaf2923a1c3a741392945278a81d0a9f4be5141
@@ -110,7 +110,7 @@ module Rbbt::Config
110
110
  end
111
111
  end
112
112
 
113
- value = priorities.empty? ? default : priorities.sort_by{|p,v| p}.first.last.first
113
+ value = priorities.empty? ? default : priorities.collect{|p| p }.reverse.sort_by{|p,v| p}.first.last.first
114
114
  value = false if value == 'false'
115
115
 
116
116
  Log.debug "Value #{value.inspect} for config key '#{ key }': #{tokens * ", "}"
@@ -374,6 +374,19 @@ module Misc
374
374
  obj2digest(obj)
375
375
  end
376
376
 
377
+ def self.file2md5(file)
378
+ if File.exists?(file + '.md5')
379
+ Open.read(file + '.md5')
380
+ else
381
+ md5 = CMD.cmd("md5sum '#{file}'").read.strip.split(" ").first
382
+ begin
383
+ Open.write(file + '.md5', md5)
384
+ rescue
385
+ end
386
+ md5
387
+ end
388
+ end
389
+
377
390
  def self.get_filename(obj)
378
391
  if obj.respond_to? :filename
379
392
  obj.filename
@@ -328,6 +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
333
  if (m1 = chr1.match(/(\d+)$/)) && (m2 = chr2.match(/(\d+)$/))
332
334
  m1[1].to_i <=> m2[1].to_i
333
335
  elsif chr1 =~ /\d+$/
@@ -339,6 +341,10 @@ module Misc
339
341
  end
340
342
  end
341
343
 
344
+ def self.chr_cmp_contigs(chr1, chr2, contigs)
345
+ contigs.index(chr1) <=> contigs.index(chr2)
346
+ end
347
+
342
348
  def self.genomic_location_cmp(gpos1, gpos2, sep = ":")
343
349
  chr1, _sep, pos1 = gpos1.partition(sep)
344
350
  chr2, _sep, pos2 = gpos2.partition(sep)
@@ -363,6 +369,18 @@ module Misc
363
369
  end
364
370
  end
365
371
 
372
+ def self.genomic_location_cmp_contigs(gpos1, gpos2, contigs, sep = ":")
373
+ chr1, _sep, pos1 = gpos1.partition(sep)
374
+ chr2, _sep, pos2 = gpos2.partition(sep)
375
+ iii [gpos1, gpos2, chr1, chr2]
376
+ cmp = chr_cmp_contigs(chr1, chr2, contigs)
377
+ case cmp
378
+ when 0
379
+ pos1.to_i <=> pos2.to_i
380
+ else
381
+ cmp
382
+ end
383
+ end
366
384
  def self.intersect_streams_cmp_chr(chr1, chr2)
367
385
  chr1 <=> chr2
368
386
  end
@@ -57,6 +57,10 @@ class Step
57
57
  File.join(dir, '.' << filename)
58
58
  end
59
59
 
60
+ def self.md5_file(path)
61
+ path.nil? ? nil : path + '.md5'
62
+ end
63
+
60
64
  def self.pid_file(path)
61
65
  path.nil? ? nil : path + '.pid'
62
66
  end
@@ -1,16 +1,16 @@
1
1
  class Step
2
2
  def self.prov_status_msg(status)
3
3
  color = case status.to_sym
4
- when :error, :aborted, :missing, :dead
4
+ when :error, :aborted, :missing, :dead, :unsync
5
5
  :red
6
6
  when :streaming, :started
7
7
  :cyan
8
- when :done
8
+ when :done, :noinfo
9
9
  :green
10
- when :noinfo
11
- :blue
12
- when :dependencies, :waiting, :setyp
10
+ when :dependencies, :waiting, :setup
13
11
  :yellow
12
+ when :notfound
13
+ :blue
14
14
  else
15
15
  if status.to_s.index ">"
16
16
  :cyan
@@ -27,7 +27,7 @@ class Step
27
27
  task = Log.color(:yellow, parts.pop)
28
28
  workflow = Log.color(:magenta, parts.pop)
29
29
  if status.to_s == 'noinfo' and parts.last != 'jobs'
30
- task, status, workflow = Log.color(:yellow, info[:task_name]), Log.color(:blue, "file"), Log.color(:magenta, "-")
30
+ task, status, workflow = Log.color(:yellow, info[:task_name]), Log.color(:green, "file"), Log.color(:magenta, "-")
31
31
  end
32
32
 
33
33
  path_mtime = begin
@@ -73,7 +73,8 @@ class Step
73
73
  status = info[:status] || :missing
74
74
  status = "remote" if Open.remote?(path)
75
75
  name = info[:name] || File.basename(path)
76
- status = :unsync if status == :done and not Open.exist? path
76
+ status = :unsync if status == :done and not Open.exist?(path)
77
+ status = :notfound if status == :noinfo and not Open.exist?(path)
77
78
  str = " " * offset
78
79
  str << prov_report_msg(status, name, path, info)
79
80
  step.dependencies.each do |dep|
@@ -83,7 +84,7 @@ class Step
83
84
  seen << path
84
85
  str << prov_report(dep, offset + 1, task, seen)
85
86
  else
86
- str << Log.color(:blue, Log.uncolor(prov_report(dep, offset+1, task)))
87
+ str << Log.color(:green, Log.uncolor(prov_report(dep, offset+1, task)))
87
88
  end
88
89
  end if step.dependencies
89
90
  str
@@ -296,6 +296,7 @@ class Step
296
296
  def self.clean(path)
297
297
  info_file = Step.info_file path
298
298
  pid_file = Step.pid_file path
299
+ md5_file = Step.md5_file path
299
300
  files_dir = Step.files_dir path
300
301
 
301
302
  if ! (Open.writable?(path) && Open.writable?(info_file))
@@ -309,11 +310,11 @@ class Step
309
310
  @pid = nil
310
311
 
311
312
  Misc.insist do
312
- Open.rm info_file if Open.exists? info_file
313
+ Open.rm info_file if Open.exists?(info_file)
314
+ Open.rm md5_file if Open.exists?(md5_file)
313
315
  Open.rm path if (Open.exists?(path) or Open.broken_link?(path))
314
- Open.rm path if (Open.exists?(path) or Open.broken_link?(path))
315
- Open.rm_rf files_dir if Open.exists? files_dir
316
- Open.rm pid_file if Open.exists? pid_file
316
+ Open.rm_rf files_dir if Open.exists?(files_dir)
317
+ Open.rm pid_file if Open.exists?(pid_file)
317
318
  end
318
319
  end
319
320
  end
@@ -171,7 +171,7 @@ workflows.sort.each do |workflow,tasks|
171
171
  str = file.dup
172
172
  if options[:quick] and i[:done]
173
173
  status = 'done'
174
- str << " #{ status_msg status }"
174
+ str << " #{ Step.prov_status_msg status }"
175
175
  if inputs and inputs.any?
176
176
  str << input_msg(file, inputs)
177
177
  end
@@ -56,7 +56,7 @@ jobs.each do |job|
56
56
  next unless job.done?
57
57
  started = job.info[:started]
58
58
  ddone = job.info[:done]
59
- data[job.name] = [job.workflow.to_s, job.task_name,started,ddone]
59
+ data[[job.task_name.to_s, job.clean_name] * "."] = [job.workflow.to_s, job.task_name,started,ddone]
60
60
  if min_start.nil?
61
61
  min_start = started
62
62
  else
@@ -70,21 +70,73 @@ jobs.each do |job|
70
70
  end
71
71
  end
72
72
 
73
- #data.process "Start" do |value|
74
- # value - min_start
75
- #end
76
- #
77
- #data.process "End" do |value|
78
- # value - min_start
79
- #end
73
+ data.add_field "Start.second" do |k,value|
74
+ value["Start"] - min_start
75
+ end
76
+
77
+ data.add_field "End.second" do |k,value|
78
+ value["End"] - min_start
79
+ end
80
80
 
81
81
  Log.severity = 0
82
- data.R_interactive <<-EOF
83
- rbbt.require('timevis')
82
+ #data.R_interactive <<-EOF
83
+ # rbbt.require('timevis')
84
+ # data$id = rownames(data)
85
+ # data$content = data$Task
86
+ # data$start = data$Start
87
+ # data$end = data$End
88
+ #
89
+ # timevis(data)
90
+ #EOF
91
+
92
+
93
+ data.R <<-EOF, [:svg]
94
+ rbbt.require('tidyverse')
95
+ rbbt.require('ggplot2')
96
+
97
+ names(data) <- make.names(names(data))
84
98
  data$id = rownames(data)
85
99
  data$content = data$Task
86
100
  data$start = data$Start
87
101
  data$end = data$End
88
-
89
- timevis(data)
102
+ data$Project = data$Workflow
103
+
104
+ tasks = data
105
+
106
+ #theme_gantt <- function(base_size=11, base_family="Source Sans Pro Light") {
107
+ theme_gantt <- function(base_size=11, base_family="Sans Serif") {
108
+ ret <- theme_bw(base_size, base_family) %+replace%
109
+ theme(panel.background = element_rect(fill="#ffffff", colour=NA),
110
+ axis.title.x=element_text(vjust=-0.2), axis.title.y=element_text(vjust=1.5),
111
+ title=element_text(vjust=1.2, family="Source Sans Pro Semibold"),
112
+ panel.border = element_blank(), axis.line=element_blank(),
113
+ panel.grid.minor=element_blank(),
114
+ panel.grid.major.y = element_blank(),
115
+ panel.grid.major.x = element_line(size=0.5, colour="grey80"),
116
+ axis.ticks=element_blank(),
117
+ legend.position="bottom",
118
+ axis.title=element_text(size=rel(0.8), family="Source Sans Pro Semibold"),
119
+ strip.text=element_text(size=rel(1), family="Source Sans Pro Semibold"),
120
+ strip.background=element_rect(fill="#ffffff", colour=NA),
121
+ panel.spacing.y=unit(1.5, "lines"),
122
+ legend.key = element_blank())
123
+
124
+ ret
125
+ }
126
+
127
+ tasks.long <- tasks %>%
128
+ gather(date.type, task.date, -c(Project, Task, id, Start.second, End.second)) %>%
129
+ arrange(date.type, task.date) %>%
130
+ mutate(id = factor(id, levels=rev(unique(id)), ordered=TRUE))
131
+
132
+ x.breaks <- seq(length(tasks$Task) + 0.5 - 3, 0, by=-3)
133
+
134
+ timeline <- ggplot(tasks.long, aes(y=id, yend=id, x=Start.second, xend=End.second, colour=Task)) +
135
+ geom_segment() +
136
+ geom_vline(xintercept=x.breaks, colour="grey80", linetype="dotted") +
137
+ guides(colour=guide_legend(title=NULL)) +
138
+ labs(x=NULL, y=NULL) +
139
+ theme_gantt() + theme(axis.text.x=element_text(angle=45, hjust=1))
140
+
141
+ rbbt.png_plot('#{plot}', 'timeline', width=2000)
90
142
  EOF
@@ -620,5 +620,11 @@ EOF
620
620
  end
621
621
  iii Misc.remove_long_items(tsv)
622
622
  end
623
+
624
+ def test_digest_file
625
+ TmpFile.with_file("FILE CONTENT") do |file|
626
+ assert_match /^[0-9a-z]{10,}$/, Misc.file2md5(file)
627
+ end
628
+ end
623
629
  end
624
630
 
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.25.46
4
+ version: 5.25.47
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-04-12 00:00:00.000000000 Z
11
+ date: 2019-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake