删除或更新信息,请邮件至freekaoyan#163.com(#换成@)

一种针对大规模Read Mapping的高效DBG索引方法

本站小编 Free考研考试/2024-01-15

于长永, 李俊杰, 马海涛, 赵宇海
东北大学 计算机科学与工程学院,辽宁 沈阳 110169
收稿日期:2022-03-21
基金项目:国家自然科学基金资助项目(61772124)。
作者简介:于长永(1981-),男,辽宁海城人,东北大学副教授。

摘要:为了能够回答生物信息学中关于de Bruijn graph(DBG)的两个问题——①对于任意的k-mer,回答其是否为DBG的顶点,②对于DBG的任意顶点,回答其邻接信息(入边和出边),提出了一种针对大规模read mapping的高效DBG索引方法.本文将以上两个问题转化为非重复多路径上的k-mer和(k+1)-mer的确切查找问题,并利用FM-index进行解决.首先,对给定的参考序列进行压缩,即非重复多路径的发现,从而压缩了序列中大量存在的重复(k+1)-mer.其次,基于非重复多路径FM-index对DBG进行索引.查找k-mer是否出现在DBG上,若找到,给出该k-mer的直接前驱和直接后继结点,从而提高时空效率.最后,在62种大肠杆菌菌株的基因组上进行实验.实验结果表明,所提出的方法可以高效地对多参考序列的DBG进行索引.
关键词:de Bruijn graph索引read mapping(序列映射)FM-index参考序列
An Efficient DBG Indexing Method for Large-Scale Read Mapping
YU Chang-yong, LI Jun-jie, MA Hai-tao, ZHAO Yu-hai
School of Computer Science & Engineering, Northeastern University, Shenyang 110169, China
Corresponding author: LI Jun-jie, E-mail: tbaglee@163.com.

Abstract: In order to answer two questions about de Bruijn graph(DBG) in bioinformatics: ① For any k-mer, answer whether it is the vertex of DBG; ② For any vertex of DBG, answer its adjacency information(incoming edge and outgoing edge), an efficient DBG indexing method for large-scale read mapping is proposed. In this paper, the above two questions are transformed into the exact finding problem of k-mer and (k+1)-mer on non-repetitive multipath, and are solved by using FM-index. Firstly, a given reference sequence is compressed, which is the discovery of non-repetitive multipaths, thereby compressing the presence of large-scale repetitive (k+1)-mers in the sequence. Secondly, the DBG is indexed based on the non-repetitive multipath FM-index. The k-mer is searched whether it appears on the DBG, and if so, the direct predecessor and direct successor nodes of the k-mer are provided to improve the spatial-temporal efficiency. Finally, experiments are performed on the genomes of 62 E. coli strains. The experimental results show that the method proposed can efficiently index the DBG of multi-reference sequences.
Key words: de Bruijn graphindexread mappingFM-indexreference sequence
下一代测序(next generation sequencing, NGS)[1]技术能够快速有效地产生大规模reads,这给read mapping问题带来了新的挑战.de Bruijn graph(DBG)最近被广泛用来解决read mapping中参考基因组序列的索引问题,因为在解决参考基因组序列中子串重复问题方面,采用DBG方法是有显著成效的.
在生物信息学中,参考基因组序列的高效索引是解决read mapping问题的重要基础,它能够实现长度为k的碱基序列(k-mer)查找以及k-mer在序列上的位置查找.现有流行的索引算法主要是基于哈希表[2]和基于BWT(Burrows-Wheeler transform)[3]方法.其中,基于哈希索引算法的比对工具有Hobbes2[4],SOAP[5],SHRiMP[6]和BFAST[7]等.另外基于BWT的索引工具也很常见,比如经常提到的BWA[8],Bowtie2[9]和SOAP2[10]等比对工具,这些工具都使用FM-index[11](FM-index是基于Burrows-Wheeler变换的压缩全文子串索引),它是在BWT索引方法基础上作出的进一步改进.但由于基因组序列的重复基因组区域[12-13]是普遍存在的现象,而这恰恰是以上两种流行索引方法的主要瓶颈.目前,****已经努力将这两种方法从线性的参考基因组的索引扩展到不同类型序列图的索引,并在时间和空间效率方面进行了各种权衡.
近期DBG方法被应用到大规模的read mapping问题上,其优点是可以很好地处理基因组上的重复信息,因为重复的k-mer在DBG上作为结点仅出现一次.例如在deBGA[14]中,deBGA使用3个列表来存储参考序列的DBG的单路径信息,这些单个或者多个参考基因组信息被RDBG(reference de Bruijn graph)所构建和索引,从而能够快速地在单路径上进行k-mer的查询和定位.deBGA在保持类似或更高的灵敏度和准确性的同时,大大快于最流行的方法,然而对于DBG模型中的分支结点和分支结点组成的路径,是没有考虑全面的.类似仅考虑单路径信息的工具还有Pufferfish[15],该索引由6个部分(以及可选的第7个组成部分)组成,不仅能够确定k-mer是否存在于单路径上,还能很好地确定其在某条参考基因组序列上及其偏移位置,以及该k-mer所在的单路径的邻接信息.Pufferfish对于压缩的DBG和着色压缩的DBG都有很高的查找效率,但是它也只能处理DBG上的单路径信息.此外对于完整的DBG索引,BOSS模型[16]提出了一种新的简洁的DBG表示和索引方法,该表示形式的大小不受k-mer的影响,并且大小比现存的DBG表示方法小得多,还能在常数时间内计算出结点的出入边数量. VARI[17]在BOSS的基础上添加颜色信息,显著减少了存储和使用着色DBG所需的内存量.Rainbowfish[18]则利用了颜色集分布中存在的高偏斜度,在空间上比VARI提高了近20倍.但这些优化都是在表示和组装基因组集合(群体)方面的优化,是面向着色DBG和SNP发现等相关问题的.
除了在参考基因组序列索引方面的广泛应用,DBG在基因组序列和转录组序列的组装、装配[19-20]和基因变异的检测和发现,以及对变异结构的分析(来自多个基因组)方面也有重要作用.LDBG(linked de Bruijn graph)[21]中提出了一种新颖的装配图数据结构,它通过在DBG顶部添加注解来构建,并且通过图来存储远程连接信息,可以从LDBG中无损地存储和恢复序列,但该模型不能用于定位DBG在参考基因组序列上的路径.而GGMAP方法[22]是将read映射到DBG上,而不是映射到参考序列.另外,DBG经典结构的变体——着色de Bruijn图[23]——被广泛应用于个体或群体中检测简单和复杂的遗传变异,并对其进行基因分型.
在生物信息学中,虽然现有参考基因组的索引方法是丰富的,然而针对大规模read mapping的高效DBG索引方法是缺乏的.现存最流行的大规模read mapping的索引构建和比对方法如下:DynamicBOSS[24]支持无限数量的结点和边的添加或者删除操作,并且适用于非常大的样本(大于150亿的k-mers);deGSM[25]提出了一种轻量级并行DBG构造方法,用来解决内存不足的问题;CAS[26]为提高read mapping效率,使用上下文感知种子去降低种子频率.然而它们涉及的索引效率相对较低,且时空花费较大;另外一些现存的索引算法只针对图上的单路径进行处理,而忽略了图上非单路径结点和边的索引情况.因此本文针对参考基因组建立了一种高效的DBG索引,首先对于原参考序列进行压缩,即进行非重复多路径发现,然后基于非重复多路径FM的DBG索引进行k-mer查找.判断给定的k-mer是否存在于整个DBG的结点上,而不只是在图的单路径上查找.如果存在,同时给出该k-mer的直接前驱和直接后继结点,从而将索引问题转化为压缩后序列的子串确切查找问题.本文方法相比于现在最流行的索引方法,时间和空间花费更小,同时由于该方法是针对整个DBG构建索引,相比于仅面向单路径来构建索引的方法来说,考虑是更全面的.与目前最流行的针对大规模read mapping的DBG索引方法相比较而言,本文提出的算法是更有前景的.
1 符号及问题定义设g是给定字母表Σ={A,C,G,T}上的参考基因组序列,其长度用|g|来表示.g[i]表示序列g中的第i个字符,索引i是从1开始的.同时,本文定义g[i, j]作为序列g的子串,其中,子串的开始位置是i,结束位置是j.用g[*, d]和g[d, *]来表示长度为d的序列g的前缀和后缀.另外在DBG上,返回到结点vi的传入边数,称为入度,用符号indegree(vi)表示,通过入边和结点vi直接相连的结点称为直接前驱;同理,从结点vi传出来的边数,称为出度,用符号outdegree(vi)表示,通过出边和结点vi直接相连的结点称为直接后继.一个k-mer是字母表Σ上长度为k的字符串.本文用DBG(g, k)来表示具有长度为kk-mer的序列g的DBG,并在定义1中定义DBG(g, k)如下.
定义1 DBG(de Bruijn graph) ??给定字母表Σ上的参考基因组序列g和一个整数k≥2, gk阶de Bruijn图,DBGk(g)是一个有向图(V, A),其中VA满足:V={dΣk | d是一个k-mer,同时dg的子串}, A={(d, d′)|d[k-1, *]=d′[*, k-1]}.
定义2单路径(unipath)?? 如果DBG(g, k)上结点vi的入度和出度满足条件indegree(vi)=outdegree(vi)=1,则把这样的结点vi称作非分支结点.对于DBG(g, k)上的任意一条路径,p=vi, vi2, …, vik,如果这条路径上的每个结点都是非分支结点,那么就称这条路径为单路径.
为比较方便地说明和描述问题,本文给出DBG的具体示例.例如,设序列g:
k=3时,序列g的DBG(g, 3)如图 1所示.
图 1(Fig. 1)
图 1 k=3,序列g的DBG(g, 3)Fig.1 The DBG(g, 3) of sequence g when k=3

很明显可以观察到,图 1中一共有19个结点(包含3条单路径)和26条有向边,图DBG(g, k)的详细信息见图 1.另外在参考基因组序列g上,k-mer的选取是按滑动窗口进行的,在k=6时,滑动窗口的示意图如图 2所示.
图 2(Fig. 2)
图 2 k=6时,序列g的滑动窗口Fig.2 The slide window of sequence g when k=6

给定一个参考基因组序列g及其DBG(g, k)=(V, E),DBG的索引问题主要包括以下两个方面:①对于任意k-mer d,判断d是否属于V?②如果d属于V,查找DBG中d的邻接信息,即d在图上的直接前驱和直接后继结点.
2 高效的DBG index算法2.1 FM-indexFM索引进行搜索主要通过两个关键功能进行执行:count和locate.Count用来计算序列g中有多少个文本匹配,而locate用来查找这些匹配的位置.在此过程中,需要OCC[][]数组、BWT字符串和C[]数组,但SA[]数组不是必需的.C[c]数组是指在序列g中,字典序小于字符c∈{A, C, G, T}的所有字符的个数,OCC[c][r]表示在gbw[0, r]中出现字符c的个数,其中字符串gbw是序列g的BWT.字符串cX的后缀数组区间可由式(1)~(2)[11]求得.
(1)
(2)
式中:R(cX)是后缀数组的下界;R(cX)是后缀数组的上界,当且仅当R(cX)≤R(cX)时,cX是序列g的子串.同时,如果cX是序列g的子串,那么通过R(cX)-R(cX)+1就能计算出cX出现的次数,这个过程的时间复杂度是O(|cX|).
序列g的FM索引可以处理问题定义中的两个问题.针对第一个问题,本文可以使用FM索引来精确查找序列g中的k-mer;而处理第二个问题,即查找DBG中k-mer的邻接信息,可以使用FM索引来精确搜索g中长度为k+1的8个字符串,这8个字符串分别是在k-mer的左端或者右端添加A,C,G,T字符来构造的.
2.2 非重复多路径发现序列g的FM索引是可以处理问题定义中的两个问题,然而序列g中存在大量的重复k-mer.设g′是压缩后的g,它仅存储g中重复(k+1)-mer一次,并且人为的添加符号$来连接多条路径,并规定$比字母表Σ={A, C, G, T}上的所有字符的字典序都小.通过g′的FM索引也可以解决问题定义中的问题,而g′的大小是远远小于序列g的.
在构建序列g′时,首先想到的数据结构就是B+树.它的查询性能更稳定,查询速度也更快.因为B+树上关键字的结点是唯一的,正好对应于序列g′上k-mer的不重复性要求.本文将k-mer转化成二进制整数存储到B+树上,同时叶结点之间用链表有序存储,利于范围查询.给定序列gk-mer,按照图 2所示的滑动窗口迭代选取k-mer进行处理,对参考基因组序列进行压缩,从而构建非重复多路径,构建的具体过程如算法1所示.
算法1?非重复多路径生成算法
Input: R={r1, r2, …, rn}, 参考基因组序列; k, k-mer的长度;
Output: Y={y1, y2, …, ym}, 非重复多路径的集合;
1. ??bptree=?, Y=?//bptree是一棵B+树
2. 设str为一个空字符串, str="";
3. ??for i=1 to n do
4. ????for j=1 to |ri |-k do
5.??????m=hash(ri[j, j+k]);
6.??????if m bptree then
7.????????if str==""
8.???????????? str=cat(str, ri[j, j+k]);
9.???????? else
10.???????????? str=cat(str, ri[j+k]);
11.??????????将m插入bptree;
12.????????else if str≠"" then
????????????????????????将str插入集合Y; 重置str为一个空字符串, str="".
对于读入的参考序列R,按顺序循环处理R上的所有k-mer,首先按算法1中的第5行所示,把每个k-mer转化成哈希值m,然后判断m是否存在于B+树上,算法1中的bptree就定义成一棵用来存储(k+1)-mer的B+树.如果m之前并不存在于bptree上,则把m插入到bptree上,同时判断字符串str是否为空,若为空就把整个k-mer拼接到字符串str上,否则如算法1中第10行所示,直接把该k-mer的最后一个字符拼接到str上;另外一种情况,如果m之前出现在bptree里,同时字符串str非空,就把str插入到集合Y中,它是用来存放多条非重复路径的.另外把str置空,重新进入到下一次循环中,直至循环处理完序列R的最后一个k-mer结束.
由此,通过序列R生成的DBG(R, k)和压缩后的参考基因组序列Y所生成的DBG(Y, k)是等价的, 即DBG(R, k)=DBG(Y, k).所以通过压缩算法,很好地处理了序列R上的重复结点,提高索引效率的同时节省索引空间,为下一步非重复多路径FM的DBG索引创造了条件.
为了更清晰地说明算法1,这里给出示例.例如,符号定义部分给出的序列g,在k+1=4时,压缩后序列g′的集合为
k=3时,因为4)中的前缀字符串GCT和7)中的后缀字符串GCT相同,并且处在不同侧,所以可以进行合并,合并后的字符串是AGGCTA,最终拼接后序列g′为
很显然,序列g′的大小比序列g要小,即|g′ | < |g|,验证了本文算法的正确性和可行性.
2.3 基于非重复多路径FM的DBG索引由2.2节可知,查询k-mer是不是序列g相对应的DBG上的结点,该问题等价于验证k-mer是否是序列g′的子串.另外对于DBG上结点vi的邻接信息问题,等同于处理(k+1)-mers:A vi, C vi, G vi, T vi, vi A, vi C, vi G, vi T这8个字符串是否是序列g′的子串.因此,基于序列g′的BWT可以解决问题定义中的两个问题.
g′=y1y2$…ym是由算法1生成的多条非重复路径.其中,序列g′的长度表示为|g′|, |g′|=LACGT+LLACGTi=1m|yi|是g′中字符A, C, G, T的数目,L=(m-1)是g′中字符$的数目.为了计算k-mer或者(k+1)-mer的后缀数组区间,2.1节给出的式(1)和(2)需要满足
(3)
所以,B[L, |g′|-1]是必需的.对于OCC[c][i]数组部分,需要满足条件c∈{A, C, G, T}和Li≤|g′ |-1.同时,C[c], c∈{A, C, G, T}是需要存储的.为了减小整体的存储空间,OCC[c][i]是间隔存储的,当满足条件(i-L)%OCC_gap=0时,它才存储一次.因而,存储C, OCC, B的空间花费为
(4)
其中:bintegerbbase分别代表存储一个整数和一个碱基(一个字符)所需的字节数目.更确切地说,序列g′中的字符$不会增加索引的BWT大小.
在处理FM索引时为减少索引空间的大小,OCC[c][r]的存储情况在理论上满足
(5)
(6)
其中:n是压缩后字符串中字符$的个数;|x|是后缀数组区间长度.以符号定义部分给出的序列g为例,压缩前序列字符总长度为70,在k=3时,压缩后序列g′的字符总长度为54,其中字符$的个数为5.序列g′在经过BWT变换后的字符串记为gbw,字符串gbw
求得gbw的过程首先是对要转换的字符串g′进行循环右移,每次循环一位.可以知道长度为54的序列g′,循环54次后重复,这样就可以得到54个长度为54的字符串;然后是对循环移位后的54个字符串按照字典序进行排序,本文规定字符$的字典序小于字符A;最后是将排序好的字符串集合,取每个字符串的最后一个字符组成新的一列,这一列的结果就是求得后的字符串gbw.明显地,经过BWT变换后的字符串gbw,相比于变换前的序列g′,转换后使得gbw中相同的字符位置连续或者相邻.
在OCC这个二维数组中,由于字符$所在的行和列是不会在实际的字符匹配中出现的,所以原本OCC数组的占用大小为54×5,实际存储的大小减小到49×4.另外,OCC数组在实际中是以压缩的形式进行存储的,所以在表 1中每10个后缀数组取1个进行存储,即OCC_gap=10.
表 1(Table 1)
表 1 OCC数组内部存储形式Table 1 Internal storage format of OCC array
id SA A C G T
0 $A…A \ \ \ \ \
4 $G…G \ \ \ \ \
5 AA…A \ 3 2 7 6
15 AT…G \ 1 2 2 5
25 CT…A \ 3 2 2 4
35 GT…C \ 1 2 3 1
45 TT…T \ 1 2 1 2


表 1 OCC数组内部存储形式 Table 1 Internal storage format of OCC array

由于原本OCC数组的占用大小为54×5,所以行代表按字母表顺序排列的后缀数组(SA),其中行数用i表示,从0开始到53结束,一共54行;列代表字符串中现存的字符类型,共5类,分别是{$, A, C, G, T},列数用j表示,从0开始到4结束,一共5列.在表 1中,表中的id即i每隔OCC_gap=10取值所得.
对于存在于表 1中的id的后缀数组,可以通过表 1直接查询.而对于检索那些不在id=0或者id=15等位置的后缀数组,以i=8为例,需要从i∈[0, 8]进行遍历查找.另外i∈[0, 4], j∈[0, 4]时和i∈[5, 53],j=0时,二维数组OCC[i][j]的空间范围内都用符号\来填充,表示在实际的OCC数组中并不进行存储,这里计算i∈[0, 4],j∈[0, 4]时,即以字符$开头的后缀数组中,字符A, C, G, T的个数分别是38, 30, 40, 42.而i∈[5, 53],j∈[1, 4]时,OCC[i][j]的空间范围,即表中的数值部分才是i取特定值时,不同id的后缀数组中字符A, C, G, T分别出现的数目.因此,当存储的数据量较大时,该数据结构节省空间的效果是很显著的.
3 实验与结果所有实验均在具有4个10核的Intel(R) Xeon(R) E5-2640 2.40 GHz CPU和160 GB内存的服务器上进行,操作系统为Ubuntu 16.04.DBG索引算法是使用C和C++编译器实现和编译的.
本文从NCBI RefSeq数据库[27](http://www.ncbi.nlm.nih.gov/refseq/)下载了所有可用的62种大肠杆菌菌株的基因组.这62种大肠杆菌的序列总长度为310 199 470 B.表 2中展示了不同k-mer序列压缩后的一些参数.
表 2(Table 2)
表 2 不同k-mer序列压缩后的大小Table 2 Compressed sequence size in different k-mer
k Number
of ‘$’/个
Size of
com_ref/B
Number
of sides/条
Com_ref/
ref/%
10 473 528 5 777 007 568 199 1.86
11 1 649 988 22 011 875 2 212 019 7.10
12 3 473 542 52 335 500 7 179 454 16.87
13 3 486 953 64 137 665 15 320 323 20.68
14 2 093 971 53 401 342 21 991 777 17.22
15 1 116 459 43 326 409 25 463 065 13.97
16 735 486 39 551 225 27 047 963 12.75
17 602 908 38 788 401 27 936 057 12.50
18 540 735 38 883 148 28 609 183 12.53
19 531 852 39 809 021 29 171 981 12.83
20 523 798 40 715 538 29 715 780 13.13


表 2 不同k-mer序列压缩后的大小 Table 2 Compressed sequence size in different k-mer

表 2中的第1列是k-mer长度的取值,从10到20;第2列是在每个k-mer取值下,压缩后的文件中字符$的个数;第3列是压缩后文件的大小,单位是字节;第4列是压缩后DBG上边的数量,很明显,随着k-mer长度的增加,边数也在增加;而第5列是压缩后文件大小与压缩前文件大小的一个比值,结果为百分数.就62种大肠杆菌数据集而言,在k=13时,序列压缩后大小是压缩前的20.68%,在k-mer长度取其他值时,序列压缩后大小和压缩前的比值都小于它,所以总体上相对压缩前的文件来说,本文算法的空间压缩效果不错.
表 3记录了不同k-mer长度下序列压缩算法的时间花费情况.很明显可以看到,序列压缩算法在k=13时花费时间最长,需要10 min左右,而k-mer选取其余长度时,压缩时间都小于10 min,该算法的时间复杂度是较小的.因此结合表 2,本文的压缩算法在时空上是高效可行的.
表 3(Table 3)
表 3 压缩序列的时间花费Table 3 Time consumption in compressing the sequence
k t/s
10 341.122
11 410.59
12 585.39
13 608.56
14 589.2
15 558.044
16 530.495
17 457.223
18 430.216
19 424.599


表 3 压缩序列的时间花费 Table 3 Time consumption in compressing the sequence

表 4是在不同k-mer长度下,OCC_gap分别取10和30时查找2 000 000个k-mer的时间花费情况.平均时间这一列是指查询每个k-mer所需要的时间,单位是ms;总时间这一列是查询2 000 000个k-mer所需的总时间,单位是s.很明显,在相同的k-mer长度下,OCC_gap取值越大,查找时间会越长;在同样的OCC_gap取值下,随着k-mer长度的增加,时间花费总体上是增加的.但最重要的是,时间花费都很小,查询k-mer的效率很高,这也说明本文提出的算法的可行性和高效性.
表 4(Table 4)
表 4 查找2 000 000个k-mer的时间花费Table 4 Time consumption to find 2 000 000 k-mers
k OCC_gap=10 OCC_gap=30
10 5.796 0.002 898 7.456 0.003 728
11 5.98 0.002 99 7.916 0.003 958
12 6.284 0.003 142 7.676 0.003 838
13 6.204 0.003 102 7.778 0.003 889
14 6.27 0.003 135 7.98 0.003 99
15 6.26 0.003 13 8.146 0.004 073
16 6.53 0.003 265 8.216 0.004 108
17 6.65 0.003 325 8.194 0.004 097
18 6.596 0.003 298 8.318 0.004 159
19 6.752 0.003 376 8.334 0.004 167


表 4 查找2 000 000个k-mer的时间花费 Table 4 Time consumption to find 2 000 000 k-mers

4 结语本文针对大规模read mapping的索引问题,提出了一种高效的DBG索引方法.方法主要思路是对给定的参考序列进行压缩,即非重复多路径的发现,然后利用FM-index对DBG进行索引,查找给定的k-mer是否存在,存在的话给出其直接前驱和直接后继结点,从而提高了时空效率. 因此,基于DBG索引方法不仅解决了先前算法的主要瓶颈——基因组上普遍存在的重复区域,还考虑在DBG的单路径上查找k-mer,它是一种全面高效的针对多参考序列的整个DBG索引方法.从实验结果中也可以看出,算法的压缩部分在时空上是高效的,在查找k-mer时的时间花费是很小的.另外,由于单路径是DBG上大量存在的结构,未来为进一步优化索引效率,可以针对DBG上的单路径进行细化研究.
参考文献
[1] El-Metwally S, Ouda O M, Helmy M. Next-generation sequencing platforms[J]. Springer New York, 2014, 7(4): 37-44.
[2] Zhang H W, Chan Y D, Fan K C, et al. Fast and efficient short read mapping based on a succinct Hash index[J]. BMC Bioinformatics, 2018, 19(1): 92-105. DOI:10.1186/s12859-018-2094-5
[3] Burrows M, Wheeler D J. A block-sorting lossless data compression algorithm[J]. Technical Report Digital SRC Research Report, 1994, 124(1): 1-24.
[4] Kim J, Chen L, Xie X. Improving read mapping using additional prefix grams[J]. BMC Bioinformatics, 2014, 15(1): 42-52. DOI:10.1186/1471-2105-15-42
[5] Li R Q, Li Y R, Kristiansen K, et al. SOAP: short oligonucleotide alignment program[J]. Bioinformatics, 2008, 24(5): 713-714. DOI:10.1093/bioinformatics/btn025
[6] Rumble S M, Lacroute P, Dalca A V, et al. SHRiMP: accurate mapping of short color-space reads[J]. Public Library of Science Computational Biology, 2009, 5(5): e1000386.
[7] Homer N, Merriman B, Nelson S F. BFAST: an alignment tool for large scale genome resequencing[J]. Public Library of Science ONE, 2009, 4(11): e7767.
[8] Li H, Richard D. Fast and accurate short read alignment with Burrows-Wheeler transform[J]. Bioinformatics, 2010, 25(14): 1754-1760.
[9] Langmead B, Salzberg S L. Fast gapped-read alignment with Bowtie 2[J]. Nature Methods, 2012, 9(4): 357-359. DOI:10.1038/nmeth.1923
[10] Li R Q, Yu C, Li Y R, et al. SOAP2: an improved ultrafast tool for short read alignment[J]. Bioinformatics, 2009, 25(15): 1966-1972. DOI:10.1093/bioinformatics/btp336
[11] Ferragina P, Manzini G. Opportunistic data structures with applications[C]//Foundations of Computer Science. Redondo Beach: IEEE, 2000: 390-398.
[12] Simon G. A de Bruijn graph approach to the quantification of closely-related genomes in a microbial community[J]. Journal of Computational Biology, 2012, 19(6): 814-825. DOI:10.1089/cmb.2012.0058
[13] Ye Y Z, Tang H X. Utilizing de Bruijn graph of metagenome assembly for metatranscriptome analysis[J]. Bioinformatics, 2016, 32(7): 1001-1008. DOI:10.1093/bioinformatics/btv510
[14] Liu B, Guo H Z, Michael B, et al. deBGA: read alignment with de Bruijn graph-based seed and extension[J]. Bioinformatics, 2016, 32(21): 3224-3232. DOI:10.1093/bioinformatics/btw371
[15] Fatemeh A, Hirak S, Avi S, et al. A space and time-efficient index for the compacted colored de Bruijn graph[J]. Bioinformatics, 2018, 34(13): 169-177. DOI:10.1093/bioinformatics/bty292
[16] Bowe A, Onodera T, Sadakane K, et al. Succinct de Bruijn graphs[C]//Workshop on Algorithms in Bioinformatics. Berlin: Springer, 2012: 225-235.
[17] Muggli M D, Alexander B, Noyes N R, et al. Succinct colored de Bruijn graphs[J]. Bioinformatics, 2017, 33(20): 3181-3187. DOI:10.1093/bioinformatics/btx067
[18] Almodaresi F, Pandey P, Patro R. Rainbowfish: a succinct colored de Bruijn graph representation[C]//Workshop on Algorithms in Bioinformatics. Dagstuhl, 2017: 1-15.
[19] Grabherr M G, Haas B J, Yassour M, et al. Full-length transcriptome assembly from RNA-Seq data without a reference genome[J]. Nature Biotechnology, 2011, 29(7): 644-652. DOI:10.1038/nbt.1883
[20] Haas B J, Papanicolaou A, Yassour M, et al. Transcript sequence reconstruction from RNA-seq using the Trinity platform for reference generation and analysis[J]. Nature Protocols, 2013, 8(8): 1494-1512. DOI:10.1038/nprot.2013.084
[21] Isaac T, Garimella K V, Zamin I, et al. Integrating long-range connectivity information into de Bruijn graphs[J]. Bioinformatics, 2018, 34(15): 2556-2565. DOI:10.1093/bioinformatics/bty157
[22] Limasset A, Cazaux B, Rivals E, et al. Read mapping on de Bruijn graphs[J]. BMC Bioinformatics, 2016, 17(1): 237-248. DOI:10.1186/s12859-016-1103-9
[23] Iqbal Z, Caccamo M, Turner I, et al. De novo assembly and genotyping of variants using colored de Bruijn graphs[J]. Nature Genetics, 2012, 44(2): 226-257. DOI:10.1038/ng.1028
[24] Alipanahi B, Kuhnle A, Puglisi S J, et al. Succinct dynamic de Bruijn graphs[J]. Bioinformatics, 2021, 37(14): 1946-1952. DOI:10.1093/bioinformatics/btaa546
[25] Guo H Z, Fu Y L, Gao Y, et al. deGSM: memory scalable construction of large scale de Bruijn graph[J]. IEEE/ACM Transactions on Computational Biology and Bioinformatics, 2021, 18(6): 2157-2166. DOI:10.1109/TCBB.2019.2913932
[26] Xin H Y, Shao M F, Carl K. Context-aware seeds for read mapping[J]. Algorithms for Molecular Biology, 2020, 15(1): 10-21. DOI:10.1186/s13015-020-00172-3
[27] Pruitt K D, Brown G R, Hiatt S M, et al. RefSeq: an update on mammalian reference sequences[J]. Nucleic Acids Research, 2014, 42(D1): 756-763.

相关话题/

  • 领限时大额优惠券,享本站正版考研考试资料!
    大额优惠券
    优惠券领取后72小时内有效,10万种最新考研考试考证类电子打印资料任你选。涵盖全国500余所院校考研专业课、200多种职业资格考试、1100多种经典教材,产品类型包含电子书、题库、全套资料以及视频,无论您是考研复习、考证刷题,还是考前冲刺等,不同类型的产品可满足您学习上的不同需求。 ...
    本站小编 Free壹佰分学习网 2022-09-19