miga-base 0.3.9.0 → 0.3.9.1

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/actions/add.rb +33 -33
  3. data/actions/edit.rb +33 -0
  4. data/actions/new.rb +17 -18
  5. data/actions/next_step.rb +33 -0
  6. data/actions/run.rb +15 -12
  7. data/bin/miga +43 -37
  8. data/lib/miga/daemon.rb +2 -2
  9. data/lib/miga/project/result.rb +16 -1
  10. data/lib/miga/version.rb +2 -2
  11. data/scripts/aai_distances.bash +1 -3
  12. data/scripts/ani_distances.bash +1 -3
  13. data/scripts/assembly.bash +1 -3
  14. data/scripts/cds.bash +1 -3
  15. data/scripts/clade_finding.bash +1 -3
  16. data/scripts/d.bash +13 -0
  17. data/scripts/distances.bash +1 -3
  18. data/scripts/essential_genes.bash +1 -3
  19. data/scripts/haai_distances.bash +1 -3
  20. data/scripts/miga.bash +12 -9
  21. data/scripts/mytaxa.bash +1 -3
  22. data/scripts/mytaxa_scan.bash +1 -3
  23. data/scripts/ogs.bash +36 -33
  24. data/scripts/p.bash +23 -0
  25. data/scripts/project_stats.bash +1 -3
  26. data/scripts/read_quality.bash +1 -3
  27. data/scripts/ssu.bash +1 -3
  28. data/scripts/stats.bash +1 -3
  29. data/scripts/subclades.bash +1 -3
  30. data/scripts/taxonomy.bash +1 -3
  31. data/scripts/trimmed_fasta.bash +1 -3
  32. data/scripts/trimmed_reads.bash +1 -3
  33. data/test/daemon_test.rb +3 -3
  34. data/utils/distance/runner.rb +1 -1
  35. data/utils/enveomics/Docs/recplot2.md +13 -2
  36. data/utils/enveomics/Examples/aai-matrix.bash +3 -3
  37. data/utils/enveomics/Examples/ani-matrix.bash +3 -3
  38. data/utils/enveomics/Makefile +2 -2
  39. data/utils/enveomics/Manifest/Tasks/blasttab.json +12 -4
  40. data/utils/enveomics/Manifest/Tasks/fasta.json +135 -0
  41. data/utils/enveomics/Manifest/Tasks/other.json +49 -0
  42. data/utils/enveomics/Manifest/categories.json +4 -0
  43. data/utils/enveomics/Manifest/examples.json +1 -1
  44. data/utils/enveomics/Pipelines/assembly.pbs/FastA.N50.pl +1 -1
  45. data/utils/enveomics/Pipelines/assembly.pbs/FastA.filterN.pl +1 -1
  46. data/utils/enveomics/Pipelines/assembly.pbs/FastA.length.pl +1 -1
  47. data/utils/enveomics/Pipelines/blast.pbs/FastA.split.pl +1 -1
  48. data/utils/enveomics/Scripts/BlastTab.catsbj.pl +63 -65
  49. data/utils/enveomics/Scripts/BlastTab.recplot2.R +4 -2
  50. data/utils/enveomics/Scripts/FastA.extract.rb +152 -0
  51. data/utils/enveomics/Scripts/FastA.mask.rb +89 -0
  52. data/utils/enveomics/Scripts/FastA.sample.rb +83 -0
  53. data/utils/enveomics/Scripts/GFF.catsbj.pl +127 -0
  54. data/utils/enveomics/Scripts/aai.rb +4 -3
  55. data/utils/enveomics/Scripts/lib/enveomics.R +1 -1
  56. data/utils/enveomics/enveomics.R/DESCRIPTION +1 -2
  57. data/utils/enveomics/enveomics.R/NAMESPACE +3 -3
  58. data/utils/enveomics/enveomics.R/R/recplot.R +2 -3
  59. data/utils/enveomics/enveomics.R/R/recplot2.R +221 -160
  60. data/utils/enveomics/enveomics.R/R/utils.R +19 -1
  61. data/utils/enveomics/enveomics.R/README.md +11 -0
  62. data/utils/enveomics/enveomics.R/man/enve.recplot.Rd +2 -2
  63. data/utils/enveomics/enveomics.R/man/enve.recplot2-class.Rd +1 -0
  64. data/utils/enveomics/enveomics.R/man/enve.recplot2.Rd +13 -5
  65. data/utils/enveomics/enveomics.R/man/enve.recplot2.extractWindows.Rd +10 -8
  66. data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.mower.Rd +1 -1
  67. data/utils/enveomics/enveomics.R/man/enve.recplot2.windowDepthThreshold.Rd +26 -0
  68. data/utils/enveomics/enveomics.R/man/enve.truncate.Rd +22 -0
  69. data/utils/enveomics/enveomics.R/man/plot.enve.recplot2.Rd +13 -7
  70. data/utils/enveomics/enveomics.R/man/z$-methods.Rd +3 -4
  71. data/utils/subclade/runner.rb +4 -0
  72. metadata +14 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 33ad423a2b44c3375e96d247399c77e3e576739a27a46f02315d454bb9905fcf
4
- data.tar.gz: 6696a87a2328dc0db4d2fdc193ea01eed18ada3b53cb772ef40525dfcb596cdc
3
+ metadata.gz: 89d27413bd8dc321a75fc3dc434a191c1eba336bfab3beaaa1e815852048e30a
4
+ data.tar.gz: 59eeab21ff1ef81bf76147c1b98c3a49e31535831fe19e8ec2757b59a666dd4e
5
5
  SHA512:
6
- metadata.gz: 230c1c4cf1af60d42a2d27c1fbe018e90f01f8ebc4a559e354bc32d1b9dbdec1ffcc4d832dcb7894fb96f0c255bfb84e3635d16d683c4e1585c1c354d8591020
7
- data.tar.gz: db5bb0f064dab5dcfe45ebad1027d7d1fd16d2c992f5907e3cb1a124ed45785acf828ca67d9c84e7be6017622faeff1b6e7a32c9e9a72dd26e336953ef93813d
6
+ metadata.gz: 2e4d975743a230c951578605e93a1b4f3061e8e3d1c91cf147db5c297bfa2427de344a72f118c50d0a3b3e9b2e67137baed9cc14157e86aa3d98738bb09d334f
7
+ data.tar.gz: d9761542220413d20b162bceeada84cf414d9d17b10764d049b3a76c2f9a3d757389b24c0ac290e02801246c114496e4729c45da5e5b863c22fde009c2eeca66
data/actions/add.rb CHANGED
@@ -3,39 +3,39 @@
3
3
  # @package MiGA
4
4
  # @license Artistic-2.0
5
5
 
6
- o = {q:true, ref:true, update:false}
6
+ o = {q: true, ref: true, update: false}
7
7
  OptionParser.new do |opt|
8
8
  opt_banner(opt)
9
9
  opt_object(opt, o, [:project, :dataset, :dataset_type_req])
10
- opt.on("-q", "--query",
11
- "If set, the dataset is registered as a query, not a reference dataset."
12
- ){ |v| o[:ref]=!v }
13
- opt.on("-d", "--description STRING",
14
- "Description of the dataset."){ |v| o[:description]=v }
15
- opt.on("-c", "--comments STRING",
16
- "Comments on the dataset."){ |v| o[:comments]=v }
17
- opt.on("-m", "--metadata STRING",
18
- "Metadata as key-value pairs separated by = and delimited by comma.",
19
- "Values are saved as strings except for booleans (true / false) or nil."
20
- ){ |v| o[:metadata]=v }
21
- opt.on("--update",
22
- "Updates the dataset if it already exists."){ o[:update]=true }
10
+ opt.on('-q', '--query',
11
+ 'If set, the dataset is registered as a query, not a reference dataset.'
12
+ ){ |v| o[:ref] = !v }
13
+ opt.on('-d', '--description STRING',
14
+ 'Description of the dataset.'){ |v| o[:description] = v }
15
+ opt.on('-c', '--comments STRING',
16
+ 'Comments on the dataset.'){ |v| o[:comments] = v }
17
+ opt.on('-m', '--metadata STRING',
18
+ 'Metadata as key-value pairs separated by = and delimited by comma.',
19
+ 'Values are saved as strings except for booleans (true / false) or nil.'
20
+ ){ |v| o[:metadata] = v }
21
+ opt.on('--update', 'Updates the dataset if it already exists.',
22
+ 'Same as "miga edit".'){ o[:update] = true }
23
23
  opt_common(opt, o)
24
- opt.separator ""
25
- opt.separator "External input data"
26
- opt.on("--raw-reads FILE1,FILE2", Array,
27
- "Comma-delimited paths to the raw reads in FastQ format.",
28
- "One file is assumed to be single reads, two are assumed to be paired."
24
+ opt.separator ''
25
+ opt.separator 'External input data'
26
+ opt.on('--raw-reads FILE1,FILE2', Array,
27
+ 'Comma-delimited paths to the raw reads in FastQ format.',
28
+ 'One file is assumed to be single reads, two are assumed to be paired.'
29
29
  ){ |v| o[:raw_reads] = v }
30
- opt.on("--trimmed-fasta-single FILE", Array,
31
- "Path to the single trimmed reads in FastA format."
30
+ opt.on('--trimmed-fasta-single FILE', Array,
31
+ 'Path to the single trimmed reads in FastA format.'
32
32
  ){ |v| o[:trimmed_fasta_s] = v }
33
- opt.on("--trimmed-fasta-coupled FILE1,FILE2", Array,
34
- "Comma-delimited paths to the coupled trimmed reads in FastA format.",
35
- "One file is assumed to be interposed, two are assumed to contain sisters."
33
+ opt.on('--trimmed-fasta-coupled FILE1,FILE2', Array,
34
+ 'Comma-delimited paths to the coupled trimmed reads in FastA format.',
35
+ 'One file is assumed to be interposed, two are assumed to contain sisters.'
36
36
  ){ |v| o[:trimmed_fasta_c] = v }
37
- opt.on("--assembly FILE", Array,
38
- "Path to the contigs (or scaffolds) of the assembly in FastA format."
37
+ opt.on('--assembly FILE', Array,
38
+ 'Path to the contigs (or scaffolds) of the assembly in FastA format.'
39
39
  ){ |v| o[:assembly] = v }
40
40
  end.parse!
41
41
 
@@ -43,16 +43,16 @@ end.parse!
43
43
  opt_require(o)
44
44
  opt_require_type(o, MiGA::Dataset) unless o[:update]
45
45
 
46
- $stderr.puts "Loading project." unless o[:q]
46
+ $stderr.puts 'Loading project.' unless o[:q]
47
47
  p = MiGA::Project.load(o[:project])
48
48
  raise "Impossible to load project: #{o[:project]}" if p.nil?
49
49
 
50
- raise "Dataset already exists, aborting." unless
50
+ raise 'Dataset already exists, aborting.' unless
51
51
  o[:update] or not MiGA::Dataset.exist?(p, o[:dataset])
52
- $stderr.puts "Loading dataset." unless o[:q]
52
+ $stderr.puts 'Loading dataset.' unless o[:q]
53
53
  d = o[:update] ? p.dataset(o[:dataset]) :
54
54
  MiGA::Dataset.new(p, o[:dataset], o[:ref])
55
- raise "Dataset does not exist." if d.nil?
55
+ raise 'Dataset does not exist.' if d.nil?
56
56
 
57
57
  in_files = [:raw_reads, :trimmed_fasta_s, :trimmed_fasta_c, :assembly]
58
58
  def cp_result(o, d, p, sym, res_sym, ext)
@@ -64,10 +64,10 @@ def cp_result(o, d, p, sym, res_sym, ext)
64
64
  gz = o[sym][i] =~ /\.gz/ ? '.gz' : ''
65
65
  FileUtils.cp(o[sym][i], "#{r_path}#{ext[i]}#{gz}")
66
66
  end
67
- File.open("#{r_path}.done", "w") { |f| f.print Time.now.to_s }
67
+ File.open("#{r_path}.done", 'w') { |f| f.print Time.now.to_s }
68
68
  end
69
69
  if in_files.any? { |i| not o[i].nil? }
70
- $stderr.puts "Copying files." unless o[:q]
70
+ $stderr.puts 'Copying files.' unless o[:q]
71
71
  # :raw_reads
72
72
  cp_result(o, d, p, :raw_reads, :raw_reads, %w[.1.fastq .2.fastq])
73
73
  # :trimmed_fasta
@@ -87,4 +87,4 @@ p.add_dataset(o[:dataset]) unless o[:update]
87
87
  res = d.first_preprocessing(true)
88
88
  $stderr.puts "- #{res}" unless o[:q]
89
89
 
90
- $stderr.puts "Done." unless o[:q]
90
+ $stderr.puts 'Done.' unless o[:q]
data/actions/edit.rb ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # @package MiGA
4
+ # @license Artistic-2.0
5
+
6
+ o = {q: true}
7
+ OptionParser.new do |opt|
8
+ opt_banner(opt)
9
+ opt_object(opt, o, [:project, :dataset_opt])
10
+ opt.on('-m', '--metadata STRING',
11
+ 'Metadata as key-value pairs separated by = and delimited by comma.',
12
+ 'Values are saved as strings except for booleans (true / false) or nil.'
13
+ ){ |v| o[:metadata] = v }
14
+ opt_common(opt, o)
15
+ end.parse!
16
+
17
+ ##=> Main <=
18
+ opt_require(o, project: '-P')
19
+
20
+ $stderr.puts 'Loading project.' unless o[:q]
21
+ p = MiGA::Project.load(o[:project])
22
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
23
+
24
+ obj = p
25
+ if o[:dataset]
26
+ $stderr.puts 'Loading dataset.' unless o[:q]
27
+ obj = p.dataset(o[:dataset])
28
+ raise 'Dataset does not exist.' if obj.nil?
29
+ end
30
+ obj = add_metadata(o, obj)
31
+ obj.save
32
+
33
+ $stderr.puts 'Done.' unless o[:q]
data/actions/new.rb CHANGED
@@ -3,37 +3,36 @@
3
3
  # @package MiGA
4
4
  # @license Artistic-2.0
5
5
 
6
- o = {q:true, update:false}
6
+ o = {q: true, update: false}
7
7
  OptionParser.new do |opt|
8
8
  opt_banner(opt)
9
9
  opt_object(opt, o, [:project, :project_type_req])
10
- opt.on("-n", "--name STRING",
11
- "Name of the project."){ |v| o[:name]=v }
12
- opt.on("-d", "--description STRING",
13
- "Description of the project."){ |v| o[:description]=v }
14
- opt.on("-c", "--comments STRING",
15
- "Comments on the project."){ |v| o[:comments]=v }
16
- opt.on("-m", "--metadata STRING",
17
- "Metadata as key-value pairs separated by = and delimited by comma.",
18
- "Values are saved as strings except for booleans (true / false) or nil."
19
- ){ |v| o[:metadata]=v }
20
- opt.on("--update",
21
- "Updates the project if it already exists."){ o[:update]=true }
10
+ opt.on('-n', '--name STRING', 'Name of the project.'){ |v| o[:name] = v }
11
+ opt.on('-d', '--description STRING',
12
+ 'Description of the project.'){ |v| o[:description] = v }
13
+ opt.on('-c', '--comments STRING',
14
+ 'Comments on the project.'){ |v| o[:comments] = v }
15
+ opt.on('-m', '--metadata STRING',
16
+ 'Metadata as key-value pairs separated by = and delimited by comma.',
17
+ 'Values are saved as strings except for booleans (true / false) or nil.'
18
+ ){ |v| o[:metadata] = v }
19
+ opt.on('--update', 'Updates the project if it already exists.',
20
+ 'Same as "miga edit".'){ o[:update] = true }
22
21
  opt_common(opt, o)
23
22
  end.parse!
24
23
 
25
24
  ##=> Main <=
26
- opt_require(o, project:"-P")
25
+ opt_require(o, project: '-P')
27
26
  opt_require_type(o, MiGA::Project) unless o[:update]
28
27
 
29
28
  unless File.exist? "#{ENV["HOME"]}/.miga_rc" and
30
29
  File.exist? "#{ENV["HOME"]}/.miga_daemon.json"
31
30
  raise "You must initialize MiGA before creating the first project.\n" +
32
- "Please use miga init."
31
+ 'Please use "miga init".'
33
32
  end
34
33
 
35
- $stderr.puts "Creating project." unless o[:q]
36
- raise "Project already exists, aborting." unless
34
+ $stderr.puts 'Creating project.' unless o[:q]
35
+ raise 'Project already exists, aborting.' unless
37
36
  o[:update] or not MiGA::Project.exist? o[:project]
38
37
  p = MiGA::Project.new(o[:project], o[:update])
39
38
  # The following check is redundant with MiGA::Project#create,
@@ -42,4 +41,4 @@ o[:name] = File.basename(p.path) if o[:update] and o[:name].nil?
42
41
  p = add_metadata(o, p)
43
42
  p.save
44
43
 
45
- $stderr.puts "Done." unless o[:q]
44
+ $stderr.puts 'Done.' unless o[:q]
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # @package MiGA
4
+ # @license Artistic-2.0
5
+
6
+ o = {q: true}
7
+ opts = OptionParser.new do |opt|
8
+ opt_banner(opt)
9
+ opt_object(opt, o, [:project, :dataset_opt])
10
+ opt_common(opt, o)
11
+ end.parse!
12
+
13
+ ##=> Main <=
14
+ opts.parse!
15
+ opt_require(o, project: '-P')
16
+
17
+ $stderr.puts 'Loading project.' unless o[:q]
18
+ p = MiGA::Project.load(o[:project])
19
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
20
+
21
+ n = nil
22
+ if not o[:dataset].nil?
23
+ $stderr.puts 'Loading dataset.' unless o[:q]
24
+ d = p.dataset o[:dataset]
25
+ raise "Impossible to load dataset: #{o[:dataset]}" if d.nil?
26
+ n = d.next_preprocessing if d.is_active?
27
+ else
28
+ n = p.next_distances(false)
29
+ n ||= p.next_inclade(false)
30
+ end
31
+ n ||= '?'
32
+ puts n
33
+
data/actions/run.rb CHANGED
@@ -3,40 +3,43 @@
3
3
  # @package MiGA
4
4
  # @license Artistic-2.0
5
5
 
6
- require "shellwords"
6
+ require 'shellwords'
7
7
 
8
- o = {q:true, try_load:false, thr:1}
8
+ o = {q: true, try_load: false, thr: 1}
9
9
  OptionParser.new do |opt|
10
10
  opt_banner(opt)
11
11
  opt_object(opt, o, [:project, :dataset_opt, :result])
12
- opt.on("-t", "--threads INT",
12
+ opt.on('-t', '--threads INT',
13
13
  "Threads to use in the local run (by default: #{o[:thr]})."
14
14
  ){ |v| o[:thr] = v.to_i }
15
15
  opt_common(opt, o)
16
16
  end.parse!
17
17
 
18
18
  ##=> Main <=
19
- opt_require(o, project:"-P", name:"-r")
19
+ opt_require(o, project: '-P', name: '-r')
20
20
 
21
- $stderr.puts "Loading project." unless o[:q]
21
+ $stderr.puts 'Loading project.' unless o[:q]
22
22
  p = MiGA::Project.load(o[:project])
23
23
  raise "Impossible to load project: #{o[:project]}" if p.nil?
24
24
 
25
+ virtual_task = false
25
26
  miga = MiGA::MiGA.root_path
26
- cmd = ["PROJECT=#{p.path.shellescape}", "RUNTYPE=bash",
27
+ cmd = ["PROJECT=#{p.path.shellescape}", 'RUNTYPE=bash',
27
28
  "MIGA=#{miga.shellescape}", "CORES=#{o[:thr]}"]
28
29
  if o[:dataset].nil?
29
30
  type = MiGA::Project
31
+ virtual_task = true if o[:name] == :p
30
32
  else
31
33
  d = p.dataset(o[:dataset])
32
- raise "Cannot load dataset." if d.nil?
34
+ raise 'Cannot load dataset.' if d.nil?
33
35
  cmd << "DATASET=#{d.name.shellescape}"
34
36
  type = MiGA::Dataset
37
+ virtual_task = true if o[:name] == :d
35
38
  end
36
- raise "Unsupported #{type.to_s.gsub(/.*::/,"")} result: #{o[:name]}." if
37
- type.RESULT_DIRS[o[:name].to_sym].nil?
38
- cmd << MiGA::MiGA.script_path(o[:name], miga:miga, project:p).shellescape
39
- pid = spawn cmd.join(" ")
39
+ raise "Unsupported #{type.to_s.gsub(/.*::/, '')} result: #{o[:name]}." if
40
+ type.RESULT_DIRS[o[:name].to_sym].nil? and not virtual_task
41
+ cmd << MiGA::MiGA.script_path(o[:name], miga: miga, project: p).shellescape
42
+ pid = spawn cmd.join(' ')
40
43
  Process.wait pid
41
44
 
42
- $stderr.puts "Done." unless o[:q]
45
+ $stderr.puts 'Done.' unless o[:q]
data/bin/miga CHANGED
@@ -17,7 +17,7 @@ $task_desc = {
17
17
  plugins: 'Lists or (un)installs plugins in a MiGA project',
18
18
  doctor: 'Performs consistency checks on a MiGA project',
19
19
  # Datasets
20
- add: 'Creates an empty dataset in a pre-existing MiGA project',
20
+ add: 'Creates a dataset in a MiGA project',
21
21
  get: 'Downloads a dataset from public databases into a MiGA project',
22
22
  ncbi_get: 'Downloads all genomes in a taxon from NCBI into a MiGA project',
23
23
  rm: 'Removes a dataset from an MiGA project',
@@ -30,6 +30,9 @@ $task_desc = {
30
30
  files: 'Lists registered files from the results of a dataset or project',
31
31
  run: 'Executes locally one step analysis producing the given result',
32
32
  summary: 'Generates a summary table for the statistics of all datasets',
33
+ next_step: 'Returns the next task to run in a dataset or project',
34
+ # Objects (Datasets or Projects)
35
+ edit: 'Edits the metadata of a dataset or project',
33
36
  # System
34
37
  init: 'Initialize MiGA to process new projects',
35
38
  daemon: 'Controls the daemon of a MiGA project',
@@ -58,6 +61,9 @@ $task_alias = {
58
61
  list_files: :files,
59
62
  run_local: :run,
60
63
  sum_stats: :summary,
64
+ next_task: :next_step,
65
+ # Objects
66
+ update_metadata: :edit,
61
67
  # System
62
68
  c: :console,
63
69
  # Taxonomy
@@ -88,80 +94,80 @@ BAN
88
94
  end
89
95
 
90
96
  # OptParse flags that determine the object to load
91
- def opt_object(opt, o, what=[:project, :dataset])
92
- opt.on("-P", "--project PATH", "(Mandatory) Path to the project."
97
+ def opt_object(opt, o, what = [:project, :dataset])
98
+ opt.on('-P', '--project PATH', '(Mandatory) Path to the project.'
93
99
  ){ |v| o[:project]=v } if what.include? :project
94
- opt.on("-D", "--dataset STRING",
95
- (what.include?(:dataset) ? "(Mandatory) " : "") +
96
- "Name of the dataset."){ |v| o[:dataset]=v } if what.include? :dataset or
100
+ opt.on('-D', '--dataset STRING',
101
+ (what.include?(:dataset) ? '(Mandatory) ' : '') +
102
+ 'Name of the dataset.'){ |v| o[:dataset]=v } if what.include? :dataset or
97
103
  what.include? :dataset_opt
98
- opt.on("-D", "--dataset STRING", "Name of the dataset."
104
+ opt.on('-D', '--dataset STRING', 'Name of the dataset.'
99
105
  ){ |v| o[:dataset]=v } if what.include? :dataset_opt
100
- opt.on("-t", "--type STRING",
101
- (what.include?(:dataset_type_req) ? "(Mandatory) " : "")+
102
- "Type of dataset. Recognized types include:",
106
+ opt.on('-t', '--type STRING',
107
+ (what.include?(:dataset_type_req) ? '(Mandatory) ' : '')+
108
+ 'Type of dataset. Recognized types include:',
103
109
  *MiGA::Dataset.KNOWN_TYPES.map{ |k,v| "~ #{k}: #{v[:description]}" }
104
110
  ){ |v| o[:type]=v.to_sym } if what.include? :dataset_type or
105
111
  what.include? :dataset_type_req
106
- opt.on("-t", "--type STRING",
107
- (what.include?(:project_type_req) ? "(Mandatory) " : "") +
108
- "Type of project. Recognized types include:",
112
+ opt.on('-t', '--type STRING',
113
+ (what.include?(:project_type_req) ? '(Mandatory) ' : '') +
114
+ 'Type of project. Recognized types include:',
109
115
  *MiGA::Project.KNOWN_TYPES.map{ |k,v| "~ #{k}: #{v[:description]}"}
110
116
  ){ |v| o[:type]=v.to_sym } if what.include? :project_type or
111
117
  what.include? :project_type_req
112
- opt.on("-r", "--result STRING",
113
- "(Mandatory) Name of the result to add.",
114
- "Recognized names for dataset-specific results include:",
118
+ opt.on('-r', '--result STRING',
119
+ '(Mandatory) Name of the result.',
120
+ 'Recognized names for dataset-specific results include:',
115
121
  *MiGA::Dataset.RESULT_DIRS.keys.map{|n| " ~ #{n}"},
116
- "Recognized names for project-wide results include:",
122
+ 'Recognized names for project-wide results include:',
117
123
  *MiGA::Project.RESULT_DIRS.keys.map{|n| " ~ #{n}"}
118
124
  ){ |v| o[:name]=v.downcase.to_sym } if what.include? :result
119
- opt.on("-r", "--result STRING",
120
- "(Mandatory) Name of the result to add. One of:",
125
+ opt.on('-r', '--result STRING',
126
+ '(Mandatory) Name of the result. One of:',
121
127
  *MiGA::Dataset.RESULT_DIRS.keys.map{|n| " ~ #{n}"}
122
128
  ){ |v| o[:name]=v.downcase.to_sym } if what.include? :result_dataset
123
129
  end
124
130
 
125
131
  # OptParse flags common to all actions.
126
132
  def opt_common(opt, o)
127
- opt.on("-v", "--verbose",
128
- "Print additional information to STDERR."){ o[:q]=false }
129
- opt.on("-d", "--debug INT",
130
- "Print debugging information to STDERR (1: debug, 2: trace).") do |v|
133
+ opt.on('-v', '--verbose',
134
+ 'Print additional information to STDERR.'){ o[:q]=false }
135
+ opt.on('-d', '--debug INT',
136
+ 'Print debugging information to STDERR (1: debug, 2: trace).') do |v|
131
137
  v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
132
138
  end
133
- opt.on("-h", "--help", "Display this screen.") do
139
+ opt.on('-h', '--help', 'Display this screen.') do
134
140
  puts opt
135
141
  exit
136
142
  end
137
- opt.separator ""
143
+ opt.separator ''
138
144
  end
139
145
 
140
146
  # OptParse flags to filter lists of datasets.
141
- def opt_filter_datasets(opt, o, what=[:ref, :multi, :active, :taxonomy])
142
- opt.on("--[no-]ref",
143
- "If set, uses only reference (or only non-reference) datasets."
147
+ def opt_filter_datasets(opt, o, what = [:ref, :multi, :active, :taxonomy])
148
+ opt.on('--[no-]ref',
149
+ 'If set, uses only reference (or only non-reference) datasets.'
144
150
  ){ |v| o[:ref]=v } if what.include? :ref
145
- opt.on("--[no-]multi",
146
- "If set, uses only multi-species (or only single-species) datasets."
151
+ opt.on('--[no-]multi',
152
+ 'If set, uses only multi-species (or only single-species) datasets.'
147
153
  ){ |v| o[:multi]=v } if what.include? :multi
148
- opt.on("--[no-]active",
149
- "If set, uses only active (or inactive) datasets."
154
+ opt.on('--[no-]active',
155
+ 'If set, uses only active (or inactive) datasets.'
150
156
  ){ |v| o[:active]=v } if what.include? :active
151
- opt.on("-t", "--taxonomy RANK:TAXON", "Filter by taxonomy."
157
+ opt.on('-t', '--taxonomy RANK:TAXON', 'Filter by taxonomy.'
152
158
  ){ |v| o[:taxonomy]=MiGA::Taxonomy.new v } if what.include? :taxonomy
153
- opt.on("-k", "--key INTEGER",
154
- "Returns only the k-th dataset in the list."){ |v| o[:key]=v.to_i }
159
+ opt.on('-k', '--key INTEGER',
160
+ 'Returns only the k-th dataset in the list.'){ |v| o[:key]=v.to_i }
155
161
  end
156
162
 
157
- def opt_require(o, req={project:"-P", dataset:"-D"})
163
+ def opt_require(o, req = {project: '-P', dataset: '-D'})
158
164
  req.each do |k,v|
159
165
  raise "#{v} is mandatory: please provide #{k}." if o[k].nil?
160
166
  end
161
167
  end
162
168
 
163
169
  def opt_require_type(o, klass)
164
- opt_require(o, type:"-t")
170
+ opt_require(o, type: '-t')
165
171
  raise "Unrecognized type: #{o[:type]}." if klass.KNOWN_TYPES[o[:type]].nil?
166
172
  end
167
173
 
data/lib/miga/daemon.rb CHANGED
@@ -124,7 +124,7 @@ class MiGA::Daemon < MiGA::MiGA
124
124
  project.load
125
125
  else
126
126
  to_run = ds.next_preprocessing(true)
127
- queue_job(to_run, ds) unless to_run.nil?
127
+ queue_job(:d, ds) unless to_run.nil?
128
128
  end
129
129
  end
130
130
  end
@@ -137,7 +137,7 @@ class MiGA::Daemon < MiGA::MiGA
137
137
  return unless project.done_preprocessing?(false)
138
138
  to_run = project.next_distances(true)
139
139
  to_run = project.next_inclade(true) if to_run.nil?
140
- queue_job(to_run) unless to_run.nil?
140
+ queue_job(:p) unless to_run.nil?
141
141
  end
142
142
 
143
143
  ##
@@ -87,9 +87,14 @@ module MiGA::Project::Result
87
87
  end
88
88
 
89
89
  def add_result_clade_finding(base)
90
+ if result_files_exist?(base, %w[.empty])
91
+ r = MiGA::Result.new("#{base}.json")
92
+ r.add_file(:empty, 'miga-project.empty')
93
+ return r
94
+ end
90
95
  return nil unless result_files_exist?(base, %w[.proposed-clades])
91
96
  return nil unless is_clade? or result_files_exist?(base,
92
- %w[.pdf .classif .medoids .class.tsv .class.nwk])
97
+ %w[.pdf .classif .medoids .class.tsv .class.nwk])
93
98
  r = add_result_iter_clades(base)
94
99
  r.add_file(:aai_tree, 'miga-project.aai.nwk')
95
100
  r.add_file(:proposal, 'miga-project.proposed-clades')
@@ -100,6 +105,11 @@ module MiGA::Project::Result
100
105
  end
101
106
 
102
107
  def add_result_subclades(base)
108
+ if result_files_exist?(base, %w[.empty])
109
+ r = MiGA::Result.new("#{base}.json")
110
+ r.add_file(:empty, 'miga-project.empty')
111
+ return r
112
+ end
103
113
  return nil unless result_files_exist?(base,
104
114
  %w[.pdf .classif .medoids .class.tsv .class.nwk])
105
115
  r = add_result_iter_clades(base)
@@ -118,6 +128,11 @@ module MiGA::Project::Result
118
128
  end
119
129
 
120
130
  def add_result_ogs(base)
131
+ if result_files_exist?(base, %w[.empty])
132
+ r = MiGA::Result.new("#{base}.json")
133
+ r.add_file(:empty, 'miga-project.empty')
134
+ return r
135
+ end
121
136
  return nil unless result_files_exist?(base, %w[.ogs .stats])
122
137
  r = MiGA::Result.new("#{base}.json")
123
138
  r.add_file(:ogs, 'miga-project.ogs')
data/lib/miga/version.rb CHANGED
@@ -10,7 +10,7 @@ module MiGA
10
10
  # - Float representing the major.minor version.
11
11
  # - Integer representing gem releases of the current version.
12
12
  # - Integer representing minor changes that require new version number.
13
- VERSION = [0.3, 9, 0]
13
+ VERSION = [0.3, 9, 1]
14
14
 
15
15
  ##
16
16
  # Nickname for the current major.minor version.
@@ -18,7 +18,7 @@ module MiGA
18
18
 
19
19
  ##
20
20
  # Date of the current gem release.
21
- VERSION_DATE = Date.new(2019, 03, 07)
21
+ VERSION_DATE = Date.new(2019, 03, 8)
22
22
 
23
23
  ##
24
24
  # Reference of MiGA.
@@ -2,10 +2,8 @@
2
2
  # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES
3
3
  set -e
4
4
  SCRIPT="aai_distances"
5
- echo "MiGA: $MIGA"
6
- echo "Project: $PROJECT"
7
5
  # shellcheck source=scripts/miga.bash
8
- source "$MIGA/scripts/miga.bash" || exit 1
6
+ . "$MIGA/scripts/miga.bash" || exit 1
9
7
  cd "$PROJECT/data/09.distances/02.aai"
10
8
 
11
9
  # Initialize
@@ -2,10 +2,8 @@
2
2
  # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES
3
3
  set -e
4
4
  SCRIPT="ani_distances"
5
- echo "MiGA: $MIGA"
6
- echo "Project: $PROJECT"
7
5
  # shellcheck source=scripts/miga.bash
8
- source "$MIGA/scripts/miga.bash" || exit 1
6
+ . "$MIGA/scripts/miga.bash" || exit 1
9
7
  cd "$PROJECT/data/09.distances/03.ani"
10
8
 
11
9
  # Initialize
@@ -2,10 +2,8 @@
2
2
  # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES, $DATASET
3
3
  set -e
4
4
  SCRIPT="assembly"
5
- echo "MiGA: $MIGA"
6
- echo "Project: $PROJECT"
7
5
  # shellcheck source=scripts/miga.bash
8
- source "$MIGA/scripts/miga.bash" || exit 1
6
+ . "$MIGA/scripts/miga.bash" || exit 1
9
7
  cd "$PROJECT/data/05.assembly"
10
8
 
11
9
  # Initialize
data/scripts/cds.bash CHANGED
@@ -2,10 +2,8 @@
2
2
  # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES, $DATASET
3
3
  set -e
4
4
  SCRIPT="cds"
5
- echo "MiGA: $MIGA"
6
- echo "Project: $PROJECT"
7
5
  # shellcheck source=scripts/miga.bash
8
- source "$MIGA/scripts/miga.bash" || exit 1
6
+ . "$MIGA/scripts/miga.bash" || exit 1
9
7
  cd "$PROJECT/data/06.cds"
10
8
 
11
9
  # Initialize
@@ -2,10 +2,8 @@
2
2
  # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES
3
3
  set -e
4
4
  SCRIPT="clade_finding"
5
- echo "MiGA: $MIGA"
6
- echo "Project: $PROJECT"
7
5
  # shellcheck source=scripts/miga.bash
8
- source "$MIGA/scripts/miga.bash" || exit 1
6
+ . "$MIGA/scripts/miga.bash" || exit 1
9
7
  cd "$PROJECT/data/10.clades/01.find"
10
8
 
11
9
  # Initialize
data/scripts/d.bash ADDED
@@ -0,0 +1,13 @@
1
+ #!/bin/bash
2
+ # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES, $DATASET
3
+ set -e
4
+ SCRIPT="d"
5
+ # shellcheck source=scripts/miga.bash
6
+ . "$MIGA/scripts/miga.bash" || exit 1
7
+
8
+ while true ; do
9
+ res="$(miga next_step -P "$PROJECT" -D "$DATASET")"
10
+ [[ "$res" == '?' ]] && break
11
+ miga run -P "$PROJECT" -D "$DATASET" -r "$res" -t "$CORES"
12
+ done
13
+
@@ -2,10 +2,8 @@
2
2
  # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES, $DATASET
3
3
  set -e
4
4
  SCRIPT="distances"
5
- echo "MiGA: $MIGA"
6
- echo "Project: $PROJECT"
7
5
  # shellcheck source=scripts/miga.bash
8
- source "$MIGA/scripts/miga.bash" || exit 1
6
+ . "$MIGA/scripts/miga.bash" || exit 1
9
7
  cd "$PROJECT/data/09.distances"
10
8
 
11
9
  # Initialize
@@ -2,10 +2,8 @@
2
2
  # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES, $DATASET
3
3
  set -e
4
4
  SCRIPT="essential_genes"
5
- echo "MiGA: $MIGA"
6
- echo "Project: $PROJECT"
7
5
  # shellcheck source=scripts/miga.bash
8
- source "$MIGA/scripts/miga.bash" || exit 1
6
+ . "$MIGA/scripts/miga.bash" || exit 1
9
7
  cd "$PROJECT/data/07.annotation/01.function/01.essential"
10
8
 
11
9
  # Initialize
@@ -2,10 +2,8 @@
2
2
  # Available variables: $PROJECT, $RUNTYPE, $MIGA, $CORES
3
3
  set -e
4
4
  SCRIPT="haai_distances"
5
- echo "MiGA: $MIGA"
6
- echo "Project: $PROJECT"
7
5
  # shellcheck source=scripts/miga.bash
8
- source "$MIGA/scripts/miga.bash" || exit 1
6
+ . "$MIGA/scripts/miga.bash" || exit 1
9
7
  cd "$PROJECT/data/09.distances/01.haai"
10
8
 
11
9
  # Initialize