01. Download e atualização do banco de dados Blastn [automatizado pela ferramenta NCBI]
02. Download e atualização do banco de dados Blastn [Automatizado por script bash]
03. Execução Blastn [script bash interativo com o usuário e script Nextflow DSL2]
04. Extração de sequência de hits do Blastn [script bash interativo com o usuário]
05. Erros e soluções comuns do Blastn
Crie um ambiente conda para blastn
conda create -n blastn_db
Ative o ambiente blastn
conda activate blastn_db
Copie o link do executável blast mais recente do link a seguir
https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
baixe o executável da seguinte maneira
wget https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.15.0+-x64-linux.tar.gz
Extraia o arquivo baixado da seguinte maneira
tar -zxvf ncbi-blast-2.15.0+-x64-linux.tar.gz
Navegue até o seguinte diretório
cd ncbi-blast-2.15.0+/bin
Adicione este caminho à variável ambiental PATH. Veja como fazer isso no meu tutorial:
https://github.com/asadprodhan/About-the-PATH
Copie o update_blastdb.pl do diretório ncbi-blast-2.15.0+/bin para o diretório onde deseja baixar o banco de dados blastn
cp ./update_blastdb.pl databaseDirectory
Execute o script da seguinte maneira
run ./update_blastdb.pl --decompress nt
O download começará automaticamente
Quando o download for concluído, confirme se todos os arquivos nt foram baixados. Você pode fazer isso cruzando os números dos arquivos nt entre https://ftp.ncbi.nlm.nih.gov/blast/db/ e seu diretório
Se você não tiver todos os arquivos nt em seu diretório, você receberá "Erro de banco de dados BLAST: não foi possível localizar o volume ou arquivo de alias nt.xxx no arquivo de alias referenciado"
Você pode baixar os arquivos nt ausentes usando o seguinte script bash
Quando todos os arquivos nt forem baixados, você pode excluir os arquivos md5 da seguinte maneira:
rm -r *.md5
Prepare um arquivo metadata.tsv contendo a lista de todos os arquivos nt.??.tar.gz. Os arquivos nt.??.tar.gz estão localizados em
https://ftp.ncbi.nlm.nih.gov/blast/db/
O arquivo metadata.tsv se parece com isto:
Figura 1: Arquivos NT do banco de dados Blastn.
Coloque o arquivo metadata.tsv e o seguinte script blastn no diretório onde deseja baixar o banco de dados blastn
Verifique o formato do arquivo da seguinte forma:
file *
Todos os arquivos devem estar no formato UNIX, ou seja, somente texto ASCII. Os arquivos escritos em computadores Windows terão formato Windows, ou seja, texto ASCII, com terminadores de linha CRLF. Converta esses arquivos para o formato Unix executando o seguinte comando:
dos2unix *
Verifique se os arquivos são executáveis
ls -l
Execute o seguinte comando para tornar os arquivos executáveis
chmod +x *
#!/bin/bash #metadata metadata=./*.tsv # Red="$(tput setaf 1)" Green="$(tput setaf 2)" Bold=$(tput bold) reset=`tput sgr0` # turns off all atribute while IFS=, read -r field1 do echo "${Red}${Bold}Downloading ${reset}: "${field1}"" echo "" wget https://ftp.ncbi.nlm.nih.gov/blast/db/"${field1}" echo "${Green}${Bold}Downloaded ${reset}: ${field1}" echo "" echo "${Green}${Bold}Extracting ${reset}: ${field1}" tar -xvzf "${field1}" echo "${Green}${Bold}Extracted ${reset}: ${field1}" echo "" echo "${Green}${Bold}Deleting zipped file ${reset}: ${field1}" rm -r "${field1}" echo "${Green}${Bold}Deleted ${reset}: ${field1}" echo "" done < ${metadata}
x: diz ao tar para extrair os arquivos
v: “v” significa “detalhado”, listando todos os arquivos à medida que a descompressão continua
z: diz ao comando tar para descompactar/descompactar o arquivo (gzip)
f: informa ao tar que um arquivo será atribuído para trabalhar
pkill -9 wget # para abortar o download do wget em execução
Curinga como ' tar.gz' não funciona para 'tar'. Porque o tar fornecido com um “ ” não se limita apenas aos arquivos tar existentes no diretório, mas também se expande para os nomes de arquivos imaginários (!), por exemplo, abc.tar.gz def.tar.gz ghi.tar .gz ou 1.gz, 2.gz e 3.gz etc. Como esses arquivos não existem, o tar não consegue encontrá-los e produz o erro 'não encontrado no arquivo'. A função de loop a seguir pode superar esse problema quando você tem vários arquivos tar para descompactar.
for file in *.tar.gz; do tar -xvzf "$file"; done
#!/bin/bash -i # ask for query file echo Enter your input file name including extension and hit ENTER read -e F # ask for an output directory name echo Enter an output directory name and hit ENTER read -e outDir # ask for the blast database path echo Enter the path to the blast database and hit ENTER read -e BlastDB echo "" # start monitoring run time SECONDS=0 # make blast results directory mkdir ${outDir} # prepare output file name prefix baseName=$(basename $F .fasta) # Run blastn with .asn output echo blastn in progress... blastn -db ${BlastDB} -num_alignments 1 -num_threads 16 -outfmt 11 -query $PWD/$F > $PWD/${outDir}/${baseName}.asn # convert output file from asn to xml format echo converting output file from asn to xml format blast_formatter -archive $PWD/${outDir}/${baseName}.asn -outfmt 5 > $PWD/${outDir}/${baseName}.xml # convert output file from asn to tsv format echo converting output file from asn to tsv format blast_formatter -archive $PWD/${outDir}/${baseName}.asn -outfmt 0 > $PWD/${outDir}/${baseName}.tsv # display the compute time if (( $SECONDS > 3600 )) ; then let "hours=SECONDS/3600" let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" elif (( $SECONDS > 60 )) ; then let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $minutes minute(s) and $seconds second(s)" else echo "Completed in $SECONDS seconds" fi
A porcentagem de identidade padrão é 90%
A porcentagem de cobertura de consulta padrão é 0%
Quanto menor o valor E, melhor será a correspondência
Ref: https://www.metagenomics.wiki/tools/blast/evalue
Quanto maior a pontuação de bits, melhor será a similaridade da sequência
Este script permite que você
modificando os parâmetros padrão do blastn
executando o blastn em computadores locais e remotos usando contêineres (isso elimina a necessidade de instalação e atualização do software blastn. No entanto, você precisará instalar o Nextflow e o Singularity)
automatizando a análise blastn para múltiplas amostras
#!/usr/bin/env nextflow nextflow.enable.dsl=2 //data_location params.in = "$PWD/*.fasta" params.outdir = './results' params.db = "./blastn_db" params.evalue='0.05' params.identity='90' params.qcov='90' // blastn process blastn { errorStrategy 'ignore' tag { file } publishDir "${params.outdir}/blastn", mode:'copy' input: path (file) path db output: path "${file.simpleName}_blast.xml" path "${file.simpleName}_blast.html" path "${file.simpleName}_blast_sort_withHeader.tsv" script: """ blastn -query $file -db ${params.db}/nt -outfmt 11 -out ${file.simpleName}_blast.asn -evalue ${params.evalue} -perc_identity ${params.identity} -qcov_hsp_perc ${params.qcov} -num_threads ${task.cpus} blast_formatter -archive ${file.simpleName}_blast.asn -outfmt 5 -out ${file.simpleName}_blast.xml blast_formatter -archive ${file.simpleName}_blast.asn -html -out ${file.simpleName}_blast.html blast_formatter -archive ${file.simpleName}_blast.asn -outfmt "6 qaccver saccver pident length evalue bitscore stitle" -out ${file.simpleName}_blast_unsort.tsv sort -k1,1 -k5,5n -k4,4nr -k6,6nr ${file.simpleName}_blast_unsort.tsv > ${file.simpleName}_blast_sort.tsv awk 'BEGIN{print "qaccvertsaccvertpidenttlengthtevaluetbitscoretmismatchtgapopentqstarttqendtsstarttsendtstitle"}1' ${file.simpleName}_blast_sort.tsv > ${file.simpleName}_blast_sort_withHeader.tsv """ } workflow { query_ch = Channel.fromPath(params.in) db = file( params.db ) blastn (query_ch, db) }
resume = true process { withName:'blastn|blastIndex' { container = 'quay.io/biocontainers/blast:2.14.1--pl5321h6f7f691_0' } } singularity { enabled = true autoMounts = true //runOptions = '-e TERM=xterm-256color' envWhitelist = 'TERM' }
nextflow run main.nf --evalue=0.05 --identity='90' --qcov='0' --db="/path/to/blastn_database"
#!/bin/bash -i # Red="$(tput setaf 1)" Green="$(tput setaf 2)" Bold=$(tput bold) reset=`tput sgr0` # turns off all atribute # ask for blastn output file echo "" echo "" echo "${Red}${Bold}Enter blastn output tsv file and hit ENTER ${reset}" echo "" read -e F echo "" # ask for the key word echo "${Red}${Bold}Enter filter word (CASE-SENSITIVE) and hit ENTER ${reset}" echo "" read -e KeyWord echo "" # ask for the blastn query fasta file echo "${Red}${Bold}Enter blastn query fasta file and hit ENTER ${reset}" echo "" read -e Query echo "" # prepare output file name prefix baseName=$(basename $F .tsv) echo "" # filtering the selected blastn hits echo "" echo "${Green}${Bold}Filtering the blastn hits containing ${reset}: "${KeyWord}"" echo "" grep ${KeyWord} $F > ${baseName}_${KeyWord}.tsv # collecting the query IDs from the selected blastn hits echo "${Green}${Bold}Collecting the query IDs from the selected blastn hits ${reset}: "${KeyWord}"" echo "" awk '{print $1}' ${baseName}_${KeyWord}.tsv > IDs.txt # extracting the sequences for the selected blastn hits echo "${Green}${Bold}Extracting the sequences for the selected blastn hits ${reset}: "${KeyWord}"" echo "" bioawk -cfastx 'BEGIN{while((getline k <"IDs.txt")>0)i[k]=1}{if(i[$name])print ">"$name"n"$seq}' ${Query} > ${baseName}_${KeyWord}.fasta echo "" echo "${Green}${Bold}Done ${reset}: "${KeyWord}"" echo "" echo ""
O script bash para extrair sequências de hits blastn é interativo com o usuário. Ele solicitará entradas, processá-las-á automaticamente e produzirá um arquivo contendo as sequências fasta esperadas. Veja a captura de tela abaixo:
Figura 2: Como funciona o script blastn_hits_sequences_extraction_auto_AP.
Figura 3: Erro no banco de dados Blastn "Nenhum alias ou arquivo de índice encontrado".
Este erro pode ser resolvido ajustando o script da seguinte forma:
Adicione 'nt' no final do caminho do banco de dados como /path/to/the/blastn/db/nt
Veja o caminho do banco de dados no script blastn acima. Da mesma forma, '/nr' para blastp
Se Blastn for seu primeiro ou único processo no script Nextflow; então o processo poderá seguir o caminho do banco de dados. Caso contrário, o banco de dados precisará ser fornecido como arquivos. Veja a seguinte referência. E o canal de entrada deve ter path(db) além do path(query_sequence). Veja o script blastn acima.
https://stackoverflow.com/questions/75465741/path-not-being-detected-by-nextflow
Figura 4: Erro de banco de dados Blastn "Não é um banco de dados válido da versão 4".
Este é um conflito de versões explosivas
Quando você cria um ambiente conda, ele instala automaticamente o blast v2.6 que não pode usar o banco de dados blast nr mais recente
Você precisa de uma versão sem data, como blast v2.15.0, para usar o banco de dados blast nr mais recente.
Verifique qual versão do blastn você possui:
blastn -version
Atualize a versão mais recente do blastn:
conda install -c bioconda blast
Figura 5: Erro de banco de dados Blastn "não foi possível encontrar o alias nt.XXX no alias de referência".
Quando você não tiver todos os arquivos nt em seu diretório de banco de dados blastn, você receberá este erro "Erro de banco de dados BLAST: não foi possível encontrar o volume ou arquivo de alias nt.xxx no arquivo de alias referenciado"
Verifique os números dos arquivos nt entre https://ftp.ncbi.nlm.nih.gov/blast/db/ e o diretório do banco de dados blastn
Você pode baixar os arquivos nt ausentes usando o script bash acima