01. تنزيل وتحديث قاعدة بيانات Blastn [آليًا بواسطة أداة NCBI]
02. تنزيل وتحديث قاعدة بيانات Blastn [آليًا بواسطة bash script]
03. تنفيذ Blastn [البرنامج النصي bash التفاعلي للمستخدم والبرنامج النصي Nextflow DSL2]
04. استخراج تسلسل ضربات Blastn [نص bash التفاعلي للمستخدم]
05. تصحيح الأخطاء الشائعة وحلولها
إنشاء بيئة كوندا للانفجار
conda create -n blastn_db
تفعيل البيئة المتفجرة
conda activate blastn_db
انسخ رابط أحدث انفجار قابل للتنفيذ من الرابط التالي
https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
قم بتنزيل الملف القابل للتنفيذ على النحو التالي
wget https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.15.0+-x64-linux.tar.gz
قم باستخراج الملف الذي تم تنزيله على النحو التالي
tar -zxvf ncbi-blast-2.15.0+-x64-linux.tar.gz
انتقل إلى الدليل التالي
cd ncbi-blast-2.15.0+/bin
أضف هذا المسار إلى المتغير البيئي PATH. انظر كيفية القيام بذلك في البرنامج التعليمي الخاص بي:
https://github.com/asadprodhan/About-the-PATH
انسخ ملف update_blastdb.pl من دليل ncbi-blast-2.15.0+/bin إلى الدليل الذي تريد تنزيل قاعدة بيانات Blastn فيه
cp ./update_blastdb.pl databaseDirectory
قم بتشغيل البرنامج النصي على النحو التالي
run ./update_blastdb.pl --decompress nt
سيبدأ التنزيل تلقائيًا
عند اكتمال التنزيل، تأكد من تنزيل جميع ملفات nt. يمكنك القيام بذلك عن طريق التحقق من أرقام ملفات nt بين https://ftp.ncbi.nlm.nih.gov/blast/db/ والدليل الخاص بك
إذا لم يكن لديك جميع ملفات nt في الدليل الخاص بك، فستحصل على "خطأ في قاعدة بيانات BLAST: تعذر العثور على ملف وحدة التخزين أو الاسم المستعار nt.xxx في ملف الاسم المستعار المشار إليه"
يمكنك تنزيل ملفات nt المفقودة باستخدام البرنامج النصي bash التالي
عند تنزيل جميع ملفات nt، يمكنك حذف ملفات md5 كما يلي:
rm -r *.md5
قم بإعداد ملف metadata.tsv الذي يحتوي على قائمة بجميع ملفات nt.??.tar.gz. توجد ملفات nt.??.tar.gz في
https://ftp.ncbi.nlm.nih.gov/blast/db/
يبدو الملف metadata.tsv كما يلي:
الشكل 1: ملفات nt لقاعدة بيانات Blastn.
ضع ملف metadata.tsv والبرنامج النصي المتفجر التالي في الدليل حيث تريد تنزيل قاعدة البيانات المتفجرة
تحقق من تنسيق الملف كما يلي:
file *
يجب أن تكون جميع الملفات بتنسيق UNIX، أي نص ASCII فقط. الملفات المكتوبة على جهاز كمبيوتر يعمل بنظام Windows سيكون لها تنسيق Windows، أي نص ASCII، مع إنهاء سطر CRLF. قم بتحويل هذه الملفات إلى تنسيق Unix عن طريق تشغيل الأمر التالي:
dos2unix *
تأكد من أن الملفات قابلة للتنفيذ
ls -l
قم بتشغيل الأمر التالي لجعل الملفات قابلة للتنفيذ
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: يخبر القطران باستخراج الملفات
v: يشير الحرف "v" إلى كلمة "verbose"، حيث يتم إدراج جميع الملفات مع استمرار عملية إلغاء الضغط
z: يخبر الأمر tar بفك ضغط/فك ضغط الملف (gzip)
f: يخبر tar أنه سيتم تعيين ملف للعمل معه
pkill -9 wget # لإحباط تنزيل wget قيد التشغيل
الحرف البدل مثل " tar.gz" لا يعمل مع "tar". لأن tar المزود بـ " " لا يقتصر على ملفات tar الموجودة في الدليل فحسب، بل يمتد أيضًا إلى أسماء الملفات التخيلية (!)، على سبيل المثال، abc.tar.gz def.tar.gz ghi.tar .gz أو 1.gz، 2.gz و3.gz وما إلى ذلك. نظرًا لعدم وجود هذه الملفات، لا يمكن لـ tar العثور عليها وينتج خطأ "غير موجود في الأرشيف". يمكن لوظيفة الحلقة التالية التغلب على هذه المشكلة عندما يكون لديك ملفات tar متعددة لفك ضغطها.
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
نسبة الهوية الافتراضية هي 90%
النسبة المئوية لتغطية الاستعلام الافتراضية هي 0%
كلما كانت القيمة الإلكترونية أصغر، كانت المطابقة أفضل
المرجع: https://www.metagenomics.wiki/tools/blast/evalue
كلما زادت درجة البت، كان تشابه التسلسل أفضل
يتيح لك هذا البرنامج النصي
تعديل معلمات الانفجار الافتراضية
تشغيل Blastn على كل من أجهزة الكمبيوتر المحلية والبعيدة باستخدام الحاويات (وهذا يلغي الحاجة إلى تثبيت برنامج Blastn وتحديثه. ومع ذلك، ستحتاج إلى تثبيت Nextflow وSingularity)
أتمتة تحليل الانفجار لعينات متعددة
#!/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 ""
يعد البرنامج النصي bash لاستخراج تسلسلات الضربات المتفجرة تفاعليًا للمستخدم. سوف يطلب مدخلات، ويعالجها تلقائيًا، وينتج ملفًا يحتوي على تسلسلات فاستا المتوقعة. انظر لقطة الشاشة أدناه:
الشكل 2: كيفية عمل البرنامج النصيblastn_hits_sequences_extraction_auto_AP.
الشكل 3: خطأ في قاعدة بيانات Blastn "لم يتم العثور على اسم مستعار أو ملف فهرس".
يمكن حل هذا الخطأ عن طريق ضبط البرنامج النصي على النحو التالي:
أضف "nt" في نهاية مسار قاعدة البيانات مثل /path/to/the/blastn/db/nt
راجع مسار قاعدة البيانات في البرنامج النصي المتفجر أعلاه. وبالمثل، "/nr" لـblastp
إذا كانت Blastn هي العملية الأولى أو الوحيدة في البرنامج النصي Nextflow؛ ثم قد تأخذ العملية مسار قاعدة البيانات. إذا لم يكن الأمر كذلك، فيجب توفير قاعدة البيانات كملفات. انظر المرجع التالي. ويجب أن تحتوي قناة الإدخال على مسار (db) بالإضافة إلى المسار (query_sequence). انظر النص الانفجاري أعلاه.
https://stackoverflow.com/questions/75465741/path-not-being-detected-by-nextflow
الشكل 4: خطأ في قاعدة بيانات Blastn "قاعدة بيانات الإصدار 4 غير صالحة".
هذا هو الصراع نسخة الانفجار
عندما تقوم بإنشاء بيئة كوندا، فإنها تقوم تلقائيًا بتثبيت الإصدار 2.6 من Blast الذي لا يمكنه استخدام أحدث قاعدة بيانات Blast Nr
أنت بحاجة إلى إصدار غير مؤرخ مثلblast v2.15.0 لاستخدام أحدث قاعدة بيانات لعدد الانفجار.
تحقق من إصدار Blastn لديك:
blastn -version
تحديث الإصدار الأخير من بلاستن:
conda install -c bioconda blast
الشكل 5: خطأ في قاعدة بيانات Blastn "تعذر العثور على الاسم المستعار nt.XXX في الاسم المستعار المرجعي".
عندما لا يكون لديك جميع ملفات nt في دليل قاعدة بيانات Blastn، فسوف تحصل على هذا الخطأ "خطأ في قاعدة بيانات BLAST: تعذر العثور على ملف وحدة التخزين أو الاسم المستعار nt.xxx في ملف الاسم المستعار المشار إليه"
قم بالتحقق من أرقام ملفات nt بين https://ftp.ncbi.nlm.nih.gov/blast/db/ ودليل قاعدة بياناتblastn الخاصة بك
يمكنك تنزيل ملفات nt المفقودة باستخدام البرنامج النصي bash أعلاه