01. ดาวน์โหลดและอัพเดตฐานข้อมูล Blastn [อัตโนมัติโดยเครื่องมือ NCBI]
02. ดาวน์โหลดและอัพเดตฐานข้อมูล Blastn [อัตโนมัติโดยสคริปต์ทุบตี]
03. การดำเนินการ Blastn [สคริปต์ทุบตีผู้ใช้แบบโต้ตอบและสคริปต์ Nextflow DSL2]
04. Blastn แตกลำดับการเข้าชม [สคริปต์ทุบตีผู้ใช้แบบโต้ตอบ]
05. ข้อผิดพลาดและวิธีแก้ไขทั่วไปที่ระเบิดได้
สร้างสภาพแวดล้อม conda สำหรับ blastn
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 ที่หายไปได้โดยใช้สคริปต์ทุบตีต่อไปนี้
เมื่อดาวน์โหลดไฟล์ 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 และ สคริปต์ blastn ต่อไปนี้ในไดเร็กทอรีที่คุณต้องการดาวน์โหลดฐานข้อมูล blastn
ตรวจสอบรูปแบบไฟล์ดังต่อไปนี้:
file *
ไฟล์ทั้งหมดจะต้องอยู่ในรูปแบบ UNIX เช่น ข้อความ ASCII เท่านั้น ไฟล์ที่เขียนด้วยคอมพิวเตอร์ Windows จะมีรูปแบบ Windows เช่น ข้อความ ASCII โดยมีตัวยุติบรรทัด CRLF แปลงไฟล์เหล่านี้เป็นรูปแบบยูนิกซ์โดยการรันคำสั่งต่อไปนี้:
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: บอกให้ tar แยกไฟล์
v: “v” ย่อมาจาก “verbose” ซึ่งแสดงรายการไฟล์ทั้งหมดในขณะที่การบีบอัดดำเนินต่อไป
z: บอกให้คำสั่ง tar คลายการบีบอัด/ขยายขนาดไฟล์ (gzip)
f: บอก tar ว่าไฟล์จะถูกมอบหมายให้ทำงานด้วย
pkill -9 wget # เพื่อยกเลิกการดาวน์โหลด wget ที่ทำงานอยู่
Wild card เช่น ' 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%
ยิ่งค่า E น้อย การแข่งขันก็จะยิ่งดีขึ้น
อ้างอิง: https://www.metagenomics.wiki/tools/blast/evalue
ยิ่งคะแนนบิตสูงเท่าไร ความคล้ายคลึงกันของลำดับก็จะยิ่งดีขึ้นเท่านั้น
สคริปต์นี้ช่วยให้คุณได้
การแก้ไขพารามิเตอร์ blastn เริ่มต้น
เรียกใช้ blastn บนคอมพิวเตอร์ทั้งในพื้นที่และระยะไกลโดยใช้คอนเทนเนอร์ (ซึ่งไม่จำเป็นต้องติดตั้งและอัปเดตซอฟต์แวร์ blastn อย่างไรก็ตามคุณจะต้องติดตั้ง Nextflow และ Singularity)
การวิเคราะห์ blastn อัตโนมัติสำหรับตัวอย่างหลายตัวอย่าง
#!/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 ""
สคริปต์ทุบตีเพื่อแยกลำดับการโจมตีแบบ blastn นั้นเป็นแบบโต้ตอบกับผู้ใช้ มันจะขออินพุต ประมวลผลโดยอัตโนมัติ และสร้างไฟล์ที่มีลำดับฟาสต้าที่คาดหวัง ดูภาพหน้าจอด้านล่าง:
รูปที่ 2: สคริปต์ blastn_hits_sequences_extraction_auto_AP ทำงานอย่างไร
รูปที่ 3: ข้อผิดพลาดฐานข้อมูล Blastn "ไม่พบไฟล์นามแฝงหรือดัชนี"
ข้อผิดพลาดนี้อาจแก้ไขได้โดยการปรับสคริปต์ดังนี้:
เพิ่ม 'nt' ที่ส่วนท้ายของเส้นทางฐานข้อมูล เช่น /path/to/the/blastn/db/nt
ดูเส้นทางฐานข้อมูลในสคริปต์ blastn ด้านบน ในทำนองเดียวกัน '/nr' สำหรับ blastp
หาก Blastn เป็นกระบวนการแรกหรือกระบวนการเดียวของคุณในสคริปต์ Nextflow จากนั้นกระบวนการอาจใช้เส้นทางของฐานข้อมูล ถ้าไม่เช่นนั้น จะต้องระบุฐานข้อมูลเป็นไฟล์ ดูข้อมูลอ้างอิงต่อไปนี้ และช่องอินพุตควรมี path(db) นอกเหนือจาก path(query_sequence) ดูสคริปต์ blastn ด้านบน
https://stackoverflow.com/questions/75465741/path-not-being-detected-by-nextflow
รูปที่ 4: ข้อผิดพลาดฐานข้อมูล Blastn "ไม่ใช่ฐานข้อมูลเวอร์ชัน 4 ที่ถูกต้อง"
นี่คือข้อขัดแย้งเวอร์ชันระเบิด
เมื่อคุณสร้างสภาพแวดล้อม conda มันจะติดตั้ง blast v2.6 โดยอัตโนมัติซึ่งไม่สามารถใช้ฐานข้อมูล blast nr ล่าสุดได้
คุณต้องมีเวอร์ชันที่ไม่ระบุวันที่ เช่น blast v2.15.0 เพื่อใช้ฐานข้อมูล blast nr ล่าสุด
ตรวจสอบเวอร์ชันของ blastn ที่คุณมี:
blastn -version
อัปเดต blastn เวอร์ชันล่าสุด:
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 ที่หายไปได้โดยใช้สคริปต์ทุบตีด้านบน