Как мы ищем Девятую планету в петабайтах данных NASA с помощью Python
Все слышали про Девятую планету — гипотетический газовый гигант на самых задворках Солнечной системы, который своей гравитацией заставляет транснептуновые объекты выстраиваться в странные орбиты.
Ее ищут астрономы со всего мира. Проблема в том, что она находится так далеко и отражает так мало света, что на одиночном снимке даже с самого мощного телескопа она неотличима от шума матрицы.
Но данные, в которых она скрывается, уже существуют. Космические агентства (NASA, ESA) и крупные обзоры неба (ZTF, DECam, TESS) выкладывают свои архивы в открытый доступ. Это петабайты сырых FITS-снимков.
Привет, VC! Мы — независимая команда разработчиков и дата-сайентистов. И мы решили бросить вызов этой задаче, построив свой собственный Big Data пайплайн на Python для поиска Девятой планеты. И сегодня мы расскажем, как мы это делаем.
Проблема: Почему планету не могут найти просто «глазами»?
Поиск удаленных объектов сводится к алгоритму shift-and-stack (сдвиг и сложение). Поскольку Девятая планета движется очень медленно, мы берем десятки снимков одного и того же участка неба за несколько месяцев. Если мы знаем предполагаемую орбиту, мы сдвигаем снимки так, чтобы скомпенсировать движение планеты, и складываем их вместе. Звезды при этом смазываются в полосы, а невероятно тусклая планета, которая на одном кадре была просто шумом, внезапно становится яркой точкой.
Звучит просто? На практике это инфраструктурный ад. Возможных орбит — сотни тысяч. Для каждой орбиты нужно просчитать математику (учесть параллакс Земли и эфемериды JPL), загрузить в память гигабайты снимков, наложить их друг на друга и отфильтровать ложные срабатывания (например, пролетевшие астероиды или битые пиксели). Обычный компьютер просто падает с ошибкой Out of Memory на первых же гигабайтах данных.
Наше решение: Суровый Python и оптимизация
Чтобы не соревноваться с суперкомпьютерами NASA железом, мы соревнуемся алгоритмами. В нашем пайплайне мы используем:
- Astropy для хардкорной работы с небесными координатами (WCS).
- N-body симуляции и JPL Horizons для точного позиционирования Земли в момент каждого снимка.
- Векторизацию и Out-of-core вычисления, чтобы потоково читать тяжелые FITS-файлы и не переполнять оперативную память.
Мы уже написали ядро проекта. Алгоритм умеет скачивать нужные патчи неба, делать астрометрию, выравнивать фоны и складывать изображения с учетом заданных векторов движения.
Что дальше?
Даже если мы не найдем планету — отрицательный результат в науке тоже важен. Мы докажем, что её нет в конкретном секторе, сузив зону поиска для других, и опубликуем крутой Open Source инструмент для астрономов по всему миру.
Мы только в начале этого пути. В следующих статьях мы будем подробно разбирать наши технические решения: как мы боремся с утечками памяти, как спасаем «битые» данные с космических телескопов и как заставляем обычные серверы переваривать астрономические объемы информации.
Подписывайтесь на наш блог здесь, на VC, чтобы не пропустить следующие дневники разработки. Построим открытую науку вместе!