本地blast使用技巧之repeat mask

Introduction

blast是目前使用最为广泛、接受度最高的一个序列比对软件。尤其适用于寻找两条序列之间最为相似的片段,以及对大型核酸或氨基酸序列数据库的检索。
我们在使用NCBI的网页版blast进行检索时,会发现blast的速度很快。但在自己本地使用的时候,有时却会慢得出奇。
造成这种情况的原因就是NCBI的网页版blast在检索时默认对简单重复序列以及在全基因组范围出现次数过多的片段进行了屏蔽,这样就可以大大提高速度,而那些repeat序列通常也不是我们要研究的对象。但是我们在自己本地做blast的时候,直接用makeblastdb建的索引是没有repeat信息的,所以在你的query序列包含过多repeat序列时,程序执行的时间可能就会超出你承受的范围。

How to create a masked BLAST database

建立一个masked blast database主要有两步:
1.使用blast自带的几个程序得到mask的信息(Collect mask information files)
2.把上一步得到的mask信息提供给makeblastdb,建立一个masked blastdatabase(Create BLAST database with the masking information)
这两步既可以从fasta文件开始做,也可以用之间建好的blastbase做。
接下来我们详细介绍一下具体该怎么做:

1. Collect mask information files

blast产生repeat mask信息的程序有三个,windowmasker和dustmasker用于核酸序列,segmasker用于氨基酸序列。

  • windowmasker可以mask全基因组范围内出现次数过多的序列,同时它也可以mask掉低复杂度区域(low complexity),而duskmasker只用于mask低复杂度区域。
  • 过程中有一个parse sequence id的参数-parse_seqids,这个参数如果加就在整个过程中都加上,如果不加就每步都不要加。
1.1 Create masking information using dustmasker
  • 如果把fasta文件作为输入文件的话:
    dustmasker -in hs_chr.fa -infmt fasta -parse_seqids -outfmt maskinfo_asn1_bin -out hs_chr_dust.asnb
  • 如果把之前建好的blast database(没mask的)作为输入文件:
    dustmasker -in hs_chr -infmt blastdb -parse_seqids -outfmt maskinfo_asn1_bin -out hs_chr_dust.asnb
1.2 Create masking information using windowmasker
  • 先生成一个counts文件:
  • 如果把fasta作为输入文件:
    windowmasker -in hs_chr.fa -infmt fasta -mk_counts -parse_seqids -out hs_chr_mask.counts –sformat obinary
  • 如果把blast database作为输入文件:
    windowmasker -in hs_chr -infmt blastdb -mk_counts -parse_seqids -out hs_chr_mask.counts –sformat obinary
  • 然后用上一步的counts文件生成一个包含mask信息的文件:
  • 如果把fasta作为输入:
    windowmasker -in hs_chr.fa -infmt fasta -ustat hs_chr.counts -outfmt maskinfo_asn1_bin -parse_seqids -out hs_chr_mask.asnb
  • 如果把database作为输入:
    windowmasker -in hs_chr -infmt blastdb -ustat hs_chr_mask.counts -outfmt maskinfo_asn1_bin -parse_seqids -out hs_chr_mask.asnb
1.3 Create masking information using segmasker
  • fasta作为输入:
    segmasker -in refseq_protein.fa -infmt fasta -parse_seqids -outfmt maskinfo_asn1_bin -out refseq_seg.asnb
  • database作为输入:
    segmasker -in refseq_protein -infmt blastdb -parse_seqids -outfmt maskinfo_asn1_bin -out refseq_seg.asnb
1.4 Extract masking information from FASTA sequences with lowercase masking

其实除了使用blast自带的三个程序之外,我们还可以根据fasta文件的小写字母进行mask,一般fasta文件会把repeat序列用小写字母标识出来。
convert2blastmask -in hs_chr.mfa -parse_seqids -masking_algorithm repeat -masking_options "repeatmasker, default" -outfmt maskinfo_asn1_bin -out hs_chr_mfa.asnb

2. Create BLAST database with the masking information

使用上面得到的mask信息,我们就可以建立masked database了。
makeblastdb -in hs_chr –input_type blastdb -dbtype nucl -parse_seqids -mask_data hs_chr_mask.asnb -out hs_chr -title "Human Chromosome, Ref B37.1"
上面是从已经建好的没mask的database中建立masked database的命令,但同样也可以输入fasta文件来进行这一步。

3. Search with database masking enabled

如果建好masked database之后继续用原来的参数进行检索,程序并不会应用masked信息。需要再加一个选项才能调用mask信息。
-db_soft_mask或者-db_hard_mask。
这个选项后面跟的参数是Algorithm ID,也就是之间mask时用的算法编号。
这个可以对建好的maskeddatabase使用命令:
blastdbcmd -db hs_chr -info
就可以查看到对应的Algorithm ID。
而-db_soft_mask和-db_hard_mask的区别在于,softmask只是在blast检索的最初的word-finding阶段屏蔽掉了repeat区域,而hardmask是在整个blast检索过程中都把这些repeat屏蔽掉了。
一般使用-db_soft_mask得到的结果才是你想要的。

你可能感兴趣的:(本地blast使用技巧之repeat mask)