Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 2019

Формат FASTA

FASTA – наиболее популярный формат представления последовательностей. Сочетает удобство парсинга и человекочитаемость.

Появился вместе с одноименной программой в 1988 году, но с тех пор немножко изменился в сторону упрощения. Старый формат (FASTA/Pearson) сейчас не понимают практически никакие программы.

Главная проблема формата – отсутствие какой-либо общепринятой спецификации. Поэтому все программы и базы понимают формат немножко по-разному.

FASTA – формат текстовый в узком смысле, т.е. подразумевает использование однобайтовой кодировки ASCII. Поэтому, например, никаких русских букв в заголовках FASTA быть не должно.

Основная часть записи – последовательность. Записывается в однобуквенном обозначении IUPAC (+ еще некоторые символы, в википедии более-менее правда) от 5'-конца к 3'-концу (в случае нуклеотидов) и от N-конца к C-концу (в случае аминокислот). Принято разбивать последовательность на несколько строк, чтобы файл целиком в ширину помещался на экран для удобства просмотра. Кроме того, обычно парсеры игнорируют пробельные символы в последовательностях, поэтому некоторые любят разделять последовательность на столбцы по ~10 остатков пробелами. Но я не советую этого делать. А ещё NCBI BLAST, по крайней мере формально, не допускает в FASTA пустых строк. Уж точно в последовательности не должно быть цифр, хотя некоторые парсеры и их игнорируют.

Кроме самой последовательности файл должен содержать заголовок – одну строку, начинающуюся с символа '>' и расположенную непосредственно перед последовательностью.

Внутренний формат заголовка – самая большая проблема формата. Единственное правило, которое обычно соблюдается (но не всегда, посмотрите хотя бы на FASTA файлы из PDB) – сразу после '>' и до первого пробела или переноса строки расположен идентификатор последовательности. Он должен быть уникальным хотя бы в пределах файла.

В некоторых базах идентификаторы записей FASTA обладают дополнительно внутренней структурой. Наиболее часто встречается структура, которая изначально появилась в NCBI, когда идентификатор FASTA включает несколько полей, разделенных символами '|'. Это, опять же, никакой не общепринятый стандарт. Можно изучить табличку с сайта NCBI, но смысла особого нет, в таком виде идентификаторы используются почти только в выдаче BLAST, и то я не уверен. Но вообще формат >что-то|что-то|что-то какое-то описание встречается достаточно часто, чтобы под него даже парсер в EMBOSS написали.

FASTA в EMBOSS

В списке форматов последовательностей EMBOSS аж 4 варианта формата FASTA для входных последовательностей: fasta/ncbi, gifasta, pearson, dbid. Они, на сколько мне известно, различаются только форматом заголовка. Причем то, что называется fasta (и обычно используется по-умолчанию), предполагает еще 3 разных варианта формата заголовка, какой вариант использовать программа пытаются угадать, не всегда удачно.

А еще есть 3 формата FASTA для вывода последовательностей (fasta/pearson, ncbi, gifasta), которые по логике не должны бы отличаться от соответствующих входных форматов, но отличаются (пусть и в деталях)! Всех тонкостей того, как это работает, я не знаю, и знать не хочу. Но один забавный пример покажу (следите за скобочками).

kodomo:~$ seqret 'sw:B3EWH2' -filter
>AON_AZEFE B3EWH2 Azemiopsin {ECO:0000303|PubMed:22613724}
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ seqret 'sw:B3EWH2' 'ncbi::stdout' -filter
>gnl|sw|AON_AZEFE (B3EWH2) Azemiopsin {ECO:0000303|PubMed:22613724}
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ seqret 'sw:B3EWH2' 'ncbi::stdout' -filter | seqret -filter
>AON_AZEFE (B3EWH2) Azemiopsin {ECO:0000303|PubMed:22613724}
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ seqret 'sw:B3EWH2' -filter | infoseq -filter -only -name -desc -acc
Name           Accession      Description 
AON_AZEFE      B3EWH2         Azemiopsin {ECO:0000303|PubMed:22613724}

kodomo:~$ seqret 'sw:B3EWH2' 'ncbi::stdout' -filter | infoseq -filter -only -name -desc -acc
Name           Accession      Description 
AON_AZEFE      -              (B3EWH2) Azemiopsin {ECO:0000303|PubMed:22613724}

kodomo:~$ seqret 'sw:B3EWH2' -filter | descseq -filter -name NAME -desc DESC
>NAME B3EWH2 DESC
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ seqret 'sw:B3EWH2' 'ncbi::stdout' -filter | descseq -filter -name NAME -desc DESC
>NAME DESC
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ seqret 'sw:B3EWH2' 'ncbi::stdout' -filter
>gnl|sw|AON_AZEFE (B3EWH2) Azemiopsin {ECO:0000303|PubMed:22613724}
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ seqret 'sw:B3EWH2' 'ncbi::stdout' -filter | seqret 'pearson::stdin' -filter
>gnl|sw|AON_AZEFE B3EWH2 Azemiopsin {ECO:0000303|PubMed:22613724}
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ seqret 'sw:B3EWH2' 'ncbi::stdout' -filter | seqret 'pearson::stdin' -filter | seqret 'ncbi::stdin' -filter
>AON_AZEFE B3EWH2 Azemiopsin {ECO:0000303|PubMed:22613724}
DNWWPKPPHQGPRPPRPRPKP

И есть совсем уж баги.

kodomo:~$ descseq 'sw:B3EWH2' -filter -name 'gb|U00096' -desc DESC
>gb|U00096 B3EWH2 DESC
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ descseq 'sw:B3EWH2' -filter -name 'gb|U00096' -desc DESC | seqret -filter
>U00096 U00096 B3EWH2 DESC
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ descseq 'sw:B3EWH2' -filter -name 'gd|U00096' -desc DESC
>gd|U00096 B3EWH2 DESC
DNWWPKPPHQGPRPPRPRPKP

kodomo:~$ descseq 'sw:B3EWH2' -filter -name 'gd|U00096' -desc DESC | seqret -filter
>EMBOSS_001 B3EWH2 DESC
DNWWPKPPHQGPRPPRPRPKP

Последняя команда выполняется несколько минут, причем seqret усиленно грузит процессор, что-то считает)