]> git.donarmstrong.com Git - biopieces.git/commitdiff
adding bzip2 support in ruby
authormartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Wed, 25 Sep 2013 14:23:05 +0000 (14:23 +0000)
committermartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Wed, 25 Sep 2013 14:23:05 +0000 (14:23 +0000)
git-svn-id: http://biopieces.googlecode.com/svn/trunk@2208 74ccb610-7750-0410-82ae-013aeee3265d

18 files changed:
bp_bin/analyze_assembly
bp_bin/assemble_seq_idba
bp_bin/assemble_seq_ray
bp_bin/assemble_seq_velvet
bp_bin/create_bowtie2_index
bp_bin/find_genes
bp_bin/patscan_seq
bp_bin/pcr_seq
bp_bin/read_embl
bp_bin/read_fasta
bp_bin/read_fastq
bp_bin/read_genbank
bp_bin/read_sff
bp_bin/uchime_seq
bp_bin/usearch_seq
bp_bin/write_fastq
code_ruby/lib/maasha/biopieces.rb
code_ruby/lib/maasha/filesys.rb

index a9a6d12960fa9d743f784451a7a61d3749be4406..614a9e54d8e85bc00e84e2a6deab96049c0ddb5d 100755 (executable)
@@ -50,7 +50,7 @@ tmpdir  = Biopieces.mktmpdir
 infile  = File.join(tmpdir, "in.fna")
 outfile = File.join(tmpdir, "out.prodigal")
 
-Fasta.open(infile, mode="w") do |fasta_output|
+Fasta.open(infile, "w") do |fasta_output|
   Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
     input.each_record do |record|
       if record[:SEQ]
index e600c0392143a9d8fe4df10ac72df00aa0f8f3aa..87b81a2675769dfa0dc411a48bea9d4303df3383 100755 (executable)
@@ -83,7 +83,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
 
     file_contig = File.join(options[:directory], "IDBA-UD", "contig.fa")
 
-               Fasta.open(file_contig, mode="r") do |fasta_io|
+               Fasta.open(file_contig, "r") do |fasta_io|
                        fasta_io.each do |entry|
                                output.puts entry.to_bp
                        end
index fbef82aedd72fba3bc268adaba38fba6eed4eaa0..87d25f343bdb8acdbc6b828e8b7648f7029f0b2f 100755 (executable)
@@ -100,7 +100,7 @@ class Ray
     count   = 0
     n50     = 0
 
-    Fasta.open(file, mode="r") do |fasta_io|
+    Fasta.open(file, "r") do |fasta_io|
       fasta_io.each do |entry|
         total   += entry.length
         lengths << entry.length
@@ -139,7 +139,7 @@ Dir.mkdir(options[:directory]) unless Dir.exists?(options[:directory])
 file_fasta = File.join(options[:directory], "sequence_in.fasta")
 
 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
-       Fasta.open(file_fasta, mode="w") do |fasta_io|
+       Fasta.open(file_fasta, "w") do |fasta_io|
                input.each_record do |record|
       if record[:SEQ_NAME] and record[:SEQ]
         seq = Seq.new_bp(record)
@@ -154,7 +154,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
                ray.run
                file_contigs = ray.pick_best_assembly
 
-               Fasta.open(file_contigs, mode="r") do |fasta_io|
+               Fasta.open(file_contigs, "r") do |fasta_io|
                        fasta_io.each do |entry|
                                output.puts entry.to_bp
                        end
index abe6bd59f76ea342de5130d6ef783c2d9c53306a..e2753ce91ad65023d47627bd1c372553075fb14e 100755 (executable)
@@ -101,7 +101,7 @@ class Velvet
     count   = 0
     n50     = 0
 
-    Fasta.open(file, mode="r") do |fasta_io|
+    Fasta.open(file, "r") do |fasta_io|
       fasta_io.each do |entry|
         total   += entry.length
         lengths << entry.length
@@ -144,7 +144,7 @@ Dir.mkdir(options[:directory]) unless Dir.exists?(options[:directory])
 file_fasta = File.join(options[:directory], "sequence_in.fna")
 
 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
-  Fasta.open(file_fasta, mode="w") do |fasta_io|
+  Fasta.open(file_fasta, "w") do |fasta_io|
     input.each_record do |record|
       if record[:SEQ_NAME] and record[:SEQ]
         seq = Seq.new_bp(record)
@@ -161,7 +161,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
 
     kmer = file_contigs.match(/_\d+/)
 
-               Fasta.open(file_contigs, mode="r") do |fasta_io|
+               Fasta.open(file_contigs, "r") do |fasta_io|
                  fasta_io.each do |entry|
         entry.seq_name << "_kmer#{kmer}"
                          output.puts entry.to_bp
index bce4f88d4b3bec2f67f026df71f3be75c1eff8f6..73545eb3bcdf44e2db640bc159817b6aabfe3b78 100755 (executable)
@@ -46,7 +46,7 @@ tmpdir  = Biopieces.mktmpdir
 tmpfile = File.join(tmpdir, "tmp.fna")
 
 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
-  Fasta.open(tmpfile, mode="w") do |fasta_io|
+  Fasta.open(tmpfile, "w") do |fasta_io|
     input.each_record do |record|
       output.puts record unless options[:no_stream]
 
index 15e7f5703a74703a30f193cfcb5495beaa80d86f..88dacf2ddee0c7ec899a13cf6f008a7b6380e61b 100755 (executable)
@@ -44,7 +44,7 @@ infile  = File.join(tmpdir, "in.fna")
 outfile = File.join(tmpdir, "out.prodigal")
 
 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
-  Fasta.open(infile, mode="w") do |fasta_io|
+  Fasta.open(infile, "w") do |fasta_io|
     input.each_record do |record|
       output.puts record
 
index a209bc6f104fb004fc5aba4d48b4d5eda2d17029..28f028dec433ccb5ac8ccd32c6d4ba59b9d08a0d 100755 (executable)
@@ -161,7 +161,7 @@ seq_name_hash  = {}
 seq_type       = nil
 
 Biopieces.open(options[:stream_in], tmp_file) do |input, output|
-  Fasta.open(in_file, mode="w") do |fasta_io|
+  Fasta.open(in_file, "w") do |fasta_io|
     input.each_record do |record|
       if record[:SEQ_NAME]
         seq_name_hash[seq_name_count] = record[:SEQ_NAME]
index 09e626983184e9a14970c894989ed06a9f1e4db0..6afbb343f3e497595261f4cd785a558ff0ce97b9 100755 (executable)
@@ -146,7 +146,7 @@ class Pattern
 
   # Save a pattern to file
   def save_pattern(file)
-    File.open(file, mode="w") do |ios|
+    File.open(file, "w") do |ios|
       ios.puts self
     end
   end
@@ -173,7 +173,7 @@ end
 
 raise ArgumentError, "no adaptor specified" unless options[:forward] or options[:reverse]
 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
-  Fasta.open(infile, mode="w") do |ios|
+  Fasta.open(infile, "w") do |ios|
     input.each_record do |record|
       output.puts record
 
@@ -187,7 +187,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
   outfiles = Pcr.new(tmpdir, infile, options).run
 
   outfiles.each do |outfile|
-    Fasta.open(outfile, mode="r") do |ios|
+    Fasta.open(outfile, "r") do |ios|
       ios.each do |entry|
         record = entry.to_bp
         record[:REC_TYPE] = "PCR"
index 0a3558cd2e19bece6b8da8a1c00d5bbd3f91e147..ca2839bb8e22b52f6dd2370c147b7289ce0e1d71 100755 (executable)
@@ -54,7 +54,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
 
   if options[:data_in]
     options[:data_in].each do |file|
-      EMBL.open(file, mode='r') do |embl_io|
+      EMBL.open(file, 'r') do |embl_io|
         embl_io.each(hash_keys, hash_feats, hash_quals) do |entry|
           output.puts entry
 
index 8bc5874f55dc0a6399e78c6a29167af9fdb773c1..e6494405f4ae7ebd844cebdebf67e495b036acfc 100755 (executable)
@@ -49,7 +49,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
 
   if options[:data_in]
     options[:data_in].each do |file|
-      Fasta.open(file, mode='r') do |fasta|
+      Fasta.open(file, 'r') do |fasta|
         fasta.each do |entry|
           output.puts entry.to_bp
           num += 1
index 0c5b9b2cff975de128aa8306db786d7af5ef1882..e4fd75f257357988657a205f984a41f356d9eeb4 100755 (executable)
@@ -65,10 +65,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
       io1 = Fastq.open(file1, 'r')
       io2 = Fastq.open(file2, 'r')
 
-      while not io1.eof? and not io2.eof?
-        entry1 = io1.get_entry
-        entry2 = io2.get_entry
-
+      while entry1 = io1.get_entry and entry2 = io2.get_entry
         if encoding == :auto
           if entry1.qual_base33? or entry2.qual_base33?
             encoding = :base_33
index 7cabf2bf0adcbd1071cd6438b6fc86f211061445..006cb50f59fe454c7c2d765e774327db3cb983d6 100755 (executable)
@@ -55,7 +55,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
 
   if options[:data_in]
     options[:data_in].each do |file|
-      Genbank.open(file, mode='r') do |gb|
+      Genbank.open(file, 'r') do |gb|
         gb.each(hash_keys, hash_feats, hash_quals) do |entry|
           output.puts entry
 
index cd9d58a88ab872630b5055ca5910c9ce7a2c5c32..1410af6cddf34d225f99ba0bd3a25cb85d085568 100755 (executable)
@@ -49,7 +49,7 @@ Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
 
   if options[:data_in]
     options[:data_in].each do |file|
-      SFF.open(file, mode='r') do |sff|
+      SFF.open(file, 'r') do |sff|
         sff.each do |entry|
           entry.mask if options[:mask]
           entry.clip if options[:clip]
index 050491899d724da002803d6e829a897460934098..8843274cdfe62864ccff10ed6d75efa0458e95bb 100755 (executable)
@@ -43,7 +43,7 @@ tmpfile = File.join(tmpdir, "tmp.stream")
 outfile = File.join(tmpdir, "out.uc")
 
 Biopieces.open(options[:stream_in], tmpfile) do |input, output|
-  Fasta.open(infile, mode="w") do |fasta_io|
+  Fasta.open(infile, "w") do |fasta_io|
     input.each_record do |record|
       output.puts record
 
index 946659f0c165652d32f2c39259ef8074e9484be8..38f65565e1e6251f328594ce3d3a44a50bc7ca80 100755 (executable)
@@ -54,7 +54,7 @@ infile  = File.join(tmpdir, "in.fna")
 outfile = File.join(tmpdir, "out.uc")
 
 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
-  Fasta.open(infile, mode="w") do |fasta_io|
+  Fasta.open(infile, "w") do |fasta_io|
     input.each_record do |record|
       output.puts record
 
index 30bdd89cdaca441f1ab15d9d21a329e53abdd16f..d15c96f9dd31eb0ac6792b6b70d092ddcdd29bb6 100755 (executable)
@@ -34,38 +34,33 @@ require 'maasha/fastq'
 allowed_enc = 'base_33,base_64'
 
 casts = []
-casts << {:long=>'no_stream', :short=>'x', :type=>'flag',   :mandatory=>false, :default=>nil,       :allowed=>nil,         :disallowed=>nil}
-casts << {:long=>'data_out',  :short=>'o', :type=>'file',   :mandatory=>false, :default=>nil,       :allowed=>nil,         :disallowed=>nil}
-casts << {:long=>'encoding',  :short=>'e', :type=>'string', :mandatory=>false, :default=>'base_33', :allowed=>allowed_enc, :disallowed=>nil}
-casts << {:long=>'compress',  :short=>'Z', :type=>'flag',   :mandatory=>false, :default=>nil,       :allowed=>nil,         :disallowed=>nil}
+casts << {long: 'no_stream', short: 'x', type: 'flag',   mandatory: false, default: nil,       allowed: nil,               disallowed: nil}
+casts << {long: 'data_out',  short: 'o', type: 'file',   mandatory: false, default: nil,       allowed: nil,               disallowed: nil}
+casts << {long: 'encoding',  short: 'e', type: 'string', mandatory: false, default: 'base_33', allowed: allowed_enc,       disallowed: nil}
+casts << {long: 'compress',  short: 'Z', type: 'string', mandatory: false, default: nil,       allowed: "gzip,bzip,bzip2", disallowed: nil}
 
 options = Biopieces.options_parse(ARGV, casts)
 
 encoding = options[:encoding].to_sym
+compress = options[:compress] ? options[:compress].to_sym : nil
+
+raise "--data_out is mandatory for compressed output" if compress and not options[:data_out]
 
 Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output|
-  if options[:data_out]
-    if options[:compress]
-      io_out = Zlib::GzipWriter.open(options[:data_out])
-    else
-      io_out = Fastq.open(options[:data_out], 'w')
-    end
-  else
-    io_out = $stdout
-  end
+  fastq_out = options[:data_out] ? Fastq.open(options[:data_out], 'w', compress: compress) : STDOUT
 
   input.each do |record|
     if record[:SEQ_NAME] and record[:SEQ] and record[:SCORES]
       entry = Seq.new_bp(record)
       entry.qual_convert!(:base_33, encoding)
 
-      io_out.puts entry.to_fastq
+      fastq_out.puts entry.to_fastq
     end
 
     output.puts record unless options[:no_stream]
   end
 
-  io_out.close
+  fastq_out.close
 end
 
 
index e51d53877185a7f97b157d27ad2bf9592bbbbf58..039bb69ea26d299e3230b2266a0abe345374c7e9 100644 (file)
@@ -84,7 +84,7 @@ class Biopieces
     io_in  = self.open_input(input)
     io_out = self.open_output(output)
 
-    if block_given?
+    if block_given?   # FIXME begin block outmost?
       begin
         yield io_in, io_out
       ensure
index e842178853a6f79d9aab4df1239c7a5908c7a6fa..4bb7b8f7d17fd4b88b90da6d64a0aa33be527d8d 100644 (file)
@@ -23,6 +23,7 @@
 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 
 require 'zlib'
+require 'bzip2'
 
 # Error class for all exceptions to do with Filesys.
 class FilesysError < StandardError; end
@@ -40,75 +41,67 @@ class Filesys
     path
   end
 
-  # Class method allowing open to be used on (zipped) files.
-  # See File.open.
   def self.open(*args)
-    args = *args
-    file = args.first
-
-    if file == "-"
-      ios = self.new(STDIN)
-    elsif File.pipe? file
-      ios = self.new(File.open(*args))
+    file    = args.shift
+    mode    = args.shift
+    options = args.shift || {}
+
+    if mode == 'w'
+      case options[:compress]
+      when :gzip
+        ios = Zlib::GzipWriter.new File.open(file, mode, options)
+      when :bzip, :bzip2
+        ios = Bzip2::Writer.new File.open(file, mode, options)
+      else 
+        ios = File.open(file, mode, options)
+      end
     else
-      ios = self.zopen(*args)
+      if file == '-'
+        ios = STDIN
+      else
+        case `file #{file}`
+        when /gzip/
+          ios = Zlib::GzipReader.new File.open(file, mode, options)
+        when /bzip/
+          ios = Bzip2::Reader.new File.open(file, mode, options)
+        else
+          ios = File.open(file, mode, options)
+        end
+      end
     end
 
     if block_given?
       begin
-        yield ios
+        yield self.new(ios)
       ensure
         ios.close
       end
     else
-      return ios
+      return self.new(ios)
     end
   end
 
-  def initialize(io)
-    @io = io
+  def initialize(ios)
+    @io = ios
+  end
+
+  def puts(*args)
+    @io.puts(*args)
   end
 
-  # Method to close ios.
   def close
-    @io.close unless @io.is_a? Zlib::GzipReader
+    @io.close
   end
 
   def eof?
     @io.eof?
   end
 
-  # Method to check if io is closed.
-  def closed?
-    @io.closed?
-  end
-
   # Iterator method for parsing entries.
   def each
     while entry = get_entry do
       yield entry
     end
   end
-
-  # Method to puts directoy on Filesys objects.
-  def puts(*args)
-    @io.puts(*args)
-  end
-
-  private
-
-  # Helper method to return an ios to a file that may be zipped in which case
-  # the ios is unzipped on the fly. See File.open.
-  def self.zopen(*args)
-    ios = File.open(*args)
-
-    begin
-      ios = Zlib::GzipReader.new(ios)
-    rescue
-      ios.rewind
-    end
-
-    self.new(ios)
-  end
 end