« CentOS 5.2のXVNCサーバーのGLX対応 | メイン | BioRuby版 FASTA + FASTA.QUAL = FASTQ »
2009年08月11日
FASTA + FASTA.QUAL = FASTQ
以下,次世代シークエンサー関連の自分用のメモ
FASTAファイルとFASTA.QUALファイルからFASTQを生成するPerl (BioPerl)スクリプト
http://www.nabble.com/How-to-input-fasta-and-qual-into--Bio::Seq::Quality--td18634349.html を参照したけど,エラーが出るので,修正。BioPerl(というかPerl)についてはシロウトなので,手こずった。 "->"がRubyでいうところのメソッド呼び出しの"."なのね。
使い方は(スクリプトをfastaqual.plとすると)
perl fastaqual.pl hoge.fasta > fuga.fastq
でhoge.fastaとhoge.fasta.qualからfuga.fastqを作ります。 このスクリプトはhoge.fastaとhoge.fasta.qual内のフラグメントの順番が一致していることを前提としていることに注意。
#!/usr/bin/perl -w
use warnings;
use strict;
use Bio::SeqIO;
use Bio::Seq::Quality;
my ($seq_infile,$qual_infile) =(scalar @ARGV == 1)
?($ARGV[0] ,"$ARGV[0].qual")
:@ARGV;
#Create input objects for both a seq (fasta) and qual file
my $in_seq_obj =
Bio::SeqIO->new( -file => $seq_infile,
-format => 'fasta',
);
my $in_qual_obj =
Bio::SeqIO->new( -file => $qual_infile,
-format => 'qual',
);
my $out_fastq_obj =
Bio::SeqIO->new( -format => 'fastq'
);
while (1){
## create objects for both a seq and its associated qual
my $seq_obj = $in_seq_obj->next_seq || last;
my $qual_obj = $in_qual_obj->next_seq;
#use seq and qual object methods feed info for new BSQ object
my $bsq_obj =
Bio::Seq::Quality->new( -seq => $seq_obj->seq(),
-qual => $qual_obj->qual(),
-id => $seq_obj->id(),
);
$out_fastq_obj->write_fastq($bsq_obj);
}
投稿者 hmishima : 2009年08月11日 11:30
トラックバック
このエントリーのトラックバックURL:
http://misshie.sakura.ne.jp/blog/mt-tb.cgi/31