前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >基因组拼接原理

基因组拼接原理

作者头像
生信喵实验柴
发布2022-04-07 17:07:39
发布2022-04-07 17:07:39
1.8K00
代码可运行
举报
文章被收录于专栏:生信喵实验柴生信喵实验柴
运行总次数:0
代码可运行

背景

前面我们了解了基因组拼接,今天给大家带来的是拼接原理。了解实验原理,就是为了我们更好地做实验。

一、拼接原理

序列拼接也叫做基因组组装。高通量数据分析一共有两条路线,一条路线是短序列比对,而另一条路线则是序列拼接。

基因组上完整的 DNA,经过提取建库,最终测序,得到散在的 reads。这个 reads 可以是等长的,例如 illumina 测序的双末端 300bp,也可以是三代测序 不等长的片段。将测序得到的reads 拼接起来,得到一个物种的全基因组序列了。这个过程就是基因组拼接。

拼接的操作并不难,直接输入给软件,经过大量数据处理过程即可得到结果。但是序列拼接是一项非常复杂的工作。我们常说基因组是一部天书,比如人全基因组有 30 亿个碱基对,那么要是打印出来,真的是一部天书。我们准备这样十本书,也就是基因组的十倍,然后我们将这些书随机撕成 100 个字符长度的一张张纸条,然后我们需要再将这些字条拼接起来,组合成原来的天书。这将是一项非常复杂的工作。需要非常大的计算量。

1.1 拼接算法

目前基因组拼接的算法主要有两种,一种是适用于长读长测序的基于有 overlap 的共有(consensus)序列组装的方法。这种算法被称为 Overlap Layout Consensus,简写为 OLC算法,另一种是用于短读长测序的基于 De Bruijn 图的短序列拼接。

无论是 OLC 还是 De Bruijn 图的算法,基因组拼接的基本原理都是序列之间存在 overlap 关系。

1.1.1 OLC 算法主要分为三步:

(1)Overlap:,对所有 reads 进行两两比对,找到片段间的重叠信息;

(2)Layout:根据得到的重叠信息将存在的重叠片段建立一种组合关系,形成重叠群,即Contig;

(3)根据构成 Contig 的片段的原始质量数据,在重叠群中寻找一条质量最重的序列路径,并获得与路径对应的序列,即 Consensus。

OLC 算法最初成功地用于 Sange 测序数据的组装,比如 Celera Assembler,Phrap,Newbler等均采用该算法进行拼接组装。不过nanopore的测序数据与传统sanger测序有明显的不同,测序质量明显低很多,这就需要的是在组装前进行测序 reads 的纠错。Nanopore 三代数据进行纠错后得到高准确性的数据。对 Clean Data 进行纠错后,基于纠错后的数据用 Canu、SMARTdenovo、WTDBG2、Miniasm、MECAT、SPAdes、Unicycler、MaSuRCA 等软件分别进行组装。

1.1.2 De Bruijn 图算法

基于 De Bruijn 图算法主要分为四个步骤。首先是构图(Pregraph),将 reads 切割成 kmer。然后是利用 kmer 之间的 overlap 关系构建 contig,接下来是利用 reads 之间的 pairend 关系将 contig 连接成 scaffold,最后补洞这四个步骤。

1.2 名词解释

1、reads:直接测序出来的片段就称为 reads,不同测序平台测序出来的我们都可以称为 reads。

2、pairend reads:illumina 高通量测序的是双末端测序,reads 具有物理上的关系。小片段文库的这种物理关系叫做 pairend,大片段文库的这种关系称为 matepair 文库。

3、insertsize:illumina 双末端测序中间物理距离叫做 insertsize,其实就是随机打断后用来测序片段的长度。在序列拼接中会用到 reads 之间的这种关系,这个 insertsize 的值也非常重要。

4、overlap:reads 之间具有共有序列,这个共有序列关系被称为 overlap;

5、kmer:将 reads 切割成固定长度的小片段。这样原来的 reads 就变成了很多的更短的 kmer。

6、contig:通过 kmer 之间的 overlap 连接成更长的片段,就是 contig。contig 是片段重叠群的意思。有时候我们也直接说 reads 通过 overlap 连接成 contig,都可以。准确来说是利用 kmer 连接成 contig;

7、scaffold:congtig 之间我们可以通过 reads 之间的 pairend 关系再连接成更长的片段,这个就叫做 scaffold,

8、gap:contig 连接 scaffold 过程中,中间区域使用 N 碱基来填充,称为 gap。

二、了解kmer 如何估计基因组大小

获取一个物种的基因组大小是一件非常重要的工作。在测序之前知道了基因组的大小,我们就可以根据这个值来决定测序的数据量。例如人的基因组是 3G,我们测 10 倍的数据量就刚好是 30G。而且也可以根据基因组大小,估计 denovo 基因组软件对机器内存的要求。如果基因组太大。例如 10G,序列拼接就会超出了机器内存的限制,就得想办法提高硬件。也需要在序列拼接之后将序列拼接值与真实值之间做比较,来评估序列拼接的效果。所以,获取基因组大小是非常重要的。

那么如何来获取基因组的大小呢。一般物种的基因组大小可以从(http://www.genomesize.com/ )这个数据库查到。如果没有搜录,需要考虑通过实验方法,例如利用流式细胞仪来估计基因组大小。也可以采用定量 pcr 估计基因组大小。

不过利用实验的方法显然非常的复杂,需要很多的操作,这里面我们不采用实验的方法,而是基于现有测序数据,基于数据分析方法,利用 kmer 分析来估计基因组大小。也就是不通过序列拼接,就预测出基因组大小。

2.1 什么是 kmer?

所谓 k-mer,即为一段短的 DNA 片段。K 为一个奇数,k 等于几,就称为几 mer。例如一段17bp 的序列,则可以称为 17mer。Kmer 这个概念在后面序列拼接中依然会用到。

我们可以将一条 reads 切割成很多小的 kmer 片段,从第一个碱基开始,每隔固定距离的碱基开始提取碱基。例如一条 100bp 长的 reads,每隔一个位置取一个 17mer 的片段。也就是1-17 取一个 kmer 出来,2-18 取一个 kmer,3-19 取一个 kmer。以此类推,最终 84-100为 1 个 kmer。那么最终将会生成将会生成 100-17+1,也就是 84 个 kmer 片段。原来一条长片段,变成了很多短的片段,碱基的数目也增加了很多倍。而且,每次取 kmer 是同一条reads 正反取两次,也就是对这条 reads 的反向互补序列再取一次 kmer。

2.2 为什么二代测序必须要取kmer?

像上图黄色的kmer的是包含错误的,要是测序错误越多,黄色的kmer越多,接下来就是排除掉黄色的kmer,这样就没有错误的kmer了。

理论支持kmer频数为1的就包含测序错误。

了解kmer的第一部分就到这里,下次就是利用它来预计基因组大小。

写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。

代码语言:javascript
代码运行次数:0
复制
bioinfoer.com

有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信喵实验柴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档