基因组质量评估mapping法

news/2024/10/19 0:21:48/文章来源:https://www.cnblogs.com/ft-2024/p/18473071

将测序后的reads与组装好的基因组做alignment(校准),这个过程就被叫做mapping。Mapping之后生成的SAM/BAM文件,可以获取reads mapping回参考基因组的信息(比如mapping rate,coverage,depth),从而评估基因组组装的质量。
1.Mapping工具

reads mapping tools
Illumina DNA-seq reads BWA
Pacbio reads/ONT reads minimap2
Illumina RNA-seq HiSat2

2.评估指标
(1)mapping rate
(2)Genome coverge
(3)Depth
3.开始mapping!
(1)用BWA-MEM+samtools对Illumina reads二代进行mapping
首先下载bwa(试了官网上的git clone,有点不兼容,还是选择conda)
conda install -c bioconda bwa

建立索引,使用的ref.fa是前面步骤中生成的组装好改名好的染色体fa文件,即Ctun.chr.fa。最终生成了5个文件。
bwa index ref.fa

这里的r1.clean.fq为survey数据。
bwa mem -t 32 ref.fa r1.clean.fq r2.clean.fq | samtools sort -@ 8 -m 4G > illumina.bam

或者还可以使用minimap2进行分析。两种方式二选一即可
minimap2 -t 32 -ax sr ref.fa read1.fq read2.fq | samtools sort -@ 8 -m 4G >illumina.bam
(2)用minimap2对三代reads长读长(PacBio/Nanopore reads)进行mapping
只有一种hifi数据就只用一种。
minimap2 -t 32 -ax map-hifi ../M3A_renew.genome.fa ../../rawdata/hifi1/M3-1.hifi.fastq.gz ../../rawdata/hifi2/m64292e_220707_145700.fastq.gz > M3A_hifimap.sam

我暂时没有ont数据,这行不运行
minimap2 -t 32 -ax map-ont ref.fa ont_reads.fq.gz > nanopore.sam

再生成一个bam文件
minimap2 -t 32 -ax map-hifi ../M3B_renew.genome.fa ../../rawdata/hifi1/hifi.fastq.gz ../../rawdata/hifi2/hifi.fastq.gz | samtools sort -@8 -m 4G > ..hifi.bam
(3)用HiSat2对RNA-seq数据进行mapping
create -n hisat2 hisat2
建立索引,这一步会产生8个索引文件
hisat2-build ref.fa ref.hisat

将有的数据(例如花、叶的转录组数据合并到一个bam文件中)

hisat2 --dta -p 32 -x ref.index -1 rna1_1.fa -2 rna1_2.fa 2>rna1_hisat.log | samtools
sort -@ 32 > rna1_hisat.bam
hisat2 --dta -p 32 -x ref.index -1 rna2_1.fa -2 rna2_2.fa 2>rna2_hisat.log | samtools
sort -@ 32 > rna2_hisat.bam

合并多个bam文件到一个bam文件
samtools merge -@ 32 merged_hisat.bam rna1_hisat.bam rna2_hisat.bam

4.以部分量化指标评估组装质量
(1)利用bamdst统计
bamdst安装

git clone https://github.com/shiquan/bamdst.git
cd bamdst
make

查看相关帮助

./bamdst -h

bamdst需要bed注释文件,可从fai索引文件转换

samtools faidx M3A_renew.genome.fa
cat M3A_renew.genome.fa.fai | awk '{print $1"\t1\t"$2}' > M3A.bed

run bamdst
~/pack/bamdst/bamdst -p M3A.bed M3A_hifi.bam -o bamdst.M3A_hifi.out
然而,如果基区域太大,bamdst将无法运行,内存容量无法支持。
(3)分别进行统计-1(我的办法)
A.mapping rate
samtools flagstat illumina.bam > illumina.flagstat

结果分析

674611299 + 0 in total (QC-passed reads + QC-failed reads)#共有674611299条reads通过QC+0条reads未通过QC,后面的信息行中+后的都是代表QC没通过的reads的数量。674611299 + 0 in total (QC-passed reads + QC-failed reads)
0 + 0 secondary
8019221 + 0 supplementary
0 + 0 duplicates
654899152 + 0 mapped (97.08% : N/A) #mapping record rate
666592078 + 0 paired in sequencing
333296039 + 0 read1 # 双端reads中read1的总数
333296039 + 0 read2 # 双端reads中read2的总数
573699762 + 0 properly paired (86.06% : N/A) # 86.06%比例的reads成对的映射上
644316920 + 0 with itself and mate mapped# read映射上但配对read没映射上的数量
2563011 + 0 singletons (0.38% : N/A)# 0.38%比例的read没映射上的同时,配对read映射上
62718324 + 0 with mate mapped to a different chr# reads和配对reads映射到不同染色体的情况下的reads数量
41749342 + 0 with mate mapped to a different chr (mapQ>=5)# reads和配对reads映射到不同染色体,且映射质量大于等于5的情况下的reads数量

需要注意的是,同一reads可能多次mapping,有多条记录,所以recorder number的数量会比reads number多,这里应该进行一步计算:
Mapping rate=(654899152-0)/(674611299-0)=97.08% secondary那行的数据

B.breadth of coverage

samtools depth -aa sample.bam >depth.out  #计算所有单个位点的深度
cat illnmina_depth.out|awk '{x[$3]++;} END{for(i in x) print(i ":" x[i])}'#统计出深度为0的碱基位点总数量

breadth of coverage=1-深度为0碱基数/所有碱基数

C.average depth
下载mosdepth。利用mosdepth计算出的结果与老师给出的方法不一致,推测是算法不一样。
conda -n mosdepth mosdepth
生成bam文件的索引文件sample.bam.bai
samtools index sample.bam
计算深度
mosdepth -t 4 out sample.bam
输出结果为四个文件

out.mosdepth.summary.txt:文件包含每条染色体和整个基因组的信息,长度,mapped 碱基数量,平均深度,最小深度和最大深度
out.mosdepth.global.dist.txt:文件包含累积分布,指示给定覆盖率阈值下覆盖的总碱基的比例
out.per-base.bed.gz:每个碱基的输出数据
out.per-base.bed.gz.csi

(4)分别进行统计-2(老师的办法)
不知道为什么有时候-@(线程数)会出错,我的办法是直接删除。

# mean depth
samtools depth -q 4 -a file.bam | awk '{c++;s+=$3}END{print s/c}' > file.bam.depth 
# breadth of coverage
samtools depth -q 4 -a file.bam | awk '{c++; if($3>0) total+=1}END{print (total/c)*100}' > file.bam.coverage 
# mapping rate(我运行着出来的结果是空白)
samtools flagstat -@ 4 file.bam | awk -F "[(|%]" 'NR == 3 {print $2}' > file.bam.maprate 

(5)名词解释
覆盖度(genome covarage)或者覆盖范围(breadth of coverage),参考基因组被一定深度覆盖的碱基的百分比。例如,一个基因组的90%区域在1X深度覆盖,另外仍然有70%的区域被覆盖了5X深度。
测序深度(sequencing depth)或者覆盖深度(depth of coverage),每一碱基的覆盖率是基因组碱基被测序的平均次数。 基因组的覆盖深度是通过与基因组匹配的所有短读的碱基数目除以该基因组的长度来计算的。 它通常表示为1X、2X、3X、…(1、2或3倍覆盖)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/816569.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux环境下Matplotlib绘图中文乱码问题

问题:如图所示,中文乱码1. 准备ttf字体文件: 路径: C:\Windows\Fonts例如楷体:simkai.ttf 2. 查看当前环境的matplot字体路径: import matplotlib print(matplotlib.matplotlib_fname())运行结果: /home/3kyou/.local/lib/python3.7/site-packages/matplotlib/mpl-data/…

多校 A 层冲刺 NOIP2024 模拟赛 08

难度:★★★☆☆多校A层冲刺NOIP2024模拟赛08 T1 传送 (teleport) 签到题 性质题,注意到对于一个点而言有意义的传送的只有分别按 \(x,y\) 排序后与其相邻的点,证明考虑贪心手模即可。 然后就能上最短路了,dj 的时间复杂度为 \(O((n+m)logn)\)。 T2 排列 (permutation) 签…

数据采集作业2

数据采集作业二 任务1代码链接 代码链接 运行结果任务2代码链接 代码链接 运行结果任务3抓包运行结果

THM-Metasploit

Metasploit Metasploit: Introduction msfconsole #主命令行界面 history #查看之前输入的命令 RHOSTS #目标靶机地址 use #命令后跟编号来选择要使用的模块 show options #查看 back #离开 setg/unsetg #全局变量Metasploit: Exploitation Port Scanning 使用以下命令可以查看…

【视频讲解】共享单车使用量预测:RNN, LSTM,GRU循环神经网络和传统机器学习

全文链接:https://tecdat.cn/?p=37899 原文出处:拓端数据部落公众号 分析师:Xuyan Reng 随着城市化进程的加速,共享单车作为一种绿色、便捷的出行方式,在城市交通中扮演着日益重要的角色。准确预测共享单车的使用量对于优化资源配置、提高运营效率以及满足用户需求具有关…

后台_Eclise配置环境与导入工程

1、配置环境1.1 配置Gradle其中【仓库位置】是你自己创建的,位置可以任意; 【Java_Home】的路径可以在系统根目录下的【.zshrc】查看或【配置】1.2 配置Java版本2、导入工程2.1 选择【文件】-> 【导入】2.2 选择【Gradle】项目2.3 选择工程存放的位置2.4 刷新Gradle项目导…

解决移动端项目在PC端打开后宽度占满屏幕的问题

问题描述 移动端的项目在PC端打开后,对于带有固定定位的元素,宽度沾满的整个视窗的宽度。即使body,html限制了最大宽度 <body><div class="box"></div> </body><style>body{max-width: 500px;margin: 0;background: #aaa;height: 1…

20241016下午

P1040 启发式图染色问题(color) 我们可以先想一棵树的情况,如下图所示但是显然这个节点数量是 \(2 ^ k\),我们可以考虑二分图,然后你推着推着就会发现一个建图方案具体来说,我们可以现在左边创建一个颜色为 \(1\) 的结点,然后我们想让颜色数量尽量多,我们直接在右边创建一个颜…

数据采集与融合第二次作业

码云仓库地址 https://gitee.com/sun-jiahui22/crawl_project作业1仓库地址 https://gitee.com/sun-jiahui22/crawl_project/tree/master/作业2/实验2.1作业2的仓库地址 https://gitee.com/sun-jiahui22/crawl_project/tree/master/作业2/实验2.2作业3的仓库地址 https://gitee…

IntelliJ IDEA 2024 安装使用 (附加激活码、补丁,亲测有效!)

第一步:下载 IDEA 安装包 访问 IDEA 官网,下载 IDEA 2024.1.4 版本的安装包,下载链接如下 : idea官方链接也可以在这里点击下载idea下载idea 第二步: 安装 IDEA点击xx 关掉程序! 第三步: 下载补丁 下载地址(里面包含激活码)https://pan.quark.cn/s/9dbfe698c064 补丁下载成…

PYNQ z2 使用xadcps读取xadc内部电压温度

使用xadcps只能和JTAG一样读取温度值和电压值,属于内部通道,读取不了外部通道的数据 添加zynq700核后进行配置 1.在PS-PL Configuration中, 取消勾选general里面的FCLK_RSTEN_N以及M_AXI_GP0_Interface2.在Peripheral IO Pins中勾选14 15对应的UART0, 同时对板卡电压进行配置,B…

控制结构

任何复杂的结构化程序都是由三种基本结构组成:顺序结构,分支结构、循环结构。 分支结构 单分支。if 双分支。if else 多分支。else if else if多分支 switch多分支 else if 于 switch多分支的区别循环结构 for循环 while循环 do while循环 for、while与do ... while语句的比较…