Разбор путей
Синтаксический анализ - это способность разбирать информацию, то есть записывать строки на основе данных, содержащихся в заголовке FITS. Синтаксический анализ путей, введенный в Siril 1.2.0, направлен на придание большей гибкости сценариям за счет использования данных заголовка для записи/чтения имен файлов или путей. На данный момент это используется со следующими командами:
и, конечно же, их аналоги в графическим интерфейсе пользователя.
Пример синтаксиса
Для начала возьмем простой пример. Допустим, у вас есть файл с именем light_00001.fit, и вы хотите найти темновой мастер-кадр из вашей библиотеки мастер-кадров, который соответствует характеристикам указанного снимка. Поскольку вы выбрали соглашение для именования своих темновых мастер-кадров, вы знаете, что правильный темновой кадр должен называться примерно так:
DARK_"exposure"s_G"gain"_O"offset"_T"temperature"C_bin"binning".fit
с терминами в кавычках, замененными на значения, считанные из заголовка вашего снимка. Для экспозиции 120с, температуры -10°C, усиления/смещения 120/30 и биннинга 1, темновой мастер-кадр будет называться:
DARK_120s_G120_O30_T-10C_bin1.fit
Что ж, это именно то, что позволяет делать эта функция. Если вы укажете имя темновому кадру с описанными ниже соглашениями, вы можете сказать Siril открыть снимок, прочитать его заголовок и использовать его значения для записи такой строки (а затем использовать ее для калибровки вашего снимка).
Вы можете прочитать информацию, содержащуюся в заголовке, либо с помощью команды dumpheader, либо через меню Инструменты, Обычно вывод будет выглядеть следующим образом (некоторые ключи удалены для краткости):
SIMPLE = T / C# FITS
BITPIX = 16 /
NAXIS = 2 / Dimensionality
NAXIS1 = 4144 /
NAXIS2 = 2822 /
BZERO = 32768 /
EXTEND = T / Extensions are permitted
IMAGETYP= 'LIGHT' / Type of exposure
EXPOSURE= 120.0 / [s] Exposure duration
DATE-OBS= '2022-01-24T01:03:34.729' / Time of observation (UTC)
XBINNING= 1 / X axis binning factor
YBINNING= 1 / Y axis binning factor
GAIN = 120 / Sensor gain
OFFSET = 30 / Sensor gain offset
INSTRUME= 'ZWO ASI294MC Pro' / Imaging instrument name
SET-TEMP= -10.0 / [degC] CCD temperature setpoint
CCD-TEMP= -10.0 / [degC] CCD temperature
BAYERPAT= 'RGGB' / Sensor Bayer pattern
TELESCOP= '61EDPH' / Name of telescope
FILTER = 'DualBand' / Active filter name
OBJECT = 'Rosette Nebula '/ Name of the object of interest
OBJCTRA = '06 30 36' / [H M S] RA of imaged object
OBJCTDEC= '+04 58 51' / [D M S] Declination of imaged object
RA = 97.6960081674312 / [deg] RA of telescope
DEC = 4.99212765957446 / [deg] Declination of telescope
END
Тогда формат, используемый для указания имени темнового кадра, будет следующим:
DARK_$EXPTIME:%d$s_G$GAIN:%d$_O$OFFSET:%d$_T$SET-TEMP:%d$C_bin$XBINNING:%d$.fit
Все термины для разбора формируются следующим образом: $KEY:fmt$
KEY — любое (допустимое) имя строки из заголовка FITS файла
fmt — это спецификатор формата.
Например, $EXPTIME:%d$ будет преобразовано в 120, если снимок был экспонирован в течение 120с. Но будет преобразовано в 120.0, если вы укажете $EXPTIME:%0.1f$, благодаря спецификатору формата %x.yf.
Таким образом, полное выражение написанное выше будет иметь вид:
DARK_**120**s_G**120**_O**30**_T**-10**C_bin**1**.fit
В этом первом примере мы использовали преобразование только в целые числа с %d. Но есть и другие общепринятые средства форматирования, которые вы можете использовать:
%x.yfдля десятичных дробей%sдля строк
Примечание
Для строк начальные и конечные пробелы всегда удаляются, а пробелы внутри строк заменяются знаками _. Пример: $OBJECT:%s$ будет преобразовано в Rosette_Nebula.
Вы также можете использовать некоторые менее традиционные спецификаторы формата:
Чтобы преобразовать дату из ключа заголовка дата-время, можно использовать специальный нестандартный спецификатор формата dm12, который означает дату минус 12 часов. В заголовке выше строка DATE-OBS имеет значение
2022-01-24T01:03:34.729.$DATE-OBS:dm12$преобразуется в2022-01-23, что является датой в начале ночи. Можно также использовать спецификатор формата dm0, который просто преобразует дату, не вычитая 12 часов.Чтобы преобразовать дату-время из строки заголовка даты-времени, можно использовать нестандартный спецификатор формата dt, который просто означает дату-время. В заголовке выше строка
DATE-OBSимеет значение2022-01-24T01:03:34.729.$DATE-OBS:dt$будет преобразована в2022-01-24_01-03-34.Для преобразования информации
RAиDECиз строк заголовкаOBJCTRAиOBJCTDECможно использовать нестандартные спецификаторы формата ra и dec. В заголовке выше строкиOBJCTRAиOBJCTDECимеют значения06 30 36и+04 58 51соответственно.$OBJCTRA:ra$_$OBJCTDEC:dec$преобразуется в06h30m36s_+04d58m51s.Чтобы проанализировать информацию
RAиDECиз строк заголовкаRAиDEC, когда они в десятичном формате, вы можете использовать нестандартные спецификаторы формата ran и decn. В заголовке выше строкиRAиDECимеют значения97.6960081674312и4.99212765957446соответственно.$RA:ran$_$DEC:decn$будет преобразовано в06h30m47s_+04d59m32s.
Хорошим примером имени файла для результата сложения является приведённое далее выражение:
$OBJECT:%s$_$FILTER:%s$_$STACKCNT:%d$x$EXPTIME:%d$sec_G$GAIN:%d$_O$OFFSET:%d$_T$CCD-TEMP:%d$°C_$DATE-OBS:dm12$
даёт что-то вроде:
NGC_7023_L_57x120sec_G100_O50_T-9°C_2023-10-07
Чтобы проверить синтаксис, вы можете загрузить изображение и использовать команду parser, как указано ниже.
Командная строка Siril
parse str [-r]
Поиск файла с помощью разбора пути
В примере выше мы увидели, что можем найти имя темнового мастер-кадра на основе информации, содержащейся в заголовке калибруемого изображения. Это то, что называется в команде parse, режим чтения.
Это поведение в основном используется в сочетании с командой/вкладкой calibrate и для поиска мастер-файлов дисторсии. В параметре -dark= команды или в поле Dark графического интерфейса можно использовать описанную выше синтаксическую конструкцию. Таким образом, вы можете быть уверены, что соответствующий темновой кадр будет выбран для калибровки изображения. То же самое в равной степени применимо к Bias и Flat. Конечно, вы также можете указать полный (или относительный) путь к файлу. При этом путь также может содержать выражения подобного рода.
Например, для кадров плоского поля вы можете указать путь к библиотеке, которая может содержать информацию о фильтре или телескопе, поскольку у вас может быть несколько настроек. Такой путь:
~/astro/masters/flats/$INSTRUME:%s$_$TELESCOP:%s$/$FILTER:%s$/FLAT_bin$XBINNING:%d$.fit
Может быть преобразован так:
~/astro/masters/flats/ZWO_ASI294MC_Pro_61EDPH/DualBand/FLAT_bin1.fit
и является допустимым значением для поля Мастер-кадр плоского поля.
Конечно, если бы вы каждый раз при калибровке писали это как команду в своих скриптах или в поле Мастер-кадр плоского поля графического пользовательского интерфейса, это могло бы стать немного утомительным. Вот тогда на помощь приходят зарезервированные ключевые слова. Для мастер-кадров есть 3 зарезервированных ключевых слова:
$defdark$defflat$defbias$defdisto
Их значения указываются в разделе . Вы также можете задать их через скрипт с помощью команды set. Они соответствуют значениям gui_prepro.dark_lib, gui_prepro.flat_lib, gui_prepro.bias_lib и gui_prepro.disto_lib.
Когда их значения установлены и вы решили использовать их в качестве значений по умолчанию, они будут отображаться в полях вкладки Калибровка. Вы также можете начать писать свои скрипты, используя эти ключевые слова. Шаг калибровки нового универсального скрипта для цветной камеры может выглядеть так:
calibrate light -dark=$defdark -cc=dark -flat=$defflat -cfa -equalizecfa -debayer
Это позволит вам выбирать мастер-файлы непосредственно из ваших библиотек и гарантировать, что вы не перепутаете их на этапе калибровки.
Запись файла с разбором пути
Теперь, когда удобно иметь возможность находить файлы, было бы столь же полезно использовать этот синтаксис для сохранения ваших файлов при укладке изображений. Именно это и есть режим записи. Синтаксис можно использовать в поле -out= команд stack и stackall или в соответствующем поле в графическом интерфейсе пользователя.
Допустим, вы хотите написать общий скрипт, который подготавливает вам темновые мастер-кадры каждый раз, когда вы обновляете свою библиотеку. В строке stack скрипта вы можете написать:
stack dark rej 3 3 -nonorm -out=$defdark
Эта строка гарантирует, что полученный темновой мастер-кадр будет сохранен в правильном месте с правильным именем, который затем можно будет извлечь для калибровки вашего освещения.
Чтобы обеспечить еще большую гибкость при использовании команд stack, есть еще два зарезервированных ключевых слова:
$defstack$sequencename$
Что касается настроек по умолчанию, $def stack настраивается в том же разделе Настроек или с помощью команды set в gui_prepro.stack_default. Например, давайте предположим, что вы определили $def stack как:
Result_$OBJECT:%s$_$DATE-OBS:dm12$_$LIVETIME:%d$s
Строка скрипта:
stack r_pp_light rej 3 3 -norm=addscale -output_norm -out=$defstack
сохранит результат укладки в файл с именем:
Result_Rosette_Nebula_2022-01-24_12000s.fit
Начиная с Siril 1.2.0, имя по умолчанию для результата укладки определяется как $sequencename$stacked (знак _ добавляется, если его не указали). Это похоже на поведение в предыдущих версиях, за исключением того, что теперь явно указано, что используется разбор пути.
Использование подстановочных знаков
Возможно, вы хотите использовать какое-то ключевое значение в имени вашего мастера, которое не соответствует ключевому значению в кадрах, которые нужно откалибровать. На примере это может быть немного понятнее. Допустим, вы хотите, чтобы в названиях ваших мастер-кадров плоского поля был указан срок их хранения. Что-то вроде:
FLAT_1.32s_Halpha_G120_O30_bin1.fit
Если вы поместите поле $EXPTIME:%0.2f$ в $defflat, это приведет к ошибке на этапе калибровки. Просто потому, что ключ EXPTIME будет считываться из калибруемого изображения, а не из кадра плоского поля.
Чтобы справиться с этой ситуацией, можно использовать подстановочные знаки в выражениях для разбора:
FLAT_$*EXPTIME:%0.2f$_$FILTER:%s$_G$GAIN:%d$_O$OFFSET:%d$_bin$XBINNING:%d$
Обратите внимание на символ *, расположенный непосредственно перед EXPTIME.
Этот символ означает следующее:
В
режиме записи, то есть, по сути, при укладке вашего мастер-кадра плоского поля, значение строкиEXPOSUREбудет использоваться для формирования имени сохраняемого файла. В приведенном выше примере вы бы тогда фактически сохранили вFLAT_1.32s_Halpha_G120_O30_bin1.fit.В
режиме чтения, когда калибруются ваши изображения, значение строкиEXPOSUREбудет заменено на *. При поиске такого файла Siril извлечет все файлы, которые соответствуют шаблонуFLAT_*_Halpha_G120_O30_bin1.fit. Надеюсь, ваше соглашение об именовании достаточно продумано, чтобы найти только один соответствующий файл и использовать его для калибровки.Это также может быть полезно для указания мастер-файлов дисторсии. Например, вы могли бы использовать:
~/astro/masters/distos/DISTO_$*DATE-LOC:dm12$_$INSTRUMEN:%s$_$TELESCOP:%s$_bin$XBINNING:%d$.wcs
Обратите внимание на символ * прямо перед DATE-LOC.
Когда символ подстановки используется перед ключом заголовка DATE, в режиме чтения возвращается файл с датой, наиболее близкой и не превышающей дату файла, чей заголовок анализируется.
Предупреждение
В случае, если Siril обнаружит более одного файла в режиме чтения, он выдаст предупреждение в консоли и выберет самый последний файл. Поскольку это может не дать желаемого результата, вам следует пересмотреть соглашение об именовании файлов, если это произойдет.
Обработка дубликатов
В некоторых случаях для одного и того же значения могут существовать несколько ключевых слов. Это происходит потому, что разработчики программного обеспечения могут использовать существующие ключевые слова или создавать новые. Поэтому Siril пытается распознавать и управлять дубликатами. Вот таблица, суммирующая известные дубли. Если файл содержит так называемые “альтернативные” ключевые слова, то Siril будет сохранять значение в “основной” версии.
Основные ключевые слова |
Альтернативные |
|---|---|
MIPS-HI |
CWHITE |
MIPS-LO |
CBLACK |
PROGRAM |
SWCREATE |
IMAGETYP |
FRAMETYP |
EXPTIME |
EXPOSURE |
FILTER |
FILT-1 |
FOCALLEN |
FOCAL |
CENTALT |
OBJCTALT |
CENTAZ |
OBJCTAZ |
XBINNING |
BINX |
YBINNING |
BINY |
XPIXSZ |
XPIXELSZ, PIXSIZE1, PIXSIZEX, XPIXSIZE |
YPIXSZ |
YPIXELSZ, PIXSIZE2, PIXSIZEY, YPIXSIZE |
CCD-TEMP |
CCD_TEMP, CCDTEMP, TEMPERAT, CAMTCCD |
OFFSET |
BLKLEVEL |
CVF |
EGAIN |
FOCPOS |
FOCUSPOS |
FOCTEMP |
FOCUSTEM |
STACKCNT |
NCOMBINE |
SITELAT |
SITE-LAT, OBSLAT |
SITELONG |
SITE-LON, OBSLONG |