[BioRuby] Consensus sequence

James Keener jimktrainslists at gmail.com
Wed Aug 4 15:32:02 EDT 2010


At alignment.rb:118 there is this function:

      # Returns consensus character of the site.
      # If consensus is found, eturns a single-letter string.
      # If not, returns nil.
      def consensus_string(threshold = 1.0)
        return nil if self.size <= 0
        return self[0] if self.sort.uniq.size == 1
        h = Hash.new(0)
        self.each { |x| h[x] += 1 }
        total = self.size
        b = h.to_a.sort do |x,y|
          z = (y[1] <=> x[1])
          z = (self.index(x[0]) <=> self.index(y[0])) if z == 0
          z
        end
        if total * threshold <= b[0][1] then
          b[0][0]
        else
          nil
        end
      end

Now, I have 2 questions about it.
1) Why is it sorting? Shouldn't it use a linear search?
2) How can the count of the greatest residue (b[0][1]) be larger than or equal to the total number of residues?


Also, there is a whole set of functions I am adding (group entropy and some book keeping/housecleaning things) and would like to commit them back.  What is the best way to commit them back?  

Jim


More information about the BioRuby mailing list