🧬 Вирівнювач Послідовностей ДНК — Сміт-Уотерман Наживо
Спостерігайте, як справжній алгоритм локального вирівнювання Сміта-Уотермана будує свою матрицю оцінок і відстежує оптимальне вирівнювання між двома синтетичними послідовностями ДНК, підсвічуючи збіги, невідповідності й розриви.
Про цю симуляцію
Ця симуляція запускає справжній алгоритм локального вирівнювання послідовностей Сміт-Уотерман на двох синтетичних послідовностях ДНК: «референсі» фіксованої довжини та довшому «прочитанні», створеному мутацією копії референсу й доповненому випадковими сміттєвими основами з обох боків. На кожному кроці рекурентне співвідношення динамічного програмування H(i,j) = max(0, діагональ + збіг/невідповідність, вгору − розрив, ліворуч − розрив) заповнює справжню матрицю оцінок, знаходиться клітинка з найвищим балом, і справжнє відстеження проходить назад від цієї клітинки, доки бал не повернеться до нуля.
🔬 Що показано
Жива теплова карта повної матриці оцінок динамічного програмування, відображена клітинка за клітинкою в міру заповнення, зі шляхом відстеження від клітинки з найвищим балом, обведеним золотим. Нижче отримана пара вирівняних послідовностей малюється основа за основою: збіги зеленим, невідповідності червоним і розриви бурштиновим — ті самі три результати, які має класифікувати справжній виявник варіантів.
🎮 Як користуватися
Налаштуйте довжину референсу (16–40 п.о.) і частоту мутацій (0–50%), потім натисніть «Регенерувати» для нового синтетичного прочитання. Налаштуйте бал збігу, штраф невідповідності й штраф розриву та спостерігайте, як миттєво оновлюються матриця й вирівнювання. Використовуйте «Відтворити заповнення», щоб анімувати заповнення матриці порядково, «Крок клітинок» для ручного просування, або «Заповнити миттєво», щоб перейти прямо до готового вирівнювання й статистики.
💡 Чи знали ви?
Сміт-Уотерман (1981) гарантує математично оптимальне локальне вирівнювання за заданою схемою оцінювання за час і простір O(mn) — але реальні вирівнювачі коротких прочитань, такі як BWA і Bowtie, рідко запускають повний алгоритм на цілих геномах, бо це занадто повільно в такому масштабі. Натомість вони використовують швидке індексне насіювання (наприклад, перетворення Барроуза-Вілера), щоб спершу знайти кандидатні регіони, а потім переходять до динамічного програмування у стилі Сміта-Уотермана, точно як ця симуляція, лише щоб уточнити вирівнювання в короткому кандидатному вікні.
Часті питання
Що таке алгоритм Сміта-Уотермана?
Сміт-Уотерман — це алгоритм динамічного програмування для пошуку оптимального локального вирівнювання між двома послідовностями. На відміну від алгоритму Нідлмана-Вунша, який вирівнює послідовності від кінця до кінця, Сміт-Уотерман дозволяє вирівнюванню починатися й закінчуватися будь-де, що робить його ідеальним для пошуку короткого відповідного регіону — наприклад, прочитання секвенування чи фрагмента гена — всередині довшої, у решті непов'язаної послідовності.
Як заповнюється матриця оцінок?
Кожна клітинка H(i,j) представляє найкращий бал локального вирівнювання, що закінчується на позиції i референсу й позиції j прочитання. Вона бере максимум із чотирьох варіантів: почати абсолютно нове вирівнювання тут (бал 0), продовжити діагональний збіг чи невідповідність від H(i-1,j-1), продовжити розрив у прочитанні від H(i-1,j), або продовжити розрив у референсі від H(i,j-1). Оскільки бали обмежені знизу нулем, будь-яка серія поганих збігів просто скидає локальне вирівнювання, а не тягне весь бал у мінус.
Що контролюють штрафи за збіг, невідповідність і розрив?
Бал збігу винагороджує вирівнювання ідентичних основ одна з одною; штраф невідповідності віднімається, коли дві різні основи змушені вирівнюватися; штраф розриву віднімається щоразу, коли алгоритм відкриває розрив (вставку чи делецію) у будь-якій послідовності. Підвищення штрафу розриву відносно штрафу невідповідності змушує вирівнювач надавати перевагу замінам над вставками/делеціями, і навпаки.
Чому прочитання включає випадкові фланкуючі основи?
Реальні прочитання секвенування рідко вирівнюються край у край з референсом — вони зазвичай містять регіон інтересу, вбудований у послідовність адаптера, помилки секвенування чи сусідній геномний контекст. Доповнення мутованого ядра випадковою сміттєвою ДНК з обох боків демонструє ключову силу Сміта-Уотермана: він знаходить і оцінює лише найкращий відповідний локальний регіон, повністю ігноруючи непов'язані фланги.
Як тут обчислюється відсоток ідентичності?
Відсоток ідентичності — це частка стовпців у відстеженому локальному вирівнюванні, де основи референсу й прочитання ідентичні. Він обчислюється безпосередньо зі шляху відстеження, а не оцінюється, тож точно відображає те вирівнювання, яке алгоритм повідомляє як оптимальне для поточної схеми оцінювання.
Чи ця симуляція математично точна?
Так. Рекурентне співвідношення оцінювання, правило обмеження нулем, вибір клітинки з максимальним балом і відстеження реалізовані точно як в оригінальній формулюванні Сміта й Уотермана (1981) з лінійним штрафом розриву. Вона опускає афінне оцінювання розриву (окрема вартість відкриття й продовження розриву) і матриці замін амінокислот, які реальні вирівнювачі на кшталт BLAST чи BWA додають поверх цієї самої основної рекурсії.
Справжня динамічна програма Сміта-Уотермана заповнює матрицю оцінок між референсом і мутованим, фланкованим прочитанням, а потім відстежує оптимальне локальне вирівнювання — збіги, невідповідності й розриви колірно кодовані, з живою статистикою відсотка ідентичності й кількості розривів.
3D · рушій Three.js / WebGL · ціль 60 FPS · працює повністю на клієнті, без встановлення