今天用fastx_tookit 时遇到问题, 我的fastq 文件的碱基质量值格式为phred33, 而fastq_tookit 默认碱基质量值的格式为phred64,
所以报错了,提示我的fastq文件中包含非法的碱基质量值,逗号
逗号的在ascii 码表中对应的十进制数字为44, 按照phred 33 格式,其对应的碱基质量值为11,如果按照phred64处理的化, 其质量值为-20,此时就会报错,
所以需要将碱基质量给位phred64 格式的,我没找到现有工具, 只能自己写了,虽然很慢, 但是能解决问题。代码如下:
1 #!/usr/bin/perl 2 use warnings; 3 use strict; 4 5 =pod 6 将phred33 转换为phred64 7 =cut 8 9 my ($fastq) = @ARGV; 10 my $raw_quality = 33; 11 my $new_quality = 64; 12 open FASTQ, $fastq or die "Can't open $fastq "; 13 while (my $id = <FASTQ>) { 14 my $seq = <FASTQ>; 15 my $des = <FASTQ>; 16 my $quality = <FASTQ>; 17 18 chomp($id); 19 chomp($seq); 20 chomp($des); 21 chomp($quality); 22 23 my @fmt_quality = map {chr(ord($_) - $raw_quality + $new_quality)} split //, $quality; 24 $quality = join "", @fmt_quality; 25 print qq{$id $seq $des $qualityn}; 26 } 27 close $fastq;
将格式转换后,再运行fastx_tookit 中的fastx_quality_stats 就不会报错了