lib/bio/shell/plugin/seq.rb in bio-1.0.0 vs lib/bio/shell/plugin/seq.rb in bio-1.1.0
- old
+ new
@@ -1,13 +1,13 @@
#
# = bio/shell/plugin/seq.rb - plugin for biological sequence manipulations
#
# Copyright:: Copyright (C) 2005
# Toshiaki Katayama <k@bioruby.org>
-# License:: Ruby's
+# License:: The Ruby License
#
-# $Id: seq.rb,v 1.17 2006/02/09 20:48:53 k Exp $
+# $Id: seq.rb,v 1.21 2007/04/05 23:35:41 trevor Exp $
#
module Bio::Shell
private
@@ -15,11 +15,11 @@
# Convert sequence to colored HTML string
def htmlseq(str)
if str.kind_of?(Bio::Sequence)
seq = str
else
- seq = seq(str)
+ seq = getseq(str)
end
if seq.is_a?(Bio::Sequence::AA)
scheme = Bio::ColorScheme::Taylor
else
@@ -39,16 +39,25 @@
html += "</div>\n"
return html
end
+ def sixtrans(str)
+ seq = getseq(str)
+ [ 1, 2, 3, -1, -2, -3 ].each do |frame|
+ title = "Translation #{frame.to_s.rjust(2)}"
+ puts seq.translate(frame).to_fasta(title, 60)
+ end
+ end
+
+
# Displays some basic properties of the sequence.
def seqstat(str)
max = 150
- seq = seq(str)
+ seq = getseq(str)
rep = "\n* * * Sequence statistics * * *\n\n"
- if seq.respond_to?(:complement)
+ if seq.moltype == Bio::Sequence::NA
fwd = seq
rev = seq.complement
if seq.length > max
dot = " ..."
fwd = fwd.subseq(1, max)
@@ -121,16 +130,16 @@
end
# Displays a DNA sequence by ascii art in B-type double helix.
# Argument need to be at least 16 bases in length.
def doublehelix(str)
- seq = seq(str)
- if str.length < 16
+ seq = getseq(str)
+ if seq.length < 16
warn "Error: Sequence must be longer than 16 bases."
return
end
- if ! seq.respond_to?(:complement)
+ if seq.moltype != Bio::Sequence::NA
warn "Error: Sequence must be a DNA sequence."
return
end
pairs = [ [5, 0], [4, 2], [3, 3], [2, 4],
[1, 4], [0, 3], [0, 2], [1, 0] ]
@@ -148,9 +157,27 @@
end
class String
+
+ def step(window_size)
+ i = 0
+ 0.step(self.length - window_size, window_size) do |i|
+ yield self[i, window_size]
+ end
+ yield self[i + window_size .. -1] if i + window_size < self.length
+ end
+
+ def skip(window_size, step_size = 1)
+ i = 0
+ 0.step(self.length - window_size, step_size) do |i|
+ yield [self[i, window_size], i + 1, i + window_size]
+ end
+ from = i + step_size
+ to = [self.length, i + step_size + window_size].min
+ yield [self[from, window_size], from + 1, to] if from + 1 <= to
+ end
def to_naseq
Bio::Sequence::NA.new(self)
end