miga-base 0.7.12.1 → 0.7.15.0

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
  SHA256:
3
- metadata.gz: 881c30021a8c7e8219dd2fad710bc3049eb56ce1307c0507607b3dd2c83ab296
4
- data.tar.gz: 34b47f66564a02413b79e12fa19cf181c639c50ae28030cef624634485c8af9b
3
+ metadata.gz: 0160b454e26886637f28dea78ab57e66b1c53ee3fca610c64339f3265ce86afb
4
+ data.tar.gz: 6df1a7bfc7ebf0493265cd6be8f8600a575b3c20f07ec43f7c25b8de3035b5c8
5
5
  SHA512:
6
- metadata.gz: fb36047b431765f2227e991d7adb5a2899801018a067227e581d8e0b63999082099c8f41138395ce83c86e7664284a9cb9267c280138d62656a8b671ffda2bee
7
- data.tar.gz: ec59a539424db91f6744799ea022c1aa56c39123b4c43e19f1ce20b01954c16c90e481a4e062d3ed01d912f57eda4c29123047399041889ba1997a4eb839f94d
6
+ metadata.gz: 00245e9a4d698ed335f1777bd1f9156ecc2ba325c4ef66f42f01f9e59c70e4bfb42a588a7be62271dd55df73e2fc737a29e24253487ba55e9d8645a43508d91c
7
+ data.tar.gz: 12c8beb33f81fc7114d957a59982d4bfab1deceb21db27dde1a93f474d4ab5918308ac04d351c86b9a71f8a6804e0311b3230ccbad16de320523246f1e7e3f9b
@@ -110,30 +110,9 @@ class MiGA::Cli < MiGA::MiGA
110
110
  end
111
111
 
112
112
  ##
113
- # Reports the advance of a task at +step+ (String), the +n+ out of +total+.
114
- # The advance is reported in powers of 1,024 if +bin+ is true, or powers of
115
- # 1,000 otherwise.
116
- # The report goes to $stderr iff --verborse
117
- def advance(step, n = 0, total = nil, bin = true)
118
- return unless self[:verbose]
119
-
120
- adv = total.nil? ? (n == 0 ? '' : num_suffix(n, bin)) :
121
- ('%.1f%% (%s/%s)' % [100.0 * n / total,
122
- num_suffix(n, bin), num_suffix(total, bin)])
123
- $stderr.print("[%s] %s %s \r" % [Time.now, step, adv])
124
- end
125
-
126
- def num_suffix(n, bin = false)
127
- p = ''
128
- { T: 4, G: 3, M: 2, K: 1 }.each do |k, x|
129
- v = (bin ? 1024 : 1e3)**x
130
- if n > v
131
- n = '%.1f' % (n / v)
132
- p = k
133
- break
134
- end
135
- end
136
- "#{n}#{p}"
113
+ # Same as MiGA::MiGA#advance, but checks if the CLI is verbose
114
+ def advance(*par)
115
+ super(*par) if self[:verbose]
137
116
  end
138
117
 
139
118
  ##
@@ -189,8 +168,9 @@ class MiGA::Cli < MiGA::MiGA
189
168
  end
190
169
 
191
170
  ##
192
- # Perform the task requested (see #task)
193
- def launch
171
+ # Perform the task requested (see #task); if +abort_on_error+, abort on
172
+ # error
173
+ def launch(abort_on_error = false)
194
174
  begin
195
175
  raise "See `miga -h`" if action.nil?
196
176
 
@@ -199,6 +179,7 @@ class MiGA::Cli < MiGA::MiGA
199
179
  $stderr.puts "Exception: #{err}"
200
180
  $stderr.puts ''
201
181
  err.backtrace.each { |l| $stderr.puts "DEBUG: #{l}" }
182
+ abort if abort_on_error
202
183
  err
203
184
  end
204
185
  end
@@ -15,12 +15,12 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
15
15
  p = cli.load_project
16
16
  create_empty_page(p)
17
17
  generate_project_page(p)
18
- say 'Creating dataset pages'
18
+ cli.say 'Creating dataset pages'
19
19
  cli.load_project.each_dataset do |d|
20
20
  generate_dataset_page(p, d)
21
21
  end
22
22
  generate_datasets_index(p)
23
- say "Open in your browser: #{File.join(p.path, 'index.html')}"
23
+ cli.say "Open in your browser: #{File.join(p.path, 'index.html')}"
24
24
  end
25
25
 
26
26
  private
@@ -28,7 +28,7 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
28
28
  ##
29
29
  # Create an empty page with necessary assets for project +p+
30
30
  def create_empty_page(p)
31
- say 'Creating project page'
31
+ cli.say 'Creating project page'
32
32
  FileUtils.mkdir_p(browse_file(p, '.'))
33
33
  %w[favicon-32.png style.css].each do |i|
34
34
  FileUtils.cp(template_file(i), browse_file(p, i))
@@ -46,7 +46,9 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
46
46
 
47
47
  # Summaries
48
48
  summaries = Dir["#{p.path}/*.tsv"].map do |i|
49
- "<li><a href='file://#{i}'>#{File.basename(i)}</a></li>"
49
+ b = File.basename(i, '.tsv')
50
+ generate_summary_page(i, p)
51
+ "<li><a href='s-#{b}.html'>#{format_name(b)}</a></li>"
50
52
  end.join('')
51
53
 
52
54
  # Project index page
@@ -59,6 +61,32 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
59
61
  write_file(p, 'index.html') { build_from_template('index.html', data) }
60
62
  end
61
63
 
64
+ ##
65
+ # Create page for the summary +path+ in project +p+
66
+ def generate_summary_page(path, p)
67
+ b = File.basename(path, '.tsv')
68
+ table = '<table class="table table-hover table-responsive">'
69
+ File.open(path, 'r') do |fh|
70
+ fh.each do |ln|
71
+ r = ln.chomp.split("\t")
72
+ if $. == 1
73
+ table += '<thead><tr>' +
74
+ r.map { |i| "<th scope=col>#{format_name(i)}</th>" }.join(' ') +
75
+ '</tr></thead><tbody>'
76
+ else
77
+ table += "<tr><th scope=row>#{r.shift}</th>" +
78
+ r.map { |i| "<td>#{i}</td>" }.join(' ') + "</tr>"
79
+ end
80
+ end
81
+ end
82
+ table += '</tbody></table>'
83
+ write_file(p, "s-#{b}.html") do
84
+ build_from_template(
85
+ 'summary.html', file: "#{b}.tsv", name: format_name(b), table: table
86
+ )
87
+ end
88
+ end
89
+
62
90
  ##
63
91
  # Create page for dataset +d+ within project +p+
64
92
  def generate_dataset_page(p, d)
@@ -75,7 +103,7 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
75
103
  ##
76
104
  # Create pages for reference and query dataset indexes
77
105
  def generate_datasets_index(p)
78
- say 'Creating index pages'
106
+ cli.say 'Creating index pages'
79
107
  data = format_dataset_index(p)
80
108
  data.each do |k, v|
81
109
  write_file(p, "#{k}_datasets.html") do
@@ -162,7 +190,7 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
162
190
  links = []
163
191
  res.each_file do |key, _|
164
192
  name = format_name(key)
165
- links << "<a href='file://#{res.file_path(key)}'>#{name}</a><br/>"
193
+ links << "<a href='../#{res.file_path(key, true)}'>#{name}</a><br/>"
166
194
  end
167
195
  links.empty? ? nil : links.join('')
168
196
  end
@@ -0,0 +1,5 @@
1
+ <h1 class="h2 border-bottom pt-3 pb-2 mb-3">Summary: {{name}}</h1>
2
+ <p class='m-2 mb-3'>
3
+ Based on <a href='../{{file}}'>{{file}}</a>
4
+ </p>
5
+ {{table}}
@@ -42,9 +42,7 @@ class MiGA::Cli::Action::ClassifyWf < MiGA::Cli::Action
42
42
  '--no-summaries',
43
43
  'Do not generate intermediate step summaries'
44
44
  ) { |v| cli[:summaries] = v }
45
- opts_for_wf(
46
- opt, 'Input genome assemblies (nucleotides, FastA)', qual: false
47
- )
45
+ opts_for_wf(opt, 'Input genome assemblies (nucleotides, FastA)')
48
46
  end
49
47
  end
50
48
 
@@ -6,7 +6,7 @@ require 'miga/daemon'
6
6
 
7
7
  class MiGA::Cli::Action::Daemon < MiGA::Cli::Action
8
8
  def parse_cli
9
- cli.defaults = { daemon_opts: [] }
9
+ cli.defaults = { daemon_opts: [], show_log: false }
10
10
  cli.expect_operation = true
11
11
  cli.parse do |opt|
12
12
  opt.separator 'Available operations:'
@@ -45,6 +45,10 @@ class MiGA::Cli::Action::Daemon < MiGA::Cli::Action
45
45
  '--json PATH',
46
46
  'Path to a custom daemon definition in json format'
47
47
  ) { |v| cli[:json] = v }
48
+ opt.on(
49
+ '--show-log',
50
+ 'Display log on advance instead of the progress summary'
51
+ ) { |v| cli[:show_log] = v }
48
52
  cli.opt_common(opt)
49
53
 
50
54
  opt.separator 'Daemon options:'
@@ -73,6 +77,7 @@ class MiGA::Cli::Action::Daemon < MiGA::Cli::Action
73
77
  d = MiGA::Daemon.new(p, cli[:json])
74
78
  dopts = %i[latency maxjobs nodelist ppn shutdown_when_done]
75
79
  dopts.each { |k| d.runopts(k, cli[k]) }
80
+ d.show_log! if cli[:show_log]
76
81
  d.daemon(cli.operation, cli[:daemon_opts])
77
82
  end
78
83
  end
@@ -27,10 +27,13 @@ class MiGA::Cli::Action::DerepWf < MiGA::Cli::Action
27
27
  '--threshold FLOAT', Float,
28
28
  "Metric threshold (%) to dereplicate. By default: #{cli[:threshold]}"
29
29
  ) { |v| cli[:threshold] = v }
30
+ opt.on(
31
+ '--quality',
32
+ 'Use genome with highest quality as clade representatives (default)'
33
+ ) { |v| cli[:criterion] = :quality }
30
34
  opt.on(
31
35
  '--medoids',
32
- 'Use medoids as clade representatives',
33
- 'By default: Use genome with the highest quality'
36
+ 'Use medoids as clade representatives'
34
37
  ) { |v| cli[:criterion] = :medoids }
35
38
  opt.on(
36
39
  '--no-collection',
@@ -47,12 +50,18 @@ class MiGA::Cli::Action::DerepWf < MiGA::Cli::Action
47
50
 
48
51
  def perform
49
52
  # Input data
50
- p = create_project(:assembly,
51
- { run_project_stats: false, run_clades: false,
52
- gsp_metric: cli[:metric], :"gsp_#{cli[:metric]}" => cli[:threshold] },
53
- { run_mytaxa_scan: false, run_ssu: false })
53
+ p = create_project(
54
+ :assembly,
55
+ {
56
+ run_project_stats: false,
57
+ run_clades: false,
58
+ gsp_metric: cli[:metric],
59
+ :"gsp_#{cli[:metric]}" => cli[:threshold]
60
+ },
61
+ { run_mytaxa_scan: false, run_ssu: false }
62
+ )
54
63
  unless cli[:threshold] >= 0.0 && cli[:threshold] <= 100.0
55
- raise "The threshold of identity must be in the range [0,100]"
64
+ raise 'The threshold of identity must be in the range [0,100]'
56
65
  end
57
66
 
58
67
  # Run
@@ -65,8 +74,8 @@ class MiGA::Cli::Action::DerepWf < MiGA::Cli::Action
65
74
  private
66
75
 
67
76
  def dereplicate(p)
68
- cli.say "Extracting genomospecies clades"
69
- r = p.result(:clade_finding) or raise "Result unavailable: run failed"
77
+ cli.say 'Extracting genomospecies clades'
78
+ r = p.result(:clade_finding) or raise 'Result unavailable: run failed'
70
79
  c_f = r.file_path(:clades_gsp) or raise 'Result incomplete: run failed'
71
80
  clades = File.readlines(c_f).map { |i| i.chomp.split("\t") }
72
81
  rep = representatives(p)
@@ -87,7 +96,7 @@ class MiGA::Cli::Action::DerepWf < MiGA::Cli::Action
87
96
  end
88
97
 
89
98
  def representatives(p)
90
- cli.say "Identifying representatives"
99
+ cli.say 'Identifying representatives'
91
100
  f = File.expand_path('representatives.txt', cli[:outdir])
92
101
  if cli[:criterion] == :medoids
93
102
  FileUtils.cp(p.result(:clade_finding).file_path(:medoids_gsp), f)
@@ -9,16 +9,13 @@ class MiGA::Cli::Action::QualityWf < MiGA::Cli::Action
9
9
 
10
10
  def parse_cli
11
11
  default_opts_for_wf
12
- cli.defaults = { mytaxa: false }
12
+ cli.defaults = { mytaxa: false, min_qual: 'no' }
13
13
  cli.parse do |opt|
14
14
  opt.on(
15
15
  '-m', '--mytaxa-scan',
16
16
  'Perform MyTaxa scan analysis'
17
17
  ) { |v| cli[:mytaxa] = v }
18
- opts_for_wf(
19
- opt, 'Input genome assemblies (nucleotides, FastA)',
20
- qual: false
21
- )
18
+ opts_for_wf(opt, 'Input genome assemblies (nucleotides, FastA)')
22
19
  end
23
20
  end
24
21
 
@@ -9,7 +9,7 @@ module MiGA::Cli::Action::Wf
9
9
  cli.defaults = {
10
10
  clean: false, regexp: MiGA::Cli.FILE_REGEXP,
11
11
  project_type: :genomes, dataset_type: :popgenome,
12
- ncbi_draft: true
12
+ ncbi_draft: true, min_qual: 25.0
13
13
  }
14
14
  end
15
15
 
@@ -42,10 +42,10 @@ module MiGA::Cli::Action::Wf
42
42
  end
43
43
  if params[:qual]
44
44
  opt.on(
45
- '--min-qual FLOAT', Float,
45
+ '--min-qual FLOAT',
46
46
  'Minimum genome quality to include in analysis',
47
- 'By default: 50.0'
48
- ) { |v| cli[:min_qual] = v }
47
+ "By default: #{cli[:min_qual]}"
48
+ ) { |v| cli[:min_qual] = v == 'no' ? v : v.to_f }
49
49
  end
50
50
  if params[:cleanup]
51
51
  opt.on(
@@ -6,6 +6,7 @@ require 'miga/json'
6
6
  require 'miga/common/base'
7
7
  require 'miga/common/path'
8
8
  require 'miga/common/format'
9
+ require 'stringio'
9
10
 
10
11
  ##
11
12
  # Generic class used to handle system-wide information and methods, and parent
@@ -38,10 +39,42 @@ class MiGA::MiGA
38
39
  ##
39
40
  # Print +par+ ensuring new line at the end.
40
41
  # Date/time-stamp each line.
41
- # If the first parameter is +IO+, the output is sent there,
42
+ # If the first parameter is +IO+ or +StringIO+ the output is sent there,
42
43
  # otherwise it's sent to +$stderr+
43
44
  def say(*par)
44
- io = par.first.is_a?(IO) ? par.shift : $stderr
45
+ io = like_io?(par.first) ? par.shift : $stderr
45
46
  io.puts(*par.map { |i| "[#{Time.now}] #{i}" })
46
47
  end
48
+
49
+ ##
50
+ # Reports the advance of a task at +step+ (String), the +n+ out of +total+.
51
+ # The advance is reported in powers of 1,024 if +bin+ is true, or powers of
52
+ # 1,000 otherwise.
53
+ # The report goes to $stderr iff --verborse
54
+ def advance(step, n = 0, total = nil, bin = true)
55
+ adv = total.nil? ? (n == 0 ? '' : num_suffix(n, bin)) :
56
+ ('%.1f%% (%s/%s)' % [100.0 * n / total,
57
+ num_suffix(n, bin), num_suffix(total, bin)])
58
+ $stderr.print("[%s] %s %s \r" % [Time.now, step, adv])
59
+ end
60
+
61
+ ##
62
+ # Return formatted number +n+ with the appropriate units as
63
+ # powers of 1,000 (if +bin+ if false) or 1,024 (otherwise)
64
+ def num_suffix(n, bin = false)
65
+ p = ''
66
+ { T: 4, G: 3, M: 2, K: 1 }.each do |k, x|
67
+ v = (bin ? 1024 : 1e3)**x
68
+ if n > v
69
+ n = '%.1f' % (n / v)
70
+ p = k
71
+ break
72
+ end
73
+ end
74
+ "#{n}#{p}"
75
+ end
76
+
77
+ def like_io?(obj)
78
+ obj.is_a?(IO) || obj.is_a?(StringIO)
79
+ end
47
80
  end
@@ -72,6 +72,7 @@ class MiGA::Daemon < MiGA::MiGA
72
72
  say '-----------------------------------'
73
73
  say 'MiGA:%s launched' % project.name
74
74
  say '-----------------------------------'
75
+ miga_say "Saving log to: #{output_file}" unless show_log?
75
76
  recalculate_status!
76
77
  load_status
77
78
  say 'Configuration options:'
@@ -91,7 +92,8 @@ class MiGA::Daemon < MiGA::MiGA
91
92
  flush!
92
93
  if (loop_i % 12).zero?
93
94
  purge!
94
- recalculate_status!
95
+ # TEMPORARILY DISABLED:
96
+ # recalculate_status!
95
97
  end
96
98
  save_status
97
99
  sleep(latency)
@@ -110,10 +112,12 @@ class MiGA::Daemon < MiGA::MiGA
110
112
  say(*msg) if verbosity >= level
111
113
  end
112
114
 
115
+ alias miga_say say
116
+
113
117
  ##
114
118
  # Same as +l_say+ with +level = 1+
115
119
  def say(*msg)
116
- super(*msg) if verbosity >= 1
120
+ super(logfh, *msg) if verbosity >= 1
117
121
  end
118
122
 
119
123
  ##
@@ -172,6 +176,12 @@ class MiGA::Daemon < MiGA::MiGA
172
176
  o = true if ds.ref?
173
177
  queue_job(:d, ds)
174
178
  end
179
+ unless show_log?
180
+ n = project.dataset_names.count
181
+ k = jobs_to_run.size + jobs_running.size
182
+ advance('Datasets:', n - k, n, false)
183
+ miga_say if k == 0
184
+ end
175
185
  o
176
186
  end
177
187
 
@@ -331,8 +341,9 @@ class MiGA::Daemon < MiGA::MiGA
331
341
  kill: %w[pid]
332
342
  }.each do |k, v|
333
343
  if !runopts(k).nil? && runopts(k) =~ /%(\d+\$)?[ds]/
334
- runopts(k,
335
- runopts(k).gsub(/%(\d+\$)?d/, '%\\1s') % v.map { |i| "{{#{i}}}" })
344
+ runopts(
345
+ k, runopts(k).gsub(/%(\d+\$)?d/, '%\\1s') % v.map { |i| "{{#{i}}}" }
346
+ )
336
347
  end
337
348
  end
338
349
  runopts(:format_version, 1)
@@ -17,7 +17,7 @@ module MiGA::Daemon::Base
17
17
  if !force && v == 0 && k != :verbosity
18
18
  raise "Daemon's #{k} cannot be set to zero"
19
19
  end
20
- when :shutdown_when_done
20
+ when :shutdown_when_done, :show_log
21
21
  v = !!v
22
22
  when :nodelist
23
23
  if v =~ /^\$/
@@ -73,4 +73,28 @@ module MiGA::Daemon::Base
73
73
  def verbosity
74
74
  runopts(:verbosity) || 1
75
75
  end
76
+
77
+ ##
78
+ # Writing file handler (IO) to the log file
79
+ def logfh
80
+ show_log? ? $stderr : (@logfh ||= File.open(output_file, 'w'))
81
+ end
82
+
83
+ ##
84
+ # Display log instead of the progress summary
85
+ def show_log!
86
+ @show_log = true
87
+ end
88
+
89
+ ##
90
+ # Display progress summary instead of the log
91
+ def show_summary!
92
+ @runopts[:show_log] = false
93
+ end
94
+
95
+ ##
96
+ # Display log instead of the progress summary?
97
+ def show_log?
98
+ @runopts[:show_log] ||= false
99
+ end
76
100
  end
@@ -81,20 +81,22 @@ class MiGA::Result < MiGA::MiGA
81
81
  end
82
82
 
83
83
  ##
84
- # Directory containing the result
85
- def dir
86
- File.dirname(path)
84
+ # Directory containing the result; by default an absolute path, if
85
+ # +relative+ is true returns the path relative to the parent project
86
+ def dir(relative = false)
87
+ relative ? relative_dir : File.dirname(path)
87
88
  end
88
89
 
89
90
  ##
90
- # Absolute path to the file(s) defined by symbol +k+
91
- def file_path(k)
91
+ # Absolute path to the file(s) defined by symbol +k+, or relative
92
+ # path if +relative+ is true
93
+ def file_path(k, relative = false)
92
94
  k = k.to_sym
93
95
  f = self[:files].nil? ? nil : self[:files][k]
94
96
  return nil if f.nil?
95
- return File.expand_path(f, dir) unless f.is_a? Array
97
+ return File.join(dir(relative), f) unless f.is_a? Array
96
98
 
97
- f.map { |fi| File.expand_path(fi, dir) }
99
+ f.map { |fi| File.join(dir(relative), fi) }
98
100
  end
99
101
 
100
102
  ##
@@ -8,7 +8,7 @@ module MiGA
8
8
  # - Float representing the major.minor version.
9
9
  # - Integer representing gem releases of the current version.
10
10
  # - Integer representing minor changes that require new version number.
11
- VERSION = [0.7, 12, 1]
11
+ VERSION = [0.7, 15, 0]
12
12
 
13
13
  ##
14
14
  # Nickname for the current major.minor version.
@@ -16,7 +16,7 @@ module MiGA
16
16
 
17
17
  ##
18
18
  # Date of the current gem release.
19
- VERSION_DATE = Date.new(2020, 7, 24)
19
+ VERSION_DATE = Date.new(2020, 8, 12)
20
20
 
21
21
  ##
22
22
  # Reference of MiGA.
@@ -13,17 +13,20 @@ echo -n "" > miga-project.log
13
13
  DS=$(miga ls -P "$PROJECT" --ref --no-multi --active)
14
14
 
15
15
  # Extract values
16
- echo "metric a b value sd n omega" | tr " " "\\t" >miga-project.txt
17
- for i in $DS ; do
18
- echo "SELECT CASE WHEN omega!=0 THEN 'AAI' ELSE 'hAAI_AAI' END," \
19
- " seq1, seq2, aai, sd, n, omega from aai;" \
20
- | sqlite3 "$i.db" | tr "\\|" "\\t" >>miga-project.txt
21
- echo "$i" >> miga-project.log
22
- done
16
+ rm -f miga-project.txt
17
+ (
18
+ echo "metric a b value sd n omega" | tr " " "\\t"
19
+ for i in $DS ; do
20
+ echo "SELECT CASE WHEN omega!=0 THEN 'AAI' ELSE 'hAAI_AAI' END," \
21
+ " seq1, seq2, aai, sd, n, omega from aai;" \
22
+ | sqlite3 "$i.db" | tr "\\|" "\\t"
23
+ echo "$i" >> miga-project.log
24
+ done
25
+ ) | gzip -9c > miga-project.txt.gz
23
26
 
24
27
  # R-ify
25
28
  echo "
26
- aai <- read.table('miga-project.txt', sep='\\t', h=T, as.is=TRUE);
29
+ aai <- read.table(gzfile('miga-project.txt.gz'), sep='\\t', h=T, as.is=TRUE);
27
30
  save(aai, file='miga-project.Rdata');
28
31
  if(sum(aai[,'a'] != aai[,'b']) > 0){
29
32
  h <- hist(aai[aai[,'a'] != aai[,'b'], 'value'], breaks=100, plot=FALSE);
@@ -35,9 +38,6 @@ if(sum(aai[,'a'] != aai[,'b']) > 0){
35
38
  }
36
39
  " | R --vanilla
37
40
 
38
- # Gzip
39
- gzip -9 -f miga-project.txt
40
-
41
41
  # Finalize
42
42
  miga date > "miga-project.done"
43
43
  miga add_result -P "$PROJECT" -r "$SCRIPT" -f
@@ -13,16 +13,19 @@ echo -n "" > miga-project.log
13
13
  DS=$(miga ls -P "$PROJECT" --ref --no-multi --active)
14
14
 
15
15
  # Extract values
16
- echo "metric a b value sd n omega" | tr " " "\\t" >miga-project.txt
17
- for i in $DS ; do
18
- echo "SELECT 'ANI', seq1, seq2, ani, sd, n, omega from ani ;" \
19
- | sqlite3 "$i.db" | tr "\\|" "\\t" >>miga-project.txt
20
- echo "$i" >> miga-project.log
21
- done
16
+ rm -f miga-project.txt
17
+ (
18
+ echo "metric a b value sd n omega" | tr " " "\\t"
19
+ for i in $DS ; do
20
+ echo "SELECT 'ANI', seq1, seq2, ani, sd, n, omega from ani ;" \
21
+ | sqlite3 "$i.db" | tr "\\|" "\\t"
22
+ echo "$i" >> miga-project.log
23
+ done
24
+ ) | gzip -9c > miga-project.txt.gz
22
25
 
23
26
  # R-ify
24
27
  echo "
25
- ani <- read.table('miga-project.txt', sep='\\t', h=T, as.is=TRUE);
28
+ ani <- read.table(gzfile('miga-project.txt.gz'), sep='\\t', h=T, as.is=TRUE);
26
29
  save(ani, file='miga-project.Rdata');
27
30
  if(sum(ani[,'a'] != ani[,'b']) > 0){
28
31
  h <- hist(ani[ani[,'a'] != ani[,'b'], 'value'], breaks=100, plot=FALSE);
@@ -34,9 +37,6 @@ if(sum(ani[,'a'] != ani[,'b']) > 0){
34
37
  }
35
38
  " | R --vanilla
36
39
 
37
- # Gzip
38
- gzip -9 -f miga-project.txt
39
-
40
40
  # Finalize
41
41
  miga date > "miga-project.done"
42
42
  miga add_result -P "$PROJECT" -r "$SCRIPT" -f
@@ -17,30 +17,30 @@ echo -n "" > miga-project.log
17
17
  DS=$(miga ls -P "$PROJECT" --ref --no-multi --active)
18
18
 
19
19
  # Extract values
20
- echo "metric a b value sd n omega" | tr " " "\\t" >miga-project.txt
21
- for i in $DS ; do
22
- echo "SELECT 'hAAI', seq1, seq2, aai, sd, n, omega from aai ;" \
23
- | sqlite3 "$i.db" | tr "\\|" "\\t" >>miga-project.txt
24
- echo "$i" >> miga-project.log
25
- done
20
+ rm -f miga-project.txt
21
+ (
22
+ echo "metric a b value sd n omega" | tr " " "\\t"
23
+ for i in $DS ; do
24
+ echo "SELECT 'hAAI', seq1, seq2, aai, sd, n, omega from aai ;" \
25
+ | sqlite3 "$i.db" | tr "\\|" "\\t"
26
+ echo "$i" >> miga-project.log
27
+ done
28
+ ) | gzip -9c > miga-project.txt.gz
26
29
 
27
30
  # R-ify
28
31
  echo "
29
- haai <- read.table('miga-project.txt', sep='\\t', h=T, as.is=TRUE);
32
+ haai <- read.table(gzfile('miga-project.txt.gz'), sep='\\t', h=T, as.is=TRUE);
30
33
  save(haai, file='miga-project.Rdata');
31
34
  if(sum(haai[,'a'] != haai[,'b']) > 0){
32
35
  h <- hist(haai[haai[,'a'] != haai[,'b'], 'value'], breaks=100, plot=FALSE);
33
36
  write.table(
34
37
  cbind(h[['breaks']][-length(h[['breaks']])],
35
- h[['breaks']][-1],h[['counts']]),
38
+ h[['breaks']][-1], h[['counts']]),
36
39
  file='miga-project.hist', quote=FALSE, sep='\\t',
37
40
  col.names=FALSE, row.names=FALSE);
38
41
  }
39
42
  " | R --vanilla
40
43
 
41
- # Gzip
42
- gzip -9 -f miga-project.txt
43
-
44
44
  # Finalize
45
45
  miga date > "miga-project.done"
46
46
  miga add_result -P "$PROJECT" -r "$SCRIPT" -f
@@ -9,7 +9,7 @@ class DaemonTest < Test::Unit::TestCase
9
9
  def setup
10
10
  initialize_miga_home(
11
11
  <<~DAEMON
12
- { "maxjobs": 1, "ppn": 1, "latency": 2, "varsep": " ",
12
+ { "maxjobs": 1, "ppn": 1, "latency": 2, "varsep": " ", "show_log": true,
13
13
  "var": "{{key}}={{value}}", "cmd": "echo {{task_name}} >/dev/null",
14
14
  "alive": "echo 1 # {{pid}}", "type": "bash", "format_version": 1 }
15
15
  DAEMON
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miga-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.12.1
4
+ version: 0.7.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luis M. Rodriguez-R
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-24 00:00:00.000000000 Z
11
+ date: 2020-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: daemons
@@ -128,6 +128,7 @@ files:
128
128
  - lib/miga/cli/action/browse/layout.html
129
129
  - lib/miga/cli/action/browse/redirect.html
130
130
  - lib/miga/cli/action/browse/style.css
131
+ - lib/miga/cli/action/browse/summary.html
131
132
  - lib/miga/cli/action/classify_wf.rb
132
133
  - lib/miga/cli/action/console.rb
133
134
  - lib/miga/cli/action/daemon.rb