| Class | Bio::SiRNA |
| In: |
lib/bio/util/sirna.rb
|
| Parent: | Object |
Designing siRNA.
This class implements the selection rules described by Kumiko Ui-Tei et al. (2004) and Reynolds et al. (2004).
| 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. |
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
64: def initialize(seq, antisense_size = 21, max_gc_percent = 60.0, min_gc_percent = 40.0)
65: @seq = seq.rna!
66: @pairs = Array.new
67: @antisense_size = antisense_size
68: @max_gc_percent = max_gc_percent
69: @min_gc_percent = min_gc_percent
70: end
rule can be one of ‘uitei’ (default) and ‘reynolds’.
# File lib/bio/util/sirna.rb, line 105
105: def design(rule = 'uitei')
106: @target_size = @antisense_size + 2
107:
108: target_start = 0
109: @seq.window_search(@target_size) do |target|
110: antisense = target.subseq(1, @target_size - 2).complement.rna
111: sense = target.subseq(3, @target_size)
112:
113: target_start += 1
114: target_stop = target_start + @target_size
115:
116: antisense_gc_percent = antisense.gc_percent
117: next if antisense_gc_percent > @max_gc_percent
118: next if antisense_gc_percent < @min_gc_percent
119:
120: case rule
121: when 'uitei'
122: next unless uitei?(target)
123: when 'reynolds'
124: next unless reynolds?(target)
125: else
126: raise NotImplementedError
127: end
128:
129: pair = Bio::SiRNA::Pair.new(target, sense, antisense, target_start, target_stop, rule, antisense_gc_percent)
130: @pairs.push(pair)
131: end
132: return @pairs
133: end
Reynolds’ rule.
# File lib/bio/util/sirna.rb, line 88
88: def reynolds?(target)
89: return false if /[GC]{9}/i =~ target
90: return false unless /^.{4}A.{6}U.{2}[AUC].{5}[AU].{2}$/i =~ target
91: return true
92: end
Ui-Tei‘s rule.
# File lib/bio/util/sirna.rb, line 73
73: def uitei?(target)
74: return false unless /^.{2}[GC]/i =~ target
75: return false unless /[AU].{2}$/i =~ target
76: return false if /[GC]{9}/i =~ target
77:
78: one_third = target.size * 1 / 3
79: start_pos = @target_size - one_third - 1
80: remain_seq = target.subseq(start_pos, @target_size - 2)
81: au_number = remain_seq.scan(/[AU]/i).size
82: return false if au_number < 5
83:
84: return true
85: end