01. Pengunduhan dan pembaruan basis data Blastn [Otomatis oleh alat NCBI]
02. Pengunduhan dan pembaruan basis data Blastn [Otomatis dengan skrip bash]
03. Eksekusi ledakan [skrip bash interaktif pengguna & skrip DSL2 Nextflow]
04. Blastn mengenai ekstraksi urutan [skrip bash interaktif pengguna]
05. Kesalahan umum dan solusinya
Ciptakan lingkungan conda untuk ledakan
conda create -n blastn_db
Aktifkan lingkungan ledakan
conda activate blastn_db
Salin tautan ledakan terbaru yang dapat dieksekusi dari tautan berikut
https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
unduh file yang dapat dieksekusi sebagai berikut
wget https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.15.0+-x64-linux.tar.gz
Ekstrak file yang diunduh sebagai berikut
tar -zxvf ncbi-blast-2.15.0+-x64-linux.tar.gz
Arahkan ke direktori berikut
cd ncbi-blast-2.15.0+/bin
Tambahkan jalur ini ke variabel lingkungan PATH. Lihat cara melakukan ini di tutorial saya:
https://github.com/asadprodhan/Tentang-the-PATH
Salin update_blastdb.pl dari direktori ncbi-blast-2.15.0+/bin ke direktori tempat Anda ingin mengunduh database blastn
cp ./update_blastdb.pl databaseDirectory
Jalankan skrip sebagai berikut
run ./update_blastdb.pl --decompress nt
Pengunduhan akan dimulai secara otomatis
Ketika pengunduhan selesai, konfirmasikan bahwa semua file nt telah diunduh. Anda dapat melakukannya dengan memeriksa silang nomor file nt antara https://ftp.ncbi.nlm.nih.gov/blast/db/ dan direktori Anda
Jika Anda tidak memiliki semua file nt di direktori Anda, maka Anda akan mendapatkan "BLAST Database error: Could not find volume or alias file nt.xxx in referenced alias file"
Anda dapat mengunduh file nt yang hilang dengan menggunakan skrip bash berikut
Ketika semua file nt diunduh, Anda dapat menghapus file md5 sebagai berikut:
rm -r *.md5
Siapkan file metadata.tsv yang berisi daftar semua file nt.??.tar.gz. File nt.??.tar.gz terletak di
https://ftp.ncbi.nlm.nih.gov/blast/db/
File metadata.tsv terlihat seperti ini:
Gambar 1: File nt database Blastn.
Letakkan file metadata.tsv dan script blastn berikut di direktori tempat Anda ingin mendownload database blastn
Periksa format file sebagai berikut:
file *
Semua file harus dalam format UNIX yaitu teks ASCII saja. File yang ditulis di komputer Windows akan memiliki format Windows yaitu teks ASCII, dengan terminator garis CRLF. Ubah file-file ini menjadi format unix dengan menjalankan perintah berikut:
dos2unix *
Periksa apakah file dapat dieksekusi
ls -l
Jalankan perintah berikut untuk membuat file dapat dieksekusi
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: memberitahu tar untuk mengekstrak file
v: “v” adalah singkatan dari “verbose”, mencantumkan semua file saat dekompresi berlanjut
z: memberitahu perintah tar untuk membuka kompresi/dekompresi file (gzip)
f: memberi tahu tar bahwa suatu file akan ditugaskan untuk dikerjakan
pkill -9 wget # untuk membatalkan unduhan wget yang sedang berjalan
Kartu liar seperti ' tar.gz' tidak berfungsi untuk 'tar'. Karena tar yang disertakan dengan “ ” tidak hanya membatasi dirinya pada file tar yang ada di direktori tetapi juga meluas ke nama file imajiner (!), misalnya, abc.tar.gz def.tar.gz ghi.tar .gz atau 1.gz, 2.gz dan 3.gz dll. Karena file-file ini tidak ada, tar tidak dapat menemukannya dan menghasilkan kesalahan 'tidak ditemukan dalam arsip'. Fungsi loop berikut dapat mengatasi masalah ini ketika Anda memiliki beberapa file tar untuk didekompresi.
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
Persentase identitas default adalah 90%
Persentase cakupan kueri default adalah 0%
Semakin kecil nilai E maka semakin baik kecocokannya
Referensi: https://www.metagenomics.wiki/tools/blast/evalue
Semakin tinggi skor bitnya, semakin baik kesamaan urutannya
Skrip ini memungkinkan Anda untuk
memodifikasi parameter blastn default
menjalankan blastn di komputer lokal dan jarak jauh menggunakan container (Ini menghilangkan kebutuhan untuk menginstal dan memperbarui perangkat lunak blastn. Namun, Anda perlu menginstal Nextflow dan Singularity)
mengotomatiskan analisis ledakan untuk beberapa sampel
#!/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 ""
Skrip bash untuk mengekstrak urutan ledakan bersifat interaktif bagi pengguna. Ini akan meminta masukan, memprosesnya secara otomatis, dan menghasilkan file yang berisi urutan fasta yang diharapkan. Lihat tangkapan layar di bawah ini:
Gambar 2: Cara kerja skrip blastn_hits_sequences_extraction_auto_AP.
Gambar 3: Kesalahan database Blastn "Tidak ditemukan file alias atau indeks".
Kesalahan ini mungkin dapat diatasi dengan menyesuaikan skrip sebagai berikut:
Tambahkan 'nt' di akhir jalur database seperti /path/to/the/blastn/db/nt
Lihat jalur database pada skrip blastn di atas. Demikian pula, '/nr' untuk blastp
Jika Blastn adalah proses pertama atau satu-satunya dalam skrip Nextflow; maka prosesnya mungkin mengambil jalur database. Jika tidak, maka database perlu disediakan sebagai file. Lihat referensi berikut. Dan saluran input harus memiliki path(db) selain path(query_sequence). Lihat skrip blastn di atas.
https://stackoverflow.com/questions/75465741/path-not-being-detected-by-nextflow
Gambar 4: Kesalahan database Blastn "Bukan database versi 4 yang valid".
Ini adalah konflik versi ledakan
Saat Anda membuat lingkungan conda, secara otomatis menginstal blast v2.6 yang tidak dapat menggunakan database blast nr terbaru
Anda memerlukan versi tak bertanggal seperti blast v2.15.0 untuk menggunakan database blast nr terbaru.
Periksa versi blastn yang Anda miliki:
blastn -version
Perbarui versi terbaru blastn:
conda install -c bioconda blast
Gambar 5: Kesalahan database Blastn "tidak dapat menemukan alias nt.XXX di alias referensi".
Ketika Anda tidak memiliki semua file nt di direktori database blastn Anda, maka Anda akan mendapatkan kesalahan ini "Kesalahan Database BLAST: Tidak dapat menemukan file volume atau alias nt.xxx dalam file alias yang direferensikan"
Periksa ulang nomor file nt antara https://ftp.ncbi.nlm.nih.gov/blast/db/ dan direktori database blastn Anda
Anda dapat mengunduh file nt yang hilang dengan menggunakan skrip bash di atas