module BioDSL::Homopolymer

Namespace for Homopolymer

Constants

Homopolymer

Public Instance Methods

each_homopolymer(min = 1) { |hp| ... } click to toggle source
# File lib/BioDSL/seq/homopolymer.rb, line 35
def each_homopolymer(min = 1)
  fail HomopolymerError, "Bad min value: #{min}" if min <= 0
  list = []

  regex = Regexp.new("A{#{min},}|T{#{min},}|G{#{min},}|C{#{min},}|" \
                     "N{#{min},}")

  @seq.upcase.scan(regex) do |match|
    hp = Homopolymer.new(match, match.length, $`.length)

    if block_given?
      yield hp
    else
      list << hp
    end
  end

  block_given? ? self : list
end