1.一种基于多步双向De Bruijn图的变长kmer查询的顶点扩展方法,其特征在于,包括:步骤A:读取测序数据源文件,构造多步双向De Bruijn图;
步骤B:在所述多步双向De Bruijn图中对分叉顶点的变长kmer进行构造和统计;
步骤C:在所述多步双向De Bruijn图中基于变长kmer查询的顶点扩展。
2.如权利要求1所述的方法,其特征在于,所述步骤B中,对所述多步双向De Bruijn图中的顶点所有可能的分叉合并路径上的k+2长的变长kmer构造权重表,选择权重最高的一组分叉路径组合进行分叉路径上的双向边合并。
3.如权利要求1所述的方法,其特征在于,所述步骤C中,对于一个给定的分叉顶点u,在查询顶点u所有的k+2长的变长kmer权重值之后,选择权重最高的一组分叉路径组合进行分叉路径上的双向边合并,同时删除合并前的被选择的分叉双向边。
4.如权利要求2或3所述的方法,其特征在于,所述权重为变长kmer出现次数或变长kmer模糊匹配加权次数。
5.如权利要求1所述的方法,其特征在于,所述步骤B进一步包括:步骤B1:遍历所述多步双向De Bruijn图中的每个顶点u;
步骤B2:统计顶点u中正向边的个数p和反向边的个数q;
步骤B3:若p+q大于等于3且p和q均至少为1,则执行步骤B4,否则返回执行步骤B1;
步骤B4:计算出顶点u的q个反向边的对偶双向边,并将对偶双向边的倒数第k+1个字符取出存到入边字符数组m;
步骤B5:将顶点u的p个正向边的第一个字符存到出边字符数组n;
步骤B6:将(m,顶点u的正向字符串,n)所有的组合构成的k+2长的kmer记录为变长kmer数组。
6.如权利要求1所述的方法,其特征在于,所述步骤C进一步包括:步骤C1:打开测序序列文件,逐个读取每条序列;
步骤C2:将所述变长kmer数组逐个匹配读入的序列,并对每个变长kmer计数;
步骤C3:遍历所述多步双向De Bruijn图中的每个顶点u;
步骤C4:统计顶点u中正向边的个数p,反向边的个数q;
步骤C5:若p+q大于等于3且p和q均至少为1,则执行步骤C6,否则返回执行步骤C3;
步骤C6:计算出顶点u的q个反向边的对偶双向边,并将对偶双向边的倒数第k+1个字符取出存到入边字符数组m;
步骤C7:将顶点u的p个正向边的第一个字符存到出边字符数组n;
步骤C8:查询由(m,顶点u的正向字符串,n)的所有组合构成的k+2长的kmer的出现次数,选择出现次数最大的一组正向边和反向边进行合并扩展。
7.如权利要求6所述的方法,其特征在于,所述步骤C2中将所述变长kmer数组逐个匹配读入的序列包括对反向序列的匹配。
8.如权利要求1所述的方法,其特征在于,所述步骤A进一步包括:压缩存储步骤,具体为
A11、读取一个序列s;
A12、将序列s用滑动窗口切割为多个片段t;
A13、对每个片段t,使用核酸编码表进行编码,并表示为一个64位的整数a;
A14、将片段t进行反转,使用对称互补表将反转的片段互补处理,得到互补片段v,并再次使用步骤A13中的核酸编码表将互补片段进行编码,并表示为一个64位的整数b;
A15、取整数a和整数b的最大数,作为片段t和互补片段v的k分子的标志数;
A16、重复步骤A11-A15,直至所有序列完成;
和De Bruijn图构造步骤,具体为
A21、读取一个序列s;
A22、将序列s用滑动窗口切割为多个片段t,选取一片段t其标志数为cur、并标记其前、后的片段的标志数分别为pre、lat;
A23、若t的编码小于其互补片段编码,则交换pre,lat的值;
A24、在cur的正向位置映射表的相应bit位置1来表示指向pre的边;
A25、在cur的反向位置映射表的相应bit位置1来表示指向lat的边;
A26、重复步骤A22-A25,处理序列s的其他片段t,直至完成序列s的全部片段t,执行步骤A27;
A27、读取一个新的序列s,重复步骤A22-A26;直至处理完所有的序列,执行步骤A28;
A28、完成双向多步De Bruijn图的构造。
9.如权利要求8所述的方法,其特征在于,所述步骤A12、A22中的滑动窗口为长度为k的滑动窗口,其中0
所述步骤A13中的核酸编码表为{A:00,C:01,G:10,T:11};
所述步骤A14中的对称互补表为{A->T,C->G,G->C,T->A};
所述步骤A14具体为,将片段t的字符串进行反转,使用对称互补表将反转的字符串中每个字符变为其互补字符,得到互补字符的字符串v,并再次使用步骤A13中的核酸编码表将字符串v进行编码,并表示为一个64位的整数b。
10.如权利要求8所述的方法,其特征在于,所述步骤A22中,若片段t没有之前或之后的片段,则对pre或者lat值赋为空或NULL;
步骤A24中正向位置映射表为{A:0,C:1,G:2,T:3},位置查询字符为pre的最后一个字符;
步骤A25中反向位置映射表为{A:4,C:5,G:6,T:7},位置查询字符为lat的第一个字符的互补字符。