科学网

 找回密码
  注册

tag 标签: 序列比对

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

比对算法的原理及代码实现
luria 2018-5-4 15:28
这篇博文以简化的 Needleman-Wunsch 比对算法为例详解比对算法的原理及代码实现。 Needleman-Wunsch 算法是最著名的全局比对算法,在此基础上形成的 Smith-Waterman 算法是最著名的局部比对算法,虽然两者都非常巧妙,但基本原理和代码相差不大,这里仅讲解 Needleman-Wunsch 算法 。 1. Needleman-Wunsch 算法的原理 1970 年 Saul B. Needleman and Christian D. Wunsch 首次将动态规化的思路应用到生物信息学领域,形成了大名鼎鼎的 Needleman-Wunsch 算法,该算法在当前生物信息学领域得到广泛应用,是全局比对算法中最重要的算法。 闲言少述,直接进入正题。以下两条序列进行全局比对为例, Needleman-Wunsch 算法的具体步骤如下: sequence1 GCATGCU sequence2 GATTACA 1.1 初始化矩阵 首先建立一个空的矩阵,矩阵上的行名为 sequence1 的碱基,矩阵的列名为 sequence2 的碱基。因为需要初始值,所有数据区第一行和第一列依次为 -1, -2, -3, -4... 这组递减数列,相连两项之间的差值为 gap 罚分。 这里为了方便起见,采用最一般的罚分,即 match 得 1 分, mismatch 和 gap 罚 1 分(即得 -1 分,以下叙述均用得分表示,若为罚分则得分为负)。 图 1. 初始空矩阵 注: match=1, mismatch=-1, gap=-1 1.2 三个方向移动到当前位点时的综合得分 依次从左上往右下计算出每个位点的得分,计算时先算出从左,从上及从左上角移动到当前位点时的得分,这个得分值为: 不同方向移动综合得分 = 移动前位点的得分 + 移动过程的得分 移动前位点的得分为移动前位点方框中的值,移动过程的得分按 1.1 中的得分约定计算如下: Ø 从上往下和从左往右移动时都会引入 gap ,前者是在横向这条序列上引入 gap ,后者是在纵向这条序列上引入 gap ,因此都会得 -1 分; Ø 从左上往右下方向移动时,如果当前位点横向和纵向对应碱基一致,表明为 match ,得 1 分;如果当前位点横向和纵向对应碱基不一致,表明为 mismatch ,得 -1 分。 具体示意图如下: 图 2. 三个方向移动时综合得分 值得一提的是, Smith-Waterman 算法 仅在此基础上加入一个 0 值,让上述三个方向上的值与 0 ,共四个值比较大小。而且在最开始初始化矩阵时将初始行初始列的值都设为 0 。这样整个矩阵中的值没有负值。因此可以从任何位置开始,后面回溯时从矩阵中最大的值开始回溯,这样就可以达到局部比对的效果,真的是太精妙了! 1.3 当前位点得分 从三个方向(从上到下,从左到右,从左上到右下)移动到当前位点的综合得分的最大值,即为当前位点得分。 那么由上图 2 中可得三个方向移动到当前位点时的最大得分为 max(1, -2, -2) = 1 即当前位点得分为 1 (图中表格第三行第三列值为 1 ) 按照以上原则,将矩阵上每个位点都计算出来,填满整个表格。 强列建议大家手动算一次 ,实际计算会让思路更加清晰,这对后面写代码实现非常有帮助! 我手动计算结果如下,与 wiki 百科 上的一致。 图 3. 整个矩阵的结果图 1.4 回溯获取最佳比对结果 沿右下角向左上角回溯,每个位点依然有三个位置,左上,左边和上边,如果最大值出现在上面,则横向这条序列引入一个 gap (-) ,纵向这条序列取该处碱基;如果最大值出现在左边,则纵向这条序列引入一个 gap (-) ,横向这条序列取该处碱基 ; 如果最大值出现在左上角,则不引入 gap ,纵向和横向均取该处碱基。这样获取到两段序列,再反转过来(因为序列是从后往前回溯的)即为最终结果。 图 4. 回溯找最佳路径 2. 用 Python 实现全局比对 方便起见,这里仅用了原生python实现算法,具体代码如下,有兴趣的朋友也可以使用cython或python数据分析包,或者其它语言实现,并欢迎贴到讨论区,谢谢。 --------------------- 可下载代码源文件 global_alignment.py --------------------- #!/usr/bin/env python import sys __author__ = 'luria@sohu.com' __date__ = '2018.05.04' __version__ = 'v1.0' def main(self, subject, query): match, mismatch, gap = 1, -1, -1 # if you wanna to use other score matrix, # you could do code reactoring as a practice pos_dict = {(i, j): 0 for i in xrange(len(subject)+1) for j in xrange(len(query)+1)} for k in pos_dict: if not k and not k : pos_dict = 0 elif not k and k : pos_dict = k * gap elif not k and k : pos_dict = k * gap # print pos_dict # this step must be follow first loop for i in xrange(1, len(subject)+1): for j in xrange(1, len(query)+1): up2down = pos_dict + gap left2right = pos_dict + gap if subject == query : topleft2bottomright = pos_dict + match else: topleft2bottomright = pos_dict + mismatch pos_dict = max(up2down, left2right, topleft2bottomright) # print matrix ''' for i in xrange(len(subject)+1): temp = )) print \\t.join(temp) ''' out_subject, out_query = '', x, y = len(subject), len(query) while 1: if not x and not y: break direct_dict = { up : pos_dict , left : pos_dict , top_left : pos_dict } #print direct_dict order = sorted(direct_dict.iteritems(), key=lambda o:o , reverse=True) # only get one best path at this program, # you can get all best path if you like if order == up: out_subject += - out_query += query x -= 1 elif order == 'left': out_query += - out_subject += subject y -= 1 else: out_subject += subject out_query += query x -= 1 y -= 1 print out_subject print .join( == out_query else for i in xrange(len(out_subject))] ) print out_query print if __name__ == '__main__': if len(sys.argv) == 1: sys.exit( global_align.py subject query) main(*sys.argv) 参考材料: https://en.wikipedia.org/wiki/Smith-Waterman_algorithm https://en.wikipedia.org/wiki/Needleman-Wunsch_algorithm
个人分类: Algorithm|11377 次阅读|0 个评论
如何做出漂亮的序列比对图——ENDscript/ESPript
duwenyi 2017-12-16 20:57
以下所有内容均属于个人学习过程中的总结,如有错误,欢迎批评指正! 如何做出漂亮的序列比对图——ENDscript/ESPript First release:2017-12-16 Last update: 2018-03-17 大家经常在文献中看到非常好看的序列比对图,现在笔者将目前见过的最好看的序列比对图的作图方法作分享,希望对大家的科研工作有所帮助,效果图如下: 在蛋白质数据、Genbank、Uniprot等数据库搜索得到蛋白质序列,本例分别采用PDB ID为 3L3U 和 3OYA 的蛋白质序列的A链作比对,并得到序列比对图; 打开 ClustalW网站 ,采用Clustal算法进行序列比对,输入格式如下,点击Execute Multiple Alignment进行序列比对; 比对完成后,会自动弹出结果页面,点击clustalw.aln下载该序列比对文件,该文件即包含了两个序列的比对结果; 打开 ENDscript/ESPript网站 对序列比对结果进行作图,点击选择文件上传得到的clustalw.aln文件,再点击页面顶部的SUBMIT按钮即可,注意在该页面的底部可以选择输出的文件类型以及图片格式,主要有.png和.TIF格式的图片,两种格式的图片都可以作为文章发表; 完成后,会自动弹出结果页面,本文只勾选了pdf文档,因此只输出了以下两个文件,随便哪一个都可以打开; 最终得到额结果文件内容如下,可以采用PS等图形处理软件进行处理和加工,比如缩小两行序列之间的间距等。 备注: 通过ClustalW工具得到的序列比对文件不一定正确,毕竟只是人设计的软件,不能代替人,可以手动调整序列,使其匹配程度更高; 很多情况下,大家会遇到点击Submit后,浏览器并没有弹出结果文件的页面,这时需要将ENDscript/ESPript 网站添加到可信任站点里面,或者白名单,以猎豹浏览器为例,打开浏览器的选项/设置,选择广告过滤,将 http://espript.ibcp.fr/ESPript/cgi-bin/ESPript.cgi 添加到例外里面,并去掉浏览器的弹出广告拦截即可。 如果你对分子模拟、量子化学感兴趣,或者对文章有什么问题,欢迎加入我们的交流群: qq群 580744615
个人分类: 软件学习|33345 次阅读|0 个评论
[转载]Blastp、PSI-BLAST和PHI-BLAST介绍
han663268 2014-11-30 09:33
Blastp/PSI-Blast/PHI-BLAST都是蛋白序列与蛋白序列之间的Blast比对。 1、Blastp:标准的蛋白序列与蛋白序列之间的比对 Blastp用于确定查询的氨基酸序列在蛋白数据库中找到相似的序列。跟其它的Blast程序一样,目的是要找到相似的区域。 2、PSI-BLAST:敏感度更高的蛋白序列与蛋白序列之间的比对 Position-Specific Iterated (PSI)-BLAST,是一种更加高灵敏的Blastp程序,对于发现远亲物种的相似蛋白或某个蛋白家族的新成员非常有效。当你使用标准的Blastp比对失败时,或比对的结果仅仅是一些假基因或推测的基因序列时(hypothetical protein or similar to...),你可以选择PSI-BLAST重新试试。 3、PHI-BLAST:模式发现迭代BLAST PHI-BLAST,模式发现迭代BLAST,用蛋白查询来搜索蛋白数据库的一个程序。仅仅找出那些查询序列中含有的特殊模式的对齐。 PHI的语法详细介绍看这 里: http://www.ncbi.nlm.nih.gov/blast/html/PHIsyntax.html PSI-blast链接:http://www.ebi.ac.uk/Tools/sss/psiblast/
个人分类: 拾人牙慧|8054 次阅读|0 个评论
perl 两条序列比对
zoubinbin100 2014-3-17 17:05
利用perl进行两条序列比对有多种方法,其中bioperl里有一个Bio::Tools::Run::Alignment::Clustalw,但是在使用Bio::Tools::Run::Alignment::Clustalw模块时,我觉得有两个问题:1,两条序列的比对分数输出到了标准输出,比较难得倒这个分数;2,matrix矩阵不知道怎么使用自己定义的。因为用BLOSUM矩阵,发现在比对以下2条序列时有点小问题。 seq1:AGCC seq2:ACT 程序输出: AGCC . ACT 应该是: AGCC A .CT 对于第一个问题可以通过别的方法解决,但是第2个问题,就不知道该如何解决,搜素网上,倒是有很多perl的代码实现用动态规划比对对两条序列( http://yixf.name/wp-content/uploads/2011/03/a-perl-program-for-sequence-alignment.pdf ),以及bl2seq,Bio::Tools::pSW方法( http://biochemistry.utoronto.ca/steipe/abc/index.php/BioPerl_exercise_alignment ),但是如果能使用自定义矩阵,就可以进行很多个性比对,进行搜索发现Bio::Tools::dpAlign似乎可以使用自定义替换矩阵。
个人分类: 生物信息|1696 次阅读|0 个评论
介绍一款可以自动识别基因类型的序列比对软件Muscle
热度 2 Bearjazz 2011-7-23 11:20
介绍一款可以自动识别基因类型的序列比对软件 Muscle 熊荣川 xiongrongchuan@126.com 通常我们对比的基因序列有两大类型:编码基因序列以及非编码基因序列。也正因为这样我们基因比对的策略是不一样的:前者比对的基本单位是密码子,序列长度以及空格的长度都必须是 3 的倍数,这样才有生物学意义同时也是对基因序列进行后续分析的必须要求;后者由于是非编码基因,所以比对的基本单位就是核苷酸。 我们常用的序列比对软件 clustalW 通常用来比对非编基因,我们之前也介绍过 Mega5 相较于 Mega4 的新功能之一就是可以进行基于密码子的基因序列比对。 下面我们介绍一款可以自动识别不同类型基因序列,并自动按照相应规则进行比对的软件 Muscle.exe 介绍一款可以自动识别基因类型的序列比对软件Muscle.pdf
个人分类: 我的研究|6651 次阅读|2 个评论
Mega5新功能之基于密码子的基因序列比对
Bearjazz 2011-7-21 21:34
Mega5 新功能之基于密码子的基因序列比对 熊荣川 xiongrongchuan@126.com 在进行功能基因组的分析中,密码子经常作为分析的基本单位。因此,在进行功能基因的序列比对时就不能像非功能基因(如 12S rDNA )以核苷酸为基本的比对单元。从表征上看,功能基因的比对结果应该是( 1 )序列长度应该是 3 的倍数;( 2 )缺口大小也应该是 3 的倍数。 通常来说,功能基因的比对原理是以该基因编码的蛋白质序列为指导模板进行比对,一方面自然满足以上两方面的要求,另外最为重要的是因为蛋白序列由 21 个可能的氨基酸残基组合而成,其比对之后再进行相应的核苷酸序列比对有利于提高“信噪比”。 其实很多软件和网络服务器都提供了这种比对功能(以后我们会逐一介绍),下面就发布不久的 Mega5 软件进行简单的演示。 首先是下载我们所要研究的目标功能基因序列,删除密码子同时检查序列长度是否为 3 的倍数。 Mega5的新功能之基于密码子的基因序列比对.pdf
8620 次阅读|0 个评论
[转载]Blast使用
lry198010 2010-7-20 19:12
序列比对软件BLAST已经成为序列比对的代号,且其词性也已经开始变化,诸如BLASTing之类的词在各种文章中已是屡见不鲜,可见其影响之深,使用之广,如同分子生物学领域中的PCR。 自从1997年释出现有的BLAST版本后,这十多年来,BLAST经历了多 次的修改,功能、性能一版比一版好,相应的其Source code也被修改的凌乱不堪,难于维护,极大的限制了对BLAST进一步 的修改、功能提升。再加上NCBI C++ Toolkit项目的开展,促使BLAST的维护者们决定从头开始,重新编写 BLAST代码。 2009年7月,NCBI发布了BLAST升级版——BLAST+,BLAST+使用了BLAST的核心算法,延 续了BLAST的优势功能,发展并增强了如BLAST的fastacmd程序,新增了如update_blastdb.pl等 程序。下面简单列举此次修改的主要内容: 高度模块化是本次修改的主要目标,不仅从理论上,更是从代码上明 确模块化了BLAST的三个过程:setup, scanning, trace-back。 选择的ISO C99标准,使得源代码可以同时被c以及c++使用,不需要做任何修改。 Database mask:之前的版本 需要第三方软件如RepeatMasker来mask数据库,c现在内置了WindowMasker和DUST来进行重复序列过滤。 使 用Query split, Partial subject sequence retrieval以及Retrieving subject sequences from an arbitrary source等策略来提高长序列(如染色体序列)的比对效率,有效的降低了CPU时 间,充分使用了一、二级缓存。 全新的命令行参数使用方式,添加了长字符串作为参数的支持,如-out,而不是以前的-o,关 于每一个程序其具体的命令行参数,可以通过添加-help参数来查阅。 分离blastn, blastp, blastx等作为独立的程序以替代之前的blastall -p blastn模式。 makeblastdb, blastdb_aliastool, blastdbcmd三个程序都和数据库有关,增强了数据库方面的处理。 添加 Best-Hit算法,只报告最优的Hit。比较有意思的是,最新的FASTA (version 36) 程序学习BLAST添加了multi-HSP 的功能,而BLAST+却学习FASTA添加了Best-Hit的功能。互相学习,互相提高。其实,在BLAST是学习并消化吸收了 一大批文章中的先进成果而发展起来的,例如MPBLAST, BLAST++, miBLAST, BLAT等。 添加了保存search strategy的功能,所谓search strategy也就是程序运行时的参数等信息(还包括对数据库的一些定制,详细信息会在后面的文章中介绍)。 总之,对 于广大用户来说,BLAST+的发布绝对是一个好消息。它是对BLAST的一个全新设计,其在性能(主要对长序列的比对)以及易用性上均有了很大提高,尤其在易用性上。同时对于开发者来说,也是一个“解脱”,清晰的模块化将会极大的提高维护者的效率。
个人分类: 生物信息|5177 次阅读|0 个评论
研究热点:生物信息学 数据库 序列比对
xupeiyang 2010-7-8 09:21
中国知网(CNKI)基于数据库的数据挖掘、知识发现和信息整合技术,分析出各科技领域的科研热点和研究前沿,对科研人员了解、掌握科技动态与进展很有帮助。 科研热点的相关信息包括:相关文献、专利文献、科技成果、国家科研项目、研究人员、研究机构、研究主题、学术文献被引情况和下载情况等。 相关研究项目,科研人员应当特别关注正在进行中的科研项目(2010 - 2014年的在研项目),了解在研项目的研究动态,跟踪科技进展。目前,国内还没有一个在研科技项目数据库可供检索查阅的,在CNKI平台查阅比较方便。 详细信息见: http://elib.cnki.net/grid2008/DetailHot/HotView.aspx?subCode=A006-37 热点名称: 生物信息学 数据库 序列比对 知识点: 生物信息学 数据库 序列比对 多序列比对 人类基因组计划 基因组信息学 基因组学 生物信息 蛋白质组学 遗传算法 序列比对算法 蛋白质序列 数据挖掘 算法 基因芯片 数据挖掘技术 计算机科学 生命科学 二次数据库 双序列比对
个人分类: 热点前沿|4085 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-28 12:41

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部