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の勉強をすすめたいと思います。勉強成果もぼちぼち書いていこう。うん。