Сайт Олега Милантьева
Сегодня я цельный день, почти что без продыху (отвлёкся только чтобы поснимать наши с Антохой любимые астероиды), занимался написанием одного Javascript скрипта под замечательную астро-программу pixInsight. Потребность в нём зрела некоторое время и … сегодня я не выдержал.
Суть задачи, стоящей перед скриптом — автоматизировать процесс калибровки, косметики, перекладки по полочкам и выравнивания отснятых мною фитов. Задача, вроде бы тривиальная и негоже кичиться, что я решил её, но … дьявол кроется в деталях.
В обсерватории сейчас три астрографа. На каждом сейчас стоят ч/б камеры с колёсами фильтров. Я могу снимать с разной выдержкой и в разном бине. В итоге, количество возможных вариантов калибровки равно кол-во астрографов множить на кол-во фильтров, множить на варианты длительности лайта, множить на варианты биннинга. Чтобы учесть все эти варианты, я нафигачил на рабочий стол пикса такое огромное количество иконок. Потом я создавал ProcessContainer, в который уже по файл-маскам накликивал разные калибровки.
Фиты с БТИ в зелёном фильтре в бин2, выдержкой 200 секунд я калибровал бы иконкой IVAN_ImageCalibrate_bin2_200_G (её нет на скрине, я не снимаю в бин2 цвета на БТИ. Но если бы снимал…). Другие фиты — другой иконкой. Третьи — третей.
После калибровки я bin1 загонял в косметику bin1, а bin2 лайты — в косметику bin2.
Дальше я шёл в папку с файлами и запускал скриптик на PHP, дополняющий файлы префиксом ivan-2016-10-18- (инструмент и дата). Я переносил фиты в папку с именем объекта. В подпапку по имени фильтра, подпапку src для исходников и cc — для откалиброванных и косметированных фитов. Дальше _c_cc фиты я выравнивал по опорному. Не забывая следить, какие уже выранял, а какие только появились (через отдельную папку todo).
Не надоело читать? Мне сейчас надоело описывать эту процедуру. А уж делать её каждый день после астроночи… бр…
И тут меня осенило! Лучше день потерять, а потом за пять минут долететь! (С) Мультик «Крылья, ноги и хвосты» :). И сегодня я как раз потерял тот день. Что ж, что делает скрипт? Частично я описал это выше. Поэтому, возможно, немного повторюсь.
1. Первое важное правило для работы скрипта заключается в настройке именования файлов в закладке «Autosave» программы MaximDL, которой я пользуюсь для съёмки лайтов.
В этой закладке нужно попросить максима создавать папку по дате съёмки. Делается это через треугольник у Options, где нужно установить флажок напротив «Auto-Subfolder». Теперь максим в папке сохранения фитов будет сначала создавать папку типа 2016-10-18, только потом складывать отснятый фит в неё.
2. Второе правило тоже касается именования. В той же закладке Autosave нужно именовать каждый записанный фит по шаблону, воспринимаемому скриптом. В Autosave Filename пишем имя объекта (или макс пишет сам после перехода на объект), например, M57. В suffix пишем, например «-L-bin1-5m». Что означает съёмка в L-фильтре в биннинге 1 (то есть без биннинга), выдержка 5 минут.
В итоге мы получаем папку 2016-10-18, а в ней файлы M57-001-L-bin1-5m.fit, M57-002-L-bin1-5m.fit и т.п. Если была съёмка в R, G и B фильтрах в бин 2, например, то в той же папке так же появятся фиты M57-001-R-bin2-1m.fit и другие по тому же шаблону.
3. Третье правило заключается в подготовке структуры папок и именования калибровочных файлов. Она подробно описана в краткой документации, идущей в начале скрипта. Здесь же опишу кратко.
Папка C:\ASTRO\Calibrate. В моём примере такой путь до калибровочных, но можно изменить и на свой, переменная в начале скрипта. В процессе использования я пойму, как сделать удобней. Но для версии v0.1 подходит.
В этой папке создаём папки по названию астрографов. У меня их три, именуются ivan, newton и mak-f6. Это именование сложилось исторически. Если астрограф один. то и его имя будет одно.
В папке каждого астрографа создаются папки bin1 для съёмки без биннинга (в биннинге 1х1). bin2 — для съёмки в биннинге 2 и т.п., если используются другие биннинги (обычно только 1 и 2, но вдруг и 4?).
В папку биннинга, например, C:\ASTRO\ivan\bin1 уже записываются мастер-файлы калибровки. Их имена тоже важны. Пока что прога не учитывает температуру лайтов, эту фичу добавлю в ближайших версиях. Так что кидаем фиты в «текущей» температуре. К примеру, обе KAF8300 камеру у меня сейчас работают в -30°С. Их и кидаю.
bias.fit — мастербиас.
dark-5m.fit — мастердарк из пятиминутных дарков. Пока прога не умеет, но скоро будет находить ближайшую выдержку из имеющихся дарков. Ну или использовать dark.fit, как универсальный для любой выдержки. Сейчас приходится копировать дарк в dark-1m.fit, dark-15m.fit и т.п. для всех используемых выдержек. Временное неудобство.
flat-L.fit — мастер флет в фильтре L. Так же планирую использовать универсальный файл flat.fit, если не найден флет в нужном фильтре. Пыль именно на фильтре не так критична, т.к. он отнесён далеко от сенсора. Куда противней пыль на сенсоре и покровном стекле камеры.
Мастера я готовлю в Script -> Batch Processing -> Batch Preprocessing скрипте.
Запускаем скрипт. В папке, указанной в переменной inputPath он сканирует все фиты и находит подходящие в папке инструмента, папке даты (например, C:\ASTRO\_z\ivan\2016-10-18\, где C:\ASTRO\_z — это папка, указанная в inputPath).
Скрипт определяет, нет ли в той же папки даты откалиброванного фита (суффикс _с). Если нет, то он:
Я не делал сложения выравненных фитов, т.к. во-первых, сейчас скрипт обрабатывает фиты по одному. А для суммы нужна пакетная обработка. Во-вторых, потому что я складываю в фитстакере с тщательным подбором коэффициента сигмаклипинга и отбраковкой перед сложением.
Вот и всё. Текущую версию скрипта можно пока что скачать здесь:
http://download.milantiev.com/astro/pixiInsight.scripts/
Не перезаморочился ли я? Не знаю. Через пару недель скажу.