简介

BWT算法在多款序列比对软件(BWA,bowtie)中都有涉及,那么对于RNA-seq的2代数据,一般建库长度是单端300bp,双端各150bp左右。

序列比对

对于两个序列进行比对,即pairwise alignment,我们可以按比对方式分为全局比对(NW算法)和局部比对(SW算法):

当然对于两条短序列,可采用上述算法进行比较,但是如果其中一条序列换成了较长的参考基因组序列,而另一条为fq文件的reads序列,采取这样的方式比对就会显得很慢

因此,为了提高效率,我们首先需要根据参考基因组建立index,然后在Seq 2里面取出一个短序列作为seed,通过seed于ref 的index建立联系,再通过ref index找到附近的序列,然后进行pairwise alignment

那么,建立ref index是通过说明方法建立的呢?

1. 第一代软件

比方说SOAP:

它把参考基因组分成一个个小片段,并且将这些小片段建立成hash关系,也就是说我在序列比对的时候,只要我获取到reads的内容,我就可以match(翻译为完全比对?)到参考基因组上,并获得其位置信息。

2.第二代软件

这里介绍的是BWA,bowtie。而这两款软件除了要对基因组建立index以外,还采用的是BWT算法来实现比对。

(1).什么是BWT算法

step1:假设我有一段序列: ACAACG

那么我们在序列后面加一个“$”符号:

step2:

之后,“$”符号向后平移一个单位,得到 :

“$”符号再向后平移一个单位:得到:

以此类推,最终得到:

这样的序列的排序表,接下来按照字母顺序进行排序($,A,C,G,T)有:

这个矩阵我们称之为转换矩阵

我们根据F列和L列元素的相对位置就可以推导出该序列的全部信息:

首先,我们单独取出F列和L列

在F列和L列中找到“$”,连接它们,那么在水平位置对应于的G(蓝色箭头)

这个G就是“$”前面的元素:

接下来在F列中找到元素G:

此时F列的G对应L列的C(蓝色箭头),此时序列为:

此时按照上述方法,才F列中找到元素C,由于L列中的元素C为第二个C(上面G后面的C视为第一个C),所以应该对于F列的第二个C

那么此时在L列里面对应元素A:

接下来L列第三个A对应F列第三个A,因此以此类推就可以最终还原(最终对应于L列的$):

(2).如何实现BWT比对

比方说我现在有一条短序列CAA要比对到ACAACG上,首先说明的是在比对过程中,CAA是反向进行比对的,即A->A->C

由于CAA第一个比对的元素是A,在F列中有三个A,因此我们分类讨论

选择第一个A:

此时比对结果为ACA,不符合

选择第二个A:

结果为$,不符合

选择第三个A:

此时比对结果为CAA,符合原序列

在现实中,CAA可以想象为fq文件reads,ACAACG可以想象为参考基因组,并且在比对中会存在mismatch和gap这种情况的发生,因此软件会对每一种比对的情况进行打分,择优处理

目前 bowtie 是没有gap这一项设定的

bwt比对算法 C语言,BWT比对算法相关推荐

  1. bwt比对算法 C语言,DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  2. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  3. java实现随机数生成算法_Java 语言实现的随机数生成算法

    广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...

  4. 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]

    <妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...

  5. c语言程序设计 算法,C语言程序设计第二章算法

    <C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...

  6. 短进程算法c语言,短进程优先算法C语言实现

    短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...

  7. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

  8. 数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc

    数据拟合算法剖析及C语言实现 数据拟合算法剖析及C语言实现 [摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据.通过拟合可以更好的分析和解释数据.在引用前人的算法基础上,采用正交 ...

  9. 人工免疫算法c语言程序,基于人工免疫算法的模拟电路故障诊断

    摘要: 模拟电路故障诊断一直以来都是十分必要和有意义的,目前已成为热门的研究课题.现代电子技术和计算机技术的迅速发展促进了片上系统和混合集成电路的大量涌现,这也对模拟电路的测试和故障诊断提出了更高的要 ...

  10. JAVA梅森旋转随机算法,C语言实现梅森旋转算法

    原理: 梅森旋转算法是一种伪随机数生成算法 1.定义相关宏和结构体 #include #include #include #include typedef unsigned int uint; #de ...

最新文章

  1. 王高利:Kvm虚拟化(1)__基础搭建
  2. shell cut 取变量值
  3. python 自定义异常和主动抛出异常(raise)的操作
  4. 极简实用的Asp.NetCore模块化框架决定免费开源了
  5. .net中调用esb_大型ESB服务总线平台服务运行分析和监控预警实践
  6. 2018程序员最佳ssh免费登陆工具
  7. PWN-COMPETITION-HGAME2022-Week1
  8. android https详解,如何使用HTTPS和HTTP来解析Android中的JSON数据?
  9. WCF并存Asp.net
  10. 2021-08-20 python安装及作图
  11. javascript String 对象
  12. (转载)equals与==
  13. 深入C++的new(2011-11-15 15:08 )
  14. 红黑树相关定理及其证明
  15. apple-system BlinkMacSystemFont Mac兼容字体库
  16. js获取USB扫码枪数据
  17. adguard拦截规则存在哪里_Adguard怎么用-使用Adguard拦截广告的方法 - 河东软件园...
  18. eclipse -javaEE 和jdk版本对应
  19. 【递推矩阵快速幂】hdu 2604
  20. C语言 | getchar()、getche()、getch()的区别?

热门文章

  1. 修真院教学模式四大体系之开发流程
  2. Vue.js---关闭语法检查
  3. java 过滤script_Java过滤任意(script,html,style)标签符,返回纯文本--封装类
  4. MT2712 USB
  5. BMW 与 Harvester 的云与边缘之旅
  6. vue和element框架搭配实现导航条跳转,点击按钮跳转页面导航条也跟着变换
  7. 美版iPhone4卡贴解锁
  8. react-native >0.69版本 链接@ant-design/icons-react-native
  9. 2021年,第一份值得职场人“跪读”的书单来了
  10. android ios9 rom,谁说安卓不如苹果?看Android7.0如何逆袭iOS9.3