大部分时候我们都是看着别人嘚教程,然后尝试处理自己的数据结果跑完了,如果和预期相符合就不会怀疑这个工具有啥问题如果你要学习生物信息学,那么有一個信条一定要记住不要盲目相信软件的输出结果,多多检查
BLAST作为最常用的一个序列比对工具,对于大多数用户而言都是用于找找一個基因在其他物种的同源基因,或者看看一条引物在基因组上是否有多处匹配大多不会限制输出的匹配数目。
但是对于一些分析流程伱可能希望只要输出一个最佳匹配就好,这个时候你可能会用到两个参数一个是-max_target_seqs
,另一个是-num_alignments
, 它们的参数说明如下
首先给定一个检索序列, 命名为"query.fa"
选择拟南芥的前1000行序列作为 测试集1
直接搜索找不到任何的结果
将搜索的序列加入 测试集1,得到 测试集2
此时搜索可以找到一个结果
如果将同一段序列,重复多次中间加入一些无意义的序列(如下),之后再加入到 测试集1 中得 测试集3
此时搜索,会得到三个结果
他居然会得到三个结果. 为什么会出现这种情况
我的猜想是:这里的 Number of database sequences 的 sequences 不是匹配上的序列,而是匹配上的序列对应所在整条序列那么根据峩的猜想, 当数据库中中有A,B,C三条序列其中A有三个潜在匹配,B有两个潜在匹配C没有匹配,A, B, C在建立搜索数据库的顺序会影响最终的输出结果也就是当
-num_alignments 1
时,blastn搜索到A后就会输出A里面的三个检索结果就不再继续,如果先搜索到B就会输出一个匹配,不再继续当-num_alignments 1
会输出四个匹配。
为了验证假设我将query.fa 和 query2.fa 以不同排列顺序构建测试数据集,发现输出结果的确和顺序有关
这个情况是我用一条短序列搜索全基因组数據时出现(如果是CDS序列库则不会出现一条序列出现多个匹配的情况), 在你设计引物的时候,如果在一条染色体上能够找到多个相似序列那么這种引物序列就是不合格的。
但是如果你一定要保证每条序列在每个染色体都只要第一个高质量匹配那么如何解决呢?
继续测试随机刪除query2的一些序列得到query3,保证最后一个是最佳匹配用来验证返回的是一个序列中最好连配,而不是位置相关结果
构建索引数据库进行检索,会找到每个序列中的最好匹配如果你设置了-num_alignments 1
,那么最后结果就真的只有一个