]> git.donarmstrong.com Git - biopieces.git/blobdiff - code_ruby/lib/maasha/sff.rb
fixed Seq object creation in sff.rb
[biopieces.git] / code_ruby / lib / maasha / sff.rb
index f4c39313c5d45d45db88279e19b6cbf822ffd8f8..cabedf6df8ef26b81899ca36f88cd01eb758c0ba 100644 (file)
@@ -23,6 +23,7 @@
 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 
 require 'maasha/base36'
+require 'maasha/seq'
 
 # Error class for all exceptions to do with SFF.
 class SFFError < StandardError; end
@@ -194,7 +195,11 @@ class Read
 
   # Method that converts a Read object's data to a Biopiece record (a hash).
   def to_bp
-    coordinates_get
+    # Simulated SFF files may not have coordinates.
+    begin
+      coordinates_get
+    rescue
+    end
 
     hash = {}
 
@@ -205,13 +210,22 @@ class Read
     hash[:CLIP_QUAL_RIGHT]    = self.clip_qual_right    - 1
     hash[:CLIP_ADAPTOR_LEFT]  = self.clip_adapter_left  - 1
     hash[:CLIP_ADAPTOR_RIGHT] = self.clip_adaptor_right - 1
-    hash[:SCORES]             = self.quality_scores.map { |i| (i += 64).chr }.join ""
+    hash[:SCORES]             = self.quality_scores.map { |i| (i += Seq::SCORE_BASE).chr }.join ""
     hash[:X_POS]              = self.x_pos
     hash[:Y_POS]              = self.y_pos
 
     hash
   end
 
+  # Method that converts a Read object's data to a Seq object.
+  def to_seq
+    Seq.new(
+      seq_name: self.name,
+      seq: self.bases, 
+      qual: self.quality_scores.map { |i| (i += Seq::SCORE_BASE).chr }.join("")
+    )
+  end
+
   # Method that soft masks the sequence (i.e. lowercases sequence) according to
   # clip_qual_left and clip_qual_right information.
   def mask
@@ -220,6 +234,8 @@ class Read
     right  = self.bases[self.clip_qual_right ... self.bases.length].downcase
 
     self.bases = left + middle + right
+
+    self
   end
 
   # Method that clips sequence (i.e. trims) according to
@@ -227,6 +243,8 @@ class Read
   def clip
     self.bases          = self.bases[self.clip_qual_left - 1 ... self.clip_qual_right]
     self.quality_scores = self.quality_scores[self.clip_qual_left - 1 ... self.clip_qual_right]
+
+    self
   end
 
   private