class Bio::SiRNA

Bio::SiRNA

Designing siRNA.

This class implements the selection rules described by Kumiko Ui-Tei et al. (2004) and Reynolds et al. (2004).

Attributes

antisense_size[RW]

A parameter of size of antisense.

max_gc_percent[RW]

A parameter of maximal %GC.

min_gc_percent[RW]

A parameter of minimum %GC.

Public Class Methods

new(seq, antisense_size = 21, max_gc_percent = 60.0, min_gc_percent = 40.0) click to toggle source

Input is a Bio::Sequence::NA object (the target sequence). Output is a list of Bio::SiRNA::Pair object.

# File lib/bio/util/sirna.rb, line 64
def initialize(seq, antisense_size = 21, max_gc_percent = 60.0, min_gc_percent = 40.0)
  @seq = seq.rna!
  @pairs = Array.new
  @antisense_size = antisense_size
  @max_gc_percent = max_gc_percent
  @min_gc_percent = min_gc_percent
end

Public Instance Methods

design(rule = 'uitei') click to toggle source

rule can be one of 'uitei' (default) and 'reynolds'.

# File lib/bio/util/sirna.rb, line 105
def design(rule = 'uitei')
  @target_size = @antisense_size + 2

  target_start = 0
  @seq.window_search(@target_size) do |target|
    antisense = target.subseq(1, @target_size - 2).complement.rna
    sense     = target.subseq(3, @target_size)

    target_start += 1
    target_stop  = target_start + @target_size

    antisense_gc_percent = antisense.gc_percent
    next if antisense_gc_percent > @max_gc_percent
    next if antisense_gc_percent < @min_gc_percent
    
    case rule
    when 'uitei'
      next unless uitei?(target)
    when 'reynolds'
      next unless reynolds?(target)
    else
      raise NotImplementedError
    end

    pair = Bio::SiRNA::Pair.new(target, sense, antisense, target_start, target_stop, rule, antisense_gc_percent)
    @pairs.push(pair)
  end
  return @pairs
end
reynolds() click to toggle source

same as design('reynolds').

# File lib/bio/util/sirna.rb, line 100
def reynolds
  design('reynolds')
end
reynolds?(target) click to toggle source

Reynolds' rule.

# File lib/bio/util/sirna.rb, line 88
def reynolds?(target)
  return false if /[GC]{9}/i =~ target
  return false unless /^.{4}A.{6}U.{2}[AUC].{5}[AU].{2}$/i =~ target
  return true
end
uitei() click to toggle source

same as design('uitei').

# File lib/bio/util/sirna.rb, line 95
def uitei
  design('uitei')
end
uitei?(target) click to toggle source

Ui-Tei's rule.

# File lib/bio/util/sirna.rb, line 73
def uitei?(target)
  return false unless /^.{2}[GC]/i =~ target
  return false unless /[AU].{2}$/i =~ target
  return false if     /[GC]{9}/i   =~ target

  one_third  = target.size * 1 / 3
  start_pos  = @target_size - one_third - 1
  remain_seq = target.subseq(start_pos, @target_size - 2)
  au_number  = remain_seq.scan(/[AU]/i).size
  return false if au_number < 5
  
  return true
end