1、背景:
下载Uniprot数据库中的蛋白质序列到本机,使用该文件创建BLAST的搜索数据库,然后使用blastp命令在数据库中搜索。
2、错误
按照blast手册上的指导,为了加快搜索的过程,使用mask文件。从Uniprot下载的序列文件sequences.fasta,内容如:
>sid1
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>sid2
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.................................................................
1)创建mask文件:
segmasker -in sequences.fasta -infmt fasta -outfmt maskingfo_asnl_bin \
-out refsequences.asnb -parse_seqids
2) 创建数据库
makeblastdb -in sequences.fasta -input_type fasta -dbtype prot -out uniprot \
-title "Uniprot" -parse_seqids
3) 序列比对
blastp -db uniprot -query input.fasta -out output.txt -outfmt 7
结果报错:BLAST Database error: Error pre-fetching sequences data
3、解决方法
在创建mask文件和创建数据库时不使用parse_seqids。
segmasker -in sequences.fasta -infmt fasta -outfmt maskingfo_asnl_bin \
-out refsequences.asnb
makeblastdb -in sequences.fasta -input_type fasta -dbtype prot -out uniprot -title "Uniprot"
为什么?原因我也不知道,在网上查阅很多文章都不能解决,自己猜测是创建数据库出了问题,尝试把非必要的参数一个一个去掉,结果发现去掉parse_seqids参数后,就能使用balstp正确地获得比对结果。