« FASTA + FASTA.QUAL = FASTQ | メイン | UCSCBin is now on RubyGems.org »

2010年01月31日

BioRuby版 FASTA + FASTA.QUAL = FASTQ

まだまだ生きてます。

さて,前エントリーのFASTA + FASTA.QUAL = FASTQはBioPerl版でしたが, BioRuby version 1.4.0で書いてみると以下のようになります。

require 'bio'
ff_fasta = Bio::FlatFile.open(ARGV[0])
ff_qual = Bio::FlatFile.open(ARGV[0]+".qual")

while entry_fasta = ff_fasta.next_entry
  seq = entry_fasta.to_biosequence
  seq.quality_score_type = :phred
  seq.quality_scores = ff_qual.next_entry.data
  puts seq.output(:fastq,
         :title => entry_fasta.definition)
end
# Ruby 1.8のときだけ頭に
# require 'rubygems'  をつけてね

以上の内容は,BioRubyメーリングリスト でBioRubyのコア開発者のひとりの大阪大学の後藤先生から回答いただいたものです。

(メーリングリストを購読している方はわかるかと思いますが)最初,ワタシはBio::FastaFormatや Bio::FastaNumericFormatに大きなマルチエントリーのファイルを食わせるコードを書いて みました。ところが,どうもしっくりこない(あるべきメソッドがないし,遅いし)と思っておりました。 そうしたら,案の定きちんとしたフロントエンドがあったようです。

BioPerlのBio::SeqIOに相当するものがBioRubyのBio::FlatFileになると 理解していいのかなあ(未確認)。Bio::FlatFileをつかえば,各エントリに 外部イテレーターでアクセスできる(Bio::FlatFile#next_entry.data) んですね。美しい。

ああ,細かいBioRubyのFASTQ関係のコードばかり読んで, 全体の構造を全く理解してなかった。反省。

今回の用途には,BioPerlでもBioRubyでもほぼ同じ速度です。ただ,大きな違いがあります。 それはインストールにかかる時間。BioRubyは,BioPerlにくらべコンパクト (逆にBioPerlはありとあらゆることができる…らしい)なので

gem install bio

一発(要管理者権限)でさくっとインストールできます。すばらしい。

というわけで,今後もBioRubyの勉強をすすめたいと思います。勉強成果もぼちぼち書いていこう。うん。

投稿者 hmishima : 2010年01月31日 19:30