Сборка de novo

В этом задании было необходимо поработать с данными проекта по секвенированию бактерии Buchnera aphidicola.

Buchnera aphidicola в клетке хозяина, [1]
Buchnera aphidicola - вид гамма-протеобактерий, являющихся первичными эндосимбионтами гороховых тлей Acyrthosiphon pisum. Основной источник пищи Acyrthosiphon pisum - соки растений, поэтому у них естественным образом возникает дефицит незаменимых аминокислот. Решением этой проблемы стал симбиоз c Buchnera, возникший примерно 200 миллионов лет назад. Buchnera живут в специальных клетках тли, бактериоцитах, и передаются вертикально, через яйцеклетки матери. Они синтезируют незаменимые аминокислоты, а в ответ получают от тли множество питательных веществ и среду, богатую азотом. В результате такого симбиоза Buchnera aphidicola утратили значительную часть генома и многие ферменты, жизненно важные для свободноживущих бактерий [1].
Работать было нужно с короткими (длины 36) чтениями, полученными по технологии Illumina. Мне достался код доступа SRR4240357.

На странице проекта я скачала fastq - файл в виде архива .gz и перенесла его в рабочую директорию (/nfs/srv/databases/ngs/ann_karpukhina1/pr15), где распаковала программой gunzip.

Использованная команда: gunzip SRR4240357.fastq.gz

Был получен файл с чтениями SRR4240357.fastq.

Очистка чтений

С помощью программы Trimmomatic была проведена очистка чтений, а именно: удаление остатков адаптеров и плохих букв с концов.
Для начала все адаптеры для Illumina были собраны в единый файл adapters.fasta. Затем были исполнены следующие команды:

КомандаНазначениеВыходной файл
java -jar /usr/share/java/trimmomatic.jar SE -phred33 SRR4240357.fastq SRR4240357_noad.fastq ILLUMINACLIP:adapters.fasta:2:7:7Удаление остатков адаптеров SRR4240357_noad.fastq
java -jar /usr/share/java/trimmomatic.jar SE -phred33 SRR4240357_noad.fastq SRR4240357_trim.fastq TRAILING:20 MINLEN:30Обрезка с концов чтений нуклеотидов с качеством ниже 20 и отбор чтений длины не менее 30SRR4240357_trim.fastq

Выдача программы на этапе удаления адаптеров: Input Reads: 8098979 Surviving: 7937705 (98,01%) Dropped: 161274 (1,99%).
Было отброшено 161274 чтения из 8098979 исходных, размер файла уменьшился с 863 Мбайт до 845 Мбайт.

Выдача программы на этапе обрезки концов и отбора по длине: Input Reads: 7937705 Surviving: 7248100 (91,31%) Dropped: 689605 (8,69%).
Было отброшено 689605 чтений из 7937705, размер файла уменьшился с 845 Мбайт до 748 Мбайт.

Подготовка k-меров

Подготовка k-меров была произведена с помощью программы velveth. Она предназначена для создания набора данных, которые далее могут обрабатываться программой velvetg.

Velveth принимает на вход несколько последовательностей, строит хэш-таблицу и создает в отдельной директории два файла - Sequences и Roadmaps, необходимые для velvetg.
При запуске необходимо указывать длину k-мера (hash length) - длину хэшируемых слов в парах оснований, а также тип чтений (короткие или длинные, парные или непарные и т.д.). Возможные форматы входных файлов - fasta (default), fastq, fasta.gz, fastq.gz, sam, bam, eland, gerald.

В нашем случае было необходимо подготовить k-меры длины 29 для коротких непарных чтений (-short) из файла в формате fastq (-fastq). Выходные файлы записывались в папку velveth.

Использованная команда: velveth velveth 29 -fastq -short SRR4240357_trim.fastq.

Cборка на основе k-меров

Cборка на основе k-меров была произведена программой velvetg с использованием данных, полученных на предыдущем этапе. Velvetg строит граф де Брёйна - ориентированный n-мерный граф из m символов, отражающий пересечения между последовательностями символов. Он имеет m^n вершин, состоящих из всех возможных последовательностей длины n из данных символов. Один и тот же символ может встречаться в последовательности несколько раз.
Запуск программы без дополнительных параметров позволят получить fasta-файл с контигами и статистические данные в указанной директории.

Использованная команда: velvetg velveth.

В постороенном программой графе оказалось 899 вершин. Информация по каждой из них отражена в файле stats.txt. Стоит отметить, что количество вершин не обязательно соответствует количеству контигов, так как "нормальными" являются только контиги длины не менее 29. Именно они прописываются в файле contigs.fa. В нашем случае их 174. Статистические данные об этих контигах представлены в файле Excel.

Длины и покрытия самых больших контигов
IDДлинаПокрытие Последовательность
195652640,680324contig19.fasta
24590138,391800contig2.fasta
134193736,650929contig13.fasta

N50 = 25027, максимальная длина контига - 56526. Два следующих по размеру контига имеют длины 45901 и 41937.

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

Контиги с аномально большим покрытием
IDДлинаПокрытиеПоследовательность
9188522,045455 contig91.fasta
7234515,852941 contig72.fasta
5883507,253012 contig58.fasta
9245505,688889 contig92.fasta
Видно, что в нашей выборке присутствуют контиги с аномально большим покрытием. Информация по ним представлена в таблице слева. Можно сказать, что для данных контигов характерна сравнительно небольшая длина, что, в общем-то, не удивительно.

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

Анализ

С помощью алгоритма megablastn было проведено сравнение каждого из трех самых длинных контигов с хромосомой Buchnera aphidicola (CP009253).

Результаты работы megablastn можно увидеть в таблице ниже.

Сравнение самых длинных контигов с хромосомой Buchnera aphidicola
IDКоординаты в геномеMax scoreTotal scoreQuery coverE-value IdentAlignment lengthGapsMismatch
192004-111035760260486%0.07225 (78%)9217244 (2%) 1748 (20%)
2153752-1617384741162784%0.06348 (78%)8171 270 (3%)1553 (19%)
13202390-2076613349171694%0.04182 (78%)5331 141 (2%)1008 (20%)

Построенные выравнивания можно назвать достаточно неплохими.

Далее требовалось выполнить аналогичный анализ для двух контигов с аномально большим покрытием.
При запуске megablastn с дефолтными параметрами ни для одного из 4-х описанных ранее "аномальных" контигов выравнивание построено не было, выдавалось сообщение "No significant similarity found". В FAQ программы указано, что одной из возможных причин такой ошибки могут являться слишком короткие query-sequences, что в нашем случае действительно так. В таких случаях разработчики советуют повысить Expect threshold, что и было сделано, однако ситуацию не изменило.
Другой возможной причиной была указана фильтрация участков малой сложности. Я попыталась выполнить поиск без данной фильтрации, но это вновь ничего не изменило.
Таким образом, ни для одного из контигов с аномально большим покрытием построить выравнивание не удалось.

Изменение длины k-мера

В этом задании было необходимо запустить velveth и velvetg, установив длину слова 25 вместо 29.

Использованные команды:

Длины и покрытия самых больших контигов
IDДлинаПокрытиеПоcледовательность
31043655.743484 contig3.fasta
163795856.516084contig163.fasta
70682655.514503contig70.fasta
Velvetg построил граф с 7120 вершинами, при этом контигов в файле contigs.fa оказалось 998. N50 составил 2000. Длины и покрытия самых больших контигов представлены в таблице слева.

По сравнению с предыдущими результатами как N50, так и максимальные длины контигов значительно уменьшились. Это вполне объяснимо, так как при уменьшении хэш-длины должны соответственно уменьшаться и контиги, Покрытие, напротив, растет, хоть и не слишком сильно.

Для данных контигов был запущен megablastn. Результаты приведены в таблице.
Сравнение самых длинных контигов с хромосомой Buchnera aphidicola
IDКоординаты в геномеMax scoreTotal scoreQuery coverE-value IdentAlignment lengthGapsMismatch
3333222-339010287833001%0.04482 (76%)5897187 (3%) 1228 (21%)
163215746-218384179221360%0.02118 (79%)2676 64 (2%)494 (19%)
70209294-212231154120200%0.02291 (77%)2994 102 (3%)601 (20%)

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

Сборка SPAdes

Программа SPAdes – St. Petersburg genome assembler - предназначена как для стандартных изолятов, так и для бактериальных сборок, полученных в результате single-cell MDA sequencing (секвенирование одиночных клеток с использованием метода амплификации со множественным замещением цепи - Multiple Displacement Amplification). Текущая версия SPAdes работает с чтениями Illumina или IonTorrent и способна создавать гибридные сборки, используя чтения PacBio и Sanger. Также программе можно предоставлять дополнительные контиги для использования в качестве длинных ридов.

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

Существует несколько модулей SPAdes:

Для наибольшей точности рекомендуется запускать SPAdes с модулями BayesHammer/IonHammer, однако допускается использование и других инструментов коррекции.

На вход SPAdes принимает файлы формата FASTA и FASTQ, для данных IonTorrent принимается формат BAM. Также возможна обработка архива gzip.

Для начала я попыталась запустить SPAdes в рекомендованном режиме с коррекцией и параметрами по умолчанию c помощью команды spades.py -s SRR4240357.fastq -o spades , но этого сделать не удалось. Программа прервалась, выдав ошибку. Насколько я понимаю, это связано с ограничением памяти, так как SPAdes рабоает с достаточно большими объемами данных.

Далее я попыталась запустить SPAdes с уже очищенным с помощью Trimmomatic файлом и опцией --only-assembler, позволяющей проводить сборку без предварительной коррекции.

Использованная команда: spades.py -s SRR4240357_trim.fastq --only-assembler -o spades

Параметр -s указывает, что во входном файле короткие и непарные риды, -o обозначает выходную директорию.

В первую очередь нужно отметить, что программа работает очень долго (более 3 часов). По умолчанию SPAdes проводит сборки при различных значениях k, начиная с 21. В нашем случае сборки были сделаны только с k=21 и k=33, затем программа закончила работу с сообщением о превышении параметром k длины рида (Value of K (55) exceeded estimated read length (39)), что, собственно, было ожидаемо.

Отчет о работе программы:



На выходе было получено множество файлов, некоторые из которых были собраны в отдельные папки. Из всего этого нас больше всего интересуют файлы contigs.fasta и contigs.fastg, содержащие последовательности контигов и информацию о них. Аналогичные файлы есть и для скэффолдов (scaffolds.fasta, scaffolds.fastg).

Всего SPAdes построил 75 контигов, что значительно меньше, чем velvetg (174 при k=29).
Обработанные данные по контигам можно найти в файле spades_contigs.xlsx .

Длины и покрытия самых больших контигов
IDДлинаПокрытие
116372016,9567
311310417,6205
510151519,3695
По сравнению с velvetg самые большие контиги SPAdes гораздо длиннее (почти на порядок), однако покрытие их примерно в 2 раза ниже. Средние значения покрытий по всем контигам в случае SPAdes также уменьшаются.

Тем не менее основной параметр, по которому в данном случае можно сравнить качество сборки - N50 - повышается, причем значительно. Для SPAdes N50 = 101515, что более, чем в 4 раза выше соответствующего значения для velvetg. Кроме того, SPAdes проводил сборки сразу для нескольких значений k. Поэтому, на мой взгляд, эта программа работает точнее.

Источники