bacterial-annotator 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4dbc3b5e016a3f24ba82ab525a0c8daa9617afec
4
- data.tar.gz: 7c8ba281632d84d7131cf1a27e143f596e76f414
3
+ metadata.gz: 34d344cebc006441522c54fa91a021c43c180299
4
+ data.tar.gz: e3902d68c0e931a4054dddd4d36ac08b5c57ec98
5
5
  SHA512:
6
- metadata.gz: 73f72513dc9964c46c73ef39477a9b5148b010d68449ff270f5b15f556a5e56e027a9ddb80149b2ce44e12c09466ac11267c118c97c8ea8892eb582d220588cf
7
- data.tar.gz: 0a92c0ceec70a12500a8dcf4433d76eff7edf2e4fe7ca180151efc016ee81a3e7a6279cc633a6adaaec5936425908c3a4299742ae1571bc1970017a058a8dedb
6
+ metadata.gz: e6104a764e106f3740410bd7e9a11f5d49e345b32797c854013dcc9a91fbd2540072f32fb85020896e8534eb2427fbdb6853ece60a123cd77a4f1c085fc34272
7
+ data.tar.gz: 1fc359b7523c87f66dcfd020092fc21b1691e8029bfa4684b35515f98b8f72c3160e2ef9d7aefc541f1eb91a803b1db839c02c24744d5e992fd6a2720b685b87
data/bin/ba_mafft ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ # author: maxime déraspe
4
+ # email: maxime@deraspe.net
5
+ # review:
6
+ # date: 15-02-24
7
+ # version: 0.01
8
+ # licence:
9
+
10
+ require 'open-uri'
11
+
12
+ ROOT_path = File.dirname(__FILE__)
13
+ # mafft_url = http://mafft.cbrc.jp/alignment/software/mafft-7.222-without-extensions-src.tgz
14
+ # Install MAFFT on the user system
15
+ def installMafft
16
+
17
+ begin
18
+ resp = open("http://mafft.cbrc.jp/alignment/software/mafft-7.222-without-extensions-src.tgz")
19
+ open("#{ROOT_path}/mafft-7.222-without-extensions-src.tgz", "wb") do |file|
20
+ file.write(resp.read)
21
+ end
22
+ Dir.chdir("#{ROOT_path}/")
23
+ `tar xvf mafft-7.222-without-extensions-src.tgz`
24
+ Dir.chdir("#{ROOT_path}/mafft-7.222-without-extensions/core")
25
+ `make`
26
+ `make install PREFIX=$(pwd -P)/../`
27
+ `echo '#! /bin/sh' > #{ROOT_path}/mafft.linux`
28
+ `echo export MAFFT_BINARIES=$(pwd -P)/../binaries >> #{ROOT_path}/mafft.linux`
29
+ `tail -n +2 #{ROOT_path}/mafft-7.222-without-extensions/bin/mafft >> #{ROOT_path}/mafft.linux`
30
+ File.chmod(0755, "#{ROOT_path}/mafft.linux")
31
+ rescue
32
+ abort "Problem in stalling MAFFT, aborting"
33
+ end
34
+
35
+ end
36
+
37
+
38
+ # Install prodigal if not already install
39
+ if ! File.exists? "#{ROOT_path}/mafft.linux"
40
+
41
+ puts "Installing MAFFT 7.222 the aligner.."
42
+ puts "See http://mafft.cbrc.jp/alignment/software/"
43
+ puts "License BSD : http://mafft.cbrc.jp/alignment/software/license.txt"
44
+ installMafft
45
+ puts "MAFFT successfully installed in #{ROOT_path}/mafft-7.222-without-extensions"
46
+ puts ""
47
+
48
+ end
@@ -9,6 +9,7 @@
9
9
 
10
10
 
11
11
  require 'bacterial-annotator'
12
+ require 'bacterial-comparator'
12
13
 
13
14
 
14
15
  # Usage message to print to CLI
@@ -16,46 +17,61 @@ def usage
16
17
 
17
18
  print <<OEM
18
19
 
19
- bacterial-annotator [OPTIONS]
20
+ bacterial-annotator [annotate | compare] [OPTIONS]
20
21
 
21
- [OPTIONS]
22
+ # Choose either to annotate a genome or compare several genome annotations
22
23
 
23
- // IO
24
+ annotate [OPTIONS]
25
+ .. see annotate -h for OPTIONS
24
26
 
25
- --input/-i <fasta_file> Provide the fasta file to annotate
26
- --outdir/-o <outdir> Output directory [default=BAnnotation]
27
- --force/-f Force to overwrite the output directory
27
+ compare [OPTIONS] [all annotation directories]*
28
+ .. see compare -h for OPTIONS
29
+
30
+ --help/-h Print this !
31
+
32
+ OEM
33
+
34
+ end
28
35
 
29
- // Dataset
30
36
 
31
- --refgenome/-g <GBK_ID> Provide a Genbank file or a Gbk Accession ID.
32
- --guessref Will guess the best reference genome to use for the annotation.
37
+ def usage_annotate
33
38
 
34
- --remotedb <remote_database> [nr|refseq|swissprot]
35
- Complete the annotation of remaining CDS with a remote NCBI BLAST
36
- Can be very slow, better to use an external database !
39
+ print <<OEM
37
40
 
38
- --externaldb <proteins fasta_file>
39
- Complete or do the annotation of remaining CDS with this database (a protein fasta file).
40
- Fasta headers need to look similar to NCBI or EBI fasta headers, ex.:
41
- >gi|385721352|gb|AFI72857.1| NDM-1 [Escherichia coli]
42
- >sp|C7C422|BLAN1_KLEPN Beta-lactamase NDM-1 OS=Klebsiella pneumoniae..
41
+ annotate [OPTIONS]
43
42
 
44
- // Other options
43
+ // IO
44
+ --input/-i <fasta_file> Provide the fasta file to annotate
45
+ --outdir/-o <outdir> Output directory [default=BAnnotation]
46
+ --force/-f Force to overwrite the output directory
45
47
 
46
- --pidentity Minimum percentage identity to incorporate a CDS annotation [default=0.7]
47
- --minlength Minimum contig length for annotation [default=500]
48
+ // Dataset
49
+ --refgenome/-g <GBK_ID> Provide a Genbank file or a Gbk Accession ID.
50
+ --guessref Will guess the best reference genome to use for the annotation.
48
51
 
49
- --meta Better for metagenome and plasmid annotations because of disparate codon usage [default=off]
50
- --gff Will also generate gff annotation files [off by default]
52
+ --remotedb <remote_database> [nr|refseq|swissprot]
53
+ Complete the annotation of remaining CDS with a remote NCBI BLAST
54
+ Can be very slow, better to use an external database !
55
+
56
+ --externaldb <proteins fasta_file>
57
+ Complete or do the annotation of remaining CDS with this database (a protein fasta file).
58
+ Fasta headers need to look similar to NCBI or EBI fasta headers, ex.:
59
+ >gi|385721352|gb|AFI72857.1| NDM-1 [Escherichia coli]
60
+ >sp|C7C422|BLAN1_KLEPN Beta-lactamase NDM-1 OS=Klebsiella pneumoniae..
61
+
62
+ // Other options
63
+ --pidentity Minimum percentage identity to incorporate a CDS annotation [default=0.7]
64
+ --minlength Minimum contig length for annotation [default=500]
65
+
66
+ --meta Better for metagenome and plasmid annotations because of disparate codon usage [default=off]
67
+ --gff Will also generate gff annotation files [off by default]
51
68
 
52
- --help/-h Print this !
53
69
  OEM
54
70
 
55
71
  end
56
72
 
57
73
  # Parse the Options given on the CLI
58
- def parseOptions
74
+ def parseOptions_annotate
59
75
 
60
76
  options = {}
61
77
 
@@ -89,7 +105,73 @@ def parseOptions
89
105
  when "--externaldb"
90
106
  options[:external_db] = ARGV.shift
91
107
  when "--help", "-h"
92
- usage
108
+ usage_annotate
109
+ abort
110
+ end
111
+
112
+ end
113
+
114
+ options
115
+
116
+ end
117
+
118
+
119
+ def usage_compare
120
+
121
+ print <<OEM
122
+
123
+ compare [OPTIONS]
124
+
125
+ //IO
126
+ --outdir/-o <output directory>
127
+ --proc <nb of process> Number of process to run the comparison
128
+
129
+ //Synteny
130
+ --pidentity <default 0.80> Minimal percentage identity to call a syntenic protein
131
+ --min_cov <default 0.80> Minimal coverage for the alignment of the protein / gene
132
+
133
+ //Alignment (MAFFT)
134
+ --align [dna|prot|both] by default align only proteins
135
+ --concat <nb of genes | all> by default all
136
+
137
+ //Phylo (RAXML)
138
+
139
+ OEM
140
+
141
+ end
142
+
143
+
144
+ # Parse the Options given on the CLI
145
+ def parseOptions_compare
146
+
147
+ options = {}
148
+
149
+ # default options
150
+ options[:outdir] = "phylogenomics"
151
+ options[:pidentity] = 0.8
152
+ options[:min_cov] = 0.8
153
+ options[:proc] = 2
154
+ options[:align] = "prot"
155
+ options[:genomes_list] = []
156
+
157
+ while x = ARGV.shift
158
+
159
+ case x.downcase
160
+ when "--outdir", "-o"
161
+ options[:outdir] = ARGV.shift
162
+ when "--pidentity"
163
+ options[:pidentity] = ARGV.shift
164
+ when "--min_cov"
165
+ options[:min_cov] = ARGV.shift
166
+ when "--proc", "-p"
167
+ options[:proc] = ARGV.shift
168
+ when "--align"
169
+ options[:align] = ARGV.shift
170
+ when "--help", "-h"
171
+ usage_compare
172
+ abort
173
+ else
174
+ options[:genomes_list] << x if File.exists? "#{x}"
93
175
  end
94
176
 
95
177
  end
@@ -103,28 +185,60 @@ end
103
185
  if ARGV.size > 1
104
186
 
105
187
  ROOT = File.dirname(__FILE__)
106
- options = parseOptions
107
188
 
108
- # Check for 3rd party dependencies : Prodigal and Blat
189
+ # Check for 3rd party dependencies : Prodigal, Blat, MAFFT
109
190
  system("ba_prodigal")
110
191
  system("ba_blat")
192
+ system("ba_mafft")
111
193
 
112
- if ! File.exist? ("#{ROOT}/blat.linux")
113
- abort "exiting blat is missing"
114
- end
194
+ options = {}
195
+ genomes_list = []
196
+
197
+ if ARGV[0] == "annotate"
198
+
199
+ ARGV.shift
200
+ options = parseOptions_annotate
201
+
202
+ if ! File.exist? ("#{ROOT}/blat.linux")
203
+ abort "#exiting blat is missing"
204
+ end
205
+
206
+ # Check Options
207
+ if ! options.has_key? :refgenome and
208
+ ! options.has_key? :remote_db and
209
+ ! options.has_key? :external_db
210
+ puts "You didn't provide a reference genome or a database for the annotation !"
211
+ elsif ! options.has_key? :input
212
+ puts "You didn't provide a fasta file to annotate !"
213
+ elsif
214
+ puts ""
215
+ end
216
+
217
+ bannot = BacterialAnnotator.new(options, ROOT)
218
+ bannot.prepare_files_for_annotation
219
+ bannot.run_annotation
220
+
221
+ elsif ARGV[0] == "compare"
222
+
223
+ ARGV.shift
224
+ options = parseOptions_compare
225
+ bcomp = BacterialComparator.new(options, ROOT)
226
+ if options[:align].downcase == "both"
227
+ bcomp.mafft_align_all_pep
228
+ bcomp.mafft_align_all_dna
229
+ elsif options[:align].downcase == "prot"
230
+ bcomp.mafft_align_all_pep
231
+ elsif options[:align].downcase == "dna"
232
+ bcomp.mafft_align_all_dna
233
+ end
234
+
235
+ else
236
+
237
+ usage
238
+ abort
115
239
 
116
- # Check Options
117
- if ! options.has_key? :refgenome and ! options.has_key? :remote_db and ! options.has_key? :external_db
118
- puts "You didn't provide a reference genome or a database for the annotation !"
119
- elsif ! options.has_key? :input
120
- puts "You didn't provide a fasta file to annotate !"
121
- elsif
122
- puts ""
123
240
  end
124
241
 
125
- bannot = BacterialAnnotator.new(options, ROOT)
126
- bannot.prepare_files_for_annotation
127
- bannot.run_annotation
128
242
 
129
243
  else
130
244
  usage
@@ -57,14 +57,18 @@ class GenbankManip
57
57
  product = ftH["product"] if !ftH["product"].nil?
58
58
  protId = ftH["protein_id"][0] if !ftH["protein_id"].nil?
59
59
  locustag = ftH["locus_tag"][0] if !ftH["locus_tag"].nil?
60
- if ftH.has_key? "translation"
61
- pep = ftH["translation"][0] if !ftH["translation"].nil?
62
- else
63
- dna = get_DNA(ft,@bioseq)
64
- pep = dna.translate
65
- end
66
60
 
61
+ # if ftH.has_key? "translation"
62
+ # pep = ftH["translation"][0] if !ftH["translation"].nil?
63
+ # else
64
+ # dna = get_DNA(ft,@bioseq)
65
+ # pep = dna.translate
66
+ # end
67
+
68
+ dna = get_DNA(ft,@bioseq)
69
+ pep = dna.translate
67
70
  pepBioSeq = Bio::Sequence.auto(pep)
71
+ dnaBioSeq = Bio::Sequence.auto(dna)
68
72
 
69
73
  if protId.strip == ""
70
74
  protId = locustag
@@ -75,7 +79,8 @@ class GenbankManip
75
79
  locustag: locustag,
76
80
  gene: gene[0],
77
81
  product: product[0],
78
- bioseq: pepBioSeq }
82
+ bioseq: pepBioSeq,
83
+ bioseq_gene: dnaBioSeq}
79
84
  end
80
85
 
81
86
  end
@@ -90,16 +95,22 @@ class GenbankManip
90
95
  def write_cds_to_file outdir
91
96
 
92
97
  cds_file = "#{@gbk.accession}.pep"
98
+ dna_file = "#{@gbk.accession}.dna"
99
+
93
100
  if @coding_seq == nil
94
101
  get_cds
95
102
  end
96
103
 
104
+ dna_out = File.open("#{outdir}/#{dna_file}", "w")
97
105
  File.open("#{outdir}/#{cds_file}", "w") do |fwrite|
98
106
  @coding_seq.each_key do |k|
99
107
  seqout = @coding_seq[k][:bioseq].output_fasta("#{k}",60)
108
+ seqout_dna = @coding_seq[k][:bioseq_gene].output_fasta("#{k}",60)
100
109
  fwrite.write(seqout)
110
+ dna_out.write(seqout_dna)
101
111
  end
102
112
  end
113
+ dna_out.close
103
114
 
104
115
  @cds_file = "#{outdir}/" + cds_file
105
116
 
@@ -202,7 +213,7 @@ class GenbankManip
202
213
  Bio::NCBI.default_email = 'default@default.com'
203
214
  ncbi = Bio::NCBI::REST.new
204
215
  genbankstring = ncbi.efetch(refgenome_id, {"db"=>'nucleotide', "rettype"=>'gb'})
205
- File.open("#{outdir}/#{refgenome_id}.gbk", "w") do |f|
216
+ File.open("#{outdir}/#{refgenome_id}.gbk", "w") do |f|
206
217
  f.write(genbankstring)
207
218
  end
208
219
  end
@@ -0,0 +1,221 @@
1
+ # -*- coding: utf-8 -*-
2
+ # author: maxime déraspe
3
+ # email: maxime@deraspe.net
4
+ # review:
5
+ # date: 15-02-24
6
+ # version: 0.0.1
7
+ # licence:
8
+
9
+ require 'bio'
10
+ require 'fileutils'
11
+ require 'parallel'
12
+
13
+ class BacterialComparator
14
+
15
+ attr_reader :genomes_list, :stats
16
+
17
+ # Initialize BacterialAnnotator
18
+ # options[:input], options[:refgenome], ROOT, options[:outdir], options)
19
+ def initialize options, root
20
+
21
+ @root = root
22
+ @outdir = options[:outdir]
23
+ Dir.mkdir(@outdir) if ! Dir.exists? @outdir
24
+ @genomes_list = options[:genomes_list]
25
+ @proc = options[:proc].to_i
26
+
27
+ min_cov = options[:min_cov].to_f
28
+ min_pid = options[:pidentity].to_f
29
+ if min_cov > 1
30
+ min_cov = min_cov/100
31
+ end
32
+ if min_pid > 1
33
+ min_pid = min_pid/100
34
+ end
35
+
36
+ @ref_prot = get_ref_prot
37
+ @synteny = read_prot_synteny
38
+ @stats = extract_syntenic_fasta min_cov, min_pid
39
+
40
+ end
41
+
42
+ def read_prot_synteny
43
+ synteny = {}
44
+ @genomes_list.each do |g|
45
+ puts "#{g}/Prot-Synteny.tsv"
46
+ file = File.open("#{g}/Prot-Synteny.tsv", "r")
47
+ l = file.gets # skip header
48
+ while l = file.gets
49
+ # AAK98805.1 spr0001 453 1.0 100.0 ABAC01000005_14 453 1.0
50
+ lA = l.chomp.split("\t")
51
+ synteny[lA[0]] = [] if ! synteny.has_key? lA[0]
52
+ synteny[lA[0]] << {ref_cov: lA[3].to_f, pId: lA[4].to_f, query_prot: lA[5], query_cov: lA[7].to_f}
53
+ end
54
+ file.close
55
+ end
56
+ synteny
57
+ end
58
+
59
+ def get_ref_prot
60
+ ref_prot = []
61
+ pep_file = Dir["#{@genomes_list[0]}/*.pep"]
62
+ flatfile = Bio::FlatFile.auto("#{pep_file[0]}")
63
+ flatfile.each_entry do |entry|
64
+ ref_prot << entry.definition.split(" ")[0]
65
+ end
66
+ ref_prot
67
+ end
68
+
69
+
70
+ def get_sequence_from_flatfile flatfile, name
71
+
72
+ out = ""
73
+ flatfile.each_entry do |entry|
74
+ if entry.definition.split(" ")[0] == name
75
+ bioseq = Bio::Sequence.auto(entry.seq)
76
+ out = bioseq.output_fasta("#{name}",60)
77
+ end
78
+ end
79
+ out
80
+
81
+ end
82
+
83
+
84
+ def build_multifasta ref_prot, synteny
85
+
86
+ pep_out_dir = "./#{@outdir}/genes-align-pep"
87
+ dna_out_dir = "./#{@outdir}/genes-align-dna"
88
+
89
+ # create multifasta by syntenic proteins (pep)
90
+ if ! File.exists? pep_out_dir+"/#{ref_prot}.pep"
91
+ pep_out = File.open(pep_out_dir+"/#{ref_prot}.pep", "w")
92
+ pep_file = Dir["#{@genomes_list[0]}/*.pep"]
93
+ flatfile = Bio::FlatFile.auto("#{pep_file[0]}")
94
+ pep_out.write(get_sequence_from_flatfile flatfile, ref_prot)
95
+ @genomes_list.each_with_index do |g,i|
96
+ flatfile = Bio::FlatFile.auto("#{g}/Proteins.fa")
97
+ pep_out.write(get_sequence_from_flatfile flatfile, synteny[i][:query_prot])
98
+ end
99
+ pep_out.close
100
+ end
101
+
102
+ # create multifasta by syntenic genes (dna)
103
+ if ! File.exists? dna_out_dir+"/#{ref_prot}.dna"
104
+ dna_out = File.open(dna_out_dir+"/#{ref_prot}.dna", "w")
105
+ # create multifasta by syntenic proteins
106
+ dna_file = Dir["#{@genomes_list[0]}/*.dna"]
107
+ flatfile = Bio::FlatFile.auto("#{dna_file[0]}")
108
+ dna_out.write(get_sequence_from_flatfile flatfile, ref_prot)
109
+ @genomes_list.each_with_index do |g,i|
110
+ flatfile = Bio::FlatFile.auto("#{g}/Genes.fa")
111
+ dna_out.write(get_sequence_from_flatfile flatfile, synteny[i][:query_prot])
112
+ end
113
+ dna_out.close
114
+ end
115
+
116
+ end
117
+
118
+
119
+ def extract_syntenic_fasta min_cov, min_pid
120
+
121
+ "# Extracting Proteins and Genes multifasta.."
122
+ nb_of_syntenic = 0
123
+ stats = {}
124
+ stats[:syntenic] = []
125
+ fout = File.open("#{@outdir}/cds-synteny.tsv", "w")
126
+ fout.write("Gene\t"+@genomes_list.join("\t")+"\n")
127
+
128
+ to_build_multifasta = []
129
+
130
+ @synteny.each do |k,v|
131
+ is_syntenic = 1
132
+ v.each do |v_|
133
+ if v_[:query_cov].nil?
134
+ is_syntenic = 0
135
+ break
136
+ elsif v_[:query_cov] > min_cov and
137
+ v_[:ref_cov] > min_cov and
138
+ v_[:pId] > min_pid
139
+ # synteny -> great !
140
+ else
141
+ is_syntenic = 0
142
+ break
143
+ end
144
+ end
145
+
146
+ if is_syntenic == 1
147
+ nb_of_syntenic += 1
148
+ # build_multifasta k, v
149
+ to_build_multifasta << [k,v]
150
+ fout.write("#{k}")
151
+ v.each do |x|
152
+ fout.write("\t#{x[:query_prot]}|#{x[:query_cov]}|#{x[:ref_cov]}")
153
+ stats[:syntenic] << k
154
+ end
155
+ fout.write("\n")
156
+ end
157
+
158
+ end
159
+
160
+ fout.close
161
+
162
+ pep_out_dir = "./#{@outdir}/genes-align-pep"
163
+ dna_out_dir = "./#{@outdir}/genes-align-dna"
164
+ Dir.mkdir(pep_out_dir) if ! Dir.exists? pep_out_dir
165
+ Dir.mkdir(dna_out_dir) if ! Dir.exists? dna_out_dir
166
+
167
+ Parallel.map(to_build_multifasta, in_processes: @proc) { |k,v|
168
+ build_multifasta k, v
169
+ }
170
+
171
+ stats[:nb_of_syntenic] = nb_of_syntenic
172
+ puts "Syntenic genes : " + nb_of_syntenic.to_s + " / " + @ref_prot.length.to_s
173
+
174
+ end
175
+
176
+
177
+ def mafft_align f
178
+
179
+ trying = 0
180
+ begin
181
+ cmd = system("#{@root}/mafft.linux --quiet #{f} > #{f}.aln")
182
+ if File.size("#{f}.aln") == 0
183
+ puts "File size of 0.. --#{f}--"
184
+ puts "Command used : #{@root}/mafft.linux --quiet #{f} > #{f}.aln"
185
+ fail
186
+ else
187
+ status = "OK"
188
+ status = "FAILED" if cmd != true
189
+ puts "Alignment #{f} : #{status}"
190
+ end
191
+ rescue
192
+ if trying < 3
193
+ trying += 1
194
+ retry
195
+ end
196
+ status = "FAILED"
197
+ puts "Alignment #{f} : #{status}"
198
+ end
199
+
200
+ end
201
+
202
+ def mafft_align_all_pep
203
+ puts "# MAFFT multialign all protein sequences.."
204
+ Dir.chdir("#{@outdir}/genes-align-pep/")
205
+ Parallel.map(Dir["*.pep"], in_processes: @proc) { |f|
206
+ mafft_align f
207
+ }
208
+ end
209
+
210
+ def mafft_align_all_dna
211
+ puts "# MAFFT multialign all gene sequences.."
212
+ puts "# MAFFT multialign all protein sequences.."
213
+ Dir.chdir("#{@outdir}/genes-align-dna/")
214
+ Parallel.map(Dir["*.dna"], in_processes: @proc) { |f|
215
+ mafft_align f
216
+ }
217
+ end
218
+
219
+
220
+
221
+ end # end of Class
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bacterial-annotator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxime Deraspe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-21 00:00:00.000000000 Z
11
+ date: 2016-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bio
@@ -50,6 +50,26 @@ dependencies:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 2.7.3
53
+ - !ruby/object:Gem::Dependency
54
+ name: parallel
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.9'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.9.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.9'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.9.0
53
73
  description: GEM to annotate bacterial genome sequence based on a reference genome
54
74
  and complete the annotation with an external database or a remote database.
55
75
  email: maxime@deraspe.net
@@ -57,10 +77,12 @@ executables:
57
77
  - bacterial-annotator
58
78
  - ba_prodigal
59
79
  - ba_blat
80
+ - ba_mafft
60
81
  extensions: []
61
82
  extra_rdoc_files: []
62
83
  files:
63
84
  - bin/ba_blat
85
+ - bin/ba_mafft
64
86
  - bin/ba_prodigal
65
87
  - bin/bacterial-annotator
66
88
  - lib/bacterial-annotator.rb
@@ -68,6 +90,7 @@ files:
68
90
  - lib/bacterial-annotator/genbank-manip.rb
69
91
  - lib/bacterial-annotator/remote-ncbi.rb
70
92
  - lib/bacterial-annotator/synteny-manip.rb
93
+ - lib/bacterial-comparator.rb
71
94
  homepage: http://rubygems.org/gems/bacterial-annotator
72
95
  licenses:
73
96
  - GPL-3.0