From dendoh @ hotmail.co.jp Mon Sep 4 12:09:21 2006 From: dendoh @ hotmail.co.jp (=?iso-2022-jp?B?GyRCMXNGIxsoQiAbJEJCZ0ZzGyhC?=) Date: Tue, 05 Sep 2006 01:09:21 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= Message-ID: 酪農学園大学の遠藤と申します。 オルソローグをHomologeneから入手して、共通のアミノ酸配列からプライマーを設計 するためのスクリプトを作成しています。 共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基を予測するとこ ろまではできましたが、 その混合塩基を含む配列のmRNA上の局在を決定する段階で問題が生じました。 HomologeneではProtein, mRNAともにFASTAフォーマットでのみダウンロードが可能で あるため、ORFの位置を決めることが私にはできません。 それで、 混合塩基を含む配列をキーとして、mRNA配列上での局在位置を検索したいと思いま す。 混合塩基から正規表現を生成するメソッドはあるようなのですが、正規表現から複数 の塩基配列を生成するメソッドというのはないでしょうか。 WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, AATCACGGG, .....] 複数の塩基配列を生成できれば、それらの配列すべてについて、mRNA上での局在を検 索することができるので、プライマーとして働く位置が複数ある可能性も含めて、確 認が可能になります。 なにとぞご教示ください。 _________________________________________________________________ 借りるから購入、リフォームまで住宅の総合サイト MSN 住宅 http://house.msn.co.jp/home.armx From tomoakin @ kenroku.kanazawa-u.ac.jp Tue Sep 5 20:51:53 2006 From: tomoakin @ kenroku.kanazawa-u.ac.jp (Tomoaki NISHIYAMA) Date: Wed, 6 Sep 2006 09:51:53 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= In-Reply-To: References: Message-ID: 遠藤様 > 複数の塩基配列を生成できれば、それらの配列すべてについて、 > mRNA上での局在を検 > 索することができるので、プライマーとして働く位置が複数ある可能 > 性も含めて、確 > 認が可能になります。 ここでいうmRNAというのは塩基配列既知のものということですよ ね? 正規表現で文字列を検索することで場所が分かるはずなので、 そのまま、正規表現で検索すれば良いように思うのですが、 それでは不足でmismatchを許した検索をしたいということでしょ うか? -- Tomoaki NISHIYAMA Advanced Science Research Center, Kanazawa University, 13-1 Takara-machi, Kanazawa, 920-0934, Japan On 2006/09/05, at 1:09, 遠藤 大二 wrote: > 酪農学園大学の遠藤と申します。 > オルソローグをHomologeneから入手して、共通のアミノ酸配列 > からプライマーを設計 > するためのスクリプトを作成しています。 > 共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基 > を予測するとこ > ろまではできましたが、 > その混合塩基を含む配列のmRNA上の局在を決定する段階で問題 > が生じました。 > HomologeneではProtein, mRNAともにFASTAフォーマット > でのみダウンロードが可能で > あるため、ORFの位置を決めることが私にはできません。 > それで、 > 混合塩基を含む配列をキーとして、mRNA配列上での局在位置を > 検索したいと思いま > す。 > 混合塩基から正規表現を生成するメソッドはあるようなのですが、正 > 規表現から複数 > の塩基配列を生成するメソッドというのはないでしょうか。 > > WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, > AATCACGGG, .....] > > 複数の塩基配列を生成できれば、それらの配列すべてについて、 > mRNA上での局在を検 > 索することができるので、プライマーとして働く位置が複数ある可能 > 性も含めて、確 > 認が可能になります。 > > なにとぞご教示ください。 > > _________________________________________________________________ > 借りるから購入、リフォームまで住宅の総合サイト MSN 住宅 > http://house.msn.co.jp/home.armx > From ngoto @ gen-info.osaka-u.ac.jp Thu Sep 7 07:53:19 2006 From: ngoto @ gen-info.osaka-u.ac.jp (GOTO Naohisa) Date: Thu, 7 Sep 2006 20:53:19 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= In-Reply-To: References: Message-ID: <200609071153.k87BrFg0006049@idns103.gen-info.osaka-u.ac.jp> 後藤@阪大です。 On Tue, 05 Sep 2006 01:09:21 +0900 遠藤 大二 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 大阪大学微生物病研究所 遺伝情報実験センター ゲノム情報解析分野(安永研) From dendoh @ hotmail.co.jp Thu Sep 7 12:26:48 2006 From: dendoh @ hotmail.co.jp (=?iso-2022-jp?B?GyRCMXNGIxsoQiAbJEJCZ0ZzGyhC?=) Date: Fri, 08 Sep 2006 01:26:48 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= Message-ID: Nishiyamaさん ありがとうございました。 >>複数の塩基配列すべてについて、 >>mRNA上での局在を検索する。 > >ここでいうmRNAというのは塩基配列既知のものということですよ ね? その通りです。 >正規表現で文字列を検索することで場所が分かるはずなので、 >そのまま、正規表現で検索すれば良いように思うのですが、 実際にやってみると、正規表現で検索すると、かなり時間がかかるばかりでなく、相 手が長大な配列の場合ハングアップしてしまいました。 このことを最初に書くべきでした。すみません。 それに対して単純な完全マッチの場合は、検索スピードが速く、また、MySQLの検索 式 "Where C like '%ACCGC%' などという検索をするとデータが大きくても検索が確実に可能でした。 それで、可能な塩基配列すべてを生成するメソッドが必要になったというわけです。 とはいえ、せっかくのご提案なので、もう一度、正規表現のままでの検索を実施して みます。 では。 >それでは不足でmismatchを許した検索をしたいということでしょ うか? >-- >Tomoaki NISHIYAMA > >Advanced Science Research Center, >Kanazawa University, >13-1 Takara-machi, >Kanazawa, 920-0934, Japan > > >On 2006/09/05, at 1:09, 遠藤 大二 wrote: > >>酪農学園大学の遠藤と申します。 >>オルソローグをHomologeneから入手して、共通のアミノ酸配列 >>からプライマーを設計 >>するためのスクリプトを作成しています。 >>共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基 >>を予測するとこ >>ろまではできましたが、 >>その混合塩基を含む配列のmRNA上の局在を決定する段階で問題 >>が生じました。 >>HomologeneではProtein, mRNAともにFASTAフォーマット >>でのみダウンロードが可能で >>あるため、ORFの位置を決めることが私にはできません。 >>それで、 >>混合塩基を含む配列をキーとして、mRNA配列上での局在位置を >>検索したいと思いま >>す。 >>混合塩基から正規表現を生成するメソッドはあるようなのですが、正 >>規表現から複数 >>の塩基配列を生成するメソッドというのはないでしょうか。 >> >>WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, AATCACGGG, >>.....] >> >>複数の塩基配列を生成できれば、それらの配列すべてについて、 >>mRNA上での局在を検 >>索することができるので、プライマーとして働く位置が複数ある可能 >>性も含めて、確 >>認が可能になります。 >> >>なにとぞご教示ください。 >> >>_________________________________________________________________ >>借りるから購入、リフォームまで住宅の総合サイト MSN 住宅 >>http://house.msn.co.jp/home.armx >> > _________________________________________________________________ 節約のアイディア300例。お金の悩みは、MSN マネーで自己解決 http://plan.money.jp.msn.com/saving/index.html From dendoh @ hotmail.co.jp Thu Sep 7 12:35:19 2006 From: dendoh @ hotmail.co.jp (=?iso-2022-jp?B?GyRCMXNGIxsoQiAbJEJCZ0ZzGyhC?=) Date: Fri, 08 Sep 2006 01:35:19 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= Message-ID: 後藤さん ありがとうございました。 >もしかして、アミノ酸配列から、可能な塩基配列をすべて生成するメソッドも >あったほうがいいのでしょうか? その通りです。そのようなメソッドが欲しかったのです。 。 > > 混合塩基から正規表現を生成するメソッドはあるようなのですが、正規表現から 複数 > > の塩基配列を生成するメソッドというのはないでしょうか。 > > > > 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 From ktym @ hgc.jp Fri Sep 8 00:48:05 2006 From: ktym @ hgc.jp (Toshiaki Katayama) Date: Fri, 8 Sep 2006 13:48:05 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= In-Reply-To: References: Message-ID: <0A323E82-3172-4BB0-B09B-97F36A12A038@hgc.jp> 遠藤様 On 2006/09/08, at 1:26, 遠藤 大二 wrote: > Nishiyamaさん > > ありがとうございました。 > >>> 複数の塩基配列すべてについて、 mRNA上での局在を検索する。 >> >> ここでいうmRNAというのは塩基配列既知のものということですよ ね? > その通りです。 > >> 正規表現で文字列を検索することで場所が分かるはずなので、 >> そのまま、正規表現で検索すれば良いように思うのですが、 > > 実際にやってみると、正規表現で検索すると、かなり時間がかかるばかりでなく、相 > 手が長大な配列の場合ハングアップしてしまいました。 > このことを最初に書くべきでした。すみません。 BioRuby の Bio::Sequence では扱う配列全体をメモリに載せる方法しか 提供していませんので、そういうことも起こるかもしれないですね。 参考までに配列の長さとメモリの量を教えて頂けますか? 正規表現で検索してマッチした位置と部分配列を全部調べるのはあまりキレイに 書けない気がしてきました。 seq.scan(pattern) do |match, offset| ... end みたいなことができればいい(MatchData の配列を返してくれる scan があればいい?) のですが、実際には Ruby の String#scan は位置を返してくれないので、 longseq.scan(pattern) do |hit| p longseq.index(hit) p hit end として index で調べる(無駄だし同じパターンは最初の index しかとれない)とか、 グローバル変数の $~ を使って longseq = Bio::Sequence::NA.new("atgc" * 10000).randomize pattern = Bio::Sequence::NA.new("WATCRYGGG").to_re longseq.scan(pattern) do |hit| p $~.offset(0) p hit end # $~ は Regexp.last_match と同じで、最後にマッチした際の MatchData オブジェクトを # 指していて、offset の先頭位置だけを返す begin メソッドも持っているので #「$~.offset(0)」は「Regexp.last_match.begin(0)」などとしてもいい感じ。 とするといった工夫が必要ですが、scan メソッドは pattern のマッチする場所どうしが オーバーラップしている場合は取りこぼすようです。 たとえば "attattatta".scan("atta") だと2つ目の "atta" の最初の a が1つ目と 重なっているので取らないみたい。
  "attattatta"
   ^^^^ これを取ると
      ^^^^ こっちは重なっているのでスキップされる
         ^^^^ これは重なってないので再び取れる
ということで、マッチ開始位置を自前で管理する i = 0 while hit = longseq[i,longseq.length].match(pattern) i += hit.begin(0) + 1 puts i, hit.to_s end とか、strscan を使って require 'strscan' s = StringScanner.new(longseq) while s.skip_until(pattern) s.pos = s.pos - s.matched_size + 1 puts s.pos, s.matched end とする方法などがありそうです。 以上、後藤さんに IRC で教えて頂きながら試行錯誤したのでメモ代わりに 流しておきます。もっとカッコイイ方法があれば教えてください>all 片山 > それに対して単純な完全マッチの場合は、検索スピードが速く、また、MySQLの検索 > 式 "Where C like '%ACCGC%' > などという検索をするとデータが大きくても検索が確実に可能でした。 > > それで、可能な塩基配列すべてを生成するメソッドが必要になったというわけです。 > > > とはいえ、せっかくのご提案なので、もう一度、正規表現のままでの検索を実施して > みます。 > > では。 > > >> それでは不足でmismatchを許した検索をしたいということでしょ うか? >> -- >> Tomoaki NISHIYAMA >> >> Advanced Science Research Center, >> Kanazawa University, >> 13-1 Takara-machi, >> Kanazawa, 920-0934, Japan >> >> >> On 2006/09/05, at 1:09, 遠藤 大二 wrote: >> >>> 酪農学園大学の遠藤と申します。 >>> オルソローグをHomologeneから入手して、共通のアミノ酸配列 からプライマーを設計 >>> するためのスクリプトを作成しています。 >>> 共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基 を予測するとこ >>> ろまではできましたが、 >>> その混合塩基を含む配列のmRNA上の局在を決定する段階で問題 が生じました。 >>> HomologeneではProtein, mRNAともにFASTAフォーマット でのみダウンロードが可能で >>> あるため、ORFの位置を決めることが私にはできません。 >>> それで、 >>> 混合塩基を含む配列をキーとして、mRNA配列上での局在位置を 検索したいと思いま >>> す。 >>> 混合塩基から正規表現を生成するメソッドはあるようなのですが、正 規表現から複数 >>> の塩基配列を生成するメソッドというのはないでしょうか。 >>> >>> WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, AATCACGGG, .....] >>> >>> 複数の塩基配列を生成できれば、それらの配列すべてについて、 mRNA上での局在を検 >>> 索することができるので、プライマーとして働く位置が複数ある可能 性も含めて、確 >>> 認が可能になります。 >>> >>> なにとぞご教示ください。 >>> >>> _________________________________________________________________ >>> 借りるから購入、リフォームまで住宅の総合サイト MSN 住宅 http://house.msn.co.jp/home.armx >>> >> > > _________________________________________________________________ > 節約のアイディア300例。お金の悩みは、MSN マネーで自己解決 http://plan.money.jp.msn.com/saving/index.html From dendoh @ hotmail.co.jp Fri Sep 8 11:52:14 2006 From: dendoh @ hotmail.co.jp (=?iso-2022-jp?B?GyRCMXNGIxsoQiAbJEJCZ0ZzGyhC?=) Date: Sat, 09 Sep 2006 00:52:14 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?Rlc6IFJlOiAgGyRCOi45ZzF2NHAbKEI=?= Message-ID: 片山様 問題点のご指摘と解決策をありがとうございました。 >>> 混合塩基複数の塩基配列すべてについて、 mRNA上での局在を検索する。問題に ついてのスレッドです > >> >BioRuby の Bio::Sequence では扱う配列全体をメモリに載せる方法しか >提供していませんので、そういうことも起こるかもしれないですね。 >参考までに配列の長さとメモリの量を教えて頂けますか? 混合塩基はmRNA検出用のプライマーとして設計して使用したいと考えていますので、 検索対象は、UnigeneかEnsEmblの特定の動物種のmRNA全部です。 Unigeneの場合、2kbase程度の配列30,000個を順次 MySQL/Rubyで取り込んで処理し ます。 メモリは2GB積んで、SUSE linux でプログラムを実行しています。 取り込んだ塩基配列上での検索のメソッドは現在下記のコードを使っています。 tmp配列に取り込んだ結果をMySQL/RubyでMySQLに検索結果として格納しています。 もっと効率の良い方法を探してみます。 では。 +---------------------------------------- seq="(塩基配列)" tmp=[] pos = 0 nlocal=0 while nlocal do   nlocal=gstr.index("#{seq}",pos+1)   if nlocal then    tmp << [oligo_id,greg_id,nlocal,1]    pos = nlocal   end end +---------------------------------------- > > >正規表現で検索してマッチした位置と部分配列を全部調べるのはあまりキレイに >書けない気がしてきました。 > > seq.scan(pattern) do |match, offset| > ... > end > >みたいなことができればいい(MatchData の配列を返してくれる scan があればい い?) >のですが、実際には Ruby の String#scan は位置を返してくれないので、 > > longseq.scan(pattern) do |hit| > p longseq.index(hit) > p hit > end > >として index で調べる(無駄だし同じパターンは最初の index しかとれない)と か、 >グローバル変数の $~ を使って > > longseq = Bio::Sequence::NA.new("atgc" * 10000).randomize > pattern = Bio::Sequence::NA.new("WATCRYGGG").to_re > > longseq.scan(pattern) do |hit| > p $~.offset(0) > p hit > end > ># $~ は Regexp.last_match と同じで、最後にマッチした際の MatchData オブジェ クトを ># 指していて、offset の先頭位置だけを返す begin メソッドも持っているので >#「$~.offset(0)」は「Regexp.last_match.begin(0)」などとしてもいい感じ。 > >とするといった工夫が必要ですが、scan メソッドは pattern のマッチする場所ど うしが >オーバーラップしている場合は取りこぼすようです。 > >たとえば "attattatta".scan("atta") だと2つ目の "atta" の最初の a が1つ目 と >重なっているので取らないみたい。 > >
>   "attattatta"
>    ^^^^ これを取ると
>       ^^^^ こっちは重なっているのでスキップされる
>          ^^^^ これは重なってないので再び取れる
>
> >ということで、マッチ開始位置を自前で管理する > > i = 0 > while hit = longseq[i,longseq.length].match(pattern) > i += hit.begin(0) + 1 > puts i, hit.to_s > end > >とか、strscan を使って > > require 'strscan' > > s = StringScanner.new(longseq) > > while s.skip_until(pattern) > s.pos = s.pos - s.matched_size + 1 > puts s.pos, s.matched > end > >とする方法などがありそうです。 > >以上、後藤さんに IRC で教えて頂きながら試行錯誤したのでメモ代わりに >流しておきます。もっとカッコイイ方法があれば教えてください>all > >片山 _________________________________________________________________ 節約のアイディア300例。お金の悩みは、MSN マネーで自己解決 http://plan.money.jp.msn.com/saving/index.html From dendoh @ hotmail.co.jp Mon Sep 4 16:09:21 2006 From: dendoh @ hotmail.co.jp (=?iso-2022-jp?B?GyRCMXNGIxsoQiAbJEJCZ0ZzGyhC?=) Date: Tue, 05 Sep 2006 01:09:21 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= Message-ID: 酪農学園大学の遠藤と申します。 オルソローグをHomologeneから入手して、共通のアミノ酸配列からプライマーを設計 するためのスクリプトを作成しています。 共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基を予測するとこ ろまではできましたが、 その混合塩基を含む配列のmRNA上の局在を決定する段階で問題が生じました。 HomologeneではProtein, mRNAともにFASTAフォーマットでのみダウンロードが可能で あるため、ORFの位置を決めることが私にはできません。 それで、 混合塩基を含む配列をキーとして、mRNA配列上での局在位置を検索したいと思いま す。 混合塩基から正規表現を生成するメソッドはあるようなのですが、正規表現から複数 の塩基配列を生成するメソッドというのはないでしょうか。 WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, AATCACGGG, .....] 複数の塩基配列を生成できれば、それらの配列すべてについて、mRNA上での局在を検 索することができるので、プライマーとして働く位置が複数ある可能性も含めて、確 認が可能になります。 なにとぞご教示ください。 _________________________________________________________________ 借りるから購入、リフォームまで住宅の総合サイト MSN 住宅 http://house.msn.co.jp/home.armx From tomoakin @ kenroku.kanazawa-u.ac.jp Wed Sep 6 00:51:53 2006 From: tomoakin @ kenroku.kanazawa-u.ac.jp (Tomoaki NISHIYAMA) Date: Wed, 6 Sep 2006 09:51:53 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= In-Reply-To: References: Message-ID: 遠藤様 > 複数の塩基配列を生成できれば、それらの配列すべてについて、 > mRNA上での局在を検 > 索することができるので、プライマーとして働く位置が複数ある可能 > 性も含めて、確 > 認が可能になります。 ここでいうmRNAというのは塩基配列既知のものということですよ ね? 正規表現で文字列を検索することで場所が分かるはずなので、 そのまま、正規表現で検索すれば良いように思うのですが、 それでは不足でmismatchを許した検索をしたいということでしょ うか? -- Tomoaki NISHIYAMA Advanced Science Research Center, Kanazawa University, 13-1 Takara-machi, Kanazawa, 920-0934, Japan On 2006/09/05, at 1:09, 遠藤 大二 wrote: > 酪農学園大学の遠藤と申します。 > オルソローグをHomologeneから入手して、共通のアミノ酸配列 > からプライマーを設計 > するためのスクリプトを作成しています。 > 共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基 > を予測するとこ > ろまではできましたが、 > その混合塩基を含む配列のmRNA上の局在を決定する段階で問題 > が生じました。 > HomologeneではProtein, mRNAともにFASTAフォーマット > でのみダウンロードが可能で > あるため、ORFの位置を決めることが私にはできません。 > それで、 > 混合塩基を含む配列をキーとして、mRNA配列上での局在位置を > 検索したいと思いま > す。 > 混合塩基から正規表現を生成するメソッドはあるようなのですが、正 > 規表現から複数 > の塩基配列を生成するメソッドというのはないでしょうか。 > > WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, > AATCACGGG, .....] > > 複数の塩基配列を生成できれば、それらの配列すべてについて、 > mRNA上での局在を検 > 索することができるので、プライマーとして働く位置が複数ある可能 > 性も含めて、確 > 認が可能になります。 > > なにとぞご教示ください。 > > _________________________________________________________________ > 借りるから購入、リフォームまで住宅の総合サイト MSN 住宅 > http://house.msn.co.jp/home.armx > From ngoto @ gen-info.osaka-u.ac.jp Thu Sep 7 11:53:19 2006 From: ngoto @ gen-info.osaka-u.ac.jp (GOTO Naohisa) Date: Thu, 7 Sep 2006 20:53:19 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= In-Reply-To: References: Message-ID: <200609071153.k87BrFg0006049@idns103.gen-info.osaka-u.ac.jp> 後藤@阪大です。 On Tue, 05 Sep 2006 01:09:21 +0900 遠藤 大二 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 大阪大学微生物病研究所 遺伝情報実験センター ゲノム情報解析分野(安永研) From dendoh @ hotmail.co.jp Thu Sep 7 16:26:48 2006 From: dendoh @ hotmail.co.jp (=?iso-2022-jp?B?GyRCMXNGIxsoQiAbJEJCZ0ZzGyhC?=) Date: Fri, 08 Sep 2006 01:26:48 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= Message-ID: Nishiyamaさん ありがとうございました。 >>複数の塩基配列すべてについて、 >>mRNA上での局在を検索する。 > >ここでいうmRNAというのは塩基配列既知のものということですよ ね? その通りです。 >正規表現で文字列を検索することで場所が分かるはずなので、 >そのまま、正規表現で検索すれば良いように思うのですが、 実際にやってみると、正規表現で検索すると、かなり時間がかかるばかりでなく、相 手が長大な配列の場合ハングアップしてしまいました。 このことを最初に書くべきでした。すみません。 それに対して単純な完全マッチの場合は、検索スピードが速く、また、MySQLの検索 式 "Where C like '%ACCGC%' などという検索をするとデータが大きくても検索が確実に可能でした。 それで、可能な塩基配列すべてを生成するメソッドが必要になったというわけです。 とはいえ、せっかくのご提案なので、もう一度、正規表現のままでの検索を実施して みます。 では。 >それでは不足でmismatchを許した検索をしたいということでしょ うか? >-- >Tomoaki NISHIYAMA > >Advanced Science Research Center, >Kanazawa University, >13-1 Takara-machi, >Kanazawa, 920-0934, Japan > > >On 2006/09/05, at 1:09, 遠藤 大二 wrote: > >>酪農学園大学の遠藤と申します。 >>オルソローグをHomologeneから入手して、共通のアミノ酸配列 >>からプライマーを設計 >>するためのスクリプトを作成しています。 >>共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基 >>を予測するとこ >>ろまではできましたが、 >>その混合塩基を含む配列のmRNA上の局在を決定する段階で問題 >>が生じました。 >>HomologeneではProtein, mRNAともにFASTAフォーマット >>でのみダウンロードが可能で >>あるため、ORFの位置を決めることが私にはできません。 >>それで、 >>混合塩基を含む配列をキーとして、mRNA配列上での局在位置を >>検索したいと思いま >>す。 >>混合塩基から正規表現を生成するメソッドはあるようなのですが、正 >>規表現から複数 >>の塩基配列を生成するメソッドというのはないでしょうか。 >> >>WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, AATCACGGG, >>.....] >> >>複数の塩基配列を生成できれば、それらの配列すべてについて、 >>mRNA上での局在を検 >>索することができるので、プライマーとして働く位置が複数ある可能 >>性も含めて、確 >>認が可能になります。 >> >>なにとぞご教示ください。 >> >>_________________________________________________________________ >>借りるから購入、リフォームまで住宅の総合サイト MSN 住宅 >>http://house.msn.co.jp/home.armx >> > _________________________________________________________________ 節約のアイディア300例。お金の悩みは、MSN マネーで自己解決 http://plan.money.jp.msn.com/saving/index.html From dendoh @ hotmail.co.jp Thu Sep 7 16:35:19 2006 From: dendoh @ hotmail.co.jp (=?iso-2022-jp?B?GyRCMXNGIxsoQiAbJEJCZ0ZzGyhC?=) Date: Fri, 08 Sep 2006 01:35:19 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= Message-ID: 後藤さん ありがとうございました。 >もしかして、アミノ酸配列から、可能な塩基配列をすべて生成するメソッドも >あったほうがいいのでしょうか? その通りです。そのようなメソッドが欲しかったのです。 。 > > 混合塩基から正規表現を生成するメソッドはあるようなのですが、正規表現から 複数 > > の塩基配列を生成するメソッドというのはないでしょうか。 > > > > 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 From ktym @ hgc.jp Fri Sep 8 04:48:05 2006 From: ktym @ hgc.jp (Toshiaki Katayama) Date: Fri, 8 Sep 2006 13:48:05 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?GyRCOi45ZzF2NHAbKEI=?= In-Reply-To: References: Message-ID: <0A323E82-3172-4BB0-B09B-97F36A12A038@hgc.jp> 遠藤様 On 2006/09/08, at 1:26, 遠藤 大二 wrote: > Nishiyamaさん > > ありがとうございました。 > >>> 複数の塩基配列すべてについて、 mRNA上での局在を検索する。 >> >> ここでいうmRNAというのは塩基配列既知のものということですよ ね? > その通りです。 > >> 正規表現で文字列を検索することで場所が分かるはずなので、 >> そのまま、正規表現で検索すれば良いように思うのですが、 > > 実際にやってみると、正規表現で検索すると、かなり時間がかかるばかりでなく、相 > 手が長大な配列の場合ハングアップしてしまいました。 > このことを最初に書くべきでした。すみません。 BioRuby の Bio::Sequence では扱う配列全体をメモリに載せる方法しか 提供していませんので、そういうことも起こるかもしれないですね。 参考までに配列の長さとメモリの量を教えて頂けますか? 正規表現で検索してマッチした位置と部分配列を全部調べるのはあまりキレイに 書けない気がしてきました。 seq.scan(pattern) do |match, offset| ... end みたいなことができればいい(MatchData の配列を返してくれる scan があればいい?) のですが、実際には Ruby の String#scan は位置を返してくれないので、 longseq.scan(pattern) do |hit| p longseq.index(hit) p hit end として index で調べる(無駄だし同じパターンは最初の index しかとれない)とか、 グローバル変数の $~ を使って longseq = Bio::Sequence::NA.new("atgc" * 10000).randomize pattern = Bio::Sequence::NA.new("WATCRYGGG").to_re longseq.scan(pattern) do |hit| p $~.offset(0) p hit end # $~ は Regexp.last_match と同じで、最後にマッチした際の MatchData オブジェクトを # 指していて、offset の先頭位置だけを返す begin メソッドも持っているので #「$~.offset(0)」は「Regexp.last_match.begin(0)」などとしてもいい感じ。 とするといった工夫が必要ですが、scan メソッドは pattern のマッチする場所どうしが オーバーラップしている場合は取りこぼすようです。 たとえば "attattatta".scan("atta") だと2つ目の "atta" の最初の a が1つ目と 重なっているので取らないみたい。
  "attattatta"
   ^^^^ これを取ると
      ^^^^ こっちは重なっているのでスキップされる
         ^^^^ これは重なってないので再び取れる
ということで、マッチ開始位置を自前で管理する i = 0 while hit = longseq[i,longseq.length].match(pattern) i += hit.begin(0) + 1 puts i, hit.to_s end とか、strscan を使って require 'strscan' s = StringScanner.new(longseq) while s.skip_until(pattern) s.pos = s.pos - s.matched_size + 1 puts s.pos, s.matched end とする方法などがありそうです。 以上、後藤さんに IRC で教えて頂きながら試行錯誤したのでメモ代わりに 流しておきます。もっとカッコイイ方法があれば教えてください>all 片山 > それに対して単純な完全マッチの場合は、検索スピードが速く、また、MySQLの検索 > 式 "Where C like '%ACCGC%' > などという検索をするとデータが大きくても検索が確実に可能でした。 > > それで、可能な塩基配列すべてを生成するメソッドが必要になったというわけです。 > > > とはいえ、せっかくのご提案なので、もう一度、正規表現のままでの検索を実施して > みます。 > > では。 > > >> それでは不足でmismatchを許した検索をしたいということでしょ うか? >> -- >> Tomoaki NISHIYAMA >> >> Advanced Science Research Center, >> Kanazawa University, >> 13-1 Takara-machi, >> Kanazawa, 920-0934, Japan >> >> >> On 2006/09/05, at 1:09, 遠藤 大二 wrote: >> >>> 酪農学園大学の遠藤と申します。 >>> オルソローグをHomologeneから入手して、共通のアミノ酸配列 からプライマーを設計 >>> するためのスクリプトを作成しています。 >>> 共通のアミノ酸配列を選択して、コドンテーブルに基づいて混合塩基 を予測するとこ >>> ろまではできましたが、 >>> その混合塩基を含む配列のmRNA上の局在を決定する段階で問題 が生じました。 >>> HomologeneではProtein, mRNAともにFASTAフォーマット でのみダウンロードが可能で >>> あるため、ORFの位置を決めることが私にはできません。 >>> それで、 >>> 混合塩基を含む配列をキーとして、mRNA配列上での局在位置を 検索したいと思いま >>> す。 >>> 混合塩基から正規表現を生成するメソッドはあるようなのですが、正 規表現から複数 >>> の塩基配列を生成するメソッドというのはないでしょうか。 >>> >>> WATCRYGGG → [A,T]ATC[A,G][T,C]GGG → [AATCATGGG, AATCACGGG, .....] >>> >>> 複数の塩基配列を生成できれば、それらの配列すべてについて、 mRNA上での局在を検 >>> 索することができるので、プライマーとして働く位置が複数ある可能 性も含めて、確 >>> 認が可能になります。 >>> >>> なにとぞご教示ください。 >>> >>> _________________________________________________________________ >>> 借りるから購入、リフォームまで住宅の総合サイト MSN 住宅 http://house.msn.co.jp/home.armx >>> >> > > _________________________________________________________________ > 節約のアイディア300例。お金の悩みは、MSN マネーで自己解決 http://plan.money.jp.msn.com/saving/index.html From dendoh @ hotmail.co.jp Fri Sep 8 15:52:14 2006 From: dendoh @ hotmail.co.jp (=?iso-2022-jp?B?GyRCMXNGIxsoQiAbJEJCZ0ZzGyhC?=) Date: Sat, 09 Sep 2006 00:52:14 +0900 Subject: [BioRuby-ja] =?iso-2022-jp?b?Rlc6IFJlOiAgGyRCOi45ZzF2NHAbKEI=?= Message-ID: 片山様 問題点のご指摘と解決策をありがとうございました。 >>> 混合塩基複数の塩基配列すべてについて、 mRNA上での局在を検索する。問題に ついてのスレッドです > >> >BioRuby の Bio::Sequence では扱う配列全体をメモリに載せる方法しか >提供していませんので、そういうことも起こるかもしれないですね。 >参考までに配列の長さとメモリの量を教えて頂けますか? 混合塩基はmRNA検出用のプライマーとして設計して使用したいと考えていますので、 検索対象は、UnigeneかEnsEmblの特定の動物種のmRNA全部です。 Unigeneの場合、2kbase程度の配列30,000個を順次 MySQL/Rubyで取り込んで処理し ます。 メモリは2GB積んで、SUSE linux でプログラムを実行しています。 取り込んだ塩基配列上での検索のメソッドは現在下記のコードを使っています。 tmp配列に取り込んだ結果をMySQL/RubyでMySQLに検索結果として格納しています。 もっと効率の良い方法を探してみます。 では。 +---------------------------------------- seq="(塩基配列)" tmp=[] pos = 0 nlocal=0 while nlocal do   nlocal=gstr.index("#{seq}",pos+1)   if nlocal then    tmp << [oligo_id,greg_id,nlocal,1]    pos = nlocal   end end +---------------------------------------- > > >正規表現で検索してマッチした位置と部分配列を全部調べるのはあまりキレイに >書けない気がしてきました。 > > seq.scan(pattern) do |match, offset| > ... > end > >みたいなことができればいい(MatchData の配列を返してくれる scan があればい い?) >のですが、実際には Ruby の String#scan は位置を返してくれないので、 > > longseq.scan(pattern) do |hit| > p longseq.index(hit) > p hit > end > >として index で調べる(無駄だし同じパターンは最初の index しかとれない)と か、 >グローバル変数の $~ を使って > > longseq = Bio::Sequence::NA.new("atgc" * 10000).randomize > pattern = Bio::Sequence::NA.new("WATCRYGGG").to_re > > longseq.scan(pattern) do |hit| > p $~.offset(0) > p hit > end > ># $~ は Regexp.last_match と同じで、最後にマッチした際の MatchData オブジェ クトを ># 指していて、offset の先頭位置だけを返す begin メソッドも持っているので >#「$~.offset(0)」は「Regexp.last_match.begin(0)」などとしてもいい感じ。 > >とするといった工夫が必要ですが、scan メソッドは pattern のマッチする場所ど うしが >オーバーラップしている場合は取りこぼすようです。 > >たとえば "attattatta".scan("atta") だと2つ目の "atta" の最初の a が1つ目 と >重なっているので取らないみたい。 > >
>   "attattatta"
>    ^^^^ これを取ると
>       ^^^^ こっちは重なっているのでスキップされる
>          ^^^^ これは重なってないので再び取れる
>
> >ということで、マッチ開始位置を自前で管理する > > i = 0 > while hit = longseq[i,longseq.length].match(pattern) > i += hit.begin(0) + 1 > puts i, hit.to_s > end > >とか、strscan を使って > > require 'strscan' > > s = StringScanner.new(longseq) > > while s.skip_until(pattern) > s.pos = s.pos - s.matched_size + 1 > puts s.pos, s.matched > end > >とする方法などがありそうです。 > >以上、後藤さんに IRC で教えて頂きながら試行錯誤したのでメモ代わりに >流しておきます。もっとカッコイイ方法があれば教えてください>all > >片山 _________________________________________________________________ 節約のアイディア300例。お金の悩みは、MSN マネーで自己解決 http://plan.money.jp.msn.com/saving/index.html