01. Загрузка и обновление базы данных Blastn [автоматизировано с помощью инструмента NCBI]
02. Загрузка и обновление базы данных Blastn [автоматизировано с помощью сценария bash]
03. Blastn-выполнение [интерактивный пользовательский скрипт bash и скрипт Nextflow DSL2]
04. Извлечение последовательности попаданий Blastn [Интерактивный пользовательский скрипт bash]
05. Распространенные ошибки и решения
Создайте среду conda для blastn
conda create -n blastn_db
Активируйте среду blastn
conda activate blastn_db
Скопируйте ссылку на последний исполняемый файл Blast по следующей ссылке.
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
Подготовьте файл метаданных.tsv, содержащий список всех файлов nt.??.tar.gz. Файлы nt.??.tar.gz расположены по адресу
https://ftp.ncbi.nlm.nih.gov/blast/db/
Файл метаданные.tsv выглядит следующим образом:
Рисунок 1: Файлы базы данных Blastn nt.
Поместите файл метаданных.tsv и следующий скрипт blastn в каталог, куда вы хотите загрузить базу данных blastn.
Проверьте формат файла следующим образом:
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: сообщает tar извлечь файлы
v: «v» означает «подробный», перечисляя все файлы по мере продолжения распаковки.
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 %.
Чем меньше значение E, тем лучше совпадение.
Ссылка: https://www.metagenomics.wiki/tools/blast/evalue.
Чем выше битовый рейтинг, тем лучше сходство последовательностей.
Этот скрипт позволяет вам
изменение параметров blastn по умолчанию
запуск 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 для извлечения последовательностей попаданий blastn является интерактивным для пользователя. Он запросит входные данные, автоматически их обработает и создаст файл, содержащий ожидаемые последовательности fasta. Смотрите скриншот ниже:
Рисунок 2. Как работает скрипт blastn_hits_sequences_extraction_auto_AP.
Рисунок 3. Ошибка базы данных Blastn: «Не найден псевдоним или индексный файл».
Эту ошибку можно устранить, изменив сценарий следующим образом:
Добавьте «nt» в конец пути к базе данных, например /path/to/the/blastn/db/nt.
См. путь к базе данных в сценарии blastn выше. Аналогично, '/nr' для blastp
Если Blastn — ваш первый или единственный процесс в сценарии Nextflow; тогда процесс может пойти по пути к базе данных. Если нет, то базу данных необходимо предоставить в виде файлов. См. следующую ссылку. И входной канал должен иметь путь (db) в дополнение к пути (query_sequence). См. сценарий blastn выше.
https://stackoverflow.com/questions/75465741/path-not-being-detected-by-nextflow
Рисунок 4. Ошибка базы данных Blastn: «Недопустимая база данных версии 4».
Это конфликт взрывной версии.
Когда вы создаете среду conda, она автоматически устанавливает blast v2.6, который не может использовать последнюю версию базы данных blast nr.
Чтобы использовать последнюю версию базы данных blast nr, вам нужна недатированная версия, например blast v2.15.0.
Проверьте, какая у вас версия 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, используя приведенный выше скрипт bash.