golang 解析fastq格式
FASTQ格式是NGS测序的主流格式,有时候也有压缩后的fastq.gz格式
之前的一篇博客讲到了如何安装GO和biogo这个包,主要用于处理SAM/BAM格式的数据,这一篇讲一下如何处理fastq。
Fastq的每一条测序reads主要由四行构成,第一行是这条reads的ID,每一个reads都有一个唯一的ID,第二行是测序的碱基序列,第三行一般无意义,主要起到占位的作用,第四行是测序的每个碱基对应的质量值。质量值的计算公式来自于
p代表这个碱基被检测的时候,发生错误的概率,概率为0.001的时候,代表Q = 30, 目前的二代测序基本上95%的reads的Q都能达到25.
Illumina 1.8+ 以上的版本的Q值计算方法与Sanger方法基本一致,Sanger的Q范围为0-40. Illumina 1.8的Q范围为0-41
Q在Fastq文件中储存时会以ASCII码表示,ASCII码的对应的数值减33 就等于真实的Q值,如下:
解析fastq的时候只需要根据行数是否能被4整除就可以知道这是ID,或者是Sequence了。
如下:
package main import ( "bufio" "fmt" "log" "os" ) func main() { file, err := os.Open("sample_01.fastq") if err != nil { log.Fatal(err) } defer file.Close() line_num := 0 scanner := bufio.NewScanner(file) for scanner.Scan() { line_num += 1 line := scanner.Text() seqlen := len(line) if line_num %4 == 2 { //fmt.Println(scanner.Text()) subseq := line[seqlen-10:seqlen] fmt.Println(subseq) } else { continue } } if err := scanner.Err(); err != nil { log.Fatal(err) } }
这个go程序能够打印出每个Reads的末尾10个碱基组成的序列(Illumina的测序都是5'端到3‘端,所以也是3’端的10个bases)。
除此之外,还有其它一些分析fastq的工具,参考:
https://www.plob.org/article/1622.html
https://www.plob.org/article/14515.html
https://blog.csdn.net/Cassiel60/article/details/89400551
- 点赞
- 收藏
- 关注作者
评论(0)