Финиширование геному: швидко, якісно, недорого

Думаю, що багато читачів Хабра вже чули про біоінформатики, можливо навіть безпосередньо про завдання складання геному. Безліч людей по всьому світу зайнято написанням геномних асемблерів — програм, що інтерпретує сирі дані машин для секвенування і видають у результаті послідовність ДНК досліджуваного організму. Однак, в більшості випадків, геном цілком «з коробки» отримати не вдається. У цій статті я постараюся пояснити, чому ж геном не можна зібрати одним клацанням миші і опишу процес його «фінішування» — мабуть, самий трудомісткий етап у всій збірці, часом триває кілька років.

Також, я розповім, як ми іноді можемо істотно полегшити цей процес, використовуючи вже зібрані геноми близькоспоріднених організмів. Цим завданням я займався в рамках написання своєї магістерської дисертації в Санкт-Петербурзькому Академічному Університеті, а навчання проходило спільно з Інститутом Біоінформатики. Оскільки отриманий алгоритм досить специфічний, я почну з опису проблеми в цілому, дам огляд деяких «хардварних» методів її вирішення, а потім трохи розповім про те, що ж вийшло у мене.


Введення

Отже, ми хочемо зібрати геном. На Хабре вже є пара хороших публікацій на тему геномних асемблерів: раз, два.
Якщо біоінформатика для вас щось нове — вкрай рекомендую почати спочатку з них, так як в поточній статті мається на увазі знання деяких базових понять.

На всяк випадок нагадаю про те, що геномний асемблер (збирач) — це програма, яка приймає на вхід короткі (кілька сотень нуклеотидів) накладання шматочки геному, звані ридами (payload), і збирає їх в єдину послідовність. Точніше, намагається зібрати — в більшості випадків навіть для відносно невеликих бактеріальних геномів (кілька мільйонів нуклеотидів) цільної послідовності не виходить. Це відбувається по ряду причин, описаних в статті вище. Я ж коротко скажу, що так буває за наявності в геномі повторюваних шматків, ділянок, фізично складних для прочитання, а також помилок в процесі секвенування.



В результаті, замість того, щоб видати нам геном цілком, ми отримуємо його шматочки, звані контиги (contigs). Вони вже набагато довше (десятки і сотні тисяч нуклеотидів), і в своїй сукупності вони становлять оригінальну послідовність. Однак, правильний порядок їх нам невідомий. Що ж робити далі?

Для початку задамося питанням: а навіщо взагалі нам цілісний геном? Адже довжини контигов вже достатньо, наприклад, для пошуку генів усередині них. З іншого боку, деякі гени все-таки будуть пошкоджені через фрагментації. Але, що ще важливо, для деяких досліджень необхідна саме структура геному, тобто порядок розташування у ньому досліджуваних генів.

Наприклад, це важливо при вивченні еволюції. Як ми добре знаємо, ДНК з часом мутує. Найчастіше відбуваються маленькі зміни: один нуклеотид замінюється на інший, або ж кілька поспіль йдуть нуклеотидів вирізаються/вставляються в інше місце. Але бувають набагато більш рідкісні, але серйозні зміни. Приміром, великий шматок генома може перекинутися або «переїхати» на іншу позицію. Буває, що цілі хромосоми зливаються один з одним, або навпаки, розпадаються на дві частини. У своїй роботи Ханнехалли і Певзнер показали, що геноми людини і миші роз'єднують всього 131 така перебудова. Погодьтеся, не так вже й багато.

Чернетка геному

Тепер, коли я вас зацікавив, давайте вже зберемо цей геном! У нас є набір контигов — його шматочків, порядок проходження яких нам невідомий. Що будемо робити далі? Нам може допомогти технологія таргетного секвенування, що дозволяє прочитати визначену і відносно коротку (до декількох тисяч нуклеотидів) область геному, що містить певний патерн на кінцях. Для цього використовується полімеразна ланцюгова реакція (ПЛР), а потім отриманий продукт прочитується значно більш дорогим, але надійним методом секвенування — методом Сенгера. Запустивши таку реакцію і вибравши в якості патерну кінці двох цікавлять нас контигов, ми можемо дізнатися, чи є вони сусідніми в геномі, а також прочитати решту послідовність між ними. Якщо ж наше припущення не вірне, і контиги розташовані дуже далеко один від одного — реакція просто-напросто не піде.

Але ж у нас є сотні (якщо ми збираємо бактерію) і тисячі (ссавець) контигов, відповідно десятки тисяч і мільйони можливих їх з'єднань». На те, щоб перевірити кожне з них, у нас не вистачить ні часу, ні грошей. Як нам вчинити в такій ситуації? Може бути, ми можемо якось оцінити, які з'єднання найімовірніше існують, а які навіть і не варто перевіряти?

Зрозуміло, можемо! Існують різні способи (про деяких з яких я зараз і розповім), які дозволяють об'єднувати контиги в так званий скаффолд (scaffold), що представляє з себе їх впорядкований набір. Між контигами розташовуються «пропуски» (gaps) певної довжини, що символізують невідому послідовність:



Зрозуміло, що маючи такий «чернетка» генома, нам буде вже набагато легше заповнювати пропуски в ньому. Давайте розглянемо, які бувають способи об'єднання контигов в скаффолды (цей процес так і називається — скаффолдинг).

Технології скаффолдинга

Бібліотеки парних ридов
Що може бути краще одного короткого ріда? Та хіба тільки два таких же! Давайте разрежем ДНК, яку нам належить секвенувати на шматочки деякої відомої нам довжини, а потім прочитаємо кожен з них з початку і кінця. Зрозуміло, велика частина послідовності між кінцями залишиться непрочитаним, зате тепер у нас є пара ридов, відстань між якими нам відомо.

Такі пари ридов дають нам нову додаткову інформацію. Давайте «вирівняємо» (align) їх (тобто знайдемо входження, можливо, неточне) на наші контиги. Якщо при цьому два ріда вирівнюються на різні контиги, то останні ми можемо об'єднати в єдиний скаффолд:



Важливим критерієм даної технології є відстань між парами ридов — так звана, довжина вставки. Чим вона більше, тим через більш тривалі проміжки геному ми можемо перескакувати. Однак, із зростанням довжини вставки істотно зростає вартість експерименту, а також кількість помилок.

Довгі ріди
Останнім часом починають з'являтися технології, що дозволяють одержувати набагато більш довгі ріди (до декількох десятків і навіть сотень тисяч пар основ) у відносно великих кількостях. Приміром, таку можливість надає технологія PacBio. Однак, у всіх них поки що є два суттєвих недоліки: по-перше, дорожнеча процесу, а по-друге, наявність великої кількості помилок.

Збирати геном з таким безліччю неточностей — важке завдання. Деякі пішли іншим шляхом — створенням гібридних збірок. В них комбінуються звичайні короткі ріди, а також довгі, але менш точні. Ідея зрозуміла інтуїтивно: спочатку, як зазвичай, ми виконуємо складання, використовуючи тільки короткі ріди, а потім отримані контиги вирівнюємо на довгі ріди. Це, як і у випадку з парними ридами, дає нам інформацію про розташування контигов один щодо одного. Також, стає доступна і частина генома між ними:



Використовуючи таку техніку, не так давно групі вчених вдалося повністю автоматично зібрати бактериальный геном. Також, є помітні успіхи в збірці з використанням одних тільки довгих ридов. Однак, вся технологія поки, на жаль, залишається долею вибраних з-за своєї дороговизни і малої поширеності.

Hi-C
Hi-C — зовсім свіжа і багатообіцяюча технологія, яка дозволяє виміряти взаємодія шматків геному в просторі. Як ви, напевно, знаєте, що ДНК — не просто довга лінійна молекула, вона ще і складним чином упакована в просторову структуру, яка і називається хромосомою. Не вдаючись у подробиці, скажу, що Hi-C дозволяє отримувати пари ридов, для яких відповідні шматки геному знаходяться близько в просторі, але зовсім не обов'язково вони будуть поруч, якщо ми розтягнемо всю молекулу в одну лінію. На малюнку нижче показано інтенсивності взаємодії ділянок хромосоми один з одним (по обом осях — лінійні координати на хромосомі):



Так ми можемо одержати досить цікаву інформацію, що відображає форму упаковки ДНК у клітині. Як це може бути використано для скаффолдинга? Та дуже просто: шматки ДНК, які лінійно близькі один до одного, будуть все-таки в середньому частіше взаємодіяти між собою (що ми і бачимо на картинці вище). Знову ж, не буду пускатися в довгі пояснення і відішлю читача до оригінальний статті на цю тему.

Референсна збірка

Нарешті, ми плавно підійшли до теми моєї роботи. З часу появи перших технологій секвенування, людство встигло накопичити досить багато даних. Вже існує велика кількість повністю (або майже повністю) зібраних геномів різних організмів. Чому б не скористатися цією інформацією, замість того, щоб проводити дорогі експерименти?

Скористатися можна! Існує безліч суто обчислювальних методів під загальною назвою «референсна збірка» (reference-assisted assembly), які передбачають використання послідовностей вже зібраних споріднених організмів для поліпшення якості складання нового зразка. Базова ідея тут схожа з тією, що використовується при складанні з довгими ридами: ми знаходимо вирівнювання контигов тепер вже на референсний геном, і об'єднуємо їх у відповідному порядку:



Але, як ми знаємо, еволюція не стоїть на місці, і відмінності в собираемом і референсному геномі можуть виявитися істотними. По-перше, це може привести до складностей при пошуку вирівнювання. Але це ще півбіди. На самому початку статті я згадував про великомасштабні геномні перебудови. Зрозуміло, що якщо такі перебудови між зібраних і референсним геномом присутні, то ми ризикуємо отримати абсолютно неправильний результат. Стало бути, нам потрібен алгоритм, який аналізує такі перебудови і намагається розставити все по своїх місцях».

Написанням такого алгоритму я і займався своєю магістерської дисертації. Головною його відмінністю від існуючих рішень є використання кількох референсних геномів одночасно. Це дає нам додаткову інформацію про те, як геноми змінювалися в ході еволюції, а значить дозволяє більш достовірно оцінити порядок контигов і в нашому геномі.

Не вдаючись в подробиці, я спробую пояснити, чому ж кілька референсов краще, ніж один. Почнемо з того, що між усіма геномами, які нам дані на вході, є якась еволюційна взаємозв'язок. Простіше кажучи, ми можемо побудувати філогенетичне дерево, в листі якого будуть розташовуватися наші геноми, як референсні — R, так і цільовий — T. Дерево показує їх спрямовану еволюцію від деякого загального предка, а довжина гілок відповідає тривалості процесів:



Тепер, знаючи структуру референсних геномів, нам необхідно відновити цільової. Щоб зробити це, необхідно зрозуміти, як відбувалася еволюція всього сімейства. Нам важливо передбачити, в яких місцях філогенетичного дерева відбувалися геномні перебудови, наслідки яких ми спостерігаємо в листі. Знаючи це, ми зможемо визначити, які перебудови відбулися до, а які після відділення зібраного нами геному в окрему гілку. А значить, зможемо і сказати, які з них найімовірніше присутні в нашій збірці.

За результатами роботи була написана стаття, яка і стала моєю магістерською дисертацією. Саму програму можна знайти на гітхабі — fenderglass.github.io/Ragout/. Детальний опис алгоритму, на жаль, виходить за рамки публікації формату Хабра, і було б не дуже зрозуміло без додаткового бекграунду. Але якщо ця стаття викличе інтерес у спільноти, то надалі я продовжу писати про биоинформатические алгоритми, пов'язані з цією темою, і буду поступово заглиблюватися в область.

P.S. Хотів написати ще і в Біоінформатику, але не вистачає карми.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.