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 x64 | Drift-windows-x64.zip | да, если установлена CUDA 12 |
| Debian 12+, Ubuntu 23.04+ (x86_64) | Drift-linux-x86_64.tar.gz | да, если установлена CUDA 12 |
| macOS, Apple M1–M4 | Drift-macOS-arm64.zip | нет, только процессор |
Программа для каждой системы одна. Без видеокарты она считает на процессоре, и ничего дополнительно ставить не нужно. Чтобы считать на видеокарте NVIDIA, установите драйвер NVIDIA и CUDA Toolkit 12.x — подробно в разделе Расчёт на видеокарте NVIDIA.
Windows
- Распакуйте архив целиком в любую папку, например
D:\Programs\Drift. Из самого архива программа не запустится. - Дважды щёлкните
Drift.bat. Откроется окно с журналом работы и браузер с интерфейсом. - Чтобы закрыть программу, закройте это окно (или нажмите в нём 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)
- Распакуйте архив, например в «Программы».
- Первый раз щёлкните
Drift.commandправой кнопкой → «Открыть» → «Открыть»: программа не подписана, и обычный двойной щелчок macOS заблокирует. Дальше можно запускать двойным щелчком. Если macOS не даёт открыть: «Системные настройки» → «Конфиденциальность и безопасность» → «Всё равно открыть». - Откроется Терминал с журналом и браузер с интерфейсом. Закрыть — Ctrl+C или закрыть окно Терминала.
На Mac расчёты идут на процессоре: видеокарта Mac не используется.
Расчёт на видеокарте NVIDIA
Без видеокарты всё считается на процессоре. Видеокарта NVIDIA ускоряет синтетическое отслеживание — самую долгую часть поиска — в десятки раз. Программа та же самая, но драйвер и CUDA вы ставите сами:
| Что нужно | Версия |
|---|---|
| Видеокарта NVIDIA | GeForce GTX 900 (Maxwell) или новее: GTX 10xx и 16xx, RTX 20xx–50xx, профессиональные Quadro / RTX |
| Драйвер NVIDIA | не ниже 527.41 (Windows) или 525.60.13 (Linux); лучше свежий |
| CUDA Toolkit | 12.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
- Драйвер — с nvidia.com/drivers или через NVIDIA App.
- CUDA Toolkit 12.9 — на странице архива CUDA Toolkit выберите CUDA Toolkit 12.9.1 → Windows → x86_64 → exe. Подойдёт «экспресс»-установка. Если драйвер у вас свежее, чем в установщике, в «выборочной» установке снимите галочку с драйвера и оставьте «CUDA».
- Установщик сам задаёт переменную
CUDA_PATH. Перезапустите Drift.
Debian / Ubuntu
- Драйвер: в Debian —
sudo apt install nvidia-driver(раздел non-free), в Ubuntu —sudo ubuntu-drivers install. Проверка: командаnvidia-smiпоказывает видеокарту. - 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, без драйвера).
- проще всего — пакет дистрибутива:
- 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 не поддерживается — считайте на процессоре. |
| Не удалось скомпилировать ядро CUDA | CUDA 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 (нужен интернет).
- Windows: программа найдёт ASTAP в
- Интернет нужен для опознания известных объектов (JPL), для каталога переменных звёзд VSX, а для решения поля и уточнения астрометрии — только если не установлена база звёзд ASTAP (тогда — Gaia DR3 через VizieR; большое поле запрашивается частями). Без интернета поиск работает, но без опознания. Проверки по обзорам ATLAS и ZTF на шаге «Подтверждение» тоже идут через интернет.
Интерфейс открывается по адресу http://127.0.0.1:8765 и доступен только на вашем компьютере.
Как собрать программу самому из исходников — в packaging/BUILD.md.
Работа в интерфейсе: шаг за шагом
Работа идёт в три шага; они показаны слева. Ход обработки виден в журнале внизу страницы.
Шаг 1. Данные

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

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

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

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

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

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

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

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

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. У плохо известных тел эфемерида бывает неточна на минуты дуги — сомнительные случаи проверьте по ссылке.

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.

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 ночей).

Уточнение прогноза. Положения, подтверждённые обзорами (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.

Ход проверок ATLAS и ZTF показывается полосой прогресса в разделе и в блоке слева (если не идёт поиск),
а каждый шаг — запросы, найденные снимки, измерения, итог по ночам — пишется в журнал внизу и в файлы
confirm/<кандидат>/log_atlas.txt, log_ztf.txt. Результаты проверок сохраняются там же
(atlas.json, ztf.json) и показываются снова при следующем открытии.
Настройки, «О программе», «Поддержка», «Поддержать проект»
Под шагами в левой колонке — четыре служебных раздела.
- Язык — переключатель EN / RU в правом верхнем углу (по умолчанию — английский). Меняет интерфейс, подсказки «?», сообщения журнала и текст раздела «О программе»; выбор запоминается.
Настройки интерфейса.
- Тема: Dark (тёмная), Blue (синяя, по умолчанию), Gray (серая), Bright (светлая) и Astro — только красный цвет на чёрном, для работы под тёмным небом: не сбивает ночное зрение. В теме Astro снимки, анимации и графики тоже показываются в красном.
Настройки сохраняются в браузере и применяются сразу.
- О программе — это описание прямо в интерфейсе, на выбранном языке.
- Поддержка — адрес для вопросов и сообщений об ошибках.
- Поддержать проект — ссылка на Boosty.

Как устроен поиск
- Калибровка и выравнивание.
- Из каждого кадра вычитается фон (ячейками
--bg-box). - Кадры совмещаются по звёздам. Фотометрические множители выравнивают прозрачность.
- Из каждого кадра вычитается фон (ячейками
- Неподвижное небо.
- Медиана всех кадров — это звёзды и туманности. Её вычитание оставляет движущееся.
- Отдельно строятся маска звёзд и маска «нестабильных» пикселей: ореолы ярких звёзд при меняющемся сиинге.
- Поиск по отдельным кадрам. На разностных кадрах выделяются источники выше порога
--nsigma. Затем они связываются в прямолинейные треки с постоянной скоростью. Каждый трек подтверждается сложением кадров вдоль него. - Синтетическое отслеживание.
- Для каждой ночи перебирается сетка скоростей, и все кадры складываются со сдвигом.
- Нижний предел скорости — смещение минимум на 5–10 пикселей за ночь. Медленнее объект неотличим от звезды с меняющимся сиингом.
- Порог SNR калибруется по шуму: кадры перемешиваются во времени, и считается, сколько ложных пиков даёт чистый шум.
- Кандидаты проверяются на неподвижность, на равномерность сигнала по половинам ночи и на сигнал, набранный всего в нескольких кадрах.
- Шум нормируется по полю: углы после флэта и полосы засветки шумнее центра, и без этого они дают лишние ложные пики.
4а. Края поля. Поле проверяется до самого края. Кадры, в которых объект за краем (дрейф монтировки,
объект входит в поле или выходит из него посреди ночи), не учитываются: ни в сумме, ни в требовании
«минимум кадров». При проверке кандидата не учитываются и кадры, где он проходит по звезде. Для слабых
кандидатов у самого края порог SNR выше (--edge-snr), объект должен быть в поле хотя бы в половине
кадров ночи (--edge-cover).
- Кометы — см. ниже.
- Несколько ночей. Треки разных ночей с согласованным движением объединяются в объект (
O1,O2, …). - Астрометрия. Решение поля: ASTAP; затем встроенный решатель по базе ASTAP (треугольники из ярких звёзд кадра и базы — масштаб, поворот и зеркальность любые); затем по Gaia DR3; затем astrometry.net. Затем полиномиальная поправка (дисторсия) по базе ASTAP или Gaia DR3.
- Опознание.
- Положения известных астероидов и комет на начало и конец каждой ночи запрашиваются в 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.
Работа:
- В окне скрипта укажите папку Drift (куда распакован архив) и папку для результатов. Если программа в папке найдена, рядом появится зелёная галочка, если нет — красный крестик.
- Добавьте кадры LIGHT и, если есть, DARK, FLAT, DARKFLAT. Можно брать уже откалиброванные и решённые кадры из WBPP — тогда калибровочные не нужны.
- Задайте основные параметры: предел «Известные ярче V», где выполнять сложение, plate solve, число
процессов, кометы, переменные. Любые другие ключи — в поле «Другие ключи» (например
--track-fa 0.5 --known-radius 20). - «Запустить поиск». Журнал Drift идёт в консоль PixInsight; остановить — кнопкой Abort в консоли.
- По окончании в консоли — список кандидатов (опознанные, новые, кометы) и путь к папке результатов, а
в PixInsight открывается обзор поля
overview.png(и карта переменных, если их искали). Анимации кандидатов (GIF), таблицы и журнал (log_search.txt) — в папке результатов. - Просмотр результатов. Удобнее всего — в интерфейсе 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. |
Кандидат не опознан
Кандидат помечен «новым», но вы подозреваете, что это известный астероид или комета. Пройдите по пунктам по порядку: первые два — самые частые причины.
- Увеличьте предел блеска для известных объектов и перезапустите поиск. Программа запрашивает в
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.
- Поставьте предел на 1–2m слабее, чем достигает серия, например 19–20.
- Проверьте журнал поиска (
log_search.txtили журнал внизу окна).- «Разметка известных астероидов пропущена: в заголовке опорного кадра нет WCS» — поле не решено:
поставьте ASTAP или подскажите центр поля (
--ra --dec --pixscale). - «…нет времени съёмки (DATE-OBS)» — в заголовках FITS нет времени, опознание невозможно.
- «ВНИМАНИЕ: не удалось получить данные JPL» — сбой интернета или сервера. Увеличьте
--jpl-retriesи перезапустите. - Строка «Поиск известных малых тел (JPL) ярче V=…» показывает, какой предел реально применён.
- «Разметка известных астероидов пропущена: в заголовке опорного кадра нет WCS» — поле не решено:
поставьте ASTAP или подскажите центр поля (
- Посмотрите таблицу «Известные, но не найденные». Если там есть объект рядом с кандидатом и с
похожим движением, значит, отождествлению мешает расхождение с прогнозом:
- увеличьте радиус отождествления до 20–30″ («Радиус отождествления» в дополнительных параметрах,
--known-radius); - укажите место наблюдения: MPC-код обсерватории (
--observatory) или координаты в заголовке (SITELAT/SITELONG). Без них прогноз считается для центра Земли, и для близких к Земле объектов ошибка достигает минут дуги; - проверьте, что часы камеры или компьютера при съёмке шли точно: ошибка времени в минуту сдвигает быстрый объект на его минутное движение;
- если поле решилось с ошибкой, оставьте уточнение астрометрии по Gaia включённым: без него отличия от прогноза у краёв поля больше.
- увеличьте радиус отождествления до 20–30″ («Радиус отождествления» в дополнительных параметрах,
- Комета. Кометы запрашиваются отдельно, без предела блеска; проверьте, что не стоит
--no-jpl-comets. Положение ядра в прогнозе у ярких активных комет бывает неточным — это лечится тем же увеличением радиуса отождествления. - Проверьте кандидата в 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.