Учебный сайт Левина Ильи, 3-й семестр

Секвенирование по Сенгеру. Анализ хроматограмм

Для выполнения практикума я решил выбрать программу Unipro UGENE, так как она мне очень понравилась. Также я смотрел хроматограммы в веб-сервисе Pearl и программе Geneious Prime, но UGENE - единственная из них, которая оказалась одновременно бесплатной и ооочень функциональной. Думаю, что освоение малой части именно её функционала будет для меня полезней всего.

Ссылки на мои файлы с хроматограммами: 24_F.ab1, 24_R.ab1.

Для того, чтобы нормально выровнять хроматограммы в UGENE, мне нужно кроме файлов с хроматограммами подать ей ещё файл с референсной последовательностью в формате fasta. Его я получил с помощью веб-сервиса Pearl. Также в параметрах выравнивания я специально задал Trimming quality threshold равный 10 для того, чтобы нечитаемые концы у меня вырезались только в случае, если параметр Q у букв, находящихся в концах хроматограммы, будет меньше либо равен 10 (если я правильно понял).

Собственно, начнём с нечитаемых концов двух хроматограмм. Я сравню то, что напридумывал я с нечитаемыми концами, с тем, что в этом плане вычислила программа.

Сразу отмечу то, что длина 2-х хроматограмм различается: длина прямой последовательности - 717 букв, а длина обратной - 722 буквы. Думаю, это можно списать именно на эти самые нечитаемые концы.

Сначала прямая последовательность:

24_F_1_1.png
Рис. 1. Передний нечитаемый конец хроматограммы прямой последовательности (моё мнение: 1-24)

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

24_F_2_1.png
Рис. 2. Задний нечитаемый конец хроматограммы прямой последовательности (моё мнение: 715-717)

Здесь пятно краски от гуанина испоритило сигнал от нескольких нуклеотидов.

А теперь обратная последовательность:

24_R_1_1.png
Рис. 3. Передний нечитаемый конец хроматограммы обратной последовательности (моё мнение: 1-27)

Нечитаем он, видимо, потому, что тут образовалось большое пятно от краски, характеризующей гуанин.

Результат выравнивания программы: были удалены первые 27 нуклеотидов;

24_R_2_1.png
Рис. 4. Задний нечитаемый конец хроматограммы обратной последовательности (моё мнение: 720-722)

Результат выравнивания программы: конец остался нетронутый.

Но, собственно, выравненные хроматограммы у нас есть, и их можно просмотреть и исправить/дополнить, где это необходимо.

Вот и первый случай проблемного нуклеотида:

1.png

Здесь на месте "N" на нижней хроматограмме я поставил "A", так как сигнал именно от этого нуклеотида является здесь сильнейшим. Добавившийся и смутивший программу сигнал от "C", очевидно, является лишь фоновым шумом или случайной ошибкой детектора.

Второй случай:

2.png

Здесь я на верхней хроматограмме вместо буквы "N" поставил букву "C" на основании хорошего сигнала этой буквы из нижней хроматограммы. Да и мы сами можем заметить, что на верхней хроматограмме "синий" сигнал сильнее красного (который, я думаю, вообще является шумом), но сам по себе он невелик, поэтому опираемся на нижнюю хроматограмму.

Третий случай:

3.png

Здесь я аналогично второму случаю на нижней хроматограмме вместо буквы "N" поставил букву "G", так как сам по себе сигнал от гуанина в несколько раз сильнее сигнала от аденина, так и на верхней хроматограмме гуаниновый сигнал полностью доминирует над остальными.

Четвёртый случай, нечитаемая часть хроматограммы:

На верхней хроматограмме небольшое пятно краски от "аденина" (я считаю, что это именно небольшое пятно, так как оно даёт слишком хороший сигнал на слишком длинной части хроматограммы, это не похоже на пик) немножко всё испортило. Первую букву "N" я заменю на "A", так как тут на обеих хроматограммах это самый сильный сигнал. Вторую букву "N" я заменю на "T", так как, несмотря на пятно от аденина, сигнал именно от этого нуклеотида здесь наиболее сильный. А третью букву "N" я заменю на букву "C", основываясь на данных из нижней более чёткой в этом месте хроматограммы, даже несмотря на более сильный сигнал от "аденина".

Пятый случай, нечитаемый конец верхней хроматограммы:

У верхней хроматограммы мы можем наблюдать уже нечитаемый конец, где каждый из сигналов накладывается на другой. Но по нижней более чёткой хроматограмме мы можем определить нужные нам нуклеотиды: кроме первого. Программа определила нуклеотид там, где его, по идее, нет, просто большое расстояние между пиками на первой хроматограмме. Это надо удалить. Так, следующую букву "N" я заменю на гуанин, опираясь на данные с нижней хроматограммы. Аналогично сделаю и со следующей, только заменю на аденин. Последнюю букву "N", находящуюся на нижней хроматограмме, я заменю на "G", так как считаю, что секвенатору определить её в этом месте помешал шум от близлежащих "аденинов", но при этом сигнал от гуанина есть, и достаточно отчётливый.

Далее у нас огромная куча полиморфизмов:

Шестой случай:

Куча полиморфизмов... Будем разбираться.

Первую букву "N" я заменю на букву "R", так как там наблюдается полиморфизм гуанина и аденина; Вторую букву "N" я заменю на букву "W", так как тут уже наблюдается полиморфизм аденина и тимина; третий проблемный нуклеотид очень похож на первый в нашем шестом случае, поэтому я также там поставлю букву "R"; и четвёртый нуклеотид, как мы можем видеть, является полиморфизмом гуанина и аденина, так как тут я также поставлю букву "R".

Седьмой случай, нечитаемый конец хроматограммы:

10.png

Здесь, как мы можем заметить, на последних трёх нуклеотидах хроматограмма является нечитаемой, но последний нуклеотид программа определила гуанином, что я считаю неправильным. В данном месте хроматограммы это с большей вероятностью мог быть шум от краски, поэтому я последнюю букву последовательности заменил на "N".

Доп. случай, передний конец верхней хроматограммы:

11.png

Разбираемся: первая буква "N" стоит заслуженно, это явное пятно краски. Вторая буква "N" также стоит правильно, так как там по сигналам вообще невозможно понять, что там. Третью букву "N" я заменил на "M", так как там наблюдается полиморфизм аденина и цитозина. Следующие три буквы "N" я заменил на "R", хоть и при том, что там очень низкий уровень сигнала, особенно у четвёртого, я там вижу полиморфизмы аденина и гуанина. Последнюю букву я заменил на "M", так как снова увидел полиморфизм аденина и цитозина.

Ссылка на консенсусную последовательность.

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

Для начала я перевёл их из формата ab1 в формат fastq для того, чтобы без лишних проблем вытащить оттуда нужные мне значения Q для каждого нуклеотида. Сделал я это с помощью этого веб-сервиса.

Далее я написал скрипт, который мне считает среднее Q по всем буквам, дисперсию этого Q и среднее квадратичное отклонение. Полученные значения:

Прямая последовательность:

  • Среднее Q: 42.834;
  • Дисперсия Q: 207.318;
  • Среднее квадратичное отклонение Q: 14.409.

Обратная последовательность:

  • Среднее Q: 41.835;
  • Дисперсия Q: 198.935;
  • Среднее квадратичное отклонение Q: 14.114.

Использовал я в этом скрипте подмодуль SeqIO.QualityIO модуля Bio для Python, а также модуль statistics для подчёта необходимых мне статистических величин.

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

Также я написал скрипт, который помог мне подсчитать среднее соотношение уровня сигнала и шума по двум последовательностям. Полученные значения:

В нём я использовал подмодуль SeqIO.AbiIO модуля Bio для Python, а также модуль statistics.

Как мы можем видеть, полученные соотношения говорят нам о том, что в принципе в среднем уровень сигнала более чем в 50 раз выше уровня шума, что является прекрасным показателем. Это значит, что последовательность отсеквенирована довольно точно и качественно.

Для того, чтобы разобраться в формате ab1, я использовал вот этот документ, в нём на последних страничках указаны нужные ключевые слова для поиска информации. Также я использовал сайт-мануал BioPython, а именно:

для того, чтобы во всём этом разобраться.