对测序fastq数据,碱基质量值(base quality)的本质是体现测序错误率,在fastq文件中,碱基质量值以字符形式存储在fastq文件中。字符的碱基质量值体系通常是Phred33,即碱基质量值Q = 字符的ASCII码 – 33。而Q和碱基的错误率之间又具有如下对应关系:
Q:碱基质量值;
P:碱基测序错误率;
同理,Read的质量值表示的是Read中碱基平均测序错误率,基于此,Reads的质量值和错误率应具有如下关系,
Qr:Read碱基质量值;
Pr:Reads碱基平均测序错误率;
由此,当需要计算Read的质量值时,其计算步骤如下,
1) 获得Read各碱基的测序错误率Pi
Pi:各碱基错误率;
Qi:各碱基质量值;
i = 1 .. len(Read)
2) 计算Read碱基平均测序错误率
n:read长度;
Pi:各碱基错误率
3) 计算Read质量值
注:
当计算Read质量值时,如果直接用base的质量值(即Q值)求均值,获得的结果是不对的。
以上Reads计算的代码实现如下,
点击查看代码
import os,sys
import numpy as np
def cal_p(qual_str):
Q = ord(qual_str) - 33
p = 10 ** (-Q/10)
reutrn p
qual = '####???'
p_list = np.array([])
for q in qual:
p = cal_p(q)
np.append(p_list,p)
mean_p = p_list.mean()
read_Q = -10np.log10(mean_p)
print('Reads Qual: ')
print(read_Q)