Re: [BioRuby-ja] マルチファスタの取り扱いで質問2点

Toshiaki Katayama ktym @ hgc.jp
2005年 4月 26日 (火) 20:09:52 EDT


重信様

fastacmd はインデックス持ってるので速いですよね。
bio/io/fastacmd.rb あたりに取り込ませて頂いてもよろしいでしょうか?
ネームスペースは Bio::BlastDB or Bio::BLASTDB or Bio::BLAST::DB
or Bio::BLAST::Fastacmd あたりかなぁ、、

あと HMMER についてくる sfetch も便利だと思います。

片山


On 2005/04/27, at 2:38, Shuji SHIGENOBU wrote:

> こんにちは,基生研の重信です.
>
> 話の流れからそれてしまいますが,私は,multi-FASTAからの配列の取得には
> NCBI BLASTに付属のfastacmdを自作のRubyラッパーを介して使っています.ご存
> じかもしれませんがfastacmd自体の使い方はこんな感じです.
>
> $ fastacmd -d nr -s P25724 #ひとつのシークエンスをとってくるとき
> $ fastacmd -d nr -s P25724,AAB59189,AAA28715" #複数のシークエンスをとっ
> てくるとき.
>
> formatdbでデータベースをフォーマットする際に -o オプションをつける必要が
> あります.NCBIがFTPで提供しているntやnrなどのblastdbはそのまま使えます.
>
> もちろんこれをRuby scriptの中で使いたいので,Rubyでwrapperを作りました.
> 以下に主要部分を書いておきます.(変なところがあったら皆さんつっこんで下
> さい).
>
> eachメソッドで全entryを走査できますし,Enumerableをincludeしているので,
> collectやselectなどのメソッドもつかえます.ベンチマークをとったことはあ
> りませんので他の方法と比べて速いかどうかはわかりませんけれども.ご参考に
> なれば.
>
>
> # blastdb.rb
> # -- Ruby Wrapper for NCBI fastacmd
> #
> # author: Shuji SHIGENOBU <shige @ nibb.ac.jp>
>
> require 'bio/db/fasta'
> require 'bio/io/flatfile'
> require 'open3'
>
> module Bio
>
> class BlastDB
>
> include Enumerable
>
> FASTACMD = 'fastacmd'
>
> def initialize(db)
> @database = db
> end
>
> def get_by_id(id)
> cmd = "#{FASTACMD} -d #{@database} -s #{id}"
> begin
> inn, out, err = Open3.popen3(cmd)
> result = out.read
> err_msg = err.read
> fas = Bio::FastaFormat.new(result)
> return fas
> rescue
> raise "[Error] command execution failed : #{cmd}\n#{err_msg}"
> ensure
> inn.close; out.close; err.close
> end
> end
>
> def get_by_ids(ids) # ids: Array object
> cmd = "#{FASTACMD} -d #{@database} -s #{ids.join(',')}"
> begin
> inn, out, err = Open3.popen3(cmd)
> err_msg = err.read
> fas_set = Bio::FlatFile.new(Bio::FastaFormat, out).to_a
> return fas_set
> rescue
> raise "[Error] command execution failed : #{cmd}\n#{err_msg}"
> ensure
> inn.close; out.close; err.close
> end
> end
>
> def each_entry
> cmd = "#{FASTACMD} -d #{@database} -D T"
> io = IO.popen(cmd)
> f = Bio::FlatFile.new(Bio::FastaFormat, io)
> f.each_entry do |e|
> yield e
> end
> io.close
> end
>
> alias :each :each_entry
>
> end
>
> end
>
> if __FILE__ == $0
> #test code
>
> bdb = Bio::BlastDB.new("/db/myblastdb")
>
> # Retrieve one sequence
> puts bdb.get_by_id("P25724")
>
> # Retrieve one more sequences
> bdb.get_by_ids(["P25724", "AAB59189", "AAA28715"]).each do |fas|
> puts fas
> end
>
> # Iterate all sequences
> bdb.each do |fas|
> p [fas.definition[0..30], fas.seq.size]
> end
>
> end
>
>
> -- 
> ---
> Shuji SHIGENOBU, Ph.D.
> shige @ nibb.ac.jp
>
> National Institutes of Natural Sciences
> Okazaki Institute for Integrative Bioscience
> National Institute for Basic Biology
>
> Higashiyama, Myodaiji, Okazaki 444-8787
> Japan
>
> Phone: +81-564-59-5876
> Fax:   +81-564-59-5879
>



BioRuby-ja メーリングリストの案内