Сборка генома: пазл из миллионов кусочков

Секвенатор даёт миллионы коротких обрывков. Собрать из них целый геном — одна из труднейших задач биоинформатики.

Сборка генома (genome assembly) — восстановление исходной длинной последовательности из множества коротких перекрывающихся ридов без знания эталона.

В разделе про секвенирование мы видели: прибор рвёт геном на миллионы ридов. Здесь соберём картину целиком: почему это пазл, как перекрытия и граф де Брёйна (из раздела про k-меры) решают задачу и почему результат — обычно не одна строка, а множество фрагментов.

Почему это пазл, и трудный

Представьте: тысячу одинаковых книг пропустили через шредер, перемешали обрывки и просят восстановить одну книгу. Сложности: обрывки короткие, многие фразы повторяются (повторы!), часть с опечатками (ошибки прибора), и нет образца для сверки. Ровно это — сборка de novo (с нуля, без эталона).

Перекрытия — ключ к сборке

Идея: если конец одного рида совпадает с началом другого, вероятно, они соседние в геноме. Склеивая по перекрытиям, восстанавливаем последовательность. Покажем склейку двух ридов по перекрытию.

def overlap(a, b, min_len=3):
    # длина максимального суффикса a, равного префиксу b
    start = 0
    best = 0
    for i in range(min_len, min(len(a), len(b)) + 1):
        if a[-i:] == b[:i]:
            best = i
    return best

r1 = 'ATGCGTACG'
r2 = 'TACGGGTTA'
ov = overlap(r1, r2)
merged = r1 + r2[ov:]
print('Перекрытие:', ov, 'букв')
print('Склейка:', merged)

Вывод:

Перекрытие: 4 букв
Склейка: ATGCGTACGGGTTA

Риды ATGCGTACG и TACGGGTTA перекрываются на TACG (4 буквы), и склейка даёт ATGCGTACGGGTTA. Реальные сборщики делают это для миллионов ридов сразу — и тут на помощь приходит граф.

Граф де Брёйна на практике

Перебирать все пары ридов на перекрытие — O(числа ридов в квадрате), слишком дорого. Поэтому современные сборщики (из раздела про k-меры) разбивают риды на k-меры и строят граф де Брёйна: узлы — (k−1)-меры, рёбра — k-меры. Сборка = поиск пути через рёбра. Граф автоматически «складывает» одинаковые куски разных ридов, экономя работу.

риды -> бьём на k-меры -> граф де Брёйна (узлы и рёбра)
      -> чистим граф от ошибок и пузырей
      -> находим пути -> контиги (длинные собранные куски)

Контиги и скэффолды

Из-за повторов граф редко даёт одну непрерывную строку. Результат сборки — контиги (contigs): непрерывные собранные участки. Затем с помощью парных ридов (когда известно расстояние между двумя концами фрагмента) контиги связывают в скэффолды (scaffolds) — цепочки контигов с пропусками-«N» там, где последовательность ещё неизвестна. Качество сборки оценивают метрикой N50 (грубо: длина, такая что половина генома лежит в контигах не короче неё).

Как работает под капотом: почему повторы — главный враг

Повтор длиннее рида — это тупик: рид целиком помещается внутри повтора и не «знает», к какой из копий он принадлежит. В графе это узел с несколькими входами и выходами, и путь становится неоднозначным. Решения: длинные риды (Nanopore/PacBio), перекрывающие повтор целиком; парные концы, дающие масштаб; большее покрытие. Именно повторы — причина, почему геном человека «дочитывали» (до полной сборки telomere-to-telomere) ещё в 2022 году, спустя 20 лет после черновика.

Стоит развести две принципиально разные ситуации, потому что от них зависит вся стратегия. Сборка de novo — с нуля, без эталона, нужна для новых организмов, у которых референса ещё нет; это самый трудный случай, описанный выше. Картирование на референс — когда эталонный геном уже известен (например, человеческий), и риды нового образца просто прикладывают к нему по местам; это куда проще и быстрее, и именно так работает большинство медицинских анализов: не собирают геном пациента заново, а сравнивают его риды с эталоном, отмечая отличия. Понимание, какая из двух задач перед вами, определяет выбор инструментов: для de novo нужен сборщик вроде SPAdes, для картирования — выравниватель вроде BWA из раздела про k-меры. Путаница между этими режимами — частая концептуальная ошибка новичков.

Частые ошибки

  • Ожидать одну строку на выходе. Сборка даёт множество контигов; единый геном — редкость.
  • Игнорировать повторы. Они главный источник фрагментации и ошибок сборки.
  • Сравнивать сборки только по числу контигов. Смотрите и на N50, и на полноту, и на корректность.

Итог

  • Сборка de novo восстанавливает геном из коротких ридов без эталона — это трудный пазл.
  • Соседние риды находят по перекрытиям; на масштабе это делает граф де Брёйна из k-меров.
  • Результат — контиги, связываемые парными ридами в скэффолды; качество мерят N50.
  • Повторы длиннее рида — главная причина фрагментации; их разрешают длинные и парные риды.
Проверьте себя
1. Что такое сборка генома de novo?
AСравнение с эталонным геномом
BВосстановление последовательности из коротких перекрывающихся ридов без эталона
CПодсчёт GC-состава
DПоиск генов в готовом геноме
2. Почему сборщики используют граф де Брёйна вместо перебора всех пар ридов на перекрытие?
AГраф точнее
BПеребор всех пар — O(числа ридов в квадрате), слишком дорого; граф из k-меров масштабируется
CГраф не требует k-меров
DТак требует формат FASTA
3. Что главным образом мешает собрать геном в одну непрерывную строку?
AСлишком высокое качество ридов
BПовторяющиеся участки длиннее рида, создающие неоднозначные пути в графе
CОтсутствие компьютеров
DМалый GC-состав