bacterial-annotator 0.6.2 → 0.6.3
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.
- checksums.yaml +4 -4
 - data/bin/bacterial-annotator +2 -4
 - data/lib/bacterial-annotator/sequence-synteny.rb +2 -2
 - data/lib/bacterial-annotator.rb +32 -12
 - data/lib/bacterial-comparator.rb +96 -60
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: bc9bbbe5d2c03c4019290cf077f7ac21c6b0d687
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 746d312f4891d7a561d00b1c6299cb57750daa7f
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1dbde919ea570e01223a48ec6f357d77d88ce62502ad0d09a9ba465a5bc4becb11a4caa5f6e8accf721e5c21780118f46c427b99abe1512bfce8e2a27c329a59
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 708a2a03d84dcc46f10a921deaca1705fdd0091b00cd096971bf5436d443d244d31740d5012caf916a045b56b7c35ad73c45abefdee6a59d29abc9f7a8664c1d
         
     | 
    
        data/bin/bacterial-annotator
    CHANGED
    
    | 
         @@ -11,7 +11,7 @@ 
     | 
|
| 
       11 
11 
     | 
    
         
             
            require 'bacterial-annotator'
         
     | 
| 
       12 
12 
     | 
    
         
             
            require 'bacterial-comparator'
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            VERSION = "0.6. 
     | 
| 
      
 14 
     | 
    
         
            +
            VERSION = "0.6.2"
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
            def print_version
         
     | 
| 
       17 
17 
     | 
    
         
             
              version = "Bacterial Annotator - Version #{VERSION}\n\n"
         
     | 
| 
         @@ -61,7 +61,7 @@ annotate [OPTIONS] 
     | 
|
| 
       61 
61 
     | 
    
         
             
                --input/-i		<fasta_file>	Provide the fasta file to annotate
         
     | 
| 
       62 
62 
     | 
    
         
             
                --outdir/-o		<outdir>	Output directory [default=BAnnotation]
         
     | 
| 
       63 
63 
     | 
    
         
             
                --force/-f		Force to overwrite the output directory
         
     | 
| 
       64 
     | 
    
         
            -
                --name/-n 
     | 
| 
      
 64 
     | 
    
         
            +
                --name/-n		<name> Sample name
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
       66 
66 
     | 
    
         
             
              // MERGEM-based Annotation (Recommended)
         
     | 
| 
       67 
67 
     | 
    
         
             
                --db/-d          <directory> MERGEM database directory
         
     | 
| 
         @@ -249,8 +249,6 @@ if ARGV.size >= 1 
     | 
|
| 
       249 
249 
     | 
    
         
             
                  puts "You didn't provide a reference genome or a database for the annotation !"
         
     | 
| 
       250 
250 
     | 
    
         
             
                elsif ! options.has_key? :input
         
     | 
| 
       251 
251 
     | 
    
         
             
                  puts "You didn't provide a fasta file to annotate !"
         
     | 
| 
       252 
     | 
    
         
            -
                elsif
         
     | 
| 
       253 
     | 
    
         
            -
                  puts ""
         
     | 
| 
       254 
252 
     | 
    
         
             
                end
         
     | 
| 
       255 
253 
     | 
    
         | 
| 
       256 
254 
     | 
    
         
             
                bannot = BacterialAnnotator.new(options, ROOT)
         
     | 
| 
         @@ -38,7 +38,7 @@ class SequenceSynteny 
     | 
|
| 
       38 
38 
     | 
    
         
             
                  properties = s.definition.chomp.split(";")
         
     | 
| 
       39 
39 
     | 
    
         
             
                  partial = false
         
     | 
| 
       40 
40 
     | 
    
         
             
                  if properties.length >= 2 and properties[1].include? "partial"
         
     | 
| 
       41 
     | 
    
         
            -
                    partial = (properties[1].gsub("partial=","") 
     | 
| 
      
 41 
     | 
    
         
            +
                    partial = (properties[1].gsub("partial=","").include? '1')
         
     | 
| 
       42 
42 
     | 
    
         
             
                  end
         
     | 
| 
       43 
43 
     | 
    
         
             
                  sequences[s_name][:partial] = partial
         
     | 
| 
       44 
44 
     | 
    
         
             
                  sequences[s_name][:length] = s.seq.length
         
     | 
| 
         @@ -52,7 +52,7 @@ class SequenceSynteny 
     | 
|
| 
       52 
52 
     | 
    
         | 
| 
       53 
53 
     | 
    
         
             
              # run blat on proteins
         
     | 
| 
       54 
54 
     | 
    
         
             
              def run_blat root, outdir
         
     | 
| 
       55 
     | 
    
         
            -
                base_cmd = "#{root}/blat.linux -out=blast8 -minIdentity=#{@pidentity}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                base_cmd = "#{root}/blat.linux -out=blast8 -minIdentity=#{@pidentity} > /dev/null 2>&1"
         
     | 
| 
       56 
56 
     | 
    
         
             
                if @type == "prot"
         
     | 
| 
       57 
57 
     | 
    
         
             
                  system("#{base_cmd} -prot #{@subject_file} #{@query_file} #{outdir}/#{@name}.blat8.tsv")
         
     | 
| 
       58 
58 
     | 
    
         
             
                else
         
     | 
    
        data/lib/bacterial-annotator.rb
    CHANGED
    
    | 
         @@ -12,7 +12,7 @@ require 'fileutils' 
     | 
|
| 
       12 
12 
     | 
    
         
             
            require 'bacterial-annotator/sequence-fasta'
         
     | 
| 
       13 
13 
     | 
    
         
             
            require 'bacterial-annotator/sequence-annotation'
         
     | 
| 
       14 
14 
     | 
    
         
             
            require 'bacterial-annotator/sequence-synteny'
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
            require 'helper'
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
            class BacterialAnnotator
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
         @@ -79,13 +79,16 @@ class BacterialAnnotator 
     | 
|
| 
       79 
79 
     | 
    
         
             
              # Prepare files for the annotation
         
     | 
| 
       80 
80 
     | 
    
         
             
              # Will run prodigal on the query and prepare reference genome files
         
     | 
| 
       81 
81 
     | 
    
         
             
              def prepare_files_for_annotation
         
     | 
| 
       82 
     | 
    
         
            -
                 
     | 
| 
      
 82 
     | 
    
         
            +
                print "# Running Prodigal on your genome.."
         
     | 
| 
      
 83 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
       83 
84 
     | 
    
         
             
                @query_fasta.run_prodigal @root, @options[:outdir]
         
     | 
| 
       84 
     | 
    
         
            -
                 
     | 
| 
      
 85 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 86 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time - start_time)
         
     | 
| 
      
 87 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
       85 
88 
     | 
    
         
             
                if @with_refence_genome
         
     | 
| 
       86 
89 
     | 
    
         
             
                  @ref_genome.write_cds_to_file @options[:outdir]
         
     | 
| 
       87 
90 
     | 
    
         
             
                  @ref_genome.write_rna_to_file @options[:outdir]
         
     | 
| 
       88 
     | 
    
         
            -
                  puts "Successfully loaded #{@ref_genome.gbk.definition}"
         
     | 
| 
      
 91 
     | 
    
         
            +
                  # puts "Successfully loaded #{@ref_genome.gbk.definition}"
         
     | 
| 
       89 
92 
     | 
    
         
             
                end
         
     | 
| 
       90 
93 
     | 
    
         
             
              end                           # end of method
         
     | 
| 
       91 
94 
     | 
    
         | 
| 
         @@ -95,7 +98,12 @@ class BacterialAnnotator 
     | 
|
| 
       95 
98 
     | 
    
         
             
                ref_synteny_prot = SequenceSynteny.new(@query_fasta.annotation_files[:proteins], @ref_genome.cds_file,
         
     | 
| 
       96 
99 
     | 
    
         
             
                                                       "Prot-Ref", @options[:pidentity], @options[:pcoverage], "prot")
         
     | 
| 
       97 
100 
     | 
    
         | 
| 
      
 101 
     | 
    
         
            +
                print "# Running alignment with Reference Genome CDS (blat).."
         
     | 
| 
      
 102 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
       98 
103 
     | 
    
         
             
                ref_synteny_prot.run_blat @root, @options[:outdir]
         
     | 
| 
      
 104 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 105 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time - start_time)
         
     | 
| 
      
 106 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
       99 
107 
     | 
    
         | 
| 
       100 
108 
     | 
    
         
             
                ref_synteny_prot.extract_hits :refgenome
         
     | 
| 
       101 
109 
     | 
    
         | 
| 
         @@ -145,10 +153,14 @@ class BacterialAnnotator 
     | 
|
| 
       145 
153 
     | 
    
         
             
                  dump_ref_synteny_to_file
         
     | 
| 
       146 
154 
     | 
    
         | 
| 
       147 
155 
     | 
    
         
             
                  # run RNA annotation
         
     | 
| 
       148 
     | 
    
         
            -
                  puts "\nRunning BLAT alignment with Reference Genome RNA.."
         
     | 
| 
       149 
156 
     | 
    
         
             
                  @rna_synteny = SequenceSynteny.new(@query_fasta.fasta_file, @ref_genome.rna_file,
         
     | 
| 
       150 
157 
     | 
    
         
             
                                                     "RNA-Ref", @options[:pidentity], @options[:pcoverage], "dna")
         
     | 
| 
      
 158 
     | 
    
         
            +
                  print "# Running alignment with Reference Genome RNA (blat).."
         
     | 
| 
      
 159 
     | 
    
         
            +
                  start_time = Time.now
         
     | 
| 
       151 
160 
     | 
    
         
             
                  @rna_synteny.run_blat @root, @options[:outdir]
         
     | 
| 
      
 161 
     | 
    
         
            +
                  end_time = Time.now
         
     | 
| 
      
 162 
     | 
    
         
            +
                  c_time = Helper.sec2str(end_time-start_time)
         
     | 
| 
      
 163 
     | 
    
         
            +
                  print "done (#{c_time})\n"
         
     | 
| 
       152 
164 
     | 
    
         
             
                  @rna_synteny.extract_hits_dna :rna
         
     | 
| 
       153 
165 
     | 
    
         
             
                  @contig_annotations_rna = {}
         
     | 
| 
       154 
166 
     | 
    
         
             
                  @query_fasta.annotation_files[:contigs].each_with_index do |contig, contig_index|
         
     | 
| 
         @@ -168,9 +180,9 @@ class BacterialAnnotator 
     | 
|
| 
       168 
180 
     | 
    
         
             
                # Parse annotations to genbank files
         
     | 
| 
       169 
181 
     | 
    
         
             
                parse_genbank_files
         
     | 
| 
       170 
182 
     | 
    
         | 
| 
       171 
     | 
    
         
            -
                 
     | 
| 
      
 183 
     | 
    
         
            +
                print "# Printing Statistics.."
         
     | 
| 
       172 
184 
     | 
    
         
             
                print_stats "#{@options[:outdir]}"
         
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
      
 185 
     | 
    
         
            +
                print "done\n"
         
     | 
| 
       174 
186 
     | 
    
         | 
| 
       175 
187 
     | 
    
         
             
              end                           # end of method
         
     | 
| 
       176 
188 
     | 
    
         | 
| 
         @@ -188,7 +200,7 @@ class BacterialAnnotator 
     | 
|
| 
       188 
200 
     | 
    
         
             
                                                            "Prot-ExternalDB", @options[:pidentity],
         
     | 
| 
       189 
201 
     | 
    
         
             
                                                            @options[:pcoverage], "prot")
         
     | 
| 
       190 
202 
     | 
    
         | 
| 
       191 
     | 
    
         
            -
                  puts " 
     | 
| 
      
 203 
     | 
    
         
            +
                  puts "# Running BLAT alignment with External Database.."
         
     | 
| 
       192 
204 
     | 
    
         
             
                  @externaldb_synteny.run_blat @root, @options[:outdir]
         
     | 
| 
       193 
205 
     | 
    
         
             
                  @externaldb_synteny.extract_hits :externaldb
         
     | 
| 
       194 
206 
     | 
    
         | 
| 
         @@ -237,7 +249,8 @@ class BacterialAnnotator 
     | 
|
| 
       237 
249 
     | 
    
         
             
              # parse all genbank files
         
     | 
| 
       238 
250 
     | 
    
         
             
              def parse_genbank_files
         
     | 
| 
       239 
251 
     | 
    
         | 
| 
       240 
     | 
    
         
            -
                 
     | 
| 
      
 252 
     | 
    
         
            +
                print "# Parsing annotation into genbank files.."
         
     | 
| 
      
 253 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
       241 
254 
     | 
    
         
             
                @contig_annotations_cds.each do |contig, contig_prots|
         
     | 
| 
       242 
255 
     | 
    
         | 
| 
       243 
256 
     | 
    
         
             
                  gbk_path = @query_fasta.annotation_files[:gbk_path]
         
     | 
| 
         @@ -265,7 +278,9 @@ class BacterialAnnotator 
     | 
|
| 
       265 
278 
     | 
    
         
             
                  gbk_to_annotate.save_genbank_to_file gbk_path
         
     | 
| 
       266 
279 
     | 
    
         | 
| 
       267 
280 
     | 
    
         
             
                end
         
     | 
| 
       268 
     | 
    
         
            -
             
     | 
| 
      
 281 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 282 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time-start_time)
         
     | 
| 
      
 283 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
       269 
284 
     | 
    
         
             
              end                           # end of method
         
     | 
| 
       270 
285 
     | 
    
         | 
| 
       271 
286 
     | 
    
         | 
| 
         @@ -505,18 +520,21 @@ class BacterialAnnotator 
     | 
|
| 
       505 
520 
     | 
    
         | 
| 
       506 
521 
     | 
    
         
             
                # Iterate over each Ref protein and print syntheny
         
     | 
| 
       507 
522 
     | 
    
         
             
                synteny_file = File.open("#{@options[:outdir]}/Prot-Synteny.tsv","w")
         
     | 
| 
       508 
     | 
    
         
            -
                synteny_file.write("RefLocusTag\tRefProtID\tRefLength\tRefCoverage\tIdentity\tQueryGene\tQueryLength\tQueryCoverage\n")
         
     | 
| 
      
 523 
     | 
    
         
            +
                synteny_file.write("RefLocusTag\tRefProtID\tRefLength\tRefCoverage\tIdentity\tQueryGene\tQueryLength\tQueryCoverage\tQueryPartial\n")
         
     | 
| 
       509 
524 
     | 
    
         
             
                ref_annotated = {}
         
     | 
| 
       510 
525 
     | 
    
         | 
| 
       511 
526 
     | 
    
         
             
                @prot_synteny_refgenome.query_sequences.each do |prot, syn_val|
         
     | 
| 
       512 
527 
     | 
    
         
             
                  next if ! syn_val.has_key? :homology
         
     | 
| 
      
 528 
     | 
    
         
            +
                  next if syn_val[:homology][:assert_cutoff].inject(:+) < 3
         
     | 
| 
      
 529 
     | 
    
         
            +
                  next if ref_annotated.has_key? syn_val[:homology][:hits][0] and ref_annotated[syn_val[:homology][:hits][0]][:partial] == 0
         
     | 
| 
       513 
530 
     | 
    
         
             
                  ref_annotated[syn_val[:homology][:hits][0]] = {
         
     | 
| 
       514 
531 
     | 
    
         
             
                    key: prot,
         
     | 
| 
       515 
532 
     | 
    
         
             
                    pId: syn_val[:homology][:pId],
         
     | 
| 
       516 
533 
     | 
    
         
             
                    cov_query: syn_val[:homology][:cov_query],
         
     | 
| 
       517 
534 
     | 
    
         
             
                    cov_subject: syn_val[:homology][:cov_subject],
         
     | 
| 
       518 
535 
     | 
    
         
             
                    assert_cutoff: syn_val[:homology][:assert_cutoff],
         
     | 
| 
       519 
     | 
    
         
            -
                    length: syn_val[:homology][:length][0]
         
     | 
| 
      
 536 
     | 
    
         
            +
                    length: syn_val[:homology][:length][0],
         
     | 
| 
      
 537 
     | 
    
         
            +
                    partial: (syn_val[:partial] ? 1 : 0)
         
     | 
| 
       520 
538 
     | 
    
         
             
                  }
         
     | 
| 
       521 
539 
     | 
    
         
             
                end
         
     | 
| 
       522 
540 
     | 
    
         | 
| 
         @@ -539,6 +557,7 @@ class BacterialAnnotator 
     | 
|
| 
       539 
557 
     | 
    
         
             
                    query_length = @query_fasta.annotation_files[:prot_ids_length][gene]
         
     | 
| 
       540 
558 
     | 
    
         
             
                    coverage_query = ref_annotated[ref_v[:protId]][:cov_query]
         
     | 
| 
       541 
559 
     | 
    
         
             
                    pId = ref_annotated[ref_v[:protId]][:pId]
         
     | 
| 
      
 560 
     | 
    
         
            +
                    partial = ref_annotated[ref_v[:protId]][:partial]
         
     | 
| 
       542 
561 
     | 
    
         
             
                  end
         
     | 
| 
       543 
562 
     | 
    
         | 
| 
       544 
563 
     | 
    
         
             
                  synteny_file.write(ref_v[:protId])
         
     | 
| 
         @@ -549,6 +568,7 @@ class BacterialAnnotator 
     | 
|
| 
       549 
568 
     | 
    
         
             
                  synteny_file.write("\t"+gene)
         
     | 
| 
       550 
569 
     | 
    
         
             
                  synteny_file.write("\t"+query_length.to_s)
         
     | 
| 
       551 
570 
     | 
    
         
             
                  synteny_file.write("\t"+coverage_query.to_s)
         
     | 
| 
      
 571 
     | 
    
         
            +
                  synteny_file.write("\t"+partial.to_s)
         
     | 
| 
       552 
572 
     | 
    
         
             
                  synteny_file.write("\n")
         
     | 
| 
       553 
573 
     | 
    
         | 
| 
       554 
574 
     | 
    
         
             
                end
         
     | 
    
        data/lib/bacterial-comparator.rb
    CHANGED
    
    | 
         @@ -9,6 +9,7 @@ 
     | 
|
| 
       9 
9 
     | 
    
         
             
            require 'bio'
         
     | 
| 
       10 
10 
     | 
    
         
             
            require 'fileutils'
         
     | 
| 
       11 
11 
     | 
    
         
             
            require 'parallel'
         
     | 
| 
      
 12 
     | 
    
         
            +
            require 'helper'
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            class BacterialComparator
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
         @@ -40,15 +41,16 @@ class BacterialComparator 
     | 
|
| 
       40 
41 
     | 
    
         
             
              end
         
     | 
| 
       41 
42 
     | 
    
         | 
| 
       42 
43 
     | 
    
         
             
              def read_prot_synteny
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                print "# Reading genome synteny files - from genome annotations.."
         
     | 
| 
      
 46 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
       44 
47 
     | 
    
         
             
                synteny = {}
         
     | 
| 
       45 
48 
     | 
    
         
             
                @genomes_list.each do |g|
         
     | 
| 
       46 
     | 
    
         
            -
                  puts "   #{g}/Prot-Synteny.tsv"
         
     | 
| 
       47 
49 
     | 
    
         
             
                  genome_synteny = []
         
     | 
| 
       48 
50 
     | 
    
         
             
                  file = File.open("#{g}/Prot-Synteny.tsv", "r")
         
     | 
| 
       49 
51 
     | 
    
         
             
                  l = file.gets             # skip header
         
     | 
| 
       50 
52 
     | 
    
         
             
                  while l = file.gets
         
     | 
| 
       51 
     | 
    
         
            -
                    # AAK98805.1      spr0001 453     1.0     100.0   ABAC01000005_14 453     1.0
         
     | 
| 
      
 53 
     | 
    
         
            +
                    # AAK98805.1      spr0001 453     1.0     100.0   ABAC01000005_14 453     1.0	1|0
         
     | 
| 
       52 
54 
     | 
    
         
             
                    lA = l.chomp.split("\t")
         
     | 
| 
       53 
55 
     | 
    
         
             
                    synteny[lA[0]] =  [] if ! synteny.has_key? lA[0]
         
     | 
| 
       54 
56 
     | 
    
         
             
                    synteny[lA[0]] << {ref_cov: lA[3].to_f, pId: lA[4].to_f, query_prot: lA[5], query_cov: lA[7].to_f}
         
     | 
| 
         @@ -61,7 +63,12 @@ class BacterialComparator 
     | 
|
| 
       61 
63 
     | 
    
         
             
                  end
         
     | 
| 
       62 
64 
     | 
    
         
             
                  file.close
         
     | 
| 
       63 
65 
     | 
    
         
             
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 67 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time-start_time)
         
     | 
| 
      
 68 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
       64 
70 
     | 
    
         
             
                synteny
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
       65 
72 
     | 
    
         
             
              end
         
     | 
| 
       66 
73 
     | 
    
         | 
| 
       67 
74 
     | 
    
         
             
              def get_ref_prot
         
     | 
| 
         @@ -76,62 +83,72 @@ class BacterialComparator 
     | 
|
| 
       76 
83 
     | 
    
         
             
              end
         
     | 
| 
       77 
84 
     | 
    
         | 
| 
       78 
85 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
               
     | 
| 
      
 86 
     | 
    
         
            +
              # load all id => sequences from multifasta
         
     | 
| 
      
 87 
     | 
    
         
            +
              def load_genome_cds file
         
     | 
| 
       80 
88 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                 
     | 
| 
      
 89 
     | 
    
         
            +
                proteins = {}
         
     | 
| 
      
 90 
     | 
    
         
            +
                flatfile = Bio::FlatFile.auto(file)
         
     | 
| 
       82 
91 
     | 
    
         
             
                flatfile.each_entry do |entry|
         
     | 
| 
       83 
     | 
    
         
            -
                   
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                   
     | 
| 
      
 92 
     | 
    
         
            +
                  name = entry.definition.split(" ")[0]
         
     | 
| 
      
 93 
     | 
    
         
            +
                  bioseq = Bio::Sequence.auto(entry.seq)
         
     | 
| 
      
 94 
     | 
    
         
            +
                  out = bioseq.output_fasta("#{name}",60)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  proteins[name] = out
         
     | 
| 
       87 
96 
     | 
    
         
             
                end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                proteins
         
     | 
| 
       89 
99 
     | 
    
         | 
| 
       90 
100 
     | 
    
         
             
              end
         
     | 
| 
       91 
101 
     | 
    
         | 
| 
       92 
102 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
              def build_multifasta  
     | 
| 
      
 103 
     | 
    
         
            +
              def build_multifasta synteny_list
         
     | 
| 
       94 
104 
     | 
    
         | 
| 
       95 
105 
     | 
    
         
             
                pep_out_dir = "./#{@outdir}/align-genes-pep"
         
     | 
| 
       96 
     | 
    
         
            -
                dna_out_dir = "./#{@outdir}/align-genes-dna"
         
     | 
| 
       97 
106 
     | 
    
         | 
| 
       98 
     | 
    
         
            -
                 
     | 
| 
       99 
     | 
    
         
            -
                 
     | 
| 
       100 
     | 
    
         
            -
                  pep_out = File.open(pep_out_dir+"/#{ 
     | 
| 
       101 
     | 
    
         
            -
                   
     | 
| 
       102 
     | 
    
         
            -
                  flatfile = Bio::FlatFile.auto("#{pep_file[0]}")
         
     | 
| 
       103 
     | 
    
         
            -
                  pep_out.write(get_sequence_from_flatfile flatfile, ref_prot)
         
     | 
| 
       104 
     | 
    
         
            -
                  flatfile.close
         
     | 
| 
       105 
     | 
    
         
            -
                  @genomes_list.each_with_index do |g,i|
         
     | 
| 
       106 
     | 
    
         
            -
                    flatfile = Bio::FlatFile.auto("#{g}/Proteins.fa")
         
     | 
| 
       107 
     | 
    
         
            -
                    pep_out.write(get_sequence_from_flatfile flatfile, synteny[i][:query_prot])
         
     | 
| 
       108 
     | 
    
         
            -
                    flatfile.close
         
     | 
| 
       109 
     | 
    
         
            -
                  end
         
     | 
| 
      
 107 
     | 
    
         
            +
                ref_proteins = load_genome_cds(Dir["#{@genomes_list[0]}/*.pep"][0])
         
     | 
| 
      
 108 
     | 
    
         
            +
                synteny_list.each do |k,v|
         
     | 
| 
      
 109 
     | 
    
         
            +
                  pep_out = File.open(pep_out_dir+"/#{k}.pep", "w")
         
     | 
| 
      
 110 
     | 
    
         
            +
                  pep_out.write(ref_proteins[k])
         
     | 
| 
       110 
111 
     | 
    
         
             
                  pep_out.close
         
     | 
| 
       111 
112 
     | 
    
         
             
                end
         
     | 
| 
       112 
113 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
                 
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
                   
     | 
| 
       116 
     | 
    
         
            -
                   
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                  flatfile.close
         
     | 
| 
       121 
     | 
    
         
            -
                  @genomes_list.each_with_index do |g,i|
         
     | 
| 
       122 
     | 
    
         
            -
                    flatfile = Bio::FlatFile.auto("#{g}/Genes.fa")
         
     | 
| 
       123 
     | 
    
         
            -
                    dna_out.write(get_sequence_from_flatfile flatfile, synteny[i][:query_prot])
         
     | 
| 
       124 
     | 
    
         
            -
                    flatfile.close
         
     | 
| 
      
 114 
     | 
    
         
            +
                @genomes_list.each_with_index do |g,i|
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                  genome_proteins = load_genome_cds("#{g}/Proteins.fa")
         
     | 
| 
      
 117 
     | 
    
         
            +
                  synteny_list.each do |k,v|
         
     | 
| 
      
 118 
     | 
    
         
            +
                    pep_out = File.open(pep_out_dir+"/#{k}.pep", "a")
         
     | 
| 
      
 119 
     | 
    
         
            +
                    pep_out.write(genome_proteins[v[i][:query_prot]])
         
     | 
| 
      
 120 
     | 
    
         
            +
                    pep_out.close
         
     | 
| 
       125 
121 
     | 
    
         
             
                  end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                dna_out_dir = "./#{@outdir}/align-genes-dna"
         
     | 
| 
      
 126 
     | 
    
         
            +
                ref_genes = load_genome_cds(Dir["#{@genomes_list[0]}/*.dna"][0])
         
     | 
| 
      
 127 
     | 
    
         
            +
                synteny_list.each do |k,v|
         
     | 
| 
      
 128 
     | 
    
         
            +
                  dna_out = File.open(dna_out_dir+"/#{k}.dna", "w")
         
     | 
| 
      
 129 
     | 
    
         
            +
                  dna_out.write(ref_genes[k])
         
     | 
| 
       126 
130 
     | 
    
         
             
                  dna_out.close
         
     | 
| 
       127 
131 
     | 
    
         
             
                end
         
     | 
| 
       128 
132 
     | 
    
         | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
      
 133 
     | 
    
         
            +
                @genomes_list.each_with_index do |g,i|
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                  genome_genes = load_genome_cds("#{g}/Genes.fa")
         
     | 
| 
      
 136 
     | 
    
         
            +
                  synteny_list.each do |k,v|
         
     | 
| 
      
 137 
     | 
    
         
            +
                    dna_out = File.open(dna_out_dir+"/#{k}.dna", "a")
         
     | 
| 
      
 138 
     | 
    
         
            +
                    dna_out.write(genome_genes[v[i][:query_prot]])
         
     | 
| 
      
 139 
     | 
    
         
            +
                    dna_out.close
         
     | 
| 
      
 140 
     | 
    
         
            +
                  end
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                end
         
     | 
| 
       130 
143 
     | 
    
         | 
| 
      
 144 
     | 
    
         
            +
              end
         
     | 
| 
       131 
145 
     | 
    
         | 
| 
      
 146 
     | 
    
         
            +
              # extract and dump multifasta for syntenic genes and proteins
         
     | 
| 
       132 
147 
     | 
    
         
             
              def extract_syntenic_fasta min_cov, min_pid
         
     | 
| 
       133 
148 
     | 
    
         | 
| 
       134 
     | 
    
         
            -
                 
     | 
| 
      
 149 
     | 
    
         
            +
                print "# Extracting Proteins and Genes multifasta.."
         
     | 
| 
      
 150 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
       135 
152 
     | 
    
         
             
                nb_of_syntenic = 0
         
     | 
| 
       136 
153 
     | 
    
         
             
                stats = {}
         
     | 
| 
       137 
154 
     | 
    
         
             
                stats[:syntenic] = []
         
     | 
| 
         @@ -141,6 +158,7 @@ class BacterialComparator 
     | 
|
| 
       141 
158 
     | 
    
         
             
                to_build_multifasta = []
         
     | 
| 
       142 
159 
     | 
    
         | 
| 
       143 
160 
     | 
    
         
             
                @synteny.each do |k,v|
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
       144 
162 
     | 
    
         
             
                  is_syntenic = 1
         
     | 
| 
       145 
163 
     | 
    
         
             
                  v.each do |v_|
         
     | 
| 
       146 
164 
     | 
    
         
             
                    if v_[:query_cov] == "-"
         
     | 
| 
         @@ -186,12 +204,18 @@ class BacterialComparator 
     | 
|
| 
       186 
204 
     | 
    
         
             
                Dir.mkdir(pep_out_dir) if ! Dir.exists? pep_out_dir
         
     | 
| 
       187 
205 
     | 
    
         
             
                Dir.mkdir(dna_out_dir) if ! Dir.exists? dna_out_dir
         
     | 
| 
       188 
206 
     | 
    
         | 
| 
       189 
     | 
    
         
            -
                 
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
      
 207 
     | 
    
         
            +
                synteny_list = to_build_multifasta.each_slice((to_build_multifasta.length/@proc)+1).to_a
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
                Parallel.map(synteny_list, in_processes: @proc) { |list|
         
     | 
| 
      
 210 
     | 
    
         
            +
                  build_multifasta list
         
     | 
| 
       191 
211 
     | 
    
         
             
                }
         
     | 
| 
       192 
212 
     | 
    
         | 
| 
      
 213 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 214 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time-start_time)
         
     | 
| 
      
 215 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
      
 216 
     | 
    
         
            +
             
     | 
| 
       193 
217 
     | 
    
         
             
                stats[:nb_of_syntenic] = nb_of_syntenic
         
     | 
| 
       194 
     | 
    
         
            -
                puts "Syntenic genes : " + nb_of_syntenic.to_s + " / " + @ref_prot.length.to_s
         
     | 
| 
      
 218 
     | 
    
         
            +
                #puts "   Syntenic genes : " + nb_of_syntenic.to_s + " / " + @ref_prot.length.to_s
         
     | 
| 
       195 
219 
     | 
    
         | 
| 
       196 
220 
     | 
    
         
             
              end
         
     | 
| 
       197 
221 
     | 
    
         | 
| 
         @@ -224,7 +248,9 @@ class BacterialComparator 
     | 
|
| 
       224 
248 
     | 
    
         | 
| 
       225 
249 
     | 
    
         
             
              def mafft_align_all_pep
         
     | 
| 
       226 
250 
     | 
    
         | 
| 
       227 
     | 
    
         
            -
                 
     | 
| 
      
 251 
     | 
    
         
            +
                print "# Sequence alignments - conserved single proteins a.a. (MAFFT).."
         
     | 
| 
      
 252 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
       228 
254 
     | 
    
         
             
                ori_dir = Dir.pwd
         
     | 
| 
       229 
255 
     | 
    
         
             
                Dir.chdir("#{@outdir}/align-genes-pep/")
         
     | 
| 
       230 
256 
     | 
    
         | 
| 
         @@ -243,10 +269,12 @@ class BacterialComparator 
     | 
|
| 
       243 
269 
     | 
    
         
             
                  Parallel.map(Dir["*.pep"], in_processes: @proc) { |f|
         
     | 
| 
       244 
270 
     | 
    
         
             
                    mafft_align f
         
     | 
| 
       245 
271 
     | 
    
         
             
                  }
         
     | 
| 
       246 
     | 
    
         
            -
                else
         
     | 
| 
       247 
     | 
    
         
            -
                  puts "..Prot alignment files already exists, skipping."
         
     | 
| 
       248 
272 
     | 
    
         
             
                end
         
     | 
| 
       249 
273 
     | 
    
         | 
| 
      
 274 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 275 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time-start_time)
         
     | 
| 
      
 276 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
       250 
278 
     | 
    
         
             
                # FIXME ugly hack to find out the reference genome
         
     | 
| 
       251 
279 
     | 
    
         
             
                ref_id = Dir["#{ori_dir}/#{@genomes_list[0]}/*.pep"][0].split('/')[-1].gsub(".pep","")
         
     | 
| 
       252 
280 
     | 
    
         | 
| 
         @@ -257,7 +285,10 @@ class BacterialComparator 
     | 
|
| 
       257 
285 
     | 
    
         
             
              end
         
     | 
| 
       258 
286 
     | 
    
         | 
| 
       259 
287 
     | 
    
         
             
              def mafft_align_all_dna
         
     | 
| 
       260 
     | 
    
         
            -
             
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
                print "# Sequence alignments - conserved single genes dna (MAFFT).."
         
     | 
| 
      
 290 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
      
 291 
     | 
    
         
            +
             
     | 
| 
       261 
292 
     | 
    
         
             
                ori_dir = Dir.pwd
         
     | 
| 
       262 
293 
     | 
    
         
             
                Dir.chdir("#{@outdir}/align-genes-dna/")
         
     | 
| 
       263 
294 
     | 
    
         | 
| 
         @@ -276,13 +307,15 @@ class BacterialComparator 
     | 
|
| 
       276 
307 
     | 
    
         
             
                  Parallel.map(Dir["*.dna"], in_processes: @proc) { |f|
         
     | 
| 
       277 
308 
     | 
    
         
             
                    mafft_align f
         
     | 
| 
       278 
309 
     | 
    
         
             
                  }
         
     | 
| 
       279 
     | 
    
         
            -
                else
         
     | 
| 
       280 
     | 
    
         
            -
                  puts "..Gene alignment files already exists, skipping."
         
     | 
| 
       281 
310 
     | 
    
         
             
                end
         
     | 
| 
       282 
311 
     | 
    
         | 
| 
       283 
312 
     | 
    
         
             
                # ugly hack to find out the reference genome
         
     | 
| 
       284 
313 
     | 
    
         
             
                ref_id = Dir["#{ori_dir}/#{@genomes_list[0]}/*.pep"][0].split('/')[-1].gsub(".pep","")
         
     | 
| 
       285 
314 
     | 
    
         | 
| 
      
 315 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 316 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time-start_time)
         
     | 
| 
      
 317 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
       286 
319 
     | 
    
         
             
                concat_alignments "align-genes-dna.all.fasta", ref_id
         
     | 
| 
       287 
320 
     | 
    
         | 
| 
       288 
321 
     | 
    
         
             
                Dir.chdir(ori_dir)
         
     | 
| 
         @@ -355,36 +388,39 @@ class BacterialComparator 
     | 
|
| 
       355 
388 
     | 
    
         | 
| 
       356 
389 
     | 
    
         | 
| 
       357 
390 
     | 
    
         
             
              def raxml_tree_dna bt
         
     | 
| 
       358 
     | 
    
         
            -
             
     | 
| 
       359 
     | 
    
         
            -
                 
     | 
| 
       360 
     | 
    
         
            -
                puts "# RAXML DNA tree creation.. "
         
     | 
| 
      
 391 
     | 
    
         
            +
                print "# Genes DNA tree creation (RAXML).."
         
     | 
| 
      
 392 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
       361 
393 
     | 
    
         
             
                ori_dir = Dir.pwd
         
     | 
| 
       362 
394 
     | 
    
         
             
                Dir.chdir(@outdir)
         
     | 
| 
       363 
395 
     | 
    
         
             
                Dir.mkdir("tree-genes-dna") if ! Dir.exists?("tree-genes-dna")
         
     | 
| 
       364 
396 
     | 
    
         
             
                current_dir = Dir.pwd
         
     | 
| 
       365 
397 
     | 
    
         
             
                tree_dir = "#{current_dir}/tree-genes-dna"
         
     | 
| 
       366 
     | 
    
         
            -
                cmd = system("#{@root}/raxml.linux -T #{@proc} -f d -N #{bt} -s align-genes-dna.all.fasta  -m GTRGAMMA -p 123454321 -n DnaTree -w #{tree_dir}")
         
     | 
| 
      
 398 
     | 
    
         
            +
                cmd = system("#{@root}/raxml.linux -T #{@proc} -f d -N #{bt} -s align-genes-dna.all.fasta  -m GTRGAMMA -p 123454321 -n DnaTree -w #{tree_dir} > /dev/null 2>&1")
         
     | 
| 
       367 
399 
     | 
    
         
             
                cmd = system("cat #{tree_dir}/RAxML_result.DnaTree.RUN.* >> #{tree_dir}/RAxML_result.BS")
         
     | 
| 
       368 
     | 
    
         
            -
                cmd = system("#{@root}/raxml.linux -T #{@proc} -f b -z #{tree_dir}/RAxML_result.BS -t #{tree_dir}/RAxML_bestTree.DnaTree -m GTRGAMMA -n DNA_BS_TREE -w #{tree_dir}")
         
     | 
| 
       369 
     | 
    
         
            -
                cmd = system("ln -s #{tree_dir}/RAxML_bipartitionsBranchLabels.DNA_BS_TREE #{tree_dir}/../")
         
     | 
| 
      
 400 
     | 
    
         
            +
                cmd = system("#{@root}/raxml.linux -T #{@proc} -f b -z #{tree_dir}/RAxML_result.BS -t #{tree_dir}/RAxML_bestTree.DnaTree -m GTRGAMMA -n DNA_BS_TREE -w #{tree_dir} > /dev/null 2>&1")
         
     | 
| 
      
 401 
     | 
    
         
            +
                cmd = system("ln -s #{tree_dir}/RAxML_bipartitionsBranchLabels.DNA_BS_TREE #{tree_dir}/../tree-genes-dna.nwk")
         
     | 
| 
       370 
402 
     | 
    
         
             
                Dir.chdir(ori_dir)
         
     | 
| 
      
 403 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 404 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time-start_time)
         
     | 
| 
      
 405 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
       371 
406 
     | 
    
         
             
              end
         
     | 
| 
       372 
407 
     | 
    
         | 
| 
       373 
408 
     | 
    
         
             
              def raxml_tree_pep bt
         
     | 
| 
       374 
     | 
    
         
            -
             
     | 
| 
       375 
     | 
    
         
            -
                 
     | 
| 
       376 
     | 
    
         
            -
                puts "# RAXML Protein tree creation.. "
         
     | 
| 
      
 409 
     | 
    
         
            +
                print "# Proteins AA tree creation (RAXML).."
         
     | 
| 
      
 410 
     | 
    
         
            +
                start_time = Time.now
         
     | 
| 
       377 
411 
     | 
    
         
             
                ori_dir = Dir.pwd
         
     | 
| 
       378 
412 
     | 
    
         
             
                Dir.chdir(@outdir)
         
     | 
| 
       379 
413 
     | 
    
         
             
                Dir.mkdir("tree-genes-pep") if ! Dir.exists?("tree-genes-pep")
         
     | 
| 
       380 
414 
     | 
    
         
             
                current_dir = Dir.pwd
         
     | 
| 
       381 
415 
     | 
    
         
             
                tree_dir = "#{current_dir}/tree-genes-pep"
         
     | 
| 
       382 
     | 
    
         
            -
                cmd = system("#{@root}/raxml.linux -T #{@proc} -f d -N #{bt} -s align-genes-pep.all.fasta  -m PROTGAMMAAUTO -p 123454321 -n PepTree -w #{tree_dir}")
         
     | 
| 
      
 416 
     | 
    
         
            +
                cmd = system("#{@root}/raxml.linux -T #{@proc} -f d -N #{bt} -s align-genes-pep.all.fasta  -m PROTGAMMAAUTO -p 123454321 -n PepTree -w #{tree_dir} > /dev/null 2>&1")
         
     | 
| 
       383 
417 
     | 
    
         
             
                cmd = system("cat #{tree_dir}/RAxML_result.PepTree.RUN.* >> #{tree_dir}/RAxML_result.BS")
         
     | 
| 
       384 
     | 
    
         
            -
                cmd = system("#{@root}/raxml.linux -T #{@proc} -f b -z #{tree_dir}/RAxML_result.BS -t #{tree_dir}/RAxML_bestTree.PepTree -m PROTGAMMAAUTO -n PEP_BS_TREE -w #{tree_dir}")
         
     | 
| 
       385 
     | 
    
         
            -
                cmd = system("ln -s #{tree_dir}/RAxML_bipartitionsBranchLabels.PEP_BS_TREE #{tree_dir}/../")
         
     | 
| 
      
 418 
     | 
    
         
            +
                cmd = system("#{@root}/raxml.linux -T #{@proc} -f b -z #{tree_dir}/RAxML_result.BS -t #{tree_dir}/RAxML_bestTree.PepTree -m PROTGAMMAAUTO -n PEP_BS_TREE -w #{tree_dir} > /dev/null 2>&1")
         
     | 
| 
      
 419 
     | 
    
         
            +
                cmd = system("ln -s #{tree_dir}/RAxML_bipartitionsBranchLabels.PEP_BS_TREE #{tree_dir}/../tree-proteins-aa.nwk")
         
     | 
| 
       386 
420 
     | 
    
         
             
                Dir.chdir(ori_dir)
         
     | 
| 
       387 
     | 
    
         
            -
             
     | 
| 
      
 421 
     | 
    
         
            +
                end_time = Time.now
         
     | 
| 
      
 422 
     | 
    
         
            +
                c_time = Helper.sec2str(end_time-start_time)
         
     | 
| 
      
 423 
     | 
    
         
            +
                print "done (#{c_time})\n"
         
     | 
| 
       388 
424 
     | 
    
         
             
              end
         
     | 
| 
       389 
425 
     | 
    
         | 
| 
       390 
426 
     | 
    
         | 
    
        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.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Maxime Deraspe
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-10- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-10-10 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bio
         
     |