Drift
README.mdобновлено 9 октября 2026

Drift — поиск астероидов, комет и переменных звёзд

Drift

Drift находит движущиеся объекты на серии астрономических снимков в формате FITS. Программа калибрует и выравнивает кадры, ищет на них астероиды и кометы, в том числе слишком слабые, чтобы их было видно на отдельном кадре. Найденное она опознаёт по базе известных малых тел JPL, а для каждого кандидата делает анимацию, по которой его легко проверить глазами.

Работать можно в браузере (локальный веб-интерфейс) или из командной строки. Интерфейс, подсказки и журнал — на русском или английском, на выбор (English version of this document: README.en.md).

На скриншотах — синтетическая тестовая серия: 31 кадр, комета, несколько астероидов, имитация ответа JPL. На ваших снимках интерфейс выглядит так же.



Что умеет программа

  • Калибровка. Вычитает дарки, делит на флэты (с дарк-флэтами) и убирает горячие пиксели. Цветные камеры обрабатываются суперпикселем 2×2.
  • Выравнивание. Совмещает кадры по звёздам: сдвиг, поворот, дисторсия (полином до 5-й степени). Справляется с меридианным флипом и с кадрами нескольких ночей.
  • Проверка кадров. Перед поиском можно пролистать выровненные кадры, как в блинк-компараторе, и исключить кадры с облаками, засветкой и смазом.
  • Поиск астероидов.
    • По отдельным кадрам находятся яркие объекты.
    • Синтетическое отслеживание (перебор скоростей и сложение кадров со сдвигом) находит объекты на 1–2 звёздной величины слабее, чем видно на одном кадре. На видеокарте NVIDIA с установленной CUDA оно считается в десятки раз быстрее (см. Расчёт на видеокарте NVIDIA).
  • Поиск комет.
    • Быстрые кометы находятся по разностям частей ночи.
    • Медленные кометы (их кома за ночь сдвигается меньше своего размера) находятся по смещению ядра.
    • Если ядро нашёл обычный поиск, программа проверяет, есть ли вокруг него кома.
  • Несколько ночей. Треки одного объекта в разные ночи связываются в общий объект.
  • Астрометрия. Решение поля (plate solve) через ASTAP. Если ASTAP не справился, есть встроенные решатели: по установленной базе звёзд ASTAP (без интернета), по каталогу Gaia DR3 и astrometry.net. Затем координаты уточняются по базе ASTAP или Gaia DR3 до долей угловой секунды с учётом дисторсии.
  • Опознание известных объектов. Астероиды и кометы в поле запрашиваются в JPL Small-Body Identification с учётом места наблюдения. Если известный объект поиск не нашёл, кадры складываются вдоль его прогноза: так видно, есть ли он на снимках.
  • Отчёт.
    • Обзорная картинка поля с подписанными объектами.
    • Таблицы в CSV: кандидаты, отдельные детекции с координатами RA/Dec, известные объекты.
    • Анимация (GIF) для каждого кандидата.
  • Переменные звёзды — экспериментальная функция, по умолчанию выключена; описана в конце.

Что получится в результате

В папке результатов после поиска появятся:

ФайлЧто внутри
overview.pngОбзор поля. Зелёным подписаны опознанные известные объекты, жёлто-красным — новые кандидаты, оранжевым — кометы, голубым пунктиром — известные объекты, которые поиск не нашёл. Стрелка показывает направление движения за ночь.
C001.gif, C002_433_Eros.gif, …Анимация каждого кандидата: вырезка по всем кадрам с кружком на объекте и последний кадр — сложение вдоль движения (shift-and-stack) со значением SNR. Если объект опознан, его имя есть в имени файла.
candidates.csvКандидаты. Для каждого: ночь, число кадров с объектом, положения в начале и конце, скорость (пикс/ч и ″/мин), позиционный угол, RA/Dec, SNR на кадре и в стеке, способ обнаружения, тип (астероид/комета), размер комы, опознание (имя, V, расхождение с прогнозом).
detections.csvПоложение каждого кандидата на каждом кадре: время UTC, x/y, RA/Dec, поток, SNR. Пригодится для астрометрического отчёта.
known_objects.csvИзвестные объекты поля по данным JPL. Для каждого: V, положения, какой кандидат ему соответствует, а для ненайденных — SNR в стеке по прогнозу.
known_*.gifАнимации известных, но не найденных объектов (если включено).
static_stack.fitsМедианный стек — «неподвижное небо», с WCS, если поле решено.
log_prepare.txt, log_search.txtЖурналы подготовки и поиска (при запуске из интерфейса).
_session/Подготовленные кадры. Удаляются при закрытии интерфейса.

Установка и запуск

Drift распространяется готовой программой: Python и другие программы ставить не нужно. Выберите архив для своей системы:

СистемаАрхивВидеокарта NVIDIA
Windows 10/11 x64Drift-windows-x64.zipда, если установлена CUDA 12
Debian 12+, Ubuntu 23.04+ (x86_64)Drift-linux-x86_64.tar.gzда, если установлена CUDA 12
macOS, Apple M1–M4Drift-macOS-arm64.zipнет, только процессор

Программа для каждой системы одна. Без видеокарты она считает на процессоре, и ничего дополнительно ставить не нужно. Чтобы считать на видеокарте NVIDIA, установите драйвер NVIDIA и CUDA Toolkit 12.x — подробно в разделе Расчёт на видеокарте NVIDIA.

Windows

  1. Распакуйте архив целиком в любую папку, например D:\Programs\Drift. Из самого архива программа не запустится.
  2. Дважды щёлкните Drift.bat. Откроется окно с журналом работы и браузер с интерфейсом.
  3. Чтобы закрыть программу, закройте это окно (или нажмите в нём Ctrl+C).

При первом запуске Windows SmartScreen может предупредить о неизвестном издателе: программа не подписана сертификатом. Нажмите «Подробнее» → «Выполнить в любом случае». Если антивирус блокирует drift.exe, добавьте папку Drift в исключения (так бывает с программами, собранными PyInstaller).

Debian / Ubuntu

tar xzf Drift-linux-x86_64.tar.gz
cd Drift-linux-x86_64
./drift.sh              # интерфейс в браузере; закрыть — Ctrl+C в терминале
./install.sh            # по желанию: значок в меню приложений и команды drift / driftfinder

macOS (Apple Silicon)

  1. Распакуйте архив, например в «Программы».
  2. Первый раз щёлкните Drift.command правой кнопкой → «Открыть» → «Открыть»: программа не подписана, и обычный двойной щелчок macOS заблокирует. Дальше можно запускать двойным щелчком. Если macOS не даёт открыть: «Системные настройки» → «Конфиденциальность и безопасность» → «Всё равно открыть».
  3. Откроется Терминал с журналом и браузер с интерфейсом. Закрыть — Ctrl+C или закрыть окно Терминала.

На Mac расчёты идут на процессоре: видеокарта Mac не используется.

Расчёт на видеокарте NVIDIA

Без видеокарты всё считается на процессоре. Видеокарта NVIDIA ускоряет синтетическое отслеживание — самую долгую часть поиска — в десятки раз. Программа та же самая, но драйвер и CUDA вы ставите сами:

Что нужноВерсия
Видеокарта NVIDIAGeForce GTX 900 (Maxwell) или новее: GTX 10xx и 16xx, RTX 20xx–50xx, профессиональные Quadro / RTX
Драйвер NVIDIAне ниже 527.41 (Windows) или 525.60.13 (Linux); лучше свежий
CUDA Toolkit12.x — поддерживаются 12.0–12.9, рекомендуется 12.9. Для GeForce RTX 50xx — не ниже 12.8

CUDA 13 не поддерживается: программе нужны библиотеки CUDA 12. Если у вас уже стоит CUDA 13, поставьте 12.9 рядом — версии не мешают друг другу, Drift сам выберет 12.x. Видеокарты AMD и Intel не поддерживаются; на Mac расчёты всегда идут на процессоре.

Windows

  1. Драйвер — с nvidia.com/drivers или через NVIDIA App.
  2. CUDA Toolkit 12.9 — на странице архива CUDA Toolkit выберите CUDA Toolkit 12.9.1 → Windows → x86_64 → exe. Подойдёт «экспресс»-установка. Если драйвер у вас свежее, чем в установщике, в «выборочной» установке снимите галочку с драйвера и оставьте «CUDA».
  3. Установщик сам задаёт переменную CUDA_PATH. Перезапустите Drift.

Debian / Ubuntu

  1. Драйвер: в Debian — sudo apt install nvidia-driver (раздел non-free), в Ubuntu — sudo ubuntu-drivers install. Проверка: команда nvidia-smi показывает видеокарту.
  2. CUDA Toolkit:
    • проще всего — пакет дистрибутива: sudo apt install nvidia-cuda-toolkit. Подходит в Ubuntu 24.04 (там CUDA 12.0) и Debian 13 (CUDA 12.4); в Debian 12 он слишком старый (11.8);
    • или CUDA 12.9 из репозитория NVIDIA, для любой из систем: на странице архива CUDA Toolkit выберите 12.9.1 → Linux → x86_64 → свой дистрибутив → deb (network), выполните показанные команды подключения репозитория, затем sudo apt install cuda-toolkit-12-9 (только CUDA, без драйвера).
  3. Drift ищет CUDA в переменных CUDA_PATH и CUDA_HOME, в /usr/local/cuda-12.*, /usr/local/cuda, /opt/cuda и в системных папках библиотек. Если CUDA стоит в другом месте, задайте CUDA_PATH.

Проверка

driftfinder.bat --list-gpus      # Windows
./driftfinder --list-gpus        # Linux

Команда покажет видеокарту и найденный CUDA Toolkit или объяснит, чего не хватает. То же сообщение видно в интерфейсе под параметром «Где выполнять сложение» (дополнительные параметры поиска): выберите там «на видеокарте». При первом расчёте ядра CUDA компилируются несколько секунд, дальше берутся из кэша.

СообщениеЧто сделать
CUDA Toolkit 12.x не найденУстановите CUDA Toolkit 12.x (выше). Стоит в нестандартной папке — задайте CUDA_PATH.
Найден CUDA Toolkit 13.x, а нужен 12.xПоставьте CUDA Toolkit 12.9 рядом с 13.x.
Драйвер NVIDIA не найденУстановите драйвер; проверьте, что работает nvidia-smi.
Драйвер NVIDIA слишком старыйОбновите драйвер.
Видеокарта слишком стараяТакая видеокарта CUDA 12 не поддерживается — считайте на процессоре.
Не удалось скомпилировать ядро CUDACUDA Toolkit установлен не полностью: нужны и заголовки. Поставьте полный CUDA Toolkit (в Linux — cuda-toolkit-12-9 или nvidia-cuda-toolkit, а не только библиотеки).

Подробная диагностика — driftfinder.bat --gpu-diag (Linux: ./driftfinder --gpu-diag). Она показывает все найденные версии CUDA, загрузку библиотек и пробный расчёт; её вывод стоит приложить к письму автору.

Что ещё понадобится

  • ASTAP (рекомендуется для решения поля): установите с hnsky.org/astap.htm вместе с базой звёзд. Для полей 0.6–6° подойдёт D50 или D20, для широких полей — W08.

    • Windows: программа найдёт ASTAP в C:\Program Files\astap.
    • macOS: в /Applications/ASTAP.app.
    • Linux: в PATH и /opt/astap.

    Если ASTAP стоит в другом месте, укажите путь в параметрах («Путь к ASTAP»). База звёзд ASTAP (D80, D50, D20, D05 или V50) нужна и самой программе: если ASTAP не решил поле, встроенный решатель сопоставляет звёзды кадра с этой базой — без интернета, за секунды. Без базы поле решается по каталогу Gaia DR3 (нужен интернет).

  • Интернет нужен для опознания известных объектов (JPL), для каталога переменных звёзд VSX, а для решения поля и уточнения астрометрии — только если не установлена база звёзд ASTAP (тогда — Gaia DR3 через VizieR; большое поле запрашивается частями). Без интернета поиск работает, но без опознания. Проверки по обзорам ATLAS и ZTF на шаге «Подтверждение» тоже идут через интернет.

Интерфейс открывается по адресу http://127.0.0.1:8765 и доступен только на вашем компьютере.

Как собрать программу самому из исходников — в packaging/BUILD.md.


Работа в интерфейсе: шаг за шагом

Работа идёт в три шага; они показаны слева. Ход обработки виден в журнале внизу страницы.

Шаг 1. Данные

Шаг 1 — выбор кадров

  1. Добавьте кадры. Обязательны только LIGHT. DARK, FLAT и DARKFLAT заметно улучшают результат на краях поля и около пылинок.
    • Окно выбора открывается на уровень выше папки, из которой вы добавляли кадры в прошлый раз. Поэтому при смене объекта до новой папки обычно один щелчок.
    • Можно отметить отдельные файлы или взять «Все FITS в папке».
  2. Выберите папку для результатов. Прямо в окне выбора можно создать новую папку. Если в выбранной папке уже есть результаты поиска (например, из скрипта PixInsight или командной строки), сразу откроется шаг «Результаты».
  3. Задайте «Известные астероиды ярче V». Ставьте на 0.5–1m слабее, чем реально достигает ваша серия. Иначе слабые известные астероиды не будут опознаны и окажутся в списке «новых».
  4. При необходимости откройте дополнительные параметры. У каждого параметра есть значок «?»: он объясняет, что делает параметр и когда его стоит менять.

Дополнительные параметры и подсказка «?»

  1. Нажмите «Подготовить кадры». Калибровка и выравнивание займут от минуты до нескольких минут.

Шаг 2. Проверка кадров

Шаг 2 — просмотр выровненных кадров

  • Вверху — сводка: число кадров, экспозиция, FWHM звёзд, размер после обработки, число кадров с замечаниями.
  • Кадры можно листать, как в блинк-компараторе: кнопками, ползунком или клавишами ← →. Скорость показа регулируется.
  • Колесо мыши увеличивает изображение, мышью его можно перемещать.
  • Растяжка. «По фону» показывает самые слабые объекты, «мягкая» — структуру туманностей, комы и ярких звёзд. На поиск растяжка не влияет.
  • Ниже — карточки всех кадров: время, экспозиция, число звёзд, шум, точность выравнивания. Снимите галочку с кадров с облаками, засветкой или смазанными звёздами — они дают ложные срабатывания и портят пороги.

Карточки кадров

Нажмите «Искать астероиды». Результаты можно записать в другую папку: так не затираются прежние варианты поиска с другими настройками.

Шаг 3. Результаты

Шаг 3 — результаты

  • Сводка: сколько кандидатов, сколько опознано, сколько новых, сколько известных объектов не найдено, сколько комет.
  • Обзор поля: найденные объекты подписаны и показано направление их движения. Щелчок открывает обзор крупно.
  • Карточка кандидата справа:
    • анимация с плеером (пауза, покадрово, скорость);
    • положение, RA/Dec, скорость в ″/мин и пикс/ч, позиционный угол;
    • число кадров с объектом, SNR на кадре и в стеке;
    • тип (комета и размер комы);
    • опознание и расхождение с прогнозом JPL.

Таблица кандидатов

  • Таблица кандидатов. Сортируется по любой колонке щелчком по заголовку. Выбор сортировки запоминается.
    • Значки: «новый», имя известного объекта, «комета».
    • Способ обнаружения: по кадрам — объект виден на отдельных кадрах; сложение — найден сложением со сдвигом; поиск комет; по прогнозу JPL — известная комета, которую поиск не выделил, но которая уверенно видна в стеке по прогнозу.
  • «Известные, но не найденные». Для каждого такого объекта кадры сложены вдоль прогноза JPL. Если SNR высокий, объект на снимках есть, но поиск его пропустил. Это повод смягчить пороги.
  • Файлы: все результаты можно скачать прямо со страницы.

Если кандидат помечен «новым», а вы ожидаете известный объект, сначала увеличьте предел «Известные астероиды ярче V» и повторите поиск. Остальные причины — в разделе «Кандидат не опознан».

Как проверять нового кандидата. Настоящий объект в анимации движется ровно, с постоянной скоростью, а на последнем кадре (сложение вдоль движения) виден чёткой звездой:

Кадры анимации кандидата и сложение вдоль движения

Признаки артефакта:

  • «объект» прыгает между звёздами;
  • виден только на 1–2 кадрах;
  • стоит на месте относительно матрицы при дрейфе поля;
  • в стеке размыт или не виден.

Обзорная картинка overview.png целиком:

Обзор поля

Шаг 4. Подтверждение

Новый объект нужно подтвердить. Кнопка «Подтверждение» есть у каждого кандидата в таблице и в его карточке; она открывает шаг 4 (его же можно выбрать слева). Вверху выбирается объект, ниже — способы подтверждения, каждый в своём раскрывающемся блоке (изначально свёрнуты): координаты для поиска самому, проверка в MPC Checker, снимки обзора ZTF, фотометрия и снимки обзора ATLAS и отчёт для MPC.

Шаг 4 — прогноз положения

1. Координаты для поиска в другие ночи — где искать объект, чтобы снять его ещё раз самому:

  • путь среди звёзд — карта: положения на полночь UTC с кругами ошибки прогноза, звёзды (из установленной базы ASTAP — без интернета, а если её нет — из Gaia DR3) и сетка RA/Dec; масштаб — ±10, ±3 или ±1 ночь от ваших ночей наблюдений. Ночи, где положение объекта известно, — зелёные, своя дата (ниже) — голубым крестиком;
  • движение, измеренное на ваших снимках: скорость, позиционный угол, по скольким положениям и ночам. Если объект связан между ночами (O1, O2…), используются все его ночи — прогноз точнее;
  • таблица на полночь UTC — по 10 ночей до и после ночей наблюдений: RA и Dec (J2000) и оценка ошибки. Ночи наблюдений выделены;
  • своя дата и время (UTC) — положение на любой момент.

Прогноз — по прямолинейному движению с постоянной скоростью, измеренной только за ночи ваших наблюдений. Настоящий путь искривляется, поэтому чем дальше дата, тем больше ошибка; для далёких дат ищите объект в области шире указанной. Если объект снят одну ночь, ошибка растёт особенно быстро.

2. Проверка в MPC Checker. MPChecker Центра малых планет показывает известные астероиды и кометы рядом с заданной точкой в заданный момент. Drift спрашивает его о каждой вашей ночи наблюдений (средний момент детекций, положение по движению) и сравнивает найденные тела с объектом: совпадение — тело в пределах ~1′ (или трёх ошибок прогноза) с движением, отличающимся не больше чем на четверть (или 5″/ч). Совпало — объект, скорее всего, уже известен; нет — он может быть новым. Регистрация не нужна.

  • Радиус поиска (по умолчанию 10′), предел блеска (V = 22) и код обсерватории MPC задаются в разделе; код берётся из параметров поиска, иначе 500 — центр Земли (у близких объектов тогда возможен сдвиг из-за параллакса).
  • Для каждой ночи — таблица найденных тел (V, смещение, движение, орбита и примечание MPC) и ссылка, чтобы открыть тот же запрос в MPChecker. У плохо известных тел эфемерида бывает неточна на минуты дуги — сомнительные случаи проверьте по ссылке.

Проверка в MPC Checker (пример на тестовых данных)

3. Снимки обзора ZTF вокруг предсказанной точки. Обзор ZTF снимает северное небо каждые 2–3 ночи примерно до 20,5ᵐ; регистрация не нужна. Drift проверяет каждую ночь по двум источникам:

  • Снимки из архива IRSA. Drift вырезает на каждом снимке за ночь область ошибки прогноза (и ту же область на снимке сравнения того же поля) и ищет источник, которого нет на снимке сравнения. Снимки публикуются примерно через 60 дней после съёмки.
  • Оповещения ZTF (alerts) через брокер Fink. Их выпускают в ту же ночь на каждую детекцию на разностном снимке ярче ~5σ, с картинками 1′ (снимок, снимок сравнения, разность), — поэтому они есть и для свежих ночей, когда снимков в архиве ещё нет. Если ZTF сам отождествил детекцию с известным астероидом, это показывается.

Порядок проверки. Сначала проверяются ночи наблюдений — там прогноз точен. Если объект найден, его положения добавляются к вашим измерениям, траектория пересчитывается, и проверяются соседние ночи; если и там найден — снова уточнение и следующие соседние, и т. д. Так поиск шаг за шагом уходит к дальним ночам, пока область поиска не станет больше 5′. В журнале видно, по скольким положениям ZTF уточнена траектория и какая теперь ошибка для следующих ночей.

Итог по ночи:

  • Виден — объект найден на двух снимках за ночь (по снимкам или оповещениям) и сместился между ними так, как движется объект. Показывается, насколько найденное отстоит от прогноза.
  • Возможно — новый источник есть, но движение проверить не удалось (он найден только на одном снимке). Это может быть и другой астероид — сравните смещение и блеск.
  • Проверяются ночи, где область поиска не больше 5′ в радиусе; небо южнее −30° ZTF не снимает.
  • Для каждого снимка — картинка (слева снимок ZTF, справа снимок сравнения, север вверху), а вырезки сохраняются в FITS в папке результатов confirm/<кандидат>/ztf.

Подтверждение по ZTF (пример на тестовых данных)

4. Обзор ATLAS: фотометрия в точке и поиск на снимках. Обзор ATLAS снимает почти всё небо каждую ясную ночь. Его сервер умеет две вещи, и Drift пользуется обеими. Сначала программа узнаёт, когда ATLAS снимал это место в каждую из ночей, и считает положение объекта на момент каждого снимка. Дальше:

  • поиск на снимках — на каждой ночи: Drift запрашивает у сервера вырезки разностных снимков ночи (в разности неподвижные звёзды вычтены) и сам ищет на них объект в области ошибки прогноза, как на снимках ZTF. Объект найден, если источник есть на двух и более снимках и сместился между ними так, как должен был сместиться объект. Если объект за ночь заметно сдвигается, каждая вырезка центрируется на его положении в момент своего снимка. Область поиска ограничена размером вырезки (её половиной, без краёв); он определяется по первой полученной вырезке. Положения объекта при этом измеряются по снимкам;
  • прогноз точнее 6″ — вдобавок фотометрия в точке: сервер измеряет блеск в предсказанной точке на каждом снимке (на разности со снимком сравнения, так что звёзды не мешают). Итог ночи — лучший из двух способов: фотометрия чувствительнее к слабому объекту, а снимки дают измеренное положение.
  • Нужен бесплатный ключ: зарегистрируйтесь на сайте ATLAS, затем введите имя и пароль и нажмите «Получить ключ» (или вставьте ключ — API token — со страницы своей учётной записи). Пароль не сохраняется, ключ хранится только в этом браузере.
  • Порядок — как у ZTF: ночи наблюдений → соседние → их соседние…; найденные положения уточняют траекторию для следующего шага. Если ZTF (способ 3) уже подтвердил объект, его ночи тоже считаются известными, и ATLAS ищет по траектории, уточнённой ZTF.
  • ATLAS видит объекты примерно до 19,5ᵐ. Итог по ночи (лучший из двух способов): виден (фотометрия: S/N ≥ 5 на двух и более снимках; снимки: источник на двух и более снимках, сместившийся как объект), возможно (фотометрия — на одном снимке; снимки — источники есть, но не движутся как объект), не виден (с пределом снимков), нет снимков. У ночей, проверенных по снимкам, в таблице — картинки: разностный снимок с областью поиска, рядом опорный снимок того же места и увеличенный участок вокруг найденного источника, а также ссылки на FITS-файлы.
  • Очередь сервера бывает долгой — от минут до часов, у запросов снимков — обычно дольше, чем у фотометрии; одновременно сервер принимает не больше 5 запросов снимков. Держите программу открытой; если её закрыть, проверку можно продолжить кнопкой «Продолжить проверку». На проверку — не больше 25 ночей с поиском на снимках (то есть все ±10 ночей).

Подтверждение по ATLAS (пример на тестовых данных)

Уточнение прогноза. Положения, подтверждённые обзорами (ZTF и ATLAS), добавляются к вашим измерениям, и прогноз в способе 1 пересчитывается по всей дуге. За это отвечает флажок «Уточнить прогноз по подтверждениям обзоров» под строкой «Движение…» в способе 1: он виден всегда и включён по умолчанию, а срабатывает, когда ATLAS или ZTF нашёл объект; ночи с подтверждением отмечены в таблице. Подтверждения одного обзора используются и при проверке другим. Когда дуга — от 2 суток и 3 ночей, в движение добавляется ускорение: путь астероида искривлён, и прямая на такой дуге ошиблась бы на десятки секунд. Ошибка для дат за пределами дуги — оценка: изменение ускорения не измеряется.

Совет: сначала ZTF, потом ATLAS. ZTF ищет новый источник в области ошибки до 5′ и сам уточняет траекторию по найденным положениям, поэтому уходит далеко от ваших ночей. ATLAS ищет на снимках только в пределах своей небольшой вырезки, а фотометрией — только при прогнозе точнее 6″: по траектории, уточнённой ZTF, он проверит больше ночей быстрее и даст независимое подтверждение другим телескопом.

5. Отчёт о наблюдениях для MPC. Готовит файл для отправки в Центр малых планет: ваши положения объекта (по 3–5 на ночь, равномерно по ночи), имена, телескоп, опорный каталог, блеск по ночам (если указан). Программа сама определяет, какой это отчёт:

  • объект известен (по MPChecker или JPL) — наблюдения известного объекта, с его обозначением;
  • новый, подтверждён обзорами — к вашим положениям можно приложить наблюдения обзоров, отдельными блоками со своими кодами обсерваторий (по 3–5 на ночь):

    • ZTF (I41) — из оповещений ZTF (положение, блеск и фильтр g/r/i — измерения конвейера ZTF) и положения, измеренные Drift на архивных снимках;
    • ATLAS (код станции по снимку: T05, T08, M22, W68, R17) — блеск ATLAS в фильтре o/c. Для ночей, где объект найден на снимках, — положения, измеренные Drift на разностных снимках ATLAS (каталог ATLAS-RefCat2, пометка «measured by the submitter on ATLAS image …»); для ночей, где он найден только фотометрией, — прогноз Drift, в котором ATLAS измерил поток, подтверждённый детекцией примерно до 2″ (rms 2″);

    у каждой строки в поле remarks указано, откуда она. ZTF и ATLAS сами отправляют свои детекции в MPC, поэтому эти строки MPC может счесть повторами;

  • новый, подтверждений нет — отчёт для NEOCP (страницы подтверждения кандидатов в АСЗ): при отправке выберите «Unusual object?» → New NEO Candidate. MPC выставляет на NEOCP только объекты, похожие на АСЗ (оценка digest2 больше 65, её считает сам MPC); программа показывает скорость объекта как подсказку.

Форматы — ADES PSV (основной формат MPC) и MPC1992 (80 колонок, устаревший). Недопустимый формат заблокирован с объяснением: без своего кода обсерватории (XXX) MPC принимает только ADES, и в 80-колоночном отчёте Drift не пишет блоки с кодами обзоров. Для XXX нужно указать место наблюдений (долгота, широта, высота). Важно: код XXX предназначен только для получения своего кода — в таком пакете допускаются лишь нумерованные АСЗ, поэтому отчёт о новом объекте с XXX MPC не примет; программа об этом предупреждает. Файл сохраняется в confirm/<кандидат>/ и проверяется без отправки на странице submit_psv_test; отправка ADES — через форму MPC.

Отчёт для MPC (пример на тестовых данных)

Ход проверок ATLAS и ZTF показывается полосой прогресса в разделе и в блоке слева (если не идёт поиск), а каждый шаг — запросы, найденные снимки, измерения, итог по ночам — пишется в журнал внизу и в файлы confirm/<кандидат>/log_atlas.txt, log_ztf.txt. Результаты проверок сохраняются там же (atlas.json, ztf.json) и показываются снова при следующем открытии.

Настройки, «О программе», «Поддержка», «Поддержать проект»

Под шагами в левой колонке — четыре служебных раздела.

  • Язык — переключатель EN / RU в правом верхнем углу (по умолчанию — английский). Меняет интерфейс, подсказки «?», сообщения журнала и текст раздела «О программе»; выбор запоминается.
  • Настройки интерфейса.

    • Тема: Dark (тёмная), Blue (синяя, по умолчанию), Gray (серая), Bright (светлая) и Astro — только красный цвет на чёрном, для работы под тёмным небом: не сбивает ночное зрение. В теме Astro снимки, анимации и графики тоже показываются в красном.

    Настройки сохраняются в браузере и применяются сразу.

  • О программе — это описание прямо в интерфейсе, на выбранном языке.
  • Поддержка — адрес для вопросов и сообщений об ошибках.
  • Поддержать проект — ссылка на Boosty.

Настройки интерфейса


Как устроен поиск

  1. Калибровка и выравнивание.
    • Из каждого кадра вычитается фон (ячейками --bg-box).
    • Кадры совмещаются по звёздам. Фотометрические множители выравнивают прозрачность.
  2. Неподвижное небо.
    • Медиана всех кадров — это звёзды и туманности. Её вычитание оставляет движущееся.
    • Отдельно строятся маска звёзд и маска «нестабильных» пикселей: ореолы ярких звёзд при меняющемся сиинге.
  3. Поиск по отдельным кадрам. На разностных кадрах выделяются источники выше порога --nsigma. Затем они связываются в прямолинейные треки с постоянной скоростью. Каждый трек подтверждается сложением кадров вдоль него.
  4. Синтетическое отслеживание.
    • Для каждой ночи перебирается сетка скоростей, и все кадры складываются со сдвигом.
    • Нижний предел скорости — смещение минимум на 5–10 пикселей за ночь. Медленнее объект неотличим от звезды с меняющимся сиингом.
    • Порог SNR калибруется по шуму: кадры перемешиваются во времени, и считается, сколько ложных пиков даёт чистый шум.
    • Кандидаты проверяются на неподвижность, на равномерность сигнала по половинам ночи и на сигнал, набранный всего в нескольких кадрах.
    • Шум нормируется по полю: углы после флэта и полосы засветки шумнее центра, и без этого они дают лишние ложные пики.

4а. Края поля. Поле проверяется до самого края. Кадры, в которых объект за краем (дрейф монтировки, объект входит в поле или выходит из него посреди ночи), не учитываются: ни в сумме, ни в требовании «минимум кадров». При проверке кандидата не учитываются и кадры, где он проходит по звезде. Для слабых кандидатов у самого края порог SNR выше (--edge-snr), объект должен быть в поле хотя бы в половине кадров ночи (--edge-cover).

  1. Кометы — см. ниже.
  2. Несколько ночей. Треки разных ночей с согласованным движением объединяются в объект (O1, O2, …).
  3. Астрометрия. Решение поля: ASTAP; затем встроенный решатель по базе ASTAP (треугольники из ярких звёзд кадра и базы — масштаб, поворот и зеркальность любые); затем по Gaia DR3; затем astrometry.net. Затем полиномиальная поправка (дисторсия) по базе ASTAP или Gaia DR3.
  4. Опознание.
    • Положения известных астероидов и комет на начало и конец каждой ночи запрашиваются в JPL.
    • Кандидат опознаётся, если совпадает положение или, при неточной астрометрии, совпадает движение.
    • Для ненайденных известных объектов кадры складываются по прогнозу.

Кометы

Обычный поиск рассчитан на точечные объекты. Кома кометы, которая за ночь смещается меньше своего размера, попадает в «неподвижное небо» и вычитается вместе со звёздами. Поэтому кометы ищутся тремя дополнительными способами:

  • Быстрые кометы. Ночь делится на три части. В разностях частей ищутся размытые пятна, лежащие на прямой. Комета должна иметь ядро, видимое при сложении вдоль пути, и симметричную кому, которая уходит вместе с ядром.
  • Медленные кометы (как 29P/Schwassmann–Wachmann). Среди протяжённых источников со сгущением в центре отбираются те, чьё ядро за ночь значимо сдвигается. У галактик и туманностей «ядро» стоит на месте.
  • Кома у найденных объектов. Если ядро нашёл обычный поиск, проверяется, есть ли вокруг него кома.

Известные кометы запрашиваются в JPL отдельным запросом, без ограничения блеска. Если известная комета уверенно видна при сложении по прогнозу, но поиск её не выделил, она всё равно попадает в кандидаты — со способом «по прогнозу JPL».


Командная строка

Все возможности доступны и без интерфейса. Командная строка запускается файлом driftfinder.bat в Windows и ./driftfinder в Linux и macOS (после install.sh в Linux — просто driftfinder). Ниже примеры для Windows; в Linux и macOS всё то же, только с ./driftfinder и путями вида ~/Astro/....

Справка по каждому параметру — что делает и когда менять:

driftfinder.bat --help

Тот же текст собран в PARAMETERS.md. По умолчанию сообщения и справка — на английском; по-русски — с ключом --lang ru (или переменной окружения DRIFT_LANG=ru).

Полный поиск за один запуск:

driftfinder.bat --lights D:\Astro\M31\light --darks D:\Astro\darks\600s ^
    --flats D:\Astro\M31\flat --darkflats D:\Astro\M31\darkflat ^
    -o D:\Astro\M31\res --vmag-lim 19 --gpu auto

Кадры можно указывать папкой, маской (light\*.fits) или списком файлов.

В два этапа, как в интерфейсе: подготовить один раз, затем искать с разными настройками.

driftfinder.bat --lights ... --darks ... -o D:\Astro\M31\res --prepare-only
driftfinder.bat --resume D:\Astro\M31\res\_session -o D:\Astro\M31\res_v2 --track-fa 0.5
driftfinder.bat --resume D:\Astro\M31\res\_session -o D:\Astro\M31\res_v3 --use-frames @good.json

Полезное:

ЗадачаКлючи
Считать на видеокарте (нужна CUDA 12, см. Расчёт на видеокарте NVIDIA)--gpu auto (или --gpu cuda:0, список — --list-gpus)
Без интернета--known none --no-refine-wcs
Поле не решается--ra 10:05:20 --dec +09:03 --pixscale 4.4 (подсказать центр и масштаб)
Быстрые околоземные объекты--track-vmax-arcmin 5 --max-step 60
Только быстрая проверка ярких объектов--no-track
Анимации известных ненайденных--known-gif
Сообщения и справка на русском--lang ru (или переменная окружения DRIFT_LANG=ru)

Запуск из PixInsight

В архиве есть скрипт pixinsight/DriftFinder.js: он запускает Drift из PixInsight без веб-интерфейса — например, сразу после калибровки в WBPP.

Установка (один раз): в PixInsight — Script → Feature Scripts… → Add, выберите папку pixinsight из архива Drift, затем Done. Скрипт появится в меню Script → Utilities → DriftFinder. Можно и без установки: Script → Execute Script File… → DriftFinder.js.

Работа:

  1. В окне скрипта укажите папку Drift (куда распакован архив) и папку для результатов. Если программа в папке найдена, рядом появится зелёная галочка, если нет — красный крестик.
  2. Добавьте кадры LIGHT и, если есть, DARK, FLAT, DARKFLAT. Можно брать уже откалиброванные и решённые кадры из WBPP — тогда калибровочные не нужны.
  3. Задайте основные параметры: предел «Известные ярче V», где выполнять сложение, plate solve, число процессов, кометы, переменные. Любые другие ключи — в поле «Другие ключи» (например --track-fa 0.5 --known-radius 20).
  4. «Запустить поиск». Журнал Drift идёт в консоль PixInsight; остановить — кнопкой Abort в консоли.
  5. По окончании в консоли — список кандидатов (опознанные, новые, кометы) и путь к папке результатов, а в PixInsight открывается обзор поля overview.png (и карта переменных, если их искали). Анимации кандидатов (GIF), таблицы и журнал (log_search.txt) — в папке результатов.
  6. Просмотр результатов. Удобнее всего — в интерфейсе Drift: запустите его (Drift.bat) и на первой странице («Данные») выберите папку результатов как «Папку для результатов» — сразу откроется раздел «Результаты» с таблицей кандидатов, плеером анимаций и известными, но не найденными объектами. Скрипт в конце работы напоминает об этом и печатает путь к папке.

Настройки окна запоминаются. Язык окна и журнала (русский / English) выбирается вверху окна.


Если что-то не так: что подкрутить

Что видноЧто сделать
Много ложных кандидатов около ярких звёздПонизить --unstable до 2.0. Исключить кадры с плохим сиингом.
Ложные кандидаты в плотном звёздном поле (Млечный Путь)--track-fa 0.3. Повысить --track-snr до 8–9. Понизить --max-on-star.
Неподвижные слабые звёзды попадают в кандидатыУвеличить --track-min-px. Понизить --track-zero до 0.7.
Известный астероид виден в стеке (SNR > 7), но не найденПроверить --vmag-lim. Понизить --track-snr или повысить --track-fa до 2–3.
Известные объекты не опознаются, хотя найденыУвеличить --vmag-lim и перезапустить поиск. Проверить решение поля в журнале. Увеличить --known-radius до 20–30″. Указать --observatory. Подробно — в разделе «Кандидат не опознан».
ASTAP не решает полеПроверить базу звёзд (D50/D20). Подсказать --ra --dec --pixscale. Встроенные решатели (по базе ASTAP, по Gaia) включатся сами. Бывает на плотных полях Млечного Пути с длинной выдержкой: много насыщенных звёзд.
Комета не найденаУвеличить --bg-box для большой комы. Понизить --comet-sig и --comet-move-sig. Если комета известна, она будет отмечена по прогнозу JPL.
Ложные «кометы» на туманностиПовысить --comet-snr и --comet-sig. Или --no-comets.
Объект у края или вошедший в поле посреди ночи не найденПонизить --edge-cover до 0.3 и --edge-snr до 0.5.
Ложные кандидаты у краёв кадраПовысить --edge-snr до 1.5–2. Проверить флэты: края без флэта сильно шумят.
«Каталог Gaia недоступен» / VSX недоступенСбой сети или сервера VizieR: запрос повторяется сам (--catalog-retries, по умолчанию 10 раз), при нестабильном интернете увеличьте.
Поиск слишком долгий--gpu auto. Увеличить --track-smear до 0.7. Уменьшить --track-vmax-arcmin.
Не хватает памятиУменьшить --jobs.

Кандидат не опознан

Кандидат помечен «новым», но вы подозреваете, что это известный астероид или комета. Пройдите по пунктам по порядку: первые два — самые частые причины.

  1. Увеличьте предел блеска для известных объектов и перезапустите поиск. Программа запрашивает в JPL только объекты ярче заданной величины: поле «Известные астероиды ярче V» на шаге 1, в командной строке --vmag-lim (по умолчанию 17). Объект слабее этого предела в ответ JPL не попадает, и найденный кандидат остаётся «новым». Это особенно часто случается при долгих сериях и сложении со сдвигом: оно находит объекты на 1–2 звёздной величины слабее, чем видно на одном кадре.
    • Поставьте предел на 1–2m слабее, чем достигает серия, например 19–20. 0 — без ограничения: запрос дольше, а в списке «Известные, но не найденные» будет много невидимых объектов.
    • В интерфейсе: вернитесь на шаг 1 (кнопка «Данные» слева), измените величину, перейдите на шаг 2 и снова нажмите «Искать астероиды». Кадры заново не готовятся, поиск идёт по уже подготовленной сессии. Чтобы не затереть прежний результат, выберите для него другую папку.
    • В командной строке: повторите поиск по подготовленной сессии с новым пределом, например driftfinder.bat --resume D:\Astro\M31\res\_session -o D:\Astro\M31\res_v20 --vmag-lim 20. Если кадры не готовились отдельно (--prepare-only), повторите полную команду с новым --vmag-lim.
  2. Проверьте журнал поиска (log_search.txt или журнал внизу окна).
    • «Разметка известных астероидов пропущена: в заголовке опорного кадра нет WCS» — поле не решено: поставьте ASTAP или подскажите центр поля (--ra --dec --pixscale).
    • «…нет времени съёмки (DATE-OBS)» — в заголовках FITS нет времени, опознание невозможно.
    • «ВНИМАНИЕ: не удалось получить данные JPL» — сбой интернета или сервера. Увеличьте --jpl-retries и перезапустите.
    • Строка «Поиск известных малых тел (JPL) ярче V=…» показывает, какой предел реально применён.
  3. Посмотрите таблицу «Известные, но не найденные». Если там есть объект рядом с кандидатом и с похожим движением, значит, отождествлению мешает расхождение с прогнозом:
    • увеличьте радиус отождествления до 20–30″ («Радиус отождествления» в дополнительных параметрах, --known-radius);
    • укажите место наблюдения: MPC-код обсерватории (--observatory) или координаты в заголовке (SITELAT/SITELONG). Без них прогноз считается для центра Земли, и для близких к Земле объектов ошибка достигает минут дуги;
    • проверьте, что часы камеры или компьютера при съёмке шли точно: ошибка времени в минуту сдвигает быстрый объект на его минутное движение;
    • если поле решилось с ошибкой, оставьте уточнение астрометрии по Gaia включённым: без него отличия от прогноза у краёв поля больше.
  4. Комета. Кометы запрашиваются отдельно, без предела блеска; проверьте, что не стоит --no-jpl-comets. Положение ядра в прогнозе у ярких активных комет бывает неточным — это лечится тем же увеличением радиуса отождествления.
  5. Проверьте кандидата в MPC. Если всё выше не помогло, проверьте кандидата в MPChecker Центра малых планет — проще всего на шаге «Подтверждение» (способ 2): программа сама спросит MPChecker о каждой ночи и сравнит движение. Если и там ничего нет, а анимация и сложение вдоль движения убедительны (см. «Как проверять нового кандидата»), объект может быть действительно новым: снимите его ещё в одну-две ночи и отправьте измерения в MPC. Где искать его в другие ночи и не попал ли он на снимки обзоров ATLAS и ZTF — на шаге «Подтверждение».

Советы по съёмке

  • Кадров на ночь — 10 и больше, лучше 20–40. Чем длиннее серия, тем слабее объекты, которые находит сложение.
  • Длительность ночи — от 1–2 часов. За ночь объект должен сместиться хотя бы на 5–10 пикселей: типичный астероид главного пояса за час проходит ~30–40″.
  • Несколько ночей подряд позволяют связать треки в объект и надёжнее отсеять артефакты.
  • Экспозиция — такая, чтобы астероид не размазывался больше чем на 1–2 FWHM за кадр.
  • Дарки и флэты заметно уменьшают число ложных срабатываний на краях поля и около пылинок.
  • Время в заголовке (DATE-OBS) и место наблюдения (SITELAT/SITELONG или --observatory) нужны для точного опознания.

Монохромная и цветная камера

Подходят обе. Программа сама узнаёт тип камеры по ключу BAYERPAT (или похожему) в заголовке FITS.

  • Цветная камера (сырые кадры с матрицей Байера): после калибровки каждые 2×2 пикселя складываются в один (суперпиксель). Разрешение по каждой оси уменьшается вдвое, сигнал на пиксель растёт. В журнале будет строка «Цветная камера (BAYERPAT=…)».
  • Монохромная камера: ключа нет, кадр обрабатывается в полном разрешении.
    • Пикселей в 4 раза больше, чем у цветной камеры с той же матрицей: обработка дольше и требует больше памяти (число процессов программа подберёт сама).
    • FWHM звёзд в пикселях примерно вдвое больше. Пороги, допуски и минимальное смещение за ночь программа считает от FWHM и масштаба сама, подстраивать ничего не нужно.
    • Если FWHM в журнале больше ~5 пикселей, поставьте «Бинирование» 2 (--bin 2): поиск станет быстрее, сигнал на пиксель выше, без потерь для поиска.
    • Чувствительность выше, особенно без фильтра или с L — лучший вариант для поиска астероидов. Узкополосные фильтры (Ha, OIII) не подходят: астероиды светят отражённым солнечным светом и в них почти не видны.
  • Дебайеризованные цветные FITS (три плоскости RGB) тоже подходят: плоскости усредняются в яркость.

Если программа съёмки записала ключ цветной камеры в кадры монохромной (или наоборот, у цветной камеры ключа нет, а на кадре видна сетка цветных пикселей), задайте тип вручную: «Цветная камера: нет / да» в параметрах, --cfa no или --cfa yes в командной строке.

Чего не делать:

  • Не смешивать в одной обработке кадры с разных камер: у них разный масштаб, и выравнивание не сойдётся. Ночи с цветной и монохромной камерой обрабатывайте отдельно.
  • Калибровочные кадры (дарки, флэты) — с той же камеры. Флэты — с тем же фильтром, что и LIGHT.
  • Не менять фильтр внутри серии: звёзды разного цвета меняют яркость по-разному, и их остатки после вычитания дают ложные срабатывания.

Экспериментально: поиск переменных звёзд

Функция экспериментальная и по умолчанию выключена. Возможны ложные срабатывания — проверяйте кандидатов по кривой блеска и анимации. Лучше всего работает на серии из нескольких ночей.

Как включить: в интерфейсе — галочка «Искать переменные звёзды» в группе «Переменные звёзды — экспериментально». В командной строке — --variables.

Что делает:

  • Фотометрия. Измеряет блеск всех звёзд поля на всех кадрах (апертура 2·FWHM). Фон берётся плоскостью, поэтому работает и на туманностях.
  • Учёт погоды и сиинга. Поправляет блеск по ансамблю звёзд сравнения: общая поправка по кадру и местная — по ближайшим звёздам. Учитывает зависимость от сиинга и исключает плохие кадры.
  • Отбор кандидатов. Ищет звёзды, у которых:
    • разброс блеска заметно больше, чем у звёзд той же яркости (--var-sigma);
    • изменения плавные, а не скачут от кадра к кадру, как шум (--var-eta);
    • средний блеск значимо меняется от ночи к ночи (--var-min-step) — для нескольких ночей это главный признак настоящей переменной.
  • Отсев ложных. Кривые, похожие на кривые многих других звёзд (облака, сиинг), отбрасываются. Звёзды около насыщенных, вытянутые (двойные) и с переменностью из-за одного-двух кадров не измеряются или исключаются.
  • Сверка с VSX. Сверяет кандидатов с каталогом переменных AAVSO VSX и показывает, что удалось измерить у известных переменных поля.

Результат. В интерфейсе появляются разделы «Переменные звёзды» и «Известные переменные в поле (VSX)». Для каждой звезды есть анимация и кривая блеска, таблицы сортируются.

Переменные звёзды в результатах

Кривая блеска: каждая ночь — своим цветом. По вертикали — изменение блеска относительно среднего (вверх — ярче). Справа — звезда на стеке.

Кривая блеска кандидата

Файлы:

ФайлЧто внутри
variables.csvКандидаты: координаты, блеск, амплитуда (5–95%), разброс и во сколько раз он больше типичного, плавность η, отождествление с VSX.
known_variables.csvИзвестные переменные поля из VSX: тип, пределы блеска, период и что намерено на ваших снимках.
variables_lightcurves.csvКривые блеска всех кандидатов по кадрам.
V001.png, V001.gif, …Кривая блеска и анимация каждого кандидата.
vsx_<имя>.pngКривые известных переменных. Анимации к ним — с ключом --vsx-gif.
variables_overview.pngКарта поля с отмеченными переменными.

Что подкрутить:

Что видноЧто сделать
Много ложных переменныхПовысить --var-sigma до 3 и --var-min-amp до 0.1.
Нужны переменные с изменением внутри ночи (затменные) или серия из одной ночи--var-any-night. Ложных будет больше.
Пропущены слабые переменныеПонизить --var-min-snr.

Все параметры с описаниями — в PARAMETERS.md, раздел «Переменные звёзды».


Что лежит в архиве программы

ФайлНазначение
Drift.bat (Windows), drift.sh (Linux), Drift.command (macOS)Запуск интерфейса в браузере.
driftfinder.bat (Windows), driftfinder (Linux, macOS)Командная строка: --help — все параметры.
pixinsight/DriftFinder.jsСкрипт для запуска Drift из PixInsight.
install.sh (Linux)Значок в меню приложений и команды drift / driftfinder в ~/.local/bin.
README-windows.txt, README-linux.txt, README-macOS.txtКоротко: запуск, видеокарта, ASTAP.
README.pdfЭто описание со скриншотами — для чтения и печати.
README.md, docs/, driftfinder_logo.pngТо же описание в Markdown; картинки к нему.
README.en.pdf, README.en.mdОписание на английском.
PARAMETERS.md, PARAMETERS.en.mdОписание всех параметров: что делают и когда менять (на русском и английском).
drift/Сама программа (drift.exe / drift) и всё, что ей нужно. Ничего внутри не меняйте.

Исходный код, .spec-файлы и скрипты сборки — в репозитории проекта; как собрать — в packaging/BUILD.md.