From: martinahansen Date: Fri, 11 Feb 2011 10:52:22 +0000 (+0000) Subject: added xy-coord extraction code to sff.rb X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=1287d51e169505d78b043d3032f8bcc7c382125f;p=biopieces.git added xy-coord extraction code to sff.rb git-svn-id: http://biopieces.googlecode.com/svn/trunk@1266 74ccb610-7750-0410-82ae-013aeee3265d --- diff --git a/code_ruby/Maasha/lib/sff.rb b/code_ruby/Maasha/lib/sff.rb index 3e0fc37..cb1fa23 100644 --- a/code_ruby/Maasha/lib/sff.rb +++ b/code_ruby/Maasha/lib/sff.rb @@ -22,9 +22,14 @@ # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +require 'base36' + # Error class for all exceptions to do with SFF. class SFFError < StandardError; end +BIT_SHIFT = 12 +BIT_MASK = (1 << BIT_SHIFT) - 1 + # Class containing methods to parse SFF files: # http://www.ncbi.nlm.nih.gov/Traces/trace.cgi?cmd=show&f=formats&m=doc&s=format#sff class SFF @@ -185,10 +190,13 @@ end class Read attr_accessor :read_header_length, :name_length, :number_of_bases, :clip_qual_left, :clip_qual_right, :clip_adapter_left, :clip_adaptor_right, - :name, :flowgram_values, :flow_index_per_base, :bases, :quality_scores + :name, :flowgram_values, :flow_index_per_base, :bases, :quality_scores, + :x_pos, :y_pos # Method that converts a Read object's data to a Biopiece record (a hash). def to_bp + coordinates_get + hash = {} hash[:SEQ_NAME] = self.name @@ -199,6 +207,8 @@ class Read hash[:CLIP_ADAPTOR_LEFT] = self.clip_adapter_left hash[:CLIP_ADAPTOR_RIGHT] = self.clip_adaptor_right hash[:SCORES] = self.quality_scores.map { |i| (i += 64).chr }.join "" + hash[:X_POS] = self.x_pos + hash[:Y_POS] = self.y_pos hash end @@ -219,6 +229,18 @@ class Read 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] end + + private + + # Method that extracts the X/Y coordinates from a + # SFF read name encoded with base36. + def coordinates_get + base36 = self.name[-5, 5] + num = Base36.decode(base36) + + self.x_pos = num >> BIT_SHIFT + self.y_pos = num & BIT_MASK + end end __END__