miga-base 0.7.3.1 → 0.7.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/lib/miga/cli.rb +10 -8
  3. data/lib/miga/cli/action.rb +2 -3
  4. data/lib/miga/cli/action/about.rb +5 -6
  5. data/lib/miga/cli/action/add.rb +18 -12
  6. data/lib/miga/cli/action/add_result.rb +2 -3
  7. data/lib/miga/cli/action/archive.rb +1 -2
  8. data/lib/miga/cli/action/classify_wf.rb +8 -6
  9. data/lib/miga/cli/action/console.rb +0 -1
  10. data/lib/miga/cli/action/daemon.rb +7 -7
  11. data/lib/miga/cli/action/date.rb +0 -1
  12. data/lib/miga/cli/action/derep_wf.rb +5 -4
  13. data/lib/miga/cli/action/doctor.rb +71 -82
  14. data/lib/miga/cli/action/doctor/base.rb +102 -0
  15. data/lib/miga/cli/action/edit.rb +14 -2
  16. data/lib/miga/cli/action/files.rb +8 -8
  17. data/lib/miga/cli/action/find.rb +5 -6
  18. data/lib/miga/cli/action/generic.rb +7 -7
  19. data/lib/miga/cli/action/get.rb +20 -17
  20. data/lib/miga/cli/action/get_db.rb +8 -2
  21. data/lib/miga/cli/action/index_wf.rb +1 -1
  22. data/lib/miga/cli/action/init.rb +53 -41
  23. data/lib/miga/cli/action/init/daemon_helper.rb +65 -43
  24. data/lib/miga/cli/action/lair.rb +7 -7
  25. data/lib/miga/cli/action/ln.rb +6 -6
  26. data/lib/miga/cli/action/ls.rb +1 -2
  27. data/lib/miga/cli/action/ncbi_get.rb +11 -3
  28. data/lib/miga/cli/action/new.rb +4 -4
  29. data/lib/miga/cli/action/next_step.rb +0 -1
  30. data/lib/miga/cli/action/preproc_wf.rb +3 -3
  31. data/lib/miga/cli/action/quality_wf.rb +1 -1
  32. data/lib/miga/cli/action/rm.rb +2 -3
  33. data/lib/miga/cli/action/run.rb +8 -8
  34. data/lib/miga/cli/action/stats.rb +8 -4
  35. data/lib/miga/cli/action/summary.rb +7 -6
  36. data/lib/miga/cli/action/tax_dist.rb +8 -4
  37. data/lib/miga/cli/action/tax_index.rb +3 -4
  38. data/lib/miga/cli/action/tax_set.rb +7 -6
  39. data/lib/miga/cli/action/tax_test.rb +6 -5
  40. data/lib/miga/cli/action/wf.rb +25 -19
  41. data/lib/miga/cli/base.rb +34 -32
  42. data/lib/miga/cli/objects_helper.rb +27 -18
  43. data/lib/miga/cli/opt_helper.rb +3 -2
  44. data/lib/miga/common.rb +2 -5
  45. data/lib/miga/common/base.rb +15 -16
  46. data/lib/miga/common/format.rb +8 -5
  47. data/lib/miga/common/hooks.rb +1 -4
  48. data/lib/miga/common/path.rb +4 -9
  49. data/lib/miga/common/with_daemon.rb +5 -2
  50. data/lib/miga/common/with_daemon_class.rb +1 -1
  51. data/lib/miga/common/with_result.rb +2 -1
  52. data/lib/miga/daemon.rb +93 -44
  53. data/lib/miga/daemon/base.rb +30 -11
  54. data/lib/miga/dataset.rb +47 -37
  55. data/lib/miga/dataset/base.rb +52 -37
  56. data/lib/miga/dataset/hooks.rb +3 -4
  57. data/lib/miga/dataset/result.rb +17 -1
  58. data/lib/miga/dataset/status.rb +6 -5
  59. data/lib/miga/json.rb +5 -7
  60. data/lib/miga/lair.rb +4 -0
  61. data/lib/miga/metadata.rb +4 -3
  62. data/lib/miga/project.rb +29 -20
  63. data/lib/miga/project/base.rb +52 -37
  64. data/lib/miga/project/dataset.rb +33 -26
  65. data/lib/miga/project/hooks.rb +0 -3
  66. data/lib/miga/project/result.rb +14 -5
  67. data/lib/miga/remote_dataset.rb +85 -72
  68. data/lib/miga/remote_dataset/base.rb +11 -13
  69. data/lib/miga/remote_dataset/download.rb +34 -12
  70. data/lib/miga/result.rb +48 -53
  71. data/lib/miga/result/base.rb +0 -2
  72. data/lib/miga/result/dates.rb +1 -3
  73. data/lib/miga/result/source.rb +15 -16
  74. data/lib/miga/result/stats.rb +37 -27
  75. data/lib/miga/tax_dist.rb +6 -3
  76. data/lib/miga/tax_index.rb +17 -17
  77. data/lib/miga/taxonomy.rb +6 -1
  78. data/lib/miga/taxonomy/base.rb +19 -15
  79. data/lib/miga/version.rb +19 -16
  80. data/scripts/project_stats.bash +3 -0
  81. data/scripts/stats.bash +1 -1
  82. data/test/common_test.rb +3 -11
  83. data/test/daemon_helper.rb +38 -0
  84. data/test/daemon_test.rb +91 -99
  85. data/test/dataset_test.rb +63 -59
  86. data/test/format_test.rb +3 -11
  87. data/test/hook_test.rb +50 -55
  88. data/test/json_test.rb +7 -8
  89. data/test/lair_test.rb +22 -28
  90. data/test/metadata_test.rb +6 -14
  91. data/test/project_test.rb +33 -40
  92. data/test/remote_dataset_test.rb +26 -32
  93. data/test/result_stats_test.rb +17 -27
  94. data/test/result_test.rb +41 -34
  95. data/test/tax_dist_test.rb +2 -4
  96. data/test/tax_index_test.rb +4 -10
  97. data/test/taxonomy_test.rb +7 -9
  98. data/test/test_helper.rb +42 -1
  99. data/test/with_daemon_test.rb +14 -22
  100. data/utils/adapters.fa +13 -0
  101. data/utils/cleanup-databases.rb +6 -5
  102. data/utils/distance/base.rb +0 -1
  103. data/utils/distance/commands.rb +19 -12
  104. data/utils/distance/database.rb +24 -21
  105. data/utils/distance/pipeline.rb +23 -10
  106. data/utils/distance/runner.rb +20 -16
  107. data/utils/distance/temporal.rb +1 -3
  108. data/utils/distances.rb +1 -1
  109. data/utils/domain-ess-genes.rb +7 -7
  110. data/utils/index_metadata.rb +5 -4
  111. data/utils/mytaxa_scan.rb +18 -16
  112. data/utils/representatives.rb +5 -4
  113. data/utils/requirements.txt +1 -1
  114. data/utils/subclade/base.rb +0 -1
  115. data/utils/subclade/pipeline.rb +7 -6
  116. data/utils/subclade/runner.rb +9 -9
  117. data/utils/subclade/temporal.rb +0 -2
  118. data/utils/subclades-compile.rb +39 -37
  119. data/utils/subclades.rb +1 -1
  120. metadata +6 -4
@@ -1,11 +1,9 @@
1
-
2
1
  require 'shellwords'
3
2
 
4
3
  class MiGA::Daemon < MiGA::MiGA
5
4
  end
6
5
 
7
6
  module MiGA::Daemon::Base
8
-
9
7
  ##
10
8
  # Set/get #options, where +k+ is the Symbol of the option and +v+ is the value
11
9
  # (or nil to use as getter). Skips consistency tests if +force+. Returns new
@@ -14,19 +12,21 @@ module MiGA::Daemon::Base
14
12
  k = k.to_sym
15
13
  unless v.nil?
16
14
  case k
17
- when :latency, :maxjobs, :ppn, :format_version
15
+ when :latency, :maxjobs, :ppn, :format_version, :verbosity
18
16
  v = v.to_i
17
+ if !force && v == 0 && k != :verbosity
18
+ raise "Daemon's #{k} cannot be set to zero"
19
+ end
19
20
  when :shutdown_when_done
20
21
  v = !!v
21
22
  when :nodelist
22
23
  if v =~ /^\$/
23
- vv = ENV[v.sub('$','')] or raise "Unset environment variable: #{v}"
24
+ vv = ENV[v.sub('$', '')] or raise "Unset environment variable: #{v}"
24
25
  v = vv
25
26
  end
26
27
  say "Reading node list: #{v}"
27
28
  v = File.readlines(v).map(&:chomp)
28
29
  end
29
- raise "Daemon's #{k} cannot be set to zero." if !force and v == 0
30
30
  @runopts[k] = v
31
31
  end
32
32
  @runopts[k]
@@ -34,24 +34,43 @@ module MiGA::Daemon::Base
34
34
 
35
35
  ##
36
36
  # Returns Integer indicating the number of seconds to sleep between checks
37
- def latency() runopts(:latency); end
37
+ def latency
38
+ runopts(:latency)
39
+ end
38
40
 
39
41
  ##
40
42
  # Returns Integer indicating the maximum number of concurrent jobs to run
41
- def maxjobs() runopts(:maxjobs); end
43
+ def maxjobs
44
+ runopts(:maxjobs)
45
+ end
42
46
 
43
47
  ##
44
48
  # Returns the path to the list of execution hostnames
45
- def nodelist() runopts(:nodelist); end
49
+ def nodelist
50
+ runopts(:nodelist)
51
+ end
46
52
 
47
53
  ##
48
54
  # Returns Integer indicating the number of CPUs per job
49
- def ppn() runopts(:ppn); end
55
+ def ppn
56
+ runopts(:ppn)
57
+ end
50
58
 
51
59
  ##
52
60
  # Returns Boolean indicating if the daemon should shutdown when processing is
53
61
  # complete
54
- def shutdown_when_done?() !!runopts(:shutdown_when_done); end
62
+ def shutdown_when_done?
63
+ !!runopts(:shutdown_when_done)
64
+ end
55
65
 
66
+ ##
67
+ # Returns the level of verbosity for the daemon as an Integer, or 1 if unset.
68
+ # Verbosity levels are:
69
+ # 0: No output
70
+ # 1: General daemon and job information
71
+ # 2: Same, and indicate when each task is performed (even if nothing happens)
72
+ # 3: Same, and indicate when each loop begins and ends
73
+ def verbosity
74
+ runopts(:verbosity) || 1
75
+ end
56
76
  end
57
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # @package MiGA
2
4
  # @license Artistic-2.0
3
5
 
@@ -8,7 +10,7 @@ require 'miga/dataset/hooks'
8
10
  require 'sqlite3'
9
11
 
10
12
  ##
11
- # Dataset representation in MiGA.
13
+ # Dataset representation in MiGA
12
14
  class MiGA::Dataset < MiGA::MiGA
13
15
  include MiGA::Dataset::Result
14
16
  include MiGA::Dataset::Status
@@ -23,20 +25,20 @@ class MiGA::Dataset < MiGA::MiGA
23
25
  end
24
26
 
25
27
  ##
26
- # Standard fields of metadata for datasets.
28
+ # Standard fields of metadata for datasets
27
29
  def INFO_FIELDS
28
- %w(name created updated type ref user description comments)
30
+ %w[name created updated type ref user description comments]
29
31
  end
30
32
  end
31
33
 
32
34
  # Instance-level
33
35
 
34
36
  ##
35
- # MiGA::Project that contains the dataset.
37
+ # MiGA::Project that contains the dataset
36
38
  attr_reader :project
37
39
 
38
40
  ##
39
- # Datasets are uniquely identified by +name+ in a project.
41
+ # Datasets are uniquely identified by +name+ in a project
40
42
  attr_reader :name
41
43
 
42
44
  ##
@@ -45,22 +47,19 @@ class MiGA::Dataset < MiGA::MiGA
45
47
  # be treated as reference (true, default) or query (false). Pass any
46
48
  # additional +metadata+ as a Hash.
47
49
  def initialize(project, name, is_ref = true, metadata = {})
48
- unless name.miga_name?
50
+ name.miga_name? or
49
51
  raise 'Invalid name, please use only alphanumerics and underscores: ' +
50
- name.to_s
51
- end
52
- @project = project
53
- @name = name
54
- @metadata = nil
52
+ name.to_s
53
+ @project, @name, @metadata = project, name, nil
55
54
  metadata[:ref] = is_ref
56
55
  @metadata_future = [
57
- File.expand_path("metadata/#{name}.json", project.path),
56
+ File.join(project.path, 'metadata', "#{name}.json"),
58
57
  metadata
59
58
  ]
60
- unless File.exist? @metadata_future[0]
61
- save
62
- pull_hook :on_create
63
- end
59
+ return if File.exist? @metadata_future[0]
60
+
61
+ save
62
+ pull_hook :on_create
64
63
  end
65
64
 
66
65
  ##
@@ -74,7 +73,7 @@ class MiGA::Dataset < MiGA::MiGA
74
73
  end
75
74
 
76
75
  ##
77
- # Save any changes you've made in the dataset.
76
+ # Save any changes you've made in the dataset
78
77
  def save
79
78
  MiGA.DEBUG "Dataset.metadata: #{metadata.data}"
80
79
  metadata.save
@@ -82,61 +81,69 @@ class MiGA::Dataset < MiGA::MiGA
82
81
  end
83
82
 
84
83
  ##
85
- # Get the type of dataset as Symbol.
86
- def type ; metadata[:type] ; end
84
+ # Get the type of dataset as Symbol
85
+ def type
86
+ metadata[:type]
87
+ end
87
88
 
88
89
  ##
89
90
  # Delete the dataset with all it's contents (including results) and returns
90
- # nil.
91
+ # nil
91
92
  def remove!
92
- self.results.each{ |r| r.remove! }
93
- self.metadata.remove!
93
+ results.each(&:remove!)
94
+ metadata.remove!
94
95
  pull_hook :on_remove
95
96
  end
96
97
 
97
98
  ##
98
- # Inactivate a dataset. This halts automated processing by the daemon.
99
+ # Inactivate a dataset. This halts automated processing by the daemon
99
100
  def inactivate!
100
- self.metadata[:inactive] = true
101
- self.metadata.save
101
+ metadata[:inactive] = true
102
+ metadata.save
102
103
  pull_hook :on_inactivate
103
104
  end
104
105
 
105
106
  ##
106
- # Activate a dataset. This removes the +:inactive+ flag.
107
+ # Activate a dataset. This removes the +:inactive+ flag
107
108
  def activate!
108
- self.metadata[:inactive] = nil
109
- self.metadata.save
109
+ metadata[:inactive] = nil
110
+ metadata.save
110
111
  pull_hook :on_activate
111
112
  end
112
113
 
113
114
  ##
114
- # Get standard metadata values for the dataset as Array.
115
+ # Get standard metadata values for the dataset as Array
115
116
  def info
116
117
  MiGA::Dataset.INFO_FIELDS.map do |k|
117
- (k == 'name') ? self.name : metadata[k.to_sym]
118
+ k == 'name' ? name : metadata[k]
118
119
  end
119
120
  end
120
121
 
121
122
  ##
122
123
  # Is this dataset a reference?
123
- def ref? ; !!metadata[:ref] ; end
124
+ def ref?
125
+ !query?
126
+ end
124
127
 
125
128
  ##
126
129
  # Is this dataset a query (non-reference)?
127
- def query? ; !metadata[:ref] ; end
130
+ def query?
131
+ !metadata[:ref]
132
+ end
128
133
 
129
134
  ##
130
135
  # Is this dataset known to be multi-organism?
131
136
  def multi?
132
- return false if metadata[:type].nil? or @@KNOWN_TYPES[type].nil?
137
+ return false if metadata[:type].nil? || @@KNOWN_TYPES[type].nil?
138
+
133
139
  @@KNOWN_TYPES[type][:multi]
134
140
  end
135
141
 
136
142
  ##
137
143
  # Is this dataset known to be single-organism?
138
144
  def nonmulti?
139
- return false if metadata[:type].nil? or @@KNOWN_TYPES[type].nil?
145
+ return false if metadata[:type].nil? || @@KNOWN_TYPES[type].nil?
146
+
140
147
  !@@KNOWN_TYPES[type][:multi]
141
148
  end
142
149
 
@@ -174,12 +181,15 @@ class MiGA::Dataset < MiGA::MiGA
174
181
  # +ref_project+ is false (default), and only for reference dataset when
175
182
  # +ref_project+ is true. It returns +nil+ if this analysis is not supported.
176
183
  def closest_relatives(how_many = 1, ref_project = false)
177
- return nil if (ref? != ref_project) or multi?
184
+ return nil if (ref? != ref_project) || multi?
185
+
178
186
  r = result(ref_project ? :taxonomy : :distances)
179
187
  return nil if r.nil?
180
- db = SQLite3::Database.new(r.file_path :aai_db)
188
+
189
+ db = SQLite3::Database.new(r.file_path(:aai_db))
181
190
  db.execute(
182
191
  'SELECT seq2, aai FROM aai WHERE seq2 != ? ' \
183
- 'GROUP BY seq2 ORDER BY aai DESC LIMIT ?', [name, how_many])
192
+ 'GROUP BY seq2 ORDER BY aai DESC LIMIT ?', [name, how_many]
193
+ )
184
194
  end
185
195
  end
@@ -2,72 +2,87 @@
2
2
  # @license Artistic-2.0
3
3
 
4
4
  class MiGA::Dataset < MiGA::MiGA
5
-
6
5
  # Class-level
7
6
  class << self
8
- def RESULT_DIRS ; @@RESULT_DIRS ; end
9
- def KNOWN_TYPES ; @@KNOWN_TYPES ; end
10
- def PREPROCESSING_TASKS ; @@PREPROCESSING_TASKS ; end
7
+ def RESULT_DIRS
8
+ @@RESULT_DIRS
9
+ end
10
+
11
+ def KNOWN_TYPES
12
+ @@KNOWN_TYPES
13
+ end
14
+
15
+ def PREPROCESSING_TASKS
16
+ @@PREPROCESSING_TASKS
17
+ end
11
18
  end
12
-
13
19
  end
14
20
 
15
21
  module MiGA::Dataset::Base
16
-
17
22
  ##
18
- # Directories containing the results from dataset-specific tasks.
23
+ # Directories containing the results from dataset-specific tasks
19
24
  @@RESULT_DIRS = {
20
25
  # Preprocessing
21
- raw_reads: "01.raw_reads", trimmed_reads: "02.trimmed_reads",
22
- read_quality: "03.read_quality", trimmed_fasta: "04.trimmed_fasta",
23
- assembly: "05.assembly", cds: "06.cds",
26
+ raw_reads: '01.raw_reads',
27
+ trimmed_reads: '02.trimmed_reads',
28
+ read_quality: '03.read_quality',
29
+ trimmed_fasta: '04.trimmed_fasta',
30
+ assembly: '05.assembly',
31
+ cds: '06.cds',
24
32
  # Annotation
25
- essential_genes: "07.annotation/01.function/01.essential",
26
- ssu: "07.annotation/01.function/02.ssu",
27
- mytaxa: "07.annotation/02.taxonomy/01.mytaxa",
28
- mytaxa_scan: "07.annotation/03.qa/02.mytaxa_scan",
33
+ essential_genes: '07.annotation/01.function/01.essential',
34
+ ssu: '07.annotation/01.function/02.ssu',
35
+ mytaxa: '07.annotation/02.taxonomy/01.mytaxa',
36
+ mytaxa_scan: '07.annotation/03.qa/02.mytaxa_scan',
29
37
  # Distances (for single-species datasets)
30
- distances: "09.distances", taxonomy: "09.distances/05.taxonomy",
38
+ distances: '09.distances',
39
+ taxonomy: '09.distances/05.taxonomy',
31
40
  # General statistics
32
- stats: "90.stats"
41
+ stats: '90.stats'
33
42
  }
34
43
 
35
44
  ##
36
- # Supported dataset types.
45
+ # Supported dataset types
37
46
  @@KNOWN_TYPES = {
38
- genome: {description: 'The genome from an isolate', multi: false},
39
- scgenome: {description: 'A Single-cell Amplified Genome (SAG)',
40
- multi: false},
41
- popgenome: {description: 'A Metagenome-Assembled Genome (MAG)',
42
- :multi=>false},
43
- metagenome: {description: 'A metagenome (excluding viromes)',
44
- multi: true},
45
- virome: {description: 'A viral metagenome', multi: true}
47
+ genome: {
48
+ description: 'The genome from an isolate', multi: false
49
+ },
50
+ scgenome: {
51
+ description: 'A Single-cell Amplified Genome (SAG)', multi: false
52
+ },
53
+ popgenome: {
54
+ description: 'A Metagenome-Assembled Genome (MAG)', multi: false
55
+ },
56
+ metagenome: {
57
+ description: 'A metagenome (excluding viromes)', multi: true
58
+ },
59
+ virome: {
60
+ description: 'A viral metagenome', multi: true
61
+ }
46
62
  }
47
63
 
48
64
  ##
49
- # Returns an Array of tasks to be executed before project-wide tasks.
50
- @@PREPROCESSING_TASKS = [:raw_reads, :trimmed_reads, :read_quality,
51
- :trimmed_fasta, :assembly, :cds, :essential_genes, :ssu, :mytaxa,
52
- :mytaxa_scan, :distances, :taxonomy, :stats]
53
-
65
+ # Returns an Array of tasks to be executed before project-wide tasks
66
+ @@PREPROCESSING_TASKS = [
67
+ :raw_reads, :trimmed_reads, :read_quality, :trimmed_fasta,
68
+ :assembly, :cds, :essential_genes, :ssu, :mytaxa, :mytaxa_scan,
69
+ :distances, :taxonomy, :stats
70
+ ]
71
+
54
72
  ##
55
73
  # Tasks to be excluded from query datasets.
56
74
  @@EXCLUDE_NOREF_TASKS = [:mytaxa_scan, :taxonomy]
57
- @@_EXCLUDE_NOREF_TASKS_H = Hash[@@EXCLUDE_NOREF_TASKS.map{ |i| [i,true] }]
58
-
75
+ @@_EXCLUDE_NOREF_TASKS_H = Hash[@@EXCLUDE_NOREF_TASKS.map { |i| [i, true] }]
76
+
59
77
  ##
60
78
  # Tasks to be executed only in datasets that are not multi-organism. These
61
79
  # tasks are ignored for multi-organism datasets or for unknown types.
62
80
  @@ONLY_NONMULTI_TASKS = [:mytaxa_scan, :distances, :taxonomy]
63
- @@_ONLY_NONMULTI_TASKS_H = Hash[@@ONLY_NONMULTI_TASKS.map{ |i| [i,true] }]
81
+ @@_ONLY_NONMULTI_TASKS_H = Hash[@@ONLY_NONMULTI_TASKS.map { |i| [i, true] }]
64
82
 
65
83
  ##
66
84
  # Tasks to be executed only in datasets that are multi-organism. These
67
85
  # tasks are ignored for single-organism datasets or for unknwon types.
68
86
  @@ONLY_MULTI_TASKS = [:mytaxa]
69
- @@_ONLY_MULTI_TASKS_H = Hash[@@ONLY_MULTI_TASKS.map{ |i| [i,true] }]
70
-
71
-
87
+ @@_ONLY_MULTI_TASKS_H = Hash[@@ONLY_MULTI_TASKS.map { |i| [i, true] }]
72
88
  end
73
-
@@ -1,4 +1,3 @@
1
-
2
1
  require 'miga/common/hooks'
3
2
 
4
3
  ##
@@ -20,7 +19,7 @@ require 'miga/common/hooks'
20
19
  # - run_cmd(cmd)
21
20
  # Internal hooks:
22
21
  # - _pull_result_hooks()
23
- module MiGA::Dataset::Hooks
22
+ module MiGA::Dataset::Hooks
24
23
  include MiGA::Common::Hooks
25
24
 
26
25
  ##
@@ -38,7 +37,8 @@ module MiGA::Dataset::Hooks
38
37
  ##
39
38
  # Clear metadata from run counts
40
39
  def hook_clear_run_counts(_hook_args, _event_args)
41
- metadata.data.keys
40
+ metadata
41
+ .data.keys
42
42
  .select { |k| k.to_s =~ /^_try_/ }
43
43
  .each { |k| metadata[k] = nil }
44
44
  metadata[:_step] = nil
@@ -72,5 +72,4 @@ module MiGA::Dataset::Hooks
72
72
  pull_hook(:"on_result_ready_#{event_args.first}", *event_args)
73
73
  pull_hook(:on_preprocessing_ready) if done_preprocessing?
74
74
  end
75
-
76
75
  end
@@ -65,7 +65,7 @@ module MiGA::Dataset::Result
65
65
  # Passes +save+ to #add_result.
66
66
  def next_preprocessing(save = false)
67
67
  first = first_preprocessing(save) or return nil
68
- @@PREPROCESSING_TASKS[@@PREPROCESSING_TASKS.index(first) .. -1].find do |t|
68
+ @@PREPROCESSING_TASKS[@@PREPROCESSING_TASKS.index(first)..-1].find do |t|
69
69
  if ignore_task? t
70
70
  false
71
71
  elsif add_result(t, save).nil?
@@ -95,6 +95,7 @@ module MiGA::Dataset::Result
95
95
  def profile_advance(save = false)
96
96
  first_task = first_preprocessing(save)
97
97
  return Array.new(@@PREPROCESSING_TASKS.size, 0) if first_task.nil?
98
+
98
99
  adv = []
99
100
  state = 0
100
101
  next_task = next_preprocessing(save)
@@ -141,13 +142,16 @@ module MiGA::Dataset::Result
141
142
  r = get_result(:distances)
142
143
  ref = project.datasets.select(&:ref?).select(&:active?).map(&:name)
143
144
  return if r.nil?
145
+
144
146
  %i[haai_db aai_db ani_db].each do |db_type|
145
147
  db = r.file_path(db_type)
146
148
  next if db.nil? || !File.size?(db)
149
+
147
150
  sqlite_db = SQLite3::Database.new db
148
151
  table = db_type[-6..-4]
149
152
  val = sqlite_db.execute "select seq2 from #{table}"
150
153
  next if val.empty?
154
+
151
155
  (val.map(&:first) - ref).each do |extra|
152
156
  sqlite_db.execute "delete from #{table} where seq2=?", extra
153
157
  end
@@ -160,6 +164,7 @@ module MiGA::Dataset::Result
160
164
  # Add result type +:raw_reads+ at +base+ (no +_opts+ supported)
161
165
  def add_result_raw_reads(base, _opts)
162
166
  return nil unless result_files_exist?(base, '.1.fastq')
167
+
163
168
  add_files_to_ds_result(
164
169
  MiGA::Result.new("#{base}.json"), name,
165
170
  if result_files_exist?(base, '.2.fastq')
@@ -174,6 +179,7 @@ module MiGA::Dataset::Result
174
179
  # Add result type +:trimmed_reads+ at +base+ (no +_opts+ supported)
175
180
  def add_result_trimmed_reads(base, _opts)
176
181
  return nil unless result_files_exist?(base, '.1.clipped.fastq')
182
+
177
183
  add_files_to_ds_result(
178
184
  MiGA::Result.new("#{base}.json"), name,
179
185
  if result_files_exist?(base, '.2.clipped.fastq')
@@ -194,6 +200,7 @@ module MiGA::Dataset::Result
194
200
  # Add result type +:read_quality+ at +base+ (no +_opts+ supported)
195
201
  def add_result_read_quality(base, _opts)
196
202
  return nil unless result_files_exist?(base, %w[.solexaqa .fastqc])
203
+
197
204
  add_files_to_ds_result(
198
205
  MiGA::Result.new("#{base}.json"), name,
199
206
  solexaqa: '.solexaqa', fastqc: '.fastqc'
@@ -207,6 +214,7 @@ module MiGA::Dataset::Result
207
214
  result_files_exist?(base, '.CoupledReads.fa') ||
208
215
  result_files_exist?(base, '.SingleReads.fa') ||
209
216
  result_files_exist?(base, %w[.1.fasta .2.fasta])
217
+
210
218
  add_files_to_ds_result(
211
219
  MiGA::Result.new("#{base}.json"), name,
212
220
  coupled: '.CoupledReads.fa',
@@ -221,6 +229,7 @@ module MiGA::Dataset::Result
221
229
  # +is_clean: Boolean+.
222
230
  def add_result_assembly(base, opts)
223
231
  return nil unless result_files_exist?(base, '.LargeContigs.fna')
232
+
224
233
  r = add_files_to_ds_result(
225
234
  MiGA::Result.new("#{base}.json"), name,
226
235
  largecontigs: '.LargeContigs.fna',
@@ -240,6 +249,7 @@ module MiGA::Dataset::Result
240
249
  # Add result type +:cds+ at +base+. Hash +opts+ supports +is_clean: Boolean+
241
250
  def add_result_cds(base, opts)
242
251
  return nil unless result_files_exist?(base, %w[.faa])
252
+
243
253
  r = add_files_to_ds_result(
244
254
  MiGA::Result.new("#{base}.json"), name,
245
255
  proteins: '.faa',
@@ -262,6 +272,7 @@ module MiGA::Dataset::Result
262
272
  # Add result type +:essential_genes+ at +base+ (no +_opts+ supported).
263
273
  def add_result_essential_genes(base, _opts)
264
274
  return nil unless result_files_exist?(base, %w[.ess.faa .ess .ess/log])
275
+
265
276
  add_files_to_ds_result(
266
277
  MiGA::Result.new("#{base}.json"), name,
267
278
  ess_genes: '.ess.faa',
@@ -276,6 +287,7 @@ module MiGA::Dataset::Result
276
287
  def add_result_ssu(base, opts)
277
288
  return MiGA::Result.new("#{base}.json") if result(:assembly).nil?
278
289
  return nil unless result_files_exist?(base, '.ssu.fa')
290
+
279
291
  r = add_files_to_ds_result(
280
292
  MiGA::Result.new("#{base}.json"), name,
281
293
  longest_ssu_gene: '.ssu.fa',
@@ -298,6 +310,7 @@ module MiGA::Dataset::Result
298
310
  return nil unless
299
311
  result_files_exist?(base, '.mytaxa') ||
300
312
  result_files_exist?(base, '.nomytaxa.txt')
313
+
301
314
  add_files_to_ds_result(
302
315
  MiGA::Result.new("#{base}.json"), name,
303
316
  mytaxa: '.mytaxa',
@@ -323,6 +336,7 @@ module MiGA::Dataset::Result
323
336
  return nil unless
324
337
  result_files_exist?(base, %w[.pdf .mytaxa]) ||
325
338
  result_files_exist?(base, '.nomytaxa.txt')
339
+
326
340
  add_files_to_ds_result(
327
341
  MiGA::Result.new("#{base}.json"), name,
328
342
  nomytaxa: '.nomytaxa.txt',
@@ -379,6 +393,7 @@ module MiGA::Dataset::Result
379
393
  def add_result_distances_ref(base)
380
394
  pref = File.dirname(base)
381
395
  return nil unless File.exist?("#{pref}/01.haai/#{name}.db")
396
+
382
397
  MiGA::Result.new("#{base}.json").tap do |r|
383
398
  r.add_files(
384
399
  haai_db: "01.haai/#{name}.db",
@@ -394,6 +409,7 @@ module MiGA::Dataset::Result
394
409
  return nil unless
395
410
  result_files_exist?(base, %w[.aai-medoids.tsv .aai.db]) ||
396
411
  result_files_exist?(base, %w[.ani-medoids.tsv .ani.db])
412
+
397
413
  add_files_to_ds_result(
398
414
  MiGA::Result.new("#{base}.json"), name,
399
415
  aai_medoids: '.aai-medoids.tsv',