序列比对(sequence alignment)又称序列联配, 为确定两个或多个序列之间的相似性(similarity) 或同源性(homology) ,将序列按照一定规律进行排列的操作。序列相似性和序列同源性为两个不同的概念,序列相似性是可以量化的参数,是一个数量值,如相似性为90%。而同源性指两条序列是否来自共同祖先,来自同一祖先则为同源序列。一般而言,序列相似性越高,其同源可能性越大。

序列比对经过多年的发展, 已提出了一系列算法,其中Needleman-Wunsch算法(NW算法)是全局比对的经典算法,而Smith-Waterman算法(SW算法)是局部比对的代表性算法。NW算法和SW算法都采用动态规划算法实现序列联配。二代、 三代序列比对算法基本上利用NW和SW算法得到序列比对结果。

序列比对是宏基因组数据分析的基础,但非常耗时,尤其是对于长序列。随着测序技术的发展,尤其是第三代单分子测序技术的出现,产生的序列长度平均值可以超过20000 bp。如此长的序列比对,需要消耗更多的计算时间和计算内存。为了提高长序列比对速度,Martin Sosi等人2017年在Bioinformatics期刊上发表了一篇快速序列比对软件包Edlib,可实现长序列,甚至长基因组之间的序列比对。

如何使用 Edlib 序列比对包

Edlib主要基于Myers’s bit-vector (位相量)实现序列比对过程,而且采用了带状比对(banded alignment)思想,可以进一步提高运算速度和降低内存消耗。Edlib实现过程比较复杂,不容易理解,对计算机数据结构、编程技巧有较高的要求。本次不做详细解读,主要高速大家怎么用 Edlib 软件包。Edlib是用C++语言编的,主要包含两个文件:edlib.h 头文件和edlib.cpp源文件。

首先在Github上下载Edlib源代码:

git clone https://github.com/Martinsos/edlib.git

然后用CMake命令进行安装:

cd build && cmake -D CMAKE_BUILD_TYPE=Release .. && make

然后在 bin/ 目录中会生成二进制文件:

执行以下命令进行测试:

.runTests

Edlib运行时候需要包括"edlib.h"文件,如下:

#include #include "edlib.h"int main() {    EdlibAlignResult result = edlibAlign("hello", 5, "world!", 6, edlibDefaultAlignConfig());    if (result.status == EDLIB_STATUS_OK) {        printf("edit_distance('hello', 'world!') = %d\n", result.editDistance);    }    edlibFreeAlignResult(result);}

Edlib主程序实现函数为edlibAlign(上面第5行),需要5个参数,其中第一个是比对的第一条序列,第二个参数为序列的长度,第三个是第二条序列,第四个是序列的长度,第五个是比对模式设置,一般用默认值。

Edlib比对模式(EDLIB_MODE)有三种设置,分别为NW、SHW和HW模式。比如我们有两条序列需要进行比对:

s1= GCTAACTGGC 和 s2=CGTAGCTG NW模式就是我们之前的全序列比对,SHW模式是从序列 s1 开始,只比对到序列 s2 的末端,HW是寻找序列 s2 和序列 s1 之间最相似的部分,也就是半全局(semi-global sequencealignment )比对。

具体实现不同的比对模式如下图第5个参数:EDLIB_MODE_HW

edlibAlign(seq1, seq1Length, seq2, seq2Length, edlibNewAlignConfig(42, EDLIB_MODE_HW, EDLIB_TASK_PATH, NULL, 0));

比对结果

Edlib和其他2个方法SeqAn和Parasail进行了比较,从下表中可以看出,比对的序列长度都是10000 bp起步,Edlib实现的序列比对速度明显高于其他方法,尤其是序列相似性越高,比对的速度越快。

参考资料:

Šošić M, Šikić M. Edlib: a C/C++ library for fast, exact sequence alignment using edit distance. Bioinformatics, 2017, 33(9): 1394-1395.

往期回顾

  • VirFinder:基于k-mer的病毒序列预测算法
  • Tax4Fun: 16S 预测群落代谢功能实例——手把手示范4-差异可视化分析-终结篇
  • kseq.h读取序列文件,快到想不到!
  • 还没开学?经典生物信息书免费送!免费送!免费送!总价值4170元!
  • Tax4Fun: 16S 预测群落代谢功能实例——手把手示范3-差异分析
  • Tax4Fun: 16S 预测群落代谢功能实例——手把手示范2
  • Tax4Fun: 16S 预测群落代谢功能实例——手把手示范1
  • 三代序列比对算法minimap2,就是快,快,快!
  • 测序数据过滤神器Trimmomatic:去除接头和低质量序列
  • 基于三代测序数据的结构变异检测,PBHoney方法解读
  • usearch序列聚类地位不保?看看Linclust算法,快你没商量!
  • BMC Bioinformatics期刊三审被拒,如此悲催,如何避免?
  • NCBI数据下载速度50M/S以上?太快了吧
  • rHAT,国内首个三代序列比对算法
  • 扩增子OTU聚类软件:SeekDeep方法解读(NAR方法文章)
  • mothur QIIME usearch,三足鼎立,谁主沉浮?
  • 三代测序序列比对利器-BLASR,更小更快更方便
  • 生信算法“八股文”,发表算法不再难!

两个文件比对_Edlib:方便快速的长序列比对软件包相关推荐

  1. Notepad++如何对比文件 Notepad++对比两个文件代码方法

    大家在使用Notepad++的时候,需要对编辑的两个文件进行比较,找出两个文件代码的区别,快速进行编辑修改,那么Notepad++如何对比文件,下面小编就给大家带来Notepad++对比两个文件代码方 ...

  2. 如何快速对比两个文件夹的文件的不同

    文章目录 摘要 安装步骤 [使用软件] [下载安装包] [使用教程] 注意事项 总结 思考 更新日志 摘要 硬件环境:无特殊要求 软件环境:Win7 安装步骤 [使用软件] Beyond Compar ...

  3. jq 比较两个时间是否在同一天_.NET CORE下最快比较两个文件内容是否相同的方法...

    最近项目有个需求,需要比较两个任意大小文件的内容是否相同,要求如下: 项目是.NET CORE,所以使用C#进行编写比较方法 文件大小任意,所以不能将文件内容全部读入到内存中进行比较(更专业点说,需要 ...

  4. linux合并vi的两个文件,两个文件的对比查看及合并工具:vimdiff-文件合并

    文件 a 和 b 比如有两个源代码文件 a 和 b,如上图所示. 在Unix/Linux平台上,对比查看两个源代码文件的差异时,最简单且随处可用的就是命令行工具,比如diff.diff以逐行的方式比较 ...

  5. diff 比较两个文件的差异

    功能:比较两个文件的差异,并把不同地方的信息显示出来.默认diff格式的信息. diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的补丁文件.也使用patch命令对 ...

  6. .NET CORE下最快比较两个文件内容是否相同的方法

    最近项目有个需求,需要比较两个任意大小文件的内容是否相同,要求如下: 项目是.NET CORE,所以使用C#进行编写比较方法 文件大小任意,所以不能将文件内容全部读入到内存中进行比较(更专业点说,需要 ...

  7. 逐行读文件_用python比较两个文件的内容是否相同

    有两个文件,考虑编写算法,尽可能快的比较这两个文件的内容是否相同.看起来这是一个非常简单的事情,但仔细思考就会发现,有很多可以琢磨的地方.我在学习filecmp模块的cmp方法时,阅读它的源码,感慨于 ...

  8. linux两文件对比,linux对比两个文件的差异

    在项目维护阶段,经常会对垃圾文件进行清理.比如没有在数据库中的文件进行删除,这个时候最好的选择就是使用shell命令了:废话不多说直接上代码: 1.首先准备好从数据表导出来的数据,方法随意 2.在服务 ...

  9. python怎么把两个文件合并工具_python开发目录合并小工具 PathMerge

    前言 这个程序陆陆续续开发了几天,正好我在学Python,就一边做一边学,倒是学到不少东西. 不得不说python是快速开发的好工具. 程序做了一些改进,这两天又忙着毕设,现在才想起来发到博客上.想想 ...

最新文章

  1. 同域内测试蠕虫的一种方法
  2. oracle瘦连接,java-无法使用jdbc瘦驱动程序连接到oracle数据...
  3. 电力系统继电保护原理及仿真_电力系统继电保护(529页)
  4. PAT甲级 -- 1090 Highest Price in Supply Chain (25 分)
  5. webpack --- [读书笔记] webpack中常用的一些配置项
  6. Bumblebee微服务网关之Url重写
  7. sql语句优化总结 mysql_MySQL-SQL优化总结
  8. webservers ajax,jQuery AJax调用asp.net webservers的实现代码
  9. linux 过滤某种类型文件,linux mv 类型过滤
  10. 学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(一)
  11. if else 的或(||)
  12. idea安装插件后无法启动
  13. 天龙八部科举答题问题和答案(全1/8)
  14. 【大规模MIMO学习笔记】大规模MIMO的信道特点
  15. 解密!区块链BaaS是什么?
  16. 黑盒测试、白盒测试与灰盒测试方法
  17. SpringBoot集成SwaggerUI及其使用
  18. R 语言怎么保存工作目录到当前路径_第一讲 R基本介绍及安装
  19. git+bitbucket使用备忘录
  20. 2021编程语言top10,C蝉联第一,Python超越Java成为第二

热门文章

  1. Linux期末复习题库(1)
  2. 使用OpenCV进行图像全景拼接
  3. 数数正方形(ACM/ICPC World Finals)
  4. 201671010145 2016-2017《Java程序设计》JAVA语言中,异常处理有哪几种方式?
  5. MySQL Online DDL的改进与应用
  6. 使用nodejs安装Vue-cli
  7. ADMT3.2域迁移之Server2003至Server2012系列(八)生成密钥文件及安装密码迁移工具...
  8. [转]Shell脚本中发送html邮件的方法
  9. Parallax Mapping Shader 凸凹感【转】
  10. 挑选适合自己的公司——网络工程师你是否真的已经倒下(二)