下载NCBI的NT数据库到服务器本地
Blast比对结果中输出物种信息
用TaxonKit、blastdbcmd、makeblastdb建立子库
NT库本地化
下载文件
可选文件格式
- blast index文件
https://ftp.ncbi.nlm.nih.gov/blast/db
中的nt.*.tar.gz 。
下载完成后,MD5验证,解压文件,就可以直接用于blast。index中已经包含物种Taxonomy信息。但是压缩包中没有Fasta文件,需要的话可以用blastdbcmd提取。 - Fasta文件
https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA
中的nt.gz 。
下载完成并解压后,需要自建blast index;如果结果中还需要物种Taxonomy信息,建index前还需要准备好TaxIDMapFile文件。
- blast index文件
下载blast index文件
wget下载有点问题,不知道是服务器还是网络问题,wget下载的文件总是MD5校验失败;有时候重新下又能校验成功。
aspera下载不行,链接NCBI失败,可能是必须开放某个指定端口。
最后是用的rsync下载。- 文件列表下载 File.list(每个文件1列)
1
2
3rsync --no-motd --files-from=<文件列表> <文件源> <下载存放路径>
# 示例
rsync --no-motd --files-from=***/File.list rsync://ftp.ncbi.nlm.nih.gov/blast/db/ ***/NT_Database
- 实际下载文件路径是<文件源>加上File.list中的内容,完整路径如:rsync://ftp.ncbi.nlm.nih.gov/blast/db/nt.22.tar.gz。
- 当File.list中的内容包含子目录,<下载存放路径>中会自动生成对应层级目录,例如File.list中的内容是“blast/db/nt.22.tar.gz”,则下载的nt.22.tar.gz会保存在
<下载存放路径>/blast/db
中。
- 并行下载
推荐这种方式,文件列表逐个下载太慢,这个每行加“&”后台并行下载文件比较快。1
2
3
4rsync --no-motd <文件源> <下载存放路径>
# 示例
rsync --no-motd rsync://ftp.ncbi.nlm.nih.gov/blast/db/nt.22.tar.gz ***/NT_Database &
rsync --no-motd rsync://ftp.ncbi.nlm.nih.gov/blast/db/nt.23.tar.gz ***/NT_Database &
- 文件列表下载
MD5验证
https://ftp.ncbi.nlm.nih.gov/blast/db
中还有nt.*.tar.gz.md5文件,用于MD5验证。
全部nt..tar.gz和nt..tar.gz.md5文件都下载完后,md5文件合并一起验证。
nt.all.md5.check中,文件名后是OK即文件完整;如果是Fail,则不完整,需要重新下载该文件。
1 | # 合并所有md5文件 |
解压文件
tar -zxvf nt.*.tar.gz
解压后,nt.*.tar.gz文件删除或者备份都可以。
一般是删除?除了需要迁移到别的服务器,好像也没有能再用到的地方了。
Blast比对
blast结果中Subject Seq-id(NT库的序列ID)格式为“gi|384474605|emb|HE793683.1|”,含有GI numbers和GenBank accession numbers;不包含Taxid信息。
如果blast index中有Taxonomy信息,可以在输出格式增加staxids sscinames,使结果额外输出物种的Taxid和物种名称。
1 | # Shell |
构建子库
- 用blastdbcmd可以根据Taxid从NT库抽取相关序列,从而构建子库。
- 用TaxonKit可以获取某个Taxid节点以下所有Taxid,也就是说不止可以抽取单个物种的序列,还可以提供Taxid列表来抽取整个目、科、属…的序列。
- TaxonKit需要taxdump.tar.gz。NT库和taxdump.tar.gz最好日期一致,因为Taxonomy会更新,可能导致NT库的Taxid和TaxonKit提取的有区别。具体见TaxonKit的TaxID changelog。
- 如果要用Taxid统计blast结果中的物种信息,需要注意有些亚种/株的Taxid与物种(Species)等级Taxid不一样。如Streptococcus parasanguinis ATCC 903(Taxid 888048)的Rank是strain;它是属于Streptococcus parasanguinis(Taxid 1318)这个物种的。用taxonkit lineage可以获取某个Taxid在物种等级的名称和Taxid。如
echo 888048 | taxonkit lineage | taxonkit reformat -t -f \"{s}\" | cut -f 3,4
。 - 用子库作为参考序列blast时,将-db参数换成{Index_Dir}/${Name}.fa即可。
以链球菌属举例,在NCBI的Taxonomy数据库可以找到Streptococcus的Taxid是1301。
1 | # Shell |
taxid_map.txt(第1列GenBank accession numbers,第2列Taxid)
Name.tsv(第1列GenBank accession numbers,第2列Taxid,第3列物种名称)
假如用nt.gz建库
- nt.gz解压后是NT库的fasta文件。如果不需要物种信息的话,直接makeblastdb建库就行。如果balst结果要有物种信息,则需要提供GenBank accession numbers和Taxid对应关系,类似上面的子库构建的-parse_seqids -taxid_map方式。
- GenBank accession numbers和Taxid对应关系文件可以用nucl_gb.accession2taxid.gz。和taxdump.tar.gz一样原因,accession2taxid最好与NT库日期一致。
- nucl_gb.accession2taxid.gz格式是tsv,第一列Accession,第二列Accession.version,第三列TaxId,第四列GI;整理成taxid_map格式后,用makeblastdb加-parse_seqids -taxid_map建库就行。
一些blastn参数
-task:默认是megablast,可选blastn、blastn-short、dc-megablast、megablast、rmblastn
-query:需要比对的fasta序列
-db:数据库路径,写到fasta前缀为止,如***/NT_Database/nt
-out:输出文件
-outfmt:输出格式,6是tab分割且无表头的格式,其他格式见blastn帮助文档
-num_threads:线程数,默认1;与-mt_mode相关,具体见这里
-evalue:e值过滤阈值,默认10
-perc_identity:identity百分比过滤阈值,取值0 ~ 100
-qcov_hsp_perc:hsp覆盖度百分比过滤阈值,取值0 ~ 100
-max_target_seqs:输出结果保留多少比对上的subject序列,默认500,建议大于等于5
-max_hsps:每个query序列比对上的每个subject序列保留多少个HSP,需要填写大于等于1,无默认值