核酸序列拼接方法及装置的制造方法_2

文档序号:8528373阅读:来源:国知局
中以测通数据为连通数据为例进行说明,其它实施例中,可以采用长reads与构建的原始拼接图进行比对。
[0019]步骤S3:根据读段构建原始拼接图(pregraph)。
[0020]这里,原始拼接图可基于de Bruijn图的构造方法得到,可以理解,得到的原始拼接图也可称为kmer图。
[0021]步骤S5:将连通数据比对(alignment)到原始拼接图的边上。
[0022]在执行本步骤时或者在本步骤之前,还进行去除处理,即对构建得到的原始拼接图,根据原始拼接图的拓扑结构,去除因碱基错误和/或测序错误形成的读段及该读段关联的所有边,例如错误信息出现时拼接得到的分支会非常短,需要去除该分支,从而保证了结果的准确性,同时无冗余存在。
[0023]在进行比对时,具体的比对方法可参考常见相关技术实现,这里以SOAPdenovo软件常用的第一步pregraph的比对为基础。一般地,为保证比对的可靠性,要求read和contig之间至少要有两个连续的共同kmer,即连通read和contig至少有(k+1 )bp的重叠序列。此外,在本发明的一个实施例中,还可进行信息记录,即,对于一条边,记录跨过该条边的所有的reads的信息,对于一条reads ,记录该条reads所跨过的所有边的信息。
[0024]步骤S7:从原始拼接图的边集中选择锚点边。
[0025]实施例中本步骤具体包括如下步骤S701-S705。
[0026]步骤S701中,根据比对结果和拓扑结构,去除原始拼接图中因测序错误形成的读段及该读段关联的所有边。
[0027]具体地,实施例中根据拓扑结构,也就是根据reads的路径层次,进行测序错误去除处理,包括去除kmer图的测序错误以及弱连接分叉,例如图2至图4所示的由于reads中间的碱基错误所形成的泡状结构(bubble)和测序错误所形成的嵌合体,删除由于测序错误造成的read以及该read关联的所有边(即该read跨过的所有边)。
[0028]步骤S703中,根据原始拼接图的边集中各条边的边覆盖深度信息和边末端分叉信息,从原始拼接图的边集中确定出各边的类型。
[0029]具体地,边类型识别需要用到两个信息,一个是边覆盖深度信息,另一个是边末端分叉信息。首先,根据边覆盖深度信息,将边进行分类,一种举例中,以平均覆盖深度为基准,将边分成错误边(例如,边的覆盖深度小于等于0.1倍平均覆盖深度)、重复边(例如,边的覆盖深度大于1.8倍平均覆盖深度)、正常边(例如,边的覆盖深度在0.8倍平均覆盖深度到1.8倍平均覆盖深度之间)、杂合边(例如,边的覆盖深度在0.1倍平均覆盖深度到0.8倍平均覆盖深度之间)。然后,根据边两端分叉情况,将边进一步进行类别区分和确认。实施例中重点识别杂合边,根据杂合位点在kmer图形成bubble的特点,将组成bubble的两条边进行比对,将比对结果符合标准、且两条边的覆盖深度差不多且不大于平均覆盖深度(例如都是在平均覆盖深度一半左右)的bubble标志为杂合边。这里所说的标准是指,两路径碱基数量相差不超过第一阈值、错配碱基数量不超过第二阈值,所述第一、第二阈值根据经验值产生,比如在一个实施例中的数据,设置最大的读长为500bp,允许的不同碱基的数量在10个以内,并且两条序列之间的匹配碱基数量在90%或者以上,符合这个条件的两条边可以被看成是由于杂合所形成的两条路径。
[0030]步骤S705中,选择原始拼接图的边集中的非错误边和非重复边作为锚点边。
[0031]在步骤S705中,错误边和重复边直接被排出在候选之列,而锚点边的选择则是除去错误边和重复边的原始拼接图的边集中进行选择,即在正常边和杂合边中选择满足锚点边的条件。锚点边的选择条件首先应满足该边是唯一(unique)的,表现在拓扑图上就是这条边的两端没有任何的分叉路径,然后跨过该条边的reads路径应该是没有冲突的,如图5和图6所示,图5的情况是该条边的右端出现分叉路径,图6中,边C为待选的锚点边,通过待选边C的reads路径存在冲突的情况。
[0032]通常选择正常边作为锚点边;当然,也可以根据需要,决定是否将杂合边作为锚点边来进行局部子图构建,杂合边的定义如前述,即根据杂合位点在kmer图形成bubble的特点,将组成bubble的两条边进行比对,将比对结果符合标准、且两条边的覆盖深度都不大于平均覆盖深度(例如都在平均覆盖深度一半左右)的bubble标志为杂合边。
[0033]步骤S9:构建以锚点边为中心的局部子图。
[0034]这里,通过锚点边上的reads比对信息,获得由该条锚点边往左右两端延伸的局部子图,如图7所示,标号为D的带小黑点的长方块代表锚点边,通过该锚点边上的reads信息获得前后的边界(edge)信息,构成该锚点边的局部子图。
[0035]步骤Sll:化简局部子图,在化简结果中重复选择锚点边进行处理直至不存在新的锚点边。
[0036]本步骤中,通过去除支持数较低的分叉以及融合一些由同一锚点边获得的子图的方式化简局部子图。具体地,根据局部子图中各分叉的支持数和/或覆盖度,去除低于预设支持数和/或预设覆盖度的分叉,并根据该分叉对应的读段,去除包含该读段的其余局部子图,此外,对局部子图中的一条锚点边,以该条锚点边为中心,将与该条锚点边关联且不存在路径冲突的所有局部子图融合为一个局部子图。支持数或覆盖度通常是与基因组测序数据的实际情况紧密关联,支持数较低是指支持两条边的弧关系的跨过reads的数量,通常设定3条或3条以下为低支持数,同理,低覆盖度分叉一般也是由于测序深度或测序错误所导致的,通常将分叉长度小于两倍kmer长度的分叉当做低覆盖度分叉。
[0037]仍以图7为例,通过锚点边D的一堆reads获得的局部子图包括边B、C、D、E、F(即图示中从上往下的第一条局部子图),然后通过另外一些reads获得另外两个局部子图(即图示中从上往下的第二、三条局部子图),这三个局部子图都是由锚点边D获得的,而且路径上不存在冲突,因此,可以将这三个局部子图合并成图示箭头下方的局部子图,该合并得到的局部子图包括边A、B、C、D、E、F、G、H。
[0038]在化简局部子图的过程中还会出现由于测序错误导致的分叉的情况,根据支持该分叉路径的reads数量,例如支持该分叉路径的reads数量过少(例如支持数小于等于3)或者是支持该分叉路径的reads数所占比例小(例如小于0.2),可以将该分叉剔除,同时根据生成该分叉的reads序列,可以将其余包含该reads信息的局部子图的对应信息也删除,更新相应局部子图的信息,从而达到化简子图的目的。本实施例是从全局的角度处理长reads的测序错误造成的影响,即在去除当前局部子图中由于测序错误造成的分叉路径的同时,会将该read路径所关联到的所有局部子图的信息进行更新,凡是由该read路径所确定的局部子图都将被删除。
[0039]在化简结果中判断是否存在新的锚点边,如果是,则按该新的锚点边重复执行步骤S9,直至不存在新的锚点边。新的锚点边产生的原因(即触发这种迭代的条件)可以是由于化简后使得边的类型发生改变,例如杂合边变成正常边,或者原来含有多个分叉的边和reads路径存在冲突的边,由于去除测序错误的reads路径后,形成了前后只有一个分叉而且跨过该条边的reads路径没有冲突的符合锚点边条件的边,从而将这些符合条件的正常边或杂合边作为新的锚点边,以此循环进行处理。
[0040]步骤S13:对处理后剩余的局部子图进行合并,将合并结果作为拼接结果输出。
[0041]本步骤中,如果某一 unique序列代表的局部子图中含有另外一条unique序列,则可以把这两条unique序列代表的局部子图合并,又称路径合并。具体地,对处理后剩余的局部子图,判断其中的第一局部子图是否包含第二局部子图的一个锚点边,如果是,再判断第一局部子图的各边和第二局部子图的各边之间是否存在冲突,如果不存在,则合并第一局部子图和第二局部子图为最终拼接图。这里的“第一”和“第二”仅是为了叙述方便而给出的,并不是将局部子图真正划分为两种类型。如图8所示,在由锚点边D (图示中带小黑点的长方块表示锚点边)获得的局部子图(图示中从上往下第一条)中,其中一条边F刚好是另一个局部子图(图示中从上往下第二条)的锚点边,而且这两个局部子图的边之间没有冲突,因此这两个局部子图可以合并在一起,合并结果为图示中从上往下第三条局部子图。
[0042]然而,在进行局部子图的合并过程中,由于局部子图内部的边并不是独立存在的,其会跟其它局部子图外的边发生弧关系,因此在合并局部子图的时候,需要对这些弧关系进行处理,从而在最后由局部子图合并获得的路径是由第一个锚点到最后一个锚点之间的边组成。具体的处理过程如图9所示,包括:选择第一局部子图的第一个锚点边作为最终拼接图的边集的起点,选择第二局部子图的最后一个锚点边作为最终拼接图的边集的终点,将起点与终点之间的第一局部子图和第二局部子图
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1