标签:
Fastqc 能够自动识别序列的碱基编码格式,我查看一下源代码,发现是碱基编码格式一共分为
1)sanger/illumina 1.9
2) illumina 1.3
3) illumina 1.5
其核心的代码为
public static PhredEncoding getFastQEncodingOffset(final char lowestChar) { if (lowestChar < ‘!‘) { throw new IllegalArgumentException("No known encodings with chars < 33 (Yours was " + lowestChar + ")"); } if (lowestChar < ‘@‘) { return new PhredEncoding("Sanger / Illumina 1.9", 33); } if (lowestChar == ‘A‘) { return new PhredEncoding("Illumina 1.3", 64); } if (lowestChar <= ‘~‘) { return new PhredEncoding("Illumina 1.5", 64); } throw new IllegalArgumentException("No known encodings with chars > 126 (Yours was " + lowestChar + ")"); }
通过找到对应的ASCII值最小的碱基质量值来判断对应的编码格式,
在ASCII码表中, ! 代表33, @ 代表64,A 代表65,~ 代表 126
在维基百科关于fastq格式的描述中介绍了碱基编码的各种格式
在sange format 中采用 33到126 表示0到93, 所以sange 格式的偏移量为33
从illumina 1.3 开始,使用 64和126 来表示0到62, 所以illumina 1.3 格式的偏移量为64
从illumina 1.5 开始,0和1不在使用,最低的质量值为66,
从illumina 1.9 开始,又采用和sange 一样的编码格式
所以如果碱基质量的最低值如果小于64,则不可能是illumina 1.3 和illumina 1.5 的格式,因为这两种格式中最低的质量值都是64,
为什么碱基最低的等于65就是illumina 1.3 这里没看懂
小于33或者大于126都是未知的编码格式
标签:
原文地址:http://www.cnblogs.com/xudongliang/p/5359247.html