[BioRuby-ja] 混合塩基
GOTO Naohisa
ngoto @ gen-info.osaka-u.ac.jp
2006年 9月 7日 (木) 11:53:19 UTC
後藤@阪大です。
On Tue, 05 Sep 2006 01:09:21 +0900
遠藤 大二 <dendoh @ hotmail.co.jp> wrote:
> 酪農学園大学の遠藤と申します。
> オルソローグをHomologeneから入手して、共通のアミノ酸配列からプライマーを設計
> するためのスクリプトを作成しています。
> 共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基を予測するとこ
> ろまではできましたが、
もしかして、アミノ酸配列から、可能な塩基配列をすべて生成するメソッドも
あったほうがいいのでしょうか?
> その混合塩基を含む配列のmRNA上の局在を決定する段階で問題が生じました。
> HomologeneではProtein, mRNAともにFASTAフォーマットでのみダウンロードが可能で
> あるため、ORFの位置を決めることが私にはできません。
> それで、
> 混合塩基を含む配列をキーとして、mRNA配列上での局在位置を検索したいと思いま
> す。
> 混合塩基から正規表現を生成するメソッドはあるようなのですが、正規表現から複数
> の塩基配列を生成するメソッドというのはないでしょうか。
>
> WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, AATCACGGG, .....]
無さそうなので、まずは仮に作ってみました。
IUPAC規定の曖昧な塩基を含む塩基配列(文字列)から、可能なすべての文字列を得る
というメソッドです。なお、塩基変換用テーブルを自前で持つほうが楽だったので、
下記スクリプトではBioRubyは使っていません(単なる文字列処理になります)。
たとえば、get_all_possible_seq("watcryggg") とすれば、
[ "aatcacggg", "aatcatggg", "aatcgcggg", "aatcgtggg",
"tatcacggg", "tatcatggg", "tatcgcggg", "tatcgtggg" ]
という結果を返します。
なお、当然ですが、混合塩基を多く含む塩基配列に対しては、結果の数が爆発的に増え、
処理時間も長くかかる点には要注意です。
#-----------------------------------------------------------
def get_all_possible_seq(str)
hash = {
'm' => %w( a c ),
'r' => %w( a g ),
'w' => %w( a t ),
's' => %w( c g ),
'y' => %w( c t ),
'k' => %w( g t ),
'v' => %w( a c g ),
'h' => %w( a c t ),
'd' => %w( a g t ),
'b' => %w( c g t ),
'n' => %w( a c g t )
}
str = str.downcase.gsub(/u/, 't')
all = [ str ]
(0...(str.length)).each do |i|
nucs = hash[str[i, 1]]
if nucs and nucs.size > 1 then
all.collect! do |s|
nucs.collect do |n|
newstr = s.dup
newstr[i, 1] = n
newstr
end
end
all.flatten!
end
end
all
end
#-----------------------------------------------------------
あまりチェックしていないので、バグがあったらごめんなさい。
--
後藤 直久 ngoto @ gen-info.osaka-u.ac.jp
大阪大学微生物病研究所 遺伝情報実験センター ゲノム情報解析分野(安永研)
BioRuby-ja メーリングリストの案内