miga-base 0.3.9.0 → 0.3.9.1

Sign up to get free protection for your applications and to get access to all the features.
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