01. Descarga y actualización de la base de datos Blastn [Automatizada por la herramienta NCBI]
02. Descarga y actualización de la base de datos Blastn [Automatizada mediante script bash]
03. Ejecución de Blastn [script bash interactivo para el usuario y script Nextflow DSL2]
04. Extracción de secuencia de hits Blastn [script bash interactivo del usuario]
05. Errores comunes y soluciones de Blastn
Crear un entorno conda para blastn
conda create -n blastn_db
Activar el entorno blastn
conda activate blastn_db
Copie el enlace del último ejecutable de Blast desde el siguiente enlace
https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
descargue el ejecutable de la siguiente manera
wget https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.15.0+-x64-linux.tar.gz
Extraiga el archivo descargado de la siguiente manera
tar -zxvf ncbi-blast-2.15.0+-x64-linux.tar.gz
Navegue al siguiente directorio
cd ncbi-blast-2.15.0+/bin
Agregue esta ruta a la variable ambiental PATH. Mira cómo hacer esto en mi tutorial:
https://github.com/asadprodhan/About-the-PATH
Copie update_blastdb.pl del directorio ncbi-blast-2.15.0+/bin al directorio donde desea descargar la base de datos blastn
cp ./update_blastdb.pl databaseDirectory
Ejecute el script de la siguiente manera
run ./update_blastdb.pl --decompress nt
La descarga comenzará automáticamente
Cuando se complete la descarga, confirme que se hayan descargado todos los archivos nt. Puede hacerlo verificando los números de archivos nt entre https://ftp.ncbi.nlm.nih.gov/blast/db/ y su directorio
Si no tiene todos los archivos nt en su directorio, aparecerá el mensaje "Error de base de datos BLAST: no se pudo encontrar el volumen o el archivo de alias nt.xxx en el archivo de alias al que se hace referencia".
Puede descargar los archivos nt que faltan utilizando el siguiente script bash
Cuando se descarguen todos los archivos nt, puede eliminar los archivos md5 de la siguiente manera:
rm -r *.md5
Prepare un archivo metadata.tsv que contenga la lista de todos los archivos nt.??.tar.gz. Los archivos nt.??.tar.gz se encuentran en
https://ftp.ncbi.nlm.nih.gov/blast/db/
El archivo metadata.tsv tiene este aspecto:
Figura 1: Archivos nt de la base de datos Blastn.
Coloque el archivo metadata.tsv y el siguiente script blastn en el directorio donde desea descargar la base de datos blastn.
Verifique el formato del archivo de la siguiente manera:
file *
Todos los archivos deben estar en formato UNIX, es decir, sólo texto ASCII. Los archivos escritos en una computadora con Windows tendrán formato Windows, es decir, texto ASCII, con terminadores de línea CRLF. Convierta estos archivos a formato Unix ejecutando el siguiente comando:
dos2unix *
Comprueba que los archivos sean ejecutables.
ls -l
Ejecute el siguiente comando para hacer que los archivos sean ejecutables.
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: le dice a tar que extraiga los archivos
v: “v” significa “detallado” y enumera todos los archivos a medida que continúa la descompresión.
z: le dice al comando tar que descomprima/descomprima el archivo (gzip)
f: le dice a tar que se asignará un archivo para trabajar
pkill -9 wget # para cancelar la descarga de wget en ejecución
Un comodín como ' tar.gz' no funciona para 'tar'. Porque el tar provisto con un “ ” no solo se limita a los archivos tar existentes en el directorio sino que también se expande a los nombres de archivos imaginarios (!), por ejemplo, abc.tar.gz def.tar.gz ghi.tar .gz o 1.gz, 2.gz y 3.gz, etc. Dado que estos archivos no existen, tar no puede encontrarlos y produce el error "no encontrado en el archivo". La siguiente función de bucle puede solucionar este problema cuando tiene varios archivos tar para descomprimir.
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
El porcentaje de identidad predeterminado es 90%
El porcentaje de cobertura de consultas predeterminado es 0%
Cuanto menor sea el valor E, mejor será la coincidencia
Ref: https://www.metagenomics.wiki/tools/blast/evalue
Cuanto mayor sea la puntuación de bits, mejor será la similitud de secuencia
Este script le permite
modificando los parámetros predeterminados de blastn
ejecutar blastn en computadoras locales y remotas usando contenedores (esto elimina la necesidad de instalar y actualizar el software blastn. Sin embargo, necesitará instalar Nextflow y Singularity)
Automatización del análisis de explosión para múltiples muestras.
#!/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 ""
El script bash para extraer secuencias de golpes explosivos es interactivo para el usuario. Solicitará entradas, las procesará automáticamente y producirá un archivo que contiene las secuencias fasta esperadas. Vea la captura de pantalla a continuación:
Figura 2: Cómo funciona el script blastn_hits_sequences_extraction_auto_AP.
Figura 3: Error de base de datos Blastn "No se encontró ningún alias o archivo de índice".
Este error podría resolverse ajustando el script de la siguiente manera:
Agregue 'nt' al final de la ruta de la base de datos como /path/to/the/blastn/db/nt
Vea la ruta de la base de datos en el script blastn anterior. Asimismo, '/nr' para blastp
Si Blastn es su primer o único proceso en el script Nextflow; entonces el proceso podría tomar la ruta de la base de datos. De lo contrario, la base de datos debe proporcionarse como archivos. Consulte la siguiente referencia. Y el canal de entrada debe tener una ruta (db) además de la ruta (query_sequence). Vea el script blastn arriba.
https://stackoverflow.com/questions/75465741/path-not-being-detected-by-nextflow
Figura 4: Error de base de datos Blastn "No es una base de datos de versión 4 válida".
Este es un conflicto de versión explosiva.
Cuando crea un entorno conda, instala automáticamente blast v2.6 que no puede usar la última base de datos blast nr.
Necesita una versión sin fecha, como blast v2.15.0, para utilizar la última base de datos blast nr.
Comprueba qué versión de blastn tienes:
blastn -version
Actualice la última versión de blastn:
conda install -c bioconda blast
Figura 5: Error de la base de datos Blastn "no se pudo encontrar el alias nt.XXX en el alias de referencia".
Cuando no tenga todos los archivos nt en el directorio de su base de datos blastn, recibirá este error "Error de base de datos BLAST: no se pudo encontrar el volumen o el archivo de alias nt.xxx en el archivo de alias al que se hace referencia".
Verifique los números de archivos nt entre https://ftp.ncbi.nlm.nih.gov/blast/db/ y el directorio de su base de datos blastn
Puede descargar los archivos nt que faltan utilizando el script bash anterior