嗨,我是小师妹,很高兴能够和大家一起来学习生物信息学。如果说老师让你去找两个个体的基因组变异情况,相信很多人都知道先选参考基因组进行BWA比对,得到bam文件后使用GATK或samtools软件等等一套流程得到VCF文件,最后进行注释就得到基因组之间的变异情况了。但这是有原始数据的情况,那假设我们是想比较两条基因组文件的差异呢?手里没有raw data又如何进行基因组变异检测呢?本次介绍的软件操作占用内存比较大,建议使用服务器,欢迎联系小师妹租赁性价比居高的服务器~
基因组共线性神器MUMmer4这就来啦,MUMmer能够用于研究细菌不同菌株间的基因组倒位现象,分析大鼠与小鼠基因组在进化过程中的重排,以及比较同一物种不同基因组组装版本的差异等。其基于后缀树算法,其运行速度远超BLASTZ(基于k-mers)。后缀树(Suffix tree)是一种数据结构,能快速解决很多关于字符串的问题。
MUMmer是一种快速比对大DNA序列的系统。它可以对齐:
- 全基因组到其他基因组
- 大基因组相互组装
- 部分(草稿)基因组序列相互连接
- 或者(在版本4中)对基因组进行一组读取。
前几天小师妹给大家带来了系统发育分析一站式的分享!今天给大家介绍的是一个非常强大基因组共线性神器工具——MUMmer,同时也可以做SNP检测。遗传分析可难不倒生信高手小师妹,要是同学们有自己做不了的生信分析,欢迎随时联系我!!!
一、下载和安装
mummer发表于1999年,是经典的全局比对软件。一直有更新维护,最新的版本是2020年10月发布的4.0.0 candidate 1版本,下面就给大家带来最新鲜的mummer4安装指南:
图1 Mummer工具各版本更新情况
首先我们需要先安装所需的REQUIREMENTS,建议新建一个conda环境
- perl5 (5.6.0)
- sh
- sed
- awk
OPTIONAL UTILITIES
- fig2dev (3.2.3)
- gnuplot (4.0)
- xfig (3.2)
接下来是安装部分:
$ conda create -n mummer4
$ conda activate mummer4
$ conda install -c conda-forge perl
$ conda install -c conda-forge fig2dev
$ conda install -c conda-forge xfig
$ mkdir mummer4
$ cd mummer4
$ wget https://github.com/mummer4/mummer/releases/download/v4.0.0rc1/mummer-4.0.0rc1.tar.gz
$ tar -zxvf mummer-4.0.0rc1.tar.gz
$ ./configure –prefix=/path/to/installation
$ make
$ make install
$ export PATH=$current_path/mummer-4.0.0rc1:$PATH
Mummer一共有4个工作流程:
- nucmer: 由Perl写的流程,用于联配很相近(closely related)核酸序列。它比较适合定位和展示高度保守的DNA序列。注意,为了提高nucmer的精确性,最好把输入序列先做遮盖(mask)避免不感兴趣的序列的联配,或者修改单一性限制降低重复导致的联配数。
- promer:也是Perl写的流程,它以翻译后的氨基酸序列进行联配,工作原理同nucmer。
- run-mummer1,run-mummer3:两者是基于cshell写的流程,用于两个序列的常规联配,和promer,nucmer类似,只不过能够自动识别序列类型。它们擅长联配相似度高的DNA序列,找到它们的不同,也就是适合找SNP或者纠错。前者用于1v1无重排,后者1v多有重排
二、常用命令
1、比对
nucmer通过比较基因组获取突变信息,该方法适合多个近缘物种的基因组比较,可以用于多Fasta数据文件中包含的核苷酸序列的全对全比较。它最适合用于可能具有大重排的高度相似序列。常见的例子是:比较两个未完成的鸟枪式测序组件,将未完成的测序组件映射到完成的基因组,以及比较两个可能有大重排和重复的相当相似的基因组。
$ nucmer -p align ref.fasta contig.fasta
# nucmer -p [out_index] [ref] [query]
# -p|prefix:Set the prefix of the output files (default “out”)
# –mum: Use anchor matches that are unique in both the reference and query
图2 比对过程
结果文件会生成一个delta为后缀的文件,让我们打开它看看:
$ less align.delta
图3 nucmer比对结果文件
- 文件第一行是两个需要比较的基因组序列fasta文件的绝对路径。
- 第二行是比对类型,可以是NUCMER或PROMER。
- 第三行往后是比对结果。每个比对结果以行首为 > 号开头,整行为 0 结尾。
- 比对结果第一行以 > 号开头,后面包含空格分割的4列,分别是:reference序列 ID、query序列ID、该reference序列长度、该query序列长度。
- 比对结果第二行包含空格分割的7列数值,分别是:reference序列比对起始位点、 reference序列比对结束位点、query序列比对起始位点、query序列比对结束位点、错配位点数、不相似位点数、非字母字符个数。
- 第三行往后是Delta值,表示离下一个IDNEL之间的距离。
2、过滤
序列中的重复序列可能会掩盖可能的SNP,所以我们可以使用delta-filter去除一对多、多对多中的冗余匹配。这里的结果会比较晦涩难懂,我们后面可以进行可视化。
$ delta-filter -1 -i 90 -q -r align.delta > align.filter.delta
常用示例:
$ delta-filter -i 90 -l 2000 -m out.delta > out.f.delta
常用参数:
-i <float> default:0
该参数的值必须设定为0~100,表示过滤掉Identity低于此值的比对结果。
-l <float> default: 0
过滤掉匹配区域长度低于此值的比对结果。
-u <float> default: 0
要求比对区域的unique序列所占的百分比不低于此值。
-q
对query序列的每个比对位点,仅选择其在reference序列上的最优比对结果。
若需要将contigs序列或reads定位到reference genome上,考虑使用-q参数。
-r
对reference序列的每个比对位点,仅选择其在query序列的最优比对结果。
-g
加入该参数,则要求比对区域内部的maximal matches之间不能有重排,如
移位、倒位等。
-m
加入该参数,表示取-q和-r参数的并集。一个query位点可能比对到ref上多
个位点,仅保留其最优比对结果;一个ref位点也可能比对到query上多个位点,仅
保留其最优比对结果;以上两个处理方法的输入信息是一样的,都是所有的比对结果;
若使用 -q -r 参数,则是先运用第一种方法处理,得到的结果再运用第二种方法
处理,其结果相比于仅使用 -m 参数,输出的比对结果更少。一般情况下,使用 -m
参数是最优的方法。
-1
加入该参数,表示取-q和-r参数的交集。一个query位点可能比对到ref上多
个位点,一个ref位点也可能比对到query上多个位点;加入该参数,表示要求query
位点和ref位点能相互比对上,且它们是相互最佳比对;若使用 -q -r 参数,得到的
虽然也是1对1的比对结果,但其不一定是相互最佳比对,-1参数的输出对结果更少。
若需要得到SNP结果,则需要加入该参数来确保结果的准确性。
图4 过滤结果文件
3、坐标转换
使用show-coords脚本可以将delta文件转换为易读的匹配坐标,这一部分可以进行两个基因组的共线性分析。
$ show-coords -c -r align.filter.delta > align.filter.coords
#-c 输出结果中多处覆盖比这一列
#-r 对结果进行排序输出
结果文件为align.filter.coords,让我们来看一看结果如何:
$ less align.filter.coords
[S1]和[E1],第一个基因组中,和第二个基因组对齐的区域,S1和E1分别为这段区域在第一个基因组中的起始和结束位点;
[S2]和[E2],第二个基因组中,和第一个基因组对齐的区域,S2和E2分别为这段区域在第二个基因组中的起始和结束位点(如果起始位点比结束位点的数值大,则意味着在这段区域中和其互补链对齐);
[LEN1]和[LEN 2],分别两个基因组中,对齐区域的长度;
[% IDY],两个基因组中对齐区域的碱基一致性,完全一致则是100%;
[COV R]和[COV Q],覆盖度。
[TAGS],基因组中两段存在共线性区域的序列的名称;
图5 坐标转换结果文件
4、Call Snp
接下来我们可以使用show-snps显示过滤后的delta文件中匹配的SNP:
$ show-snps -C -I -T -r -l align.filter.delta > align.filter.snp
USAGE: show-snps [options] <deltafile>
-C 不要报告具有模糊映射的比对中的SNP,即只报告[R]和[Q]列等于0的SNP,而不输出这些列
-h 显示帮助信息
-H 不打印输出标题
-I 不报告indels
-l 在输出中包含序列长度信息
-q 按查询ID和SNP位置对输出行进行排序
-r 按参考ID和SNP位置对输出行进行排序
-S 通过向stdin传递“显示坐标”行来指定要报告的对齐方式
-T 切换到制表符分隔格式
-x int在输出中包含周围SNP上下文的x个字符,默认为0
图6 Show-snps结果文件
以上结果文件就是SNP结果文件啦,我们可以将其转化为VCF文件,再转换为矩阵,提取出fasta之后还可以进行全基因组SNP的系统发育分析~小师妹在往期的公众号也有提到系统发育分析的一站式流程,欢迎查阅。
三、小结
Mummer工具主要有两大应用场景,一是进行基因组之间的共线性检测,二就是全基因组范围的SNP检测,与常规gatk或bcftools的call snp流程不同,Mummer工具采用的是后缀树算法,速度方面会快很多。
系统发育相关的基因组之间既存在保守性又存在可变性。有些序列片段的数目以及顺序具有保守性,这种保守性可以使用共线性来进行描述。共线性主要强调两方面,一是序列的同源性,二是序列片段的排列顺序。同时即使很近缘的基因组也可能存在大量的变异和多态性,这种变异可能构成了不同个体与群体性状差异的基础。单核苷酸多态性(single-nucleotide polymorphism,SNP)是指由于单个核苷酸位置上存在转换或颠换等变异所引起的DNA序列多态性,常用来研究近缘物种基因组的进化。
今天小师妹给大家重点介绍的是SNP检测,当然大家也可以根据自己的需求和研究目标修改和扩展这些代码哦!!怎么样,你学会了嘛!?
同学们如果觉得自己写代码麻烦,可以体验一下我们的云生信小工具,只需输入数据,即可轻松生成所需图表。立即访问云生信(http://www.biocloudservice.com/home.html),开启便捷的生信之旅!