Самый эффективный способ хранения большой последовательности ДНК?

Я хочу упаковать гигантскую последовательность ДНК с помощью приложения iOS (около 3 000 000 000 пар оснований). Каждая базовая пара может иметь значение A, C, T или G. Хранение каждой базовой пары за один байт даст файл размером 3 ГБ, что слишком много.:)

Теперь я хочу сохранить каждую базовую пару в двух битах (четыре пары базовых на октет), которая дает файл 750 МБ. 750 МБ по-прежнему слишком много, даже при сжатии.

Есть ли лучшие форматы файлов для эффективного хранения гигантских пар оснований на диске? В памяти не проблема, поскольку я читаю куски.

Ответ 1

Я думаю, вам придется использовать два бита на базовую пару, а также реализовать сжатие, как описано в этой статье.

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

С предложенным алгоритмом последовательность будет сжата на 75% независимо от количества повторных или не повторяющихся шаблонов в последовательности. "

Сжатие ДНК с использованием структуры данных на основе хэш, Международный журнал по информационным технологиям и управлению знаниями Июль-декабрь 2010 года, том 2, № 2, стр. 383-386.

Изменить: существует программа GenCompress, которая утверждает, что эффективно сжимает последовательности ДНК:

http://www1.spms.ntu.edu.sg/~chenxin/GenCompress/

Изменить: см. также этот вопрос на BioStar.

Ответ 2

Если вы не против сложного решения, посмотрите эту статью или этот документ или даже этот, который более подробно.

Но я думаю, вам нужно уточнить, с чем вы имеете дело. Некоторые специфические приложения могут привести к различному хранению. Например, последняя работа, которую я привел, касается сжатия с потерями ДНК...

Ответ 3

Базовые пары всегда пара вверх, поэтому вам нужно только сохранить одну сторону нити. Теперь я сомневаюсь, что это работает, если есть определенные мутации в ДНК (например, ди-тиаминсвязь), которые заставляют противоположную прядь не быть полной противоположностью сохраненной цепи. Помимо этого, я не думаю, что у вас есть много вариантов, кроме как сжать его каким-то образом. Но, опять же, я не являюсь биоинформатичным парнем, поэтому могут быть некоторые довольно сложные способы хранения связки ДНК в небольшом пространстве. Еще одна идея, если приложение iOS просто помещает читателя на устройство и считывает последовательность из веб-службы.

Ответ 4

Используйте diff из ссылочного генома. Из размера (3Gbp), который вы публикуете, похоже, что вы хотите включить полные последовательности людей. Поскольку последовательности не слишком сильно отличаются от человека к человеку, вы должны иметь возможность сжимать массивно, сохраняя только diff.

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

Ответ 5

рассмотрите это, сколько разных комбинаций вы можете получить? из 4 (я думаю, его около 16)

actg = 1 atcg = 2 atgc = 3 и т.д., так что

вы можете создать массив типа [1,2,3], затем вы можете перейти на один шаг дальше,

проверить, соответствует ли 1 по 2, конвертировать 12 в a, 13 = b и так далее... если я немного разбираюсь в ДНК, это означает, что вы не можете получить определенное значение

поскольку должно совпадать с c, и t с g или что-то вроде этого, которое уменьшает ваши параметры, поэтому в основном вы можете найти последовательность и дать ей то, что вы также можете преобразовать обратно...

Ответ 6

Вы хотите заглянуть в трехмерную заполняющую пробел. 3D sfc уменьшает сложность 3d до сложности 1d. Это немного похоже на n octree или r-tree. Если вы можете сохранить полную dna в sfc, вы можете искать похожие плитки в дереве, хотя sfc, скорее всего, будет использоваться с сжатием с потерями. Может быть, вы можете использовать алгоритм сортировки блоков, например, bwt, если вы знаете размер плиток, а затем попробуйте сжатие энтропии, например, сжатие huffman или код golomb?

Ответ 7

Вы можете использовать такие инструменты, как MFCompress, Deliminate, Comrad.These инструменты обеспечивают энтропию меньше 2.That для хранения каждого символа займет менее 2 бит