技术笔记:samtools统计重测序数据深度depth、depth

简介: 技术笔记:samtools统计重测序数据深度depth、depth

测试数据链接:


链接:


提取码:nklh


--来自百度网盘超级会员V6的分享


背景知识:


将质控后的fastq文件比对到参考基因组之后,有可能会有部分染色体根本比对不上。 比如参考基因组中一共有10条染色体,结果fastq的reads仅比对到8条染色体,那么就是说有两条染色体压根就没有比对上。


用一个实际的测试数据来看一下:


这里准备了两个文件:一个参考基因组fasta文件,和一个按照一般流程将fastq的reads数据比对到参考基因组后生成的排序后的bam文件,利用这两个文件可以查看参考基因组一共有多少条染色体, fastq数据一共比对上多少条染色体。


统计参考基因组的染色体数目:


(base) 【b20223040323@admin1 test】$ ls


GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ grep "^>" GCF_000005845.2_ASM584v2_genomic.fna ## 统计参考基因组的染色体数目





可见该参考基因组一共有三条染色体。


利用bam文件统计一共比对上多少条染色体:


(base) 【b20223040323@admin1 test】$ ls


GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ samtools view SRR1770413.sorted.bam | cut -f 3 | uniq ## 利用bam文件统计一共比对上多少条染色体


chr1


chr2



可见一共比对上的染色体数有两条,也就是说chr3并没有比对上。


比较samtools计算测序深度时:depth、depth -a、depth -aa的区别。


001、首先先统计一下参考基因组中每一条染色体的长度,可以使用samtools软件实现:


(base) 【b20223040323@admin1 test】$ ls


GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ samtools faidx GCF_000005845.2_ASM584v2_genomic.fna ### 统计每一条染色体的长度


(base) 【b20223040323@admin1 test】$ ls


GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


GCF_000005845.2_ASM584v2_genomic.fna.fai


(base) 【b20223040323@admin1 test】$ cat GCF_000005845.2_ASM584v2_genomic.fna.fai ## 查看,第二列是每一条染色体的长度


chr1 4641652 6 80 81


chr2 39862 4699685 80 81


chr3 398 4740052 80 81


可见chr1的长度为:4641652。。。。。


002、利用samtools的depth、depth -a、depth -aa分别对同一个bam文件进行测序深度统计


(base) 【b20223040323@admin1 test】$ ls


GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


GCF_000005845.2_ASM584v2_genomic.fna.fai


(base) 【b20223040323@admin1 test】$ samtools depth SRR1770413.sorted.bam > depth01.txt ## depth


(base) 【b20223040323@admin1 test】$ samtools depth -a SRR1770413.sorted.bam > depth02.txt ## depth -a


(base) 【b20223040323@admin1 test】$ samtools depth -aa SRR1770413.sorted.bam > depth03.txt ## depth -aa


(base) 【b20223040323@admin1 test】$ ls


depth01.txt depth03.txt GCF_000005845.2_ASM584v2_genomic.fna.fai


depth02.txt GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ wc -l depth0 ## 统计生成的depth文件的行数,可见三个文件行数不一致


4652444 depth01.txt


4681514 depth02.txt


4681912 depth03.txt


14015870 总用量


003、samtools的depth参数统计的是比对到参考基因组的染色体上所有位点测序深度大于0的所有测序深度数据,用一下脚本简单验证:


(base) 【b20223040323@admin1 test】$ ls


depth01.txt depth03.txt GCF_000005845.2_ASM584v2_genomic.fna.fai


depth02.txt GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ head -n 5 depth01.txt ## depth01.txt文件记录的是位点的测序深度,每行一个位点


chr1 1 12


chr1 2 13


chr1 3 14


chr1 4 15


chr1 5 15


(base) 【b20223040323@admin1 test】$ awk '{print $3}' depth01.txt | sort -n | head -n 3 ## 对第三列深度信息进行排序,可见最小深度为1


1


1


1


(base) 【b20223040323@admin1 test】$ awk '{print $3}' depth01.txt | sort -n | tail -n 3 ## 输出最大测序深度


509


510


510


可见 samtools depth参数输出测序深度的结果最小的测序深度为1.


004、samtools depth -a参数输出的结果为fastq比对到参考基因组的染色体上的所有位点的测序深度,即在depth参数输出结果的基础上,也输出测序深度为0的位点。可用如下脚本进行验证:


a、如果输出fastq数据比对到参考基因组的染色体上所有位点的测序深度, 那么depth02.txt的行数应该等于比对到染色体长度的总和,即chr1和chr2的总长度。


(base) 【b20223040323@admin1 test】$ ls


depth01.txt depth03.txt GCF_000005845.2_ASM584v2_genomic.fna.fai


depth02.txt GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ wc -l depth02.txt


4681514 depth02.txt


(base) 【b20223040323@admin1 test】$ cat GCF_000005845.2_ASM584v2_genomic.fna.fai


chr1 4641652 6 80 81


chr2 39862 4699685 80 81


chr3 398 4740052 80 81


(base) 【b20223040323@admin1 test】$ awk 'NR <= 2 {sum += $2} END { print sum }' GCF_000005845.2_ASM584v2_genomic.fna.fai ##统计比对到的染色体的总长度


4681514


可以看到depth02.txt的行数等于比对到的染色体的总长度。


b、如果depth -a参数是在depth的基础上增加输出了测序深度为0的位点,那么depth02.txt 和 depth01.txt相比,相同的部分和depth01.txt完全一致, 不同的位点的测序深度都为0.


(base) 【b20223040323@admin1 test】$ ls


depth01.txt depth03.txt GCF_000005845.2_ASM584v2_genomic.fna.fai


depth02.txt GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ sort depth01.txt | md5sum ## depth01.txt排序,并计算MD5


53c631aeb9024f330280bb3762310189 -


(base) 【b20223040323@admin1 test】$ cat depth01.txt depth02.txt | sort | uniq -d | md5sum ## 去depth01.txt和depth02.txt的交集并计算MD5


53c631aeb9024f330280bb3762310189 -


(base) 【b20223040323@admin1 test】$ cat depth01.txt depth01.txt depth02.txt | sort | uniq -u | awk '{print $3}' | uniq -c ## 查看depth02.txt中多处的行,并查看测序深度


29070 0


可以看到depth01.txt和depth02.txt中的重合部分和depth01.txt完全一致,同时depth02.txt中多出的部分的测序深度都为0.


005、samtools depth -aa参数输出fasta文件中所有染色体上的位点的测序深度,包括没有比对上的染色体的位点上的测序深度。


a、如果depth -aa输出fasta文件中所有染色体上的位点的测序深度,那么depth03.txt的行数等于fasta文件中所有染色体的总长度:


(base) //代码效果参考:http://www.jhylw.com.cn/484937183.html

【b20223040323@admin1 test】$ ls

depth01.txt depth03.txt GCF_000005845.2_ASM584v2_genomic.fna.fai


depth02.txt GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ wc -l depth03.txt ## 统计行数


4681912 depth03.txt


(base) 【b20223040323@admin1 test】$ cat GCF_000005845.2_ASM584v2_genomic.fna.fai


chr1 4641652 6 80 81


chr2 39862 4699685 80 81


chr3 398 4740052 80 81


(base) 【b20223040323@admin1 test】$ awk '{sum += $2} END {print sum}' GCF_000005845.2_ASM584v2_genomic.fna.fai ## 统计所有染色体的总长度


4681912


可以看到depth03.txt的长度等于fasta文件中所有染色体的总长度。


b、depth03.txt和depth02.txt相比,如果多出的是没有比对上的染色体的总长度,那么depth03.txt比depth02.txt多出没有比对到的染色体的长度,且多出位点的测序深度均为0.


(base) 【b20223040323@admin1 test】$ ls


depth01.txt depth03.txt GCF_000005845.2_ASM584v2_genomic.fna.fai


depth02.txt GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ echo "$(wc -l < depth03.txt) - $(wc -l < depth02.txt)" | bc ## 计算行数只差


398


(base) 【b20223040323@admin1 test】$ cat GCF_000005845.2_ASM584v2_genomic.fna.fai


chr1 4641652 6 80 81


chr2 39862 4699685 80 81


chr3 398 4740052 80 81


(base) 【b20223040323@admin1 test】$ cat depth02.txt depth02.txt depth03.txt | sort | uniq -u | awk '{print $3}' | uniq -c ## 输出depth03.txt相对于depth02.txt多出的位点的测序深度信息


398 0


c、depth03.txt 和 depth01.txt相对,多出额外的一条染色体的测序深度信息,且测序深度均为0.


(base) 【b20223040323@admin1 test】$ ls


depth01.txt depth03.txt GCF_000005845.2_ASM584v2_genomic.fna.fai


depth02.txt GCF_000005845.2_ASM584v2_genomic.fna SRR1770413.sorted.bam


(base) 【b20223040323@admin1 test】$ cut -f 1 depth01.txt | uniq ## 输出染色体


chr1


chr2


(base) 【b20223040323@admin1 test】$ cut -f 1 depth03.txt | uniq ## 输出染色体


chr1


chr2


chr3


(base) 【b20223040323@admin1 test】$ cat depth01.txt depth01.txt depth03.txt | sort | uniq -u | awk '{print $3}' | uniq -c ## 输出depth03.txt相对于depth01.txt额外的位点的深度信息


29468 0


可以看到depth03.txt先对于depth01.txt多出了一条染色体,且多出的位点的测序深度均为0.


小结:


samptools depth: 输出fastq数据比对到染色体的位点深度大于0的深度信息。


samtools depth -a:输出fastq数据比对到染色体的所有位点的测序深度信息,包含0深度位点。


samtools depth -aa:输出fasta文件中所有染色体上位点的深度信息,包含fastq数据没有比对到的染色体。

相关文章
|
1月前
|
编解码 数据可视化 数据挖掘
空间单细胞|Slide-seq分析、可视化与整合(1)
空间单细胞|Slide-seq分析、可视化与整合(1)
31 6
|
28天前
|
并行计算 数据可视化 算法
空间单细胞|Slide-seq分析、可视化与整合(2)
空间单细胞|Slide-seq分析、可视化与整合(2)
32 0
|
3月前
|
存储 数据可视化 数据挖掘
单细胞分析(Signac): PBMC scATAC-seq 基因组区域可视化
单细胞分析(Signac): PBMC scATAC-seq 基因组区域可视化
24 0
|
3月前
|
机器学习/深度学习 人工智能 API
人工智能平台PAI 操作报错合集之DSSM负采样时,输入数据不同,被哈希到同一个桶里,导致生成的embedding相同如何解决
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
计算机视觉 异构计算 Python
YOLOv8改进 | 进阶实战篇 | 利用YOLOv8进行视频划定区域目标统计计数
YOLOv8改进 | 进阶实战篇 | 利用YOLOv8进行视频划定区域目标统计计数
210 0
|
3月前
|
机器学习/深度学习 存储 tengine
极智AI | 量化实现分享一:详解min-max对称量化算法实现
大家好,我是极智视界,本文剖析一下 min-max 对称量化算法实现,以 Tengine 的实现为例。
576 0
|
12月前
|
存储 数据可视化 数据挖掘
知识点丨重测序数据进行kinship亲缘关系分析、构建IBS矩阵的方法与介绍
知识点丨重测序数据进行kinship亲缘关系分析、构建IBS矩阵的方法与介绍
知识点丨重测序数据进行kinship亲缘关系分析、构建IBS矩阵的方法与介绍
|
12月前
|
算法 数据挖掘 Windows
靶向RNA-seq全面解决方案和加速分析,只看这篇就够了!
靶向RNA-seq全面解决方案和加速分析,只看这篇就够了!
98 0
|
存储 人工智能 算法
鲁棒优化入门(4)-两阶段鲁棒优化及行列生成算法(C&CG)超详细讲解
        鲁棒优化是应对数据不确定性的一种优化方法,但单阶段鲁棒优化过于保守。为了解决这一问题,引入了两阶段鲁棒优化(Two-stage Robust Optimization)以及更一般的多阶段鲁棒优化,其核心思想是将决策问题分为两个阶段。第一阶段是进行初步决策,第二阶段是根据第一阶段的决策结果制定更好的决策策略,应对数据不确定性的影响。这种方法可以降低保守性,提高鲁棒性。
|
自动驾驶 机器人 计算机视觉
3D检测难点 | 3D检测如何解决远处小目标问题?Deformable PV-RCNN 或是个答案!
3D检测难点 | 3D检测如何解决远处小目标问题?Deformable PV-RCNN 或是个答案!
153 0