01. Herunterladen und Aktualisieren der Blastn-Datenbank [Automatisiert durch das NCBI-Tool]
02. Herunterladen und Aktualisieren der Blastn-Datenbank [Automatisiert durch Bash-Skript]
03. Blastn-Ausführung [Benutzerinteraktives Bash-Skript und Nextflow DSL2-Skript]
04. Blastn trifft auf Sequenzextraktion [Benutzerinteraktives Bash-Skript]
05. Blastn häufige Fehler und Lösungen
Erstellen Sie eine Conda-Umgebung für Blastn
conda create -n blastn_db
Aktivieren Sie die Blastn-Umgebung
conda activate blastn_db
Kopieren Sie den Link der neuesten ausführbaren Blast-Datei aus dem folgenden Link
https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
Laden Sie die ausführbare Datei wie folgt herunter
wget https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.15.0+-x64-linux.tar.gz
Extrahieren Sie die heruntergeladene Datei wie folgt
tar -zxvf ncbi-blast-2.15.0+-x64-linux.tar.gz
Navigieren Sie in das folgende Verzeichnis
cd ncbi-blast-2.15.0+/bin
Fügen Sie diesen Pfad zur Umgebungsvariablen PATH hinzu. Sehen Sie in meinem Tutorial, wie das geht:
https://github.com/asadprodhan/About-the-PATH
Kopieren Sie update_blastdb.pl aus dem Verzeichnis ncbi-blast-2.15.0+/bin in das Verzeichnis, in das Sie die Blastn-Datenbank herunterladen möchten
cp ./update_blastdb.pl databaseDirectory
Führen Sie das Skript wie folgt aus
run ./update_blastdb.pl --decompress nt
Der Download startet automatisch
Wenn der Download abgeschlossen ist, bestätigen Sie, dass alle NT-Dateien heruntergeladen wurden. Sie können dies tun, indem Sie die NT-Dateinummern zwischen https://ftp.ncbi.nlm.nih.gov/blast/db/ und Ihrem Verzeichnis vergleichen
Wenn Sie nicht alle NT-Dateien in Ihrem Verzeichnis haben, erhalten Sie die Meldung „BLAST-Datenbankfehler: Volume oder Aliasdatei nt.xxx konnte in der referenzierten Aliasdatei nicht gefunden werden.“
Sie können die fehlenden NT-Dateien herunterladen, indem Sie das folgende Bash-Skript verwenden
Wenn alle NT-Dateien heruntergeladen sind, können Sie die MD5-Dateien wie folgt löschen:
rm -r *.md5
Bereiten Sie eine metadata.tsv-Datei vor, die die Liste aller nt.??.tar.gz-Dateien enthält. Die Dateien nt.??.tar.gz befinden sich unter
https://ftp.ncbi.nlm.nih.gov/blast/db/
Die Datei metadata.tsv sieht so aus:
Abbildung 1: NT-Dateien der Blastn-Datenbank.
Legen Sie die Datei metadata.tsv und das folgende Blastn-Skript in dem Verzeichnis ab, in das Sie die Blastn-Datenbank herunterladen möchten
Überprüfen Sie das Dateiformat wie folgt:
file *
Alle Dateien müssen im UNIX-Format vorliegen, dh nur ASCII-Text. Auf einem Windows-Computer geschriebene Dateien haben das Windows-Format, dh ASCII-Text, mit CRLF-Zeilenabschlusszeichen. Konvertieren Sie diese Dateien in das Unix-Format, indem Sie den folgenden Befehl ausführen:
dos2unix *
Überprüfen Sie, ob die Dateien ausführbar sind
ls -l
Führen Sie den folgenden Befehl aus, um die Dateien ausführbar zu machen
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: weist tar an, die Dateien zu extrahieren
v: „v“ steht für „verbose“ und listet alle Dateien auf, während die Dekomprimierung fortgesetzt wird
z: weist den tar-Befehl an, die Datei (gzip) zu dekomprimieren/dekomprimieren.
f: teilt tar mit, dass eine Datei zum Arbeiten zugewiesen wird
pkill -9 wget #, um den laufenden Wget-Download abzubrechen
Platzhalter wie „ tar.gz“ funktionieren nicht für „tar“. Denn mit einem „ “ versehenes tar beschränkt sich nicht nur auf die vorhandenen TAR-Dateien im Verzeichnis, sondern erweitert es auch auf die imaginären Dateinamen (!), zum Beispiel abc.tar.gz def.tar.gz ghi.tar .gz oder 1.gz, 2.gz und 3.gz usw. Da diese Dateien nicht vorhanden sind, kann tar sie nicht finden und erzeugt die Fehlermeldung „Nicht im Archiv gefunden“. Die folgende Schleifenfunktion kann dieses Problem beheben, wenn Sie mehrere TAR-Dateien dekomprimieren müssen.
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
Der Standardidentitätsprozentsatz beträgt 90 %.
Der standardmäßige Prozentsatz der Abfrageabdeckung beträgt 0 %.
Je kleiner der E-Wert, desto besser ist die Übereinstimmung
Referenz: https://www.metagenomics.wiki/tools/blast/evalue
Je höher der Bit-Score, desto besser ist die Sequenzähnlichkeit
Dieses Skript ermöglicht es Ihnen
Ändern der Standard-Blastn-Parameter
Ausführen von Blastn sowohl auf lokalen als auch auf Remote-Computern mithilfe von Containern (Dadurch entfällt die Notwendigkeit, die Blastn-Software zu installieren und zu aktualisieren. Sie müssen jedoch Nextflow und Singularity installieren.)
Automatisierung der Blastn-Analyse für mehrere Proben
#!/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 ""
Das Bash-Skript zum Extrahieren von Blastn-Treffersequenzen ist benutzerinteraktiv. Es fragt nach Eingaben, verarbeitet diese automatisch und erstellt eine Datei mit den erwarteten Fasta-Sequenzen. Siehe den Screenshot unten:
Abbildung 2: Funktionsweise des Skripts „blastn_hits_sequences_extraction_auto_AP“.
Abbildung 3: Blastn-Datenbankfehler „Keine Alias- oder Indexdatei gefunden“.
Dieser Fehler kann möglicherweise durch Anpassen des Skripts wie folgt behoben werden:
Fügen Sie „nt“ am Ende des Datenbankpfads hinzu, z. B. /path/to/the/blastn/db/nt
Siehe den Datenbankpfad im Blastn-Skript oben. Ebenso „/nr“ für Blastp
Wenn Blastn Ihr erster oder einziger Prozess im Nextflow-Skript ist; dann nimmt der Prozess möglicherweise den Pfad der Datenbank. Wenn nicht, muss die Datenbank als Dateien bereitgestellt werden. Siehe die folgende Referenz. Und der Eingabekanal sollte zusätzlich zum Pfad (query_sequence) den Pfad (db) haben. Siehe das Blastn-Skript oben.
https://stackoverflow.com/questions/75465741/path-not-being-detected-by-nextflow
Abbildung 4: Blastn-Datenbankfehler „Keine gültige Datenbank der Version 4“.
Dies ist ein Blast-Versionskonflikt
Wenn Sie eine Conda-Umgebung erstellen, wird automatisch Blast v2.6 installiert, das nicht die neueste Blast-NR-Datenbank verwenden kann
Sie benötigen eine undatierte Version wie Blast v2.15.0, um die neueste Blast-Nr-Datenbank verwenden zu können.
Überprüfen Sie, welche Blastn-Version Sie haben:
blastn -version
Aktualisieren Sie die neueste Version von Blastn:
conda install -c bioconda blast
Abbildung 5: Blastn-Datenbankfehler „Der Alias nt.XXX konnte im Referenzalias nicht gefunden werden“.
Wenn Sie nicht alle NT-Dateien in Ihrem Blastn-Datenbankverzeichnis haben, erhalten Sie die Fehlermeldung „BLAST-Datenbankfehler: Volume oder Aliasdatei nt.xxx konnte in der referenzierten Aliasdatei nicht gefunden werden.“
Überprüfen Sie die NT-Dateinummern zwischen https://ftp.ncbi.nlm.nih.gov/blast/db/ und Ihrem Blastn-Datenbankverzeichnis
Sie können die fehlenden NT-Dateien herunterladen, indem Sie das obige Bash-Skript verwenden