Introduction
blast是目前使用最為廣泛、接受度最高的一個(gè)序列比對(duì)軟件。尤其適用于尋找兩條序列之間最為相似的片段,以及對(duì)大型核酸或氨基酸序列數(shù)據(jù)庫的檢索。
我們?cè)谑褂肗CBI的網(wǎng)頁版blast進(jìn)行檢索時(shí),會(huì)發(fā)現(xiàn)blast的速度很快。但在自己本地使用的時(shí)候,有時(shí)卻會(huì)慢得出奇。
造成這種情況的原因就是NCBI的網(wǎng)頁版blast在檢索時(shí)默認(rèn)對(duì)簡單重復(fù)序列以及在全基因組范圍出現(xiàn)次數(shù)過多的片段進(jìn)行了屏蔽,這樣就可以大大提高速度,而那些repeat序列通常也不是我們要研究的對(duì)象。但是我們?cè)谧约罕镜刈鯾last的時(shí)候,直接用makeblastdb建的索引是沒有repeat信息的,所以在你的query序列包含過多repeat序列時(shí),程序執(zhí)行的時(shí)間可能就會(huì)超出你承受的范圍。
How to create a masked BLAST database
建立一個(gè)masked blast database主要有兩步:
1.使用blast自帶的幾個(gè)程序得到mask的信息(Collect mask information files)
2.把上一步得到的mask信息提供給makeblastdb,建立一個(gè)masked blastdatabase(Create BLAST database with the masking information)
這兩步既可以從fasta文件開始做,也可以用之間建好的blastbase做。
接下來我們?cè)敿?xì)介紹一下具體該怎么做:
1. Collect mask information files
blast產(chǎn)生repeat mask信息的程序有三個(gè),windowmasker和dustmasker用于核酸序列,segmasker用于氨基酸序列。
- windowmasker可以mask全基因組范圍內(nèi)出現(xiàn)次數(shù)過多的序列,同時(shí)它也可以mask掉低復(fù)雜度區(qū)域(low complexity),而duskmasker只用于mask低復(fù)雜度區(qū)域。
- 過程中有一個(gè)parse sequence id的參數(shù)-parse_seqids,這個(gè)參數(shù)如果加就在整個(gè)過程中都加上,如果不加就每步都不要加。
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
- 先生成一個(gè)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文件生成一個(gè)包含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
其實(shí)除了使用blast自帶的三個(gè)程序之外,我們還可以根據(jù)fasta文件的小寫字母進(jìn)行mask,一般fasta文件會(huì)把repeat序列用小寫字母標(biāo)識(shí)出來。
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"
上面是從已經(jīng)建好的沒mask的database中建立masked database的命令,但同樣也可以輸入fasta文件來進(jìn)行這一步。
3. Search with database masking enabled
如果建好masked database之后繼續(xù)用原來的參數(shù)進(jìn)行檢索,程序并不會(huì)應(yīng)用masked信息。需要再加一個(gè)選項(xiàng)才能調(diào)用mask信息。
-db_soft_mask或者-db_hard_mask。
這個(gè)選項(xiàng)后面跟的參數(shù)是Algorithm ID,也就是之間mask時(shí)用的算法編號(hào)。
這個(gè)可以對(duì)建好的maskeddatabase使用命令:
blastdbcmd -db hs_chr -info
就可以查看到對(duì)應(yīng)的Algorithm ID。
而-db_soft_mask和-db_hard_mask的區(qū)別在于,softmask只是在blast檢索的最初的word-finding階段屏蔽掉了repeat區(qū)域,而hardmask是在整個(gè)blast檢索過程中都把這些repeat屏蔽掉了。
一般使用-db_soft_mask得到的結(jié)果才是你想要的。