От лаборатории к данным: секвенирование

Прежде чем анализировать геном, его нужно «прочитать» — превратить молекулу в строки. Этим занимается секвенирование.

Секвенирование — определение точного порядка нуклеотидов (букв A/T/G/C) в молекуле ДНК или РНК.

Биоинформатик редко держит в руках пробирку, но обязан понимать, откуда приходят данные и какие в них артефакты. Иначе легко принять ошибку прибора за биологическое открытие. Этот урок — мост между мокрой лабораторией и сухим анализом.

Зачем понимать происхождение данных

Секвенатор не выдаёт геном целиком одной строкой. Он читает миллионы коротких кусочков — ридов (reads), каждый длиной обычно 100–300 букв (для коротких чтений) или тысячи букв (для длинных). Геном при этом — миллионы или миллиарды букв. Значит, прибор рвёт ДНК на обрывки, читает каждый по отдельности, а собрать целое — уже задача алгоритма.

Покрытие: почему читают много раз

Каждое место генома читают не один раз, а много — это называется покрытие (coverage, глубина). Покрытие 30× значит, что в среднем каждую букву прочитали 30 раз разными ридами. Зачем? Прибор ошибается, и одиночное чтение ненадёжно. Если 29 ридов в позиции говорят «A», а один — «G», то это, скорее всего, ошибка прибора, а не мутация.

# Простейший "консенсус" по покрытию в одной позиции
from collections import Counter
reads_at_position = ["A", "A", "G", "A", "A", "A", "A", "G", "A", "A"]
votes = Counter(reads_at_position)
consensus = votes.most_common(1)[0][0]
depth = len(reads_at_position)
print("Голоса:", dict(votes))
print("Глубина покрытия:", depth)
print("Консенсусная буква:", consensus)

Вывод:

Голоса: {'A': 8, 'G': 2}
Глубина покрытия: 10
Консенсусная буква: A

Так из множества зашумлённых ридов получается одна надёжная буква. Это уже настоящий биоинформатический шаг — голосование большинством.

Технологии: короткие и длинные чтения

ТипДлина ридаПлюс / минус
Короткие (Illumina)~100–300 буквдёшево и точно / трудно собирать повторы
Длинные (Nanopore, PacBio)тысячи–миллионы буквлегко собирать / больше ошибок (компенсируют покрытием)

Как работает под капотом: от сигнала к буквам

Физика у каждого прибора своя (флуоресценция, изменение тока в наннопоре), но итог одинаков: непрерывный сигнал превращается в строку букв, и для каждой буквы прибор оценивает, насколько он в ней уверен. Эту уверенность кодируют как качество (Phred-оценка) и хранят рядом с буквами в формате FASTQ, который мы разберём отдельно.

Идея Phred проста: качество Q связано с вероятностью ошибки p формулой Q = -10·log10(p). Посчитаем вероятность ошибки для пары значений качества.

import math
def phred_to_prob(q):
    return 10 ** (-q / 10)
for q in [10, 20, 30, 40]:
    p = phred_to_prob(q)
    print(f"Q{q}: вероятность ошибки {p:.4f} (1 из {round(1/p)})")

Вывод:

Q10: вероятность ошибки 0.1000 (1 из 10)
Q20: вероятность ошибки 0.0100 (1 из 100)
Q30: вероятность ошибки 0.0010 (1 из 1000)
Q40: вероятность ошибки 0.0001 (1 из 10000)

Q30 — типичный порог «хорошего» качества: одна ошибка на тысячу букв.

Сборка как пазл

Имея миллионы перекрывающихся обрывков, восстановить исходный геном — всё равно что собрать пазл из миллиона кусочков, многие из которых одинаковые (повторы). Это отдельная большая задача — сборка генома, ей посвящён отдельный урок. Пока запомните схему:

Геном:   ...ATGCGATTACAGGCTA...   (не виден целиком)
Риды:    ATGCGA
            GATTAC
                TACAGGC
                    GGCTA
Сборка соединяет риды по перекрытиям -> восстанавливает геном

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

  • Доверять одиночному риду. Без достаточного покрытия отличить ошибку прибора от мутации нельзя.
  • Игнорировать качество. Буквы с низким Q надо отфильтровать, иначе анализ полон артефактов.
  • Думать, что прибор выдаёт готовый геном. Он выдаёт груду коротких ридов; геном собирает алгоритм.

Итог

  • Секвенатор читает геном не целиком, а как миллионы коротких ридов.
  • Покрытие (глубина) позволяет голосованием отделить ошибки от настоящих вариантов.
  • Качество (Phred) показывает уверенность прибора в каждой букве.
  • Сборка целого генома из ридов — отдельная алгоритмическая задача-пазл.
Проверьте себя
1. Что такое рид (read) в секвенировании?
AВесь геном в одной строке
BКороткий прочитанный фрагмент последовательности
CОшибка прибора
DИмя гена
2. Покрытие 30× означает, что...
AГеном на 30% прочитан
BВ среднем каждая позиция прочитана 30 раз разными ридами
CПрибор сделал 30 ошибок
DГеном в 30 раз длиннее обычного
3. Качество Q30 по шкале Phred соответствует вероятности ошибки...
A1 из 30
B1 из 100
C1 из 1000
D1 из 10