Он ответил через сорок минут, явно не ожидая вопроса: «Нет. А почему вы спрашиваете?»
Они переписывались два часа. Алгоритм был написан для анализа транспозонов, но Рейчел видела, что он справится с теломерами. Ннамди согласился. Прислал код. «Это бета, – написал он, – и я, честно говоря, не тестировал его нигде, кроме собственных данных. Попробуй, он быстрее стандартного раза в три».
Она запустила его на тестовом наборе. Он действительно был быстрее. Она интегрировала его в свой пайплайн. Никаких тревожных сигналов.
То, что произошло в январе, она не могла отнести ни к алгоритму, ни к пайплайну, ни к чему-либо, что поддавалось немедленному объяснению.
Первый прогон завершился в 11:47. Рейчел к тому времени успела провести летучку, ответить на три письма, обсудить с Линь контрольный набор образцов для параллельного проекта и выпить второй кофе. Она открыла результаты без особого интереса – первый прогон обычно показывает только то, что данные загрузились корректно. Артефакты, шумовые треки, технические ошибки секвенирования. Отправную точку.
На экране появилась визуализация.
Рейчел смотрела на неё секунды три, прежде чем разум начал формулировать то, что видели глаза.
Она ожидала облако. Точнее – рассеянное распределение, какое всегда даёт сравнительное выравнивание повторяющихся последовательностей между видами, разошедшимися полтора миллиарда лет назад: дрейф, накопленные мутации, видоспецифичные сдвиги. Некоторые позиции будут консервативны, большинство – нет. Пятно с размытыми краями. Ожидаемая картина.
То, что она видела, было решёткой.
Не метафорой. Буквально – геометрически правильной структурой: модифицированные нуклеотиды в строго фиксированных позициях, воспроизводящиеся с интервалами, которые не совпадали ни с известными функциональными сайтами, ни с консенсусными последовательностями теломерного шаблона. Не случайный консерватизм – паттерн. Регулярный, повторяющийся, организованный.
Все 47 видов. От
Рейчел откинулась на спинку кресла. Посмотрела в окно. Рейн блестел холодным январским светом.
Она вернулась к экрану.
Она открыла документацию к алгоритму. Прочитала. Открыла исходный код. Прочла функцию взвешивания позиций – ту самую, которая зацепила её на конференции. Ннамди использовал адаптивную схему: коэффициент для каждой позиции пересчитывался на основе распределения в обучающей выборке. Теоретически это
Она запустила алгоритм на синтетических данных – случайно сгенерированных повторах без биологического смысла. Пятно с размытыми краями. Никакой решётки.
Значит, не алгоритм.
Она сидела минуту, глядя на два экрана рядом. Решётка в биологических данных. Облако в синтетических.
К 14:30 Линь ушла на обед. Рейчел осталась одна в лаборатории. Секвенатор в соседней комнате работал тихо, почти бесшумно – только лёгкое гудение вентиляции, которое она научилась не слышать. За стеной кто-то из аспирантов включил музыку, потом выключил. Тишина вернулась.
Она разложила проблему методично, как раскладывала любую проблему: источники систематической ошибки секвенирования, которые могли бы создать видимость структуры в теломерных данных. Их было несколько. Она проверила каждый.
Первое – PCR-дупликаты. Артефакт амплификации при библиотечной подготовке, классический источник ложных паттернов. Она открыла метрики дедупликации по каждому образцу. Процент дупликатов был в норме: от 12 до 23% в зависимости от вида. Ни один образец не выбивался из диапазона, принятого для теломерных библиотек. Не это.
Второе – систематическое смещение при базовом колле. Некоторые секвенаторы имеют проблемы с гомополимерными повторами – ошибки накапливаются в строго определённых позициях, создавая псевдоструктуру. Она проверила распределение q-scores по позиции для каждого прогона. Стандартное убывание к концу рида, никаких аномальных провалов. Не это.