zoukankan      html  css  js  c++  java
  • Fastqc 能够识别的碱基编码格式

    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,一定是sange/illumian 1.9格式, 不可能是illumina 1.3 和illumina  1.5 的格式,因为这两种格式中最低的质量值都大于64;

    为什么碱基最低的等于65就是illumina 1.3呢, 因为在illumina 的文件中,质量值P = -l0 * log10(rate)

    rate 表示错误率,然而对于log10这个函数来说,rate 值不可能为0,因为没有10的指数永远不可能为0,肯定是大于0的,所以0对应的64并不会出现,

    最小可能出现的也就是65了,而且illumina 1.5 的最小可能出现的值为66,所以最小值为65说明就是illumina 1.3 格式

    排除了前面两种可能,这时候就只剩下illumina 1.5了,只要其质量值不出处正常范围,即<= 126 就说明是illumina  1.5

    小于33或者大于126都是未知的编码格式

  • 相关阅读:
    常用记录
    golang学习笔记之UDP:server端与client端
    golang学习笔记之tcp简单实现:server端与client端
    golang学习笔记之channel
    golang学习笔记之单元测试和压力测试
    Ubuntu 18.04桌面版安装
    Nas服务器使用xampp修改端口号
    Laravel使用Supervisor管理linux自动队列
    php 设计模式学习笔记之单例模式
    终极二分查找--传说十个人写九个有bug
  • 原文地址:https://www.cnblogs.com/xudongliang/p/5359247.html
Copyright © 2011-2022 走看看