[BioRuby-ja] 混合塩基
遠藤 大二
dendoh @ hotmail.co.jp
2006年 9月 7日 (木) 16:35:19 UTC
後藤さん
ありがとうございました。
>もしかして、アミノ酸配列から、可能な塩基配列をすべて生成するメソッドも
>あったほうがいいのでしょうか?
その通りです。そのようなメソッドが欲しかったのです。
。
> > 混合塩基から正規表現を生成するメソッドはあるようなのですが、正規表現から
複数
> > の塩基配列を生成するメソッドというのはないでしょうか。
> >
> > WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, AATCACGGG, .....]
>
>無さそうなので、まずは仮に作ってみました。
>IUPAC規定の曖昧な塩基を含む塩基配列(文字列)から、可能なすべての文字列を得る
>というメソッドです。なお、塩基変換用テーブルを自前で持つほうが楽だったの
で、
>下記スクリプトではBioRubyは使っていません(単なる文字列処理になります)。
大変ありがとうございます。
早速使わせていただきます。
結果が爆発的になるのに対する対策としては、混合塩基を含む配列を選択する段階
で、結果の場合の数が124通り以下になるような条件づきで選択をしていますので、
提案いただいたメソッドは、私には有効に使わせていただけるものと思います。
>
>たとえば、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
>大阪大学微生物病研究所 遺伝情報実験センター ゲノム情報解析分野(安永研)
_________________________________________________________________
ドコモ900i、901i、902iシリーズユーザーだけにお得な特典!
http://promotion.live.jp/messenger/mobile.htm
BioRuby-ja メーリングリストの案内