aai 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 26efeea51af3369c265b1bda2c7ea1540884ebfb
4
- data.tar.gz: fed2bdcddcfe2fb67540515494aae9ec260a1c59
3
+ metadata.gz: c439cf060023c9dc0c792217b3983f08bf3f696e
4
+ data.tar.gz: 6f091a4758dcde5648cf4f611b74fe6a21c163b0
5
5
  SHA512:
6
- metadata.gz: 76389d1e54a82b008b1c4920460bb4d450375bb5f72a03d599d3950c926da7ff17defbea97695edac8f467401a203b8d17abda2a17c1e74e337ae06d814b4743
7
- data.tar.gz: f39b404ae3a7a5c494a99a1fc505b9894375c63878fe9d40bcb09e7701b610d80c6501297ea7fc9d42e1fdc5bf5809d4fb28dfb8b888152415a7d30ab9a29003
6
+ metadata.gz: d54827285835cab1981111b4c3b17de121385ba85f9c999158621e73eec063660c8d27161e83f34c055135f835c905cc4d7fc5f96aa4263f003e5fdde1e4219a
7
+ data.tar.gz: c34a2a154b613e7cfeab1cb009508803e933dfcf085fde8dea6ade437e731f4f296644672d6b1516f9ebc7e8335da8a0f39f5f5d19f3806e1b837c35c7718dce
data/exe/aai CHANGED
@@ -12,6 +12,7 @@ include AbortIf::Assert
12
12
 
13
13
  Aai.extend Aai
14
14
  Aai.extend Aai::Utils
15
+ Time.extend Aai::CoreExtensions::Time
15
16
 
16
17
  def move_files fnames, dest
17
18
  fnames.each do |fname|
@@ -41,7 +42,7 @@ opts = Trollop.options do
41
42
  end
42
43
 
43
44
  abort_if opts[:infiles].nil? || opts[:infiles].empty?,
44
- "No infiles given"
45
+ "No infiles given. Try #{__FILE__} --help for help."
45
46
 
46
47
  Aai.check_command "blastp"
47
48
  Aai.check_command "makeblastdb"
@@ -49,34 +50,66 @@ Aai.check_command "parallel"
49
50
 
50
51
  Aai.check_files opts[:infiles]
51
52
 
53
+ abort_if File.exists?(opts[:outdir]),
54
+ "#{opts[:outdir]} already exists. Choose a new outdir."
55
+
52
56
  FileUtils.mkdir_p opts[:outdir]
53
57
 
54
- seq_lengths, clean_fnames = Aai.process_input_seqs! opts[:infiles]
58
+ seq_lengths = nil
59
+ clean_fnames = nil
60
+ blast_db_basenames = nil
61
+ btabs = nil
62
+ best_hits = nil
63
+ one_way = nil
64
+ two_way = nil
65
+ aai_strings = nil
66
+ score_dir = nil
67
+ outf = nil
68
+
69
+ Time.time_it "Processing input seqs", AbortIf.logger do
70
+ seq_lengths, clean_fnames = Aai.process_input_seqs! opts[:infiles]
71
+ end
55
72
 
56
- blast_db_basenames = Aai.make_blastdbs! clean_fnames,
57
- opts[:cpus]
73
+ Time.time_it "Making blast databases", AbortIf.logger do
74
+ blast_db_basenames = Aai.make_blastdbs! clean_fnames,
75
+ opts[:cpus]
76
+ end
58
77
 
59
- btabs = Aai.blast_permutations! clean_fnames,
60
- blast_db_basenames,
61
- opts[:cpus]
78
+ Time.time_it "Running blast jobs", AbortIf.logger do
79
+ btabs = Aai.blast_permutations! clean_fnames,
80
+ blast_db_basenames,
81
+ opts[:cpus]
82
+ end
62
83
 
63
- best_hits = Aai.get_best_hits btabs, seq_lengths
84
+ Time.time_it "Getting best hits", AbortIf.logger do
85
+ best_hits = Aai.get_best_hits btabs, seq_lengths
86
+ end
64
87
 
65
- one_way = Aai.one_way_aai best_hits
88
+ Time.time_it "Getting one way hits", AbortIf.logger do
89
+ one_way = Aai.one_way_aai best_hits
90
+ end
66
91
 
67
- two_way = Aai.two_way_aai best_hits
92
+ Time.time_it "Getting two way hits", AbortIf.logger do
93
+ two_way = Aai.two_way_aai best_hits
94
+ end
68
95
 
69
- aai_strings = Aai.aai_strings one_way, two_way
96
+ Time.time_it "Making aai strings", AbortIf.logger do
97
+ aai_strings = Aai.aai_strings one_way, two_way
98
+ end
70
99
 
71
- score_dir = File.join opts[:outdir], "aai_scores"
72
- FileUtils.mkdir_p score_dir
73
- outf = File.join score_dir, "#{opts[:basename]}.aai.txt"
74
- File.open(outf, "w") do |f|
75
- Aai.aai_strings(one_way, two_way).each do |str|
76
- f.puts str
100
+ Time.time_it "Writing score file", AbortIf.logger do
101
+ score_dir = File.join opts[:outdir], "aai_scores"
102
+ FileUtils.mkdir_p score_dir
103
+ outf = File.join score_dir, "#{opts[:basename]}.aai.txt"
104
+ File.open(outf, "w") do |f|
105
+ Aai.aai_strings(one_way, two_way).each do |str|
106
+ f.puts str
107
+ end
77
108
  end
78
109
  end
79
110
 
111
+ AbortIf.logger.info { "Cleaning up" }
112
+
80
113
  blast_db_dir = File.join opts[:outdir], "blastdbs"
81
114
  btab_dir = File.join opts[:outdir], "btabs"
82
115
  clean_fasta_dir = File.join opts[:outdir], "clean_fastas"
data/lib/aai.rb CHANGED
@@ -63,48 +63,10 @@ module Aai
63
63
  "--query #{query} --db #{db} --out #{out} " +
64
64
  "--evalue #{EVALUE_CUTOFF}"
65
65
 
66
- Process.run_it! cmd
67
-
68
- # if exit_status.zero?
69
- # completed_outf_names << out
70
- # else
71
- # failed_jobs << idx
72
- # AbortIf.logger.warn { "Blast job failed. Non-zero exit status " +
73
- # "(#{exit_status}) " +
74
- # "when running '#{cmd}'. " +
75
- # "Will retry at end." }
76
- # end
77
-
78
- # [completed_outf_names, failed_jobs]
66
+ Process.run_and_time_it! "Diamond blast", cmd
79
67
  end
80
68
  end
81
69
 
82
- # if failed_jobs.count > 0
83
- # Time.time_it "Retrying failed blast jobs" do
84
- # # retry failed jobs once
85
- # Parallel.each(failed_jobs, in_processes: cpus) do |idx|
86
- # query = args[idx][0]
87
- # db = args[idx][1]
88
- # out = args[idx][2]
89
-
90
- # cmd = "diamond blastp --threads #{cpus} --outfmt 6 " +
91
- # "--query #{query} --db #{db} --out #{out} " +
92
- # "--evalue #{EVALUE_CUTOFF}"
93
-
94
- # exit_status = Process.run_it cmd
95
-
96
- # if exit_status.zero?
97
- # completed_outf_names << out
98
- # else
99
- # AbortIf.logger.error { "Retrying blast job failed. " +
100
- # "Non-zero exit status " +
101
- # "(#{exit_status}) " +
102
- # "when running '#{cmd}'." }
103
- # end
104
- # end
105
- # end
106
- # end
107
-
108
70
  outf_names
109
71
  end
110
72
 
@@ -123,7 +85,7 @@ module Aai
123
85
  cmd = "diamond makedb --threads 1 --in #{fname} " +
124
86
  "--db #{fname}#{BLAST_DB_SUFFIX}"
125
87
 
126
- Process.run_it! cmd
88
+ Process.run_and_time_it! "Make db", cmd
127
89
  end
128
90
  end
129
91
 
@@ -256,34 +218,43 @@ module Aai
256
218
  genome_pair_keys = one_way_hits.keys.map { |pair| pair.sort }.uniq
257
219
 
258
220
  genome_pair_keys.each do |pair_key|
259
- AbortIf.abort_unless one_way_hits.has_key?(pair_key) &&
260
- one_way_hits.has_key?(pair_key.reverse),
261
- "Missing keys for #{pair_key}"
221
+ if one_way_hits.has_key?(pair_key) &&
222
+ one_way_hits.has_key?(pair_key.reverse)
262
223
 
263
- forward_hits = one_way_hits[pair_key]
264
- reverse_hits = one_way_hits[pair_key.reverse]
224
+ forward_hits = one_way_hits[pair_key]
225
+ reverse_hits = one_way_hits[pair_key.reverse]
265
226
 
266
- combinations = one_way_combinations forward_hits, reverse_hits
227
+ combinations = one_way_combinations forward_hits, reverse_hits
267
228
 
268
- two_way_hits = combinations.select do |h1, h2|
269
- two_way_hit? h1, h2
270
- end
229
+ two_way_hits = combinations.select do |h1, h2|
230
+ two_way_hit? h1, h2
231
+ end
271
232
 
272
- two_way_hit_info = two_way_hits.map do |h1, h2|
273
- { genome_pair: [h1[:query_genome],
274
- h1[:target_genome]].sort,
275
- pident: (h1[:pident] + h2[:pident]) / 2.0 }
276
- end
233
+ two_way_hit_info = two_way_hits.map do |h1, h2|
234
+ { genome_pair: [h1[:query_genome],
235
+ h1[:target_genome]].sort,
236
+ pident: (h1[:pident] + h2[:pident]) / 2.0 }
237
+ end
277
238
 
278
- two_way_hit_info.each do |hit|
279
- if two_way_aai.has_key? hit[:genome_pair]
280
- two_way_aai[hit[:genome_pair]] << hit[:pident]
281
- else
282
- two_way_aai[hit[:genome_pair]] = [hit[:pident]]
239
+ two_way_hit_info.each do |hit|
240
+ if two_way_aai.has_key? hit[:genome_pair]
241
+ two_way_aai[hit[:genome_pair]] << hit[:pident]
242
+ else
243
+ two_way_aai[hit[:genome_pair]] = [hit[:pident]]
244
+ end
283
245
  end
246
+ elsif !one_way_hits.has_key?(pair_key)
247
+ AbortIf.logger.warn { "No pair info for #{pair_key}. " +
248
+ "No two way hits possible " +
249
+ "for #{pair_key}." }
250
+ elsif !one_way_hits.has_key?(pair_key.reverse)
251
+ AbortIf.logger.warn { "No pair info for #{pair_key.reverse}. " +
252
+ "No two way hits possible " +
253
+ "for #{pair_key}." }
284
254
  end
285
255
  end
286
256
 
257
+ # outside of genome_pair_keys.each
287
258
  two_way_aai.map do |genome_pair, pidents|
288
259
  [genome_pair, pidents.reduce(:+) / pidents.length.to_f]
289
260
  end.to_h
@@ -44,7 +44,7 @@ module Aai
44
44
  exit_status = self.run_it *a, &b
45
45
 
46
46
  AbortIf.abort_unless exit_status.zero?,
47
- "ERROR: non-zero exit status " +
47
+ "Non-zero exit status " +
48
48
  "(#{exit_status}) " +
49
49
  "when running '#{a.inspect}', " +
50
50
  "'#{b.inspect}'"
@@ -1,5 +1,5 @@
1
1
  module Aai
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
3
3
  COPYRIGHT = "2017 Ryan Moore"
4
4
  CONTACT = "moorer@udel.edu"
5
5
  WEBSITE = "https://github.com/mooreryan/aai"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Moore