01. Téléchargement et mise à jour de la base de données Blastn [Automatisé par l'outil NCBI]
02. Téléchargement et mise à jour de la base de données Blastn [Automatisé par un script bash]
03. Exécution Blastn [script bash interactif avec l'utilisateur et script Nextflow DSL2]
04. Blastn lance l'extraction de séquence [script bash interactif avec l'utilisateur]
05. Blastn erreurs courantes et solutions
Créer un environnement conda pour blastn
conda create -n blastn_db
Activer l'environnement blastn
conda activate blastn_db
Copiez le lien du dernier exécutable blast à partir du lien suivant
https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
téléchargez l'exécutable comme suit
wget https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.15.0+-x64-linux.tar.gz
Extrayez le fichier téléchargé comme suit
tar -zxvf ncbi-blast-2.15.0+-x64-linux.tar.gz
Accédez au répertoire suivant
cd ncbi-blast-2.15.0+/bin
Ajoutez ce chemin à la variable d'environnement PATH. Découvrez comment procéder dans mon tutoriel :
https://github.com/asadprodhan/About-the-PATH
Copiez le fichier update_blastdb.pl du répertoire ncbi-blast-2.15.0+/bin vers le répertoire dans lequel vous souhaitez télécharger la base de données blastn.
cp ./update_blastdb.pl databaseDirectory
Exécutez le script comme suit
run ./update_blastdb.pl --decompress nt
Le téléchargement démarrera automatiquement
Une fois le téléchargement terminé, confirmez que tous les fichiers nt ont été téléchargés. Vous pouvez le faire en recoupant les numéros de fichiers nt entre https://ftp.ncbi.nlm.nih.gov/blast/db/ et votre répertoire
Si vous n'avez pas tous les fichiers nt dans votre répertoire, vous obtiendrez "Erreur de base de données BLAST : impossible de trouver le volume ou le fichier alias nt.xxx dans le fichier alias référencé".
Vous pouvez télécharger les fichiers nt manquants en utilisant le script bash suivant
Lorsque tous les fichiers nt sont téléchargés, vous pouvez supprimer les fichiers md5 comme suit :
rm -r *.md5
Préparez un fichier metadata.tsv contenant la liste de tous les fichiers nt.??.tar.gz. Les fichiers nt.??.tar.gz se trouvent à l'emplacement
https://ftp.ncbi.nlm.nih.gov/blast/db/
Le fichier metadata.tsv ressemble à ceci :
Figure 1 : fichiers nt de la base de données Blastn.
Placez le fichier metadata.tsv et le script blastn suivant dans le répertoire où vous souhaitez télécharger la base de données blastn
Vérifiez le format du fichier comme suit :
file *
Tous les fichiers doivent être au format UNIX, c'est-à-dire uniquement en texte ASCII. Les fichiers écrits sur un ordinateur Windows auront le format Windows, c'est-à-dire du texte ASCII, avec des terminateurs de ligne CRLF. Convertissez ces fichiers au format Unix en exécutant la commande suivante :
dos2unix *
Vérifiez que les fichiers sont exécutables
ls -l
Exécutez la commande suivante pour rendre les fichiers exécutables
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 : demande à tar d'extraire les fichiers
v : "v" signifie "verbeux", répertoriant tous les fichiers au fur et à mesure que la décompression se poursuit
z : indique à la commande tar de décompresser/décompresser le fichier (gzip)
f : indique à tar qu'un fichier sera affecté à travailler avec
pkill -9 wget # pour abandonner le téléchargement de wget en cours
Les caractères génériques comme « tar.gz » ne fonctionnent pas pour « tar ». Parce que tar fourni avec un « » ne se limite pas seulement aux fichiers tar existants dans le répertoire, mais s'étend également aux noms de fichiers imaginaires (!), par exemple, abc.tar.gz def.tar.gz ghi.tar .gz ou 1.gz, 2.gz et 3.gz etc. Étant donné que ces fichiers n'existent pas, tar ne peut pas les trouver et génère l'erreur « introuvable dans l'archive ». La fonction de boucle suivante peut résoudre ce problème lorsque vous avez plusieurs fichiers tar à décompresser.
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
Le pourcentage d'identité par défaut est de 90 %
Le pourcentage de couverture des requêtes par défaut est de 0 %
Plus la valeur E est petite, meilleure est la correspondance
Réf : https://www.metagenomics.wiki/tools/blast/evalue
Plus le bit-score est élevé, meilleure est la similarité de séquence
Ce script vous permet de
modifier les paramètres blastn par défaut
exécuter blastn sur des ordinateurs locaux et distants à l'aide de conteneurs (cela supprime le besoin d'installer et de mettre à jour le logiciel blastn. Cependant, vous devrez installer Nextflow et Singularity)
automatisation de l'analyse blastn pour plusieurs échantillons
#!/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 ""
Le script bash pour extraire les séquences de hits blastn est interactif pour l'utilisateur. Il demandera des entrées, les traitera automatiquement et produira un fichier contenant les séquences fasta attendues. Voir la capture d'écran ci-dessous :
Figure 2 : Comment fonctionne le script blastn_hits_sequences_extraction_auto_AP.
Figure 3 : Erreur de la base de données Blastn « Aucun alias ou fichier d'index trouvé ».
Cette erreur peut être résolue en ajustant le script comme suit :
Ajoutez 'nt' à la fin du chemin de la base de données comme /path/to/the/blastn/db/nt
Voir le chemin de la base de données dans le script blastn ci-dessus. De même, '/nr' pour blastp
Si Blastn est votre premier ou unique processus dans le script Nextflow ; alors le processus pourrait emprunter le chemin de la base de données. Sinon, la base de données doit être fournie sous forme de fichiers. Voir la référence suivante. Et le canal d'entrée doit avoir path(db) en plus du path(query_sequence). Voir le script blastn ci-dessus.
https://stackoverflow.com/questions/75465741/path-not-being-detected-by-nextflow
Figure 4 : Erreur de base de données Blastn « Pas une base de données version 4 valide ».
Il s'agit d'un conflit de version explosive
Lorsque vous créez un environnement conda, il installe automatiquement blast v2.6 qui ne peut pas utiliser la dernière base de données blast nr
Vous avez besoin d'une version non datée telle que blast v2.15.0 pour utiliser la dernière base de données blast nr.
Vérifiez quelle version de blastn vous possédez :
blastn -version
Mettez à jour la dernière version de blastn :
conda install -c bioconda blast
Figure 5 : erreur de la base de données Blastn « impossible de trouver l'alias nt.XXX dans l'alias de référence ».
Lorsque vous n'avez pas tous les fichiers nt dans votre répertoire de base de données blastn, vous obtiendrez cette erreur "Erreur de base de données BLAST : impossible de trouver le volume ou le fichier alias nt.xxx dans le fichier alias référencé".
Vérifiez les numéros de fichiers nt entre https://ftp.ncbi.nlm.nih.gov/blast/db/ et le répertoire de votre base de données blastn
Vous pouvez télécharger les fichiers nt manquants en utilisant le script bash ci-dessus