Рубрики
Биоинформатика

Формат GFF

Данное сообщение я хотел бы посвятить обзору формата файлов GFF, который очень широко используется в биоинформатике для структурирования, хранения и передачи данных о функциональных элементах генома. Это сообщение будет начинать серию рассказов не только о спецификации структуры данных вида GFF, но и о загрузке файлов формата GFF в рабочее пространство R среды, преобразовании их в объекты классов GRanges и TxDb, анализу структуры таких объектов и их использованию в исследованиях транскриптома.

Формат файлов GFF (акроним от англ. General Feature Format, либо реже используемых в настоящее время Gene-Finding Format или Generic Feature Format) – один из способов организации, хранения, обмена и представления данных о признаках (характеристиках или функциональных элементах) генома. При этом под признаками генома подразумеваются сигнальные последовательности (стартовые кодоны, стоп-кодоны, мотивы, сайты сплайсинга и т. д.), а также протяженные сегменты (промоторные регионы, экзоны, интроны и т. д.), которые могут быть скомбинированы в целые гены, РНК или белковые продукты.

Первоначальная версия формата GFF была предложена Dr. Richard Durbin из Института Сенгера (Кембриджшир, Великобритания) и Dr. David Haussler из Калифорнийского университета (Санта Круз, США). Однако из-за ряда недостатков первоначальная версия вскоре была модифицирована и расширена до версий GFF2 и GFF3, которые являются современными стандартами формата GFF. Вне зависимости от версии файл в формате GFF является текстовым файлом, где для каждого признака генома отводится одна строка, каждая строка содержит 9 полей, разделенных знаком табуляции, а всей области данных предшествует область комментариев. Такая структура файла позволяет быстро извлекать необходимые данные и проводить их обработку с помощью соответствующих программных средств.

Далее мы рассмотрим структуру файлов формата GFF2, GFF2.5 и GFF3; формат же GFF1 мы оставим без внимания, так как он во многом уже потерял актуальность.

Описание формата GFF2.

Область комментариев.

Строки с комментариями начинаются с одного или двух символов #. Строки, начинающиеся с одного символа #, содержат информацию только для пользователя и игнорируются программой, проводящей парсинг (разбор или анализ) файла GFF2. Cтроки, начинающиеся с двух символов #, содержат информацию о всем файле и именуются директивами (псевдокомментариями или метаданными). Они не являются обязательными, но, как правило, присутствуют в любом файле GFF2, так как используются программой, осуществляющей парсинг данных. В этих строках содержится следующая информация.

##gffversion 2

Версия формата GFF. Эта строка располагается первой и в файле встречается только один раз.

##source-version <source> <version text>

Наименование и версия программы, которая была использована при создании файла GFF2.

##date <date>

Дата создания файла GFF2.

##Type <type> [<seqname>]

Тип последовательности (“DNA”, “RNA” или “Protein”), признаки которой содержатся в файле. В одном и том же файле могут быть представлены разные типы последовательностей. Если этот комментарий отсутствует, то по умолчанию принимается, что тип последовательности – ДНК.

##DNA <seqname>

Последовательность ДНК вида:

##acggctcggattggcgctggatgatagatcagacgac

##…

##endDNA

Используется редко.

##RNA <seqname>

Последовательность РНК вида:

##acggcucggauuggcgcuggaugauagaucagacgac

##…

##endRNA

Используется редко.

##Protein <seqname>

Последовательность белка вида:

##MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSF

##…

##endProtein

Используется редко.

##sequence-region <seqname> <start> <end>

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

Область данных.

Как уже говорилось, эта область представлена множеством строк (по одной на каждый признак), а каждая строка содержит 9 полей, разделенных знаком табуляции. Список полей и их содержание приведены ниже.

Поле 1: <seqname>

Название последовательности. Обычно имя последовательности соответствует идентификатору этой последовательности в сопроводительном файле формата FASTA, либо идентификатору этой последовательности в базе данных (например, это может быть номер доступа EMBL/GenBank/DDBJ).

Поле 2: <source>

Источник текущего признака (программа, база данных, экспериментальные данные и т. д.).

Поле 3: <feature>

Тип признака (например, “gene”, “transcript”, “CDS”, “ncRNA”).

Поле 4: <start>

Целочисленное значение координаты начала признака. При этом нумерация всей последовательности начинается с 1, а начальная координата признака должна быть меньше или равна конечной координате.

Поле 5:  <end>

Целочисленное значение координаты конца признака.

Поле 6: <score>

Дробное число с плавающей точкой, показывающее, насколько надежно идентифицирован признак.

Поле 7: <strand>

Цепь, которой принадлежит признак. Может принимать три значения: “+”, “–“ или “.”. Последний вариант используется тогда, когда информация о цепи не является значимой (например, в случае динуклеотидных повторов).

Поле 8: <frame>

Поле содержит информацию об отношении признака к открытой рамке считывания. Это поле может принимать одно из четырех значений: “0”, “1”, “2” или “.”. Значение “0” указывает на то, что признак находится внутри открытой рамки считывания и первый нуклеотид этого признака соответствует первому нуклеотиду кодона. Значение “1” указывает на наличие одного, а значение “2” на наличие двух “лишних” нуклеотидов у признака, в результате чего только его второй или третий нуклеотиды, соответственно, начинают кодон. Значение “.” используется для заполнения поля <frame> признаков РНК и белков.

Поле 9: [attribute]

Поле содержит множество различных атрибутов признака, собранных в одну группу. Такими атрибутами могут быть идентификаторы, классы биологических молекул, бэнды хромосом, альтернативные названия признака, названия синдромов и т. д. Атрибуты собраны в одну строку и разделены точкой с запятой. Один и тот же атрибут может иметь несколько значений, разделенных запятой.

Формат GFF2 имеет ряд недостатков, в частности, он может представлять только двухуровневые иерархии признаков, и, соответственно, не может справиться с трёхуровневой иерархией типа ген → транскрипт → экзон. Более того, даже в случае с двухуровневой иерархией в формате GFF2 не предусмотрена запись направления этой иерархии. Эти, а также некоторые другие недостатки формата GFF2 привели к появлению его уточненной версии GFF2.5, а также более совершенного формата GFF3. Более подробно о формате GFF2 можно узнать на официальном сайте Института Сенгера, сотрудники которого являются разработчиками данного стандарта организации, хранения, обмена и представления данных о функциональных элементах генома.

Описание формата GFF2.5.

Формат GFF2.5 чаще всего называется форматом GTF (акроним от англ. Gene Transfer Format), так как он является расширением формата GFF2. В этом формате первые 8 полей идентичны таковым в формате GFF2, а вот поле “attribute” включает два обязательных атрибута, предназначенных для обработки нескольких транскриптов и одной и той же области генома.

gene_id value

Уникальный идентификатор геномного локуса, откуда происходит транскрипт.

transcript_id value

Уникальный идентификатор транскрипта.

Другие атрибуты могут быть произвольными.

Описание формата GFF3.

Формат GFF3 учитывает те недостатки, которые есть в предыдущих версиях формата GFF. В частности, в этом формате предусмотрена многоуровневая иерархия признаков, допускается одновременная принадлежность одного и того же признака разным группам, решена проблема записи признаков, занимающих разные регионы и т. д.

Область комментариев.

Строки с комментариями начинаются с одного, двух или трех символов #. Строки, начинающиеся с одного символа #, содержат информацию только для пользователя и игнорируются программой, проводящей парсинг файла GFF3. Программа так же игнорирует пустые строки или строки, которые заканчиваются на символ #. Cроки, начинающиеся с двух символов #, являются директивами и, как правило, используются программой парсинга. В этих строках может быть записана информация следующего рода.

##gffversion *

Версия формата GFF. Эта строка располагается первой, всегда присутствует и в файле встречается только один раз. В случае с файлами формата GFF3 символ * всегда имеет значение 3, как показано но нижеследующем примере.

##gff-version 3

##sequence-region seqid start end

Информация об опорной последовательности, присутствующей в области данных. Записывается в формате “seqid start end”, не является обязательной, но желательной, так как может использоваться программой парсинга при проверке границ признаков. Поскольку опорных последовательностей в области данных может быть много, то и строк ##sequenceregion seqid start end так же может быть много (по одной на каждую опорную последовательность, без повторов и без перекрестных ссылок). При этом следует иметь ввиду, что наличие строк ##sequenceregion seqid start end для всех последовательностей в области данных не обязательно, но если строка имеется, то в области данных обязательно должна присутствовать соответствующая последовательность (исключением могут быть только признаки, помеченные атрибутом “Is_circular”). Ниже дано несколько примеров записи такого рода информационных строк:

##sequence-region   10 1 133797422

##sequence-region   KI270757.1 1 71251

##sequence-region   MT 1 16569

##sequence-region   X 1 156040895

##sequence-region   Y 2781480 56887902

##featureontology URI

Информация о том, что в файле GFF3 тип признака определен по данным онтологического анализа, которые доступны по указанным URI или URL. Комментарий добавлен в спецификации файлов GFF3 недавно и пока широко не используется.

##attributeontology URI

Информация о том, что в файле GFF3 имена атрибутов взяты из данных онтологического анализа, которые доступны по указанным URI или URL. Комментарий добавлен в спецификации файлов GFF3 недавно и пока широко не используется.

##sourceontology URI

Информация о том, что в файле GFF3 имена источников взяты из данных онтологического анализа, которые доступны по указанным URI или URL. Комментарий добавлен в спецификации файлов GFF3 недавно и пока широко не используется.

##species NCBI_Taxonomy_URI

Информация о том, к какому виду живых организмов относятся данные в файле GFF3. Как правило, это URL-адрес страницы, посвященной данному виду, в таксономическом обозревателе NCBI, записанный в одном из двух вариантов:

##species http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=6239

##species http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?name=Caenorhabditis+elegans.

##genomebuild source buildName

Источник и имя сборки генома, по которой в файле GFF3 даны координаты всех признаков. Ниже дано несколько примеров:

##genomebuild NCBI B36

##genomebuild WormBase ws110

##genomebuild FlyBase  r4.1

Следует отметить, что начиная с версии 1.20 спецификаций GFF3 информация о геноме может быть разнесена по нескольким строкам с указанием имени сборки, версии, даты, источника и кода доступа:

#!genome-build  GRCh38.p3

#!genome-version GRCh38

#!genome-date 2013-12

#!genome-build-accession NCBI:GCA_000001405.18

В таких случаях в начале строки с комментариями используется не двойной символ ##, а два символа #!, так как это пока экспериментальное нововведение.

##FASTA

Информация о том, что файл содержит нуклеотидные или белковые последовательности в формате FASTA. Если имеются последовательности, то все они собираются вместе и помещаются в конец файла, как на примере, представленном ниже:

##FASTA

>ctg123

CTTCTGGGCGTACCCGATTCTCGGAGAACTTGCCGCACCATTCCGCCTTG

TGTTCATTGCTGCCTGCATGTTCATTGTCTACCTCGGCTACGTGTGGCTA

TCTTTCCTCGGTGCCCTCGTGCACGGAGTCGAGAAACCAAAGAACAAAAA

AAGAAATTAAAATATTTATTTTGCTGTGGTTTTTGATGTGTGTTTTTTAT

AATGATTTTTGATGTGACCAATTGTACTTTTCCTTTAAATGAAATGTAAT

Строки, начинающиеся с трех символов #, сигнализируют о том, что все данные, которые располагались выше этой строки, полностью обработаны. В этом случае программа, осуществляющая парсинг, может закрыть все вспомогательные объекты, которые до сих пор использовались в обработке файла и приступить к работе со следующим диапазоном данных.

Кроме описанных комментариев допускается включение и другой информации. Так, например, область комментариев нередко содержит информацию об использованных при создании файла GFF3 программных средствах, сроках и источниках аннотирования (процессе маркировки генов и других признаков генома), а также другие сведения:

#!processor NCBI annotwriter

#!annotation-date 12 March 2015

#!annotation-source NCBI Homo sapiens Annotation Release 107

Область данных.

Как и в случае с другими версиями формата GFF, эта область представлена множеством строк (по одной на каждый признак), а каждая строка содержит 9 полей, разделенных знаком табуляции.

Поле 1: “seqid

Метка системы координат (например, хромосомы), по которой можно определить местоположение текущего признака.

Поле 2: “source

Наименование алгоритма или процедуры, с помощью которой был идентифицирован признак. Обычно это название программы или ее части (например, “havana“, “Gnomon”), либо наименование базы данных (например, “GenBank”).

Поле 3: “type

Тип признака (например, “gene”, “transcript”, “CDS”, “ncRNA”).

Поле 4: “start

Начальная координата признака в геноме (в системе координат, помеченной в поле 1). Координата всегда имеет положительное целочисленное значение, меньшее либо равное значению координаты конца текущего элемента. Начальная координата признаков с так называемой нулевой длиной (например, инсерции) всегда равна конечной координате, а сам признак будет располагаться справа от этой координаты по направлению системы координат.

Поле 5: “end

Конечная координата признака в геноме (в системе координат, помеченной в поле 1). Координата всегда имеет положительное целочисленное значение, большее либо равное значению координаты начала текущего признака.

Поле 6: “score

Дробное число с плавающей точкой, показывающее, насколько надежно идентифицирован признак. К сожалению, однозначного подхода в расчете этого параметра нет и чаще всего в файлах GFF3 значения этого поля заменены на символ периода “.”.

Поле 7: “strand

Цепь, в которой локализован признак: “+” – плюс цепь, “–” – минус цепь, “?” – информация о цепи значима, но неизвестна, “.” – информация о цепи незначима.

Поле 8: “phase

Поле заполняется только для признаков “CDS” и может иметь только одно из трех целочисленных значений: 0, 1 или 2. Эти значения указываю на то, сколько нужно убрать нуклеотидов с самого начала признака, что бы достигнуть первого нуклеотида следующего кодона. Добавим, что для признаков, локализованных в плюс цепи, фаза считается от начала признака, а для признаков из минус цепи – с конца признака.

Поле 9: “attributes

Список атрибутов признака в формате “бирка = значение” (“tag = value”). Если у одного признака много атрибутов, то они отделяются друг от друга точкой с запятой; если же имеется много значений одного и того же атрибута, то эти значения разделяют запятой. Ниже перечислены и описаны теги с предопределенными значениями, но в некоторых файлах могут встречаться и другие атрибуты.

ID

Уникальный идентификатор признака. Один и тот же идентификатор может многократно повторятся в одном файле, но только в том случае, когда он представляет прерывистый признак (один признак, существующий во множестве генетических локусов). В таких случаях признак представлен не одной строкой, а совокупностью строк.

Name

Имя признака. Не всегда уникально даже в случае с непрерывными признаками.

Alias

Альтернативное имя признака. Не всегда уникально даже в случае с непрерывными признаками.

Parent

Тег, обозначающий “родителя” признака. Такого рода тег используется для группировки признаков низкого уровня в признаки более высокого уровня, например, экзонов в транскрипты, транскриптов в гены и т. д. Отметим, что признак может иметь много “родителей”.

Target

Идентификатор и локализация нуклеотидной или аминокислотной последовательности, относительно которой проводилось выравнивание последовательности признака. Этот тег записывается в формате “target_id start end [strand]”, причем цепь указывается не всегда.

Gap

Пометка о том, что последовательность признака и целевая последовательность, относительно которой проводилось выравнивание, не коллинеарны (содержат пробелы).

Derives_from

Тег используется для обозначения признаков, принадлежащих полицистронным генам.

Note

Пометка произвольного содержания. Пометок у одного признака может быть много.

Dbxref

Перекрестная ссылка на базу данных. Может иметь множество значений.

Ontology_term

Перекрестная ссылка на онтологический термин. Может иметь множество значений.

Is_circular

Тег, обозначающий, является ли признак кольцевым.

Ниже представлен пример организации данных о кодирующем белок гене EDEN человека в формате GFF3. В верхней части рисунка мы видим структуру гена EDEN, отображаемую в геномном браузере UCSC Genome Browser. А далее идет информация об этом же гене, но уже в формате GFF3.

Более подробно о формате GFF3 можно узнать на официальном сайте международного проекта The Sequence Ontology Project, исполнители которого являются разработчиками данного стандарта организации, хранения, обмена и представления данных о функциональных элементах генома.

Практическое применение формата GFF.

Формат GFF может быть использован для решения очень разнообразных задач биоинформатики, молекулярной и системной биологии. Ниже перечислены лишь некоторые из таких задач:

  • обмен стандартизированными данными внутри научного сообщества;
  • представление экспериментальных данных в стандартизированном виде, готовом к дальнейшему анализу;
  • тестирование методов идентификации функциональных элементов генома;
  • поиск новых, более сложных функциональных элементов генома с использованием стандартизованных данных, полученных их разных источников или же содержащих разные характеристики признаков;
  • подача стандартизированных данных в программы, осуществляющих пост-анализ;
  • подача стандартизированных данных в программы визуализации предсказанных и экспериментально подтвержденных признаков генома.