Pfadnamen Parsing

Parsing ist die Fähigkeit zu parsen, d.h. Zeichenketten auf der Grundlage der im FITS-Header enthaltenen Daten zu schreiben. Die Pfadanalyse, die in Siril 1.2.0 eingeführt wurde, zielt darauf ab, der Skripterstellung mehr Flexibilität zu verleihen, indem Header-Daten zum Schreiben/Lesen von Dateinamen oder Pfaden verwendet werden können. Zur Zeit wird dies mit den folgenden Befehlen verwendet:

und natürlich deren GUI-Entsprechungen.

Beispiel für die Syntax

Beginnen wir mit einem einfachen Beispiel. Angenommen, Sie haben eine Datei mit dem Namen "light_00001.fit" und möchten in Ihrer Masterdark-Bibliothek ein Masterdark finden, das den Eigenschaften dieses Lights entspricht. Da Sie eine Konvention zur Benennung Ihres Masterdarks gewählt haben, wissen sie, dass der korrekte Dateiname des Darks etwas so heißen sollte:

DARK_"exposure"s_G"gain"_O"offset"_T"temperature"C_bin"binning".fit

wobei die Begriffe in den Anführungszeichen durch die Werte aus dem FITS-Header ihres Lights ersetzt werden. Bei einer Belichtungszeit von 120s, einer Sensortemperatur von -10°C, einem Gain/Offset von 120/30 und Binning 1 würde das Masterdark so heißen:

DARK_120s_G120_O30_T-10C_bin1.fit

Nun, das ist genau das, was diese Funktion ermöglicht. Wenn Sie den Namen des Darks mit den gerade erläuterten Konventionen angeben, können Sie Siril anweisen, das Light zu öffnen, seinen Header zu lesen und die Header-Werte zu verwenden, um eine solche Zeichenkette zu erstellen (und sie dann zu verwenden, um das Light mit dem passenden Masterdark vorzuverarbeiten).

Sie können die im Header enthaltenen Informationen entweder über den Befehl dumpheader oder über das Werkzeug lesen: Werkzeuge ‣ Extras ‣ FITs Header...` Normalerweise erhalten Sie einen Ausdruck wie den folgenden (der Übersichtlichkeit halber wurden einige Schlüssel entfernt):

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

Das Format für die Angabe des spezifischen Dark-Dateinamens würde dann lauten:

DARK_$EXPTIME:%d$s_G$GAIN:%d$_O$OFFSET:%d$_T$SET-TEMP:%d$C_bin$XBINNING:%d$.fit

Alle zu parsenden Teile weden wie folt gebildet: $SCHLÜSSEL:fmt$

  • SCHLÜSSEL ist jeder beliebige (gültige) Schlüssel aus dem FITS-Header des Lights

  • fmt ist ein format specifier.

Zum Beispiel wird $EXPTIME:%d$ zu 120 geparsed, wenn das Light 120s lang belichtet wurde. Wenn sie $EXPTIME:%0.1f$ angeben, ergibt sich durch die Formatangabe %x.yf jedoch 120.0.

Der gesamte obige Ausdruck würde also zu folgendem Ergebnis führen:

DARK_**120**s_G**120**_O**30**_T**-10**C_bin**1**.fit

In diesem ersten Beispiel haben wir nur die Umwandlung in Ganzzahlen mit %d verwendet. Es gibt aber auch andere gebräuchliche Formatierer, die Sie verwenden können:

  • %x.yf für Fließkommazahlen

  • %s für Zeichenketten

Bemerkung

Bei Zeichenketten werden führende und nachfolgende Leerzeichen immer entfernt, während Leerzeichen innerhalb einer Zeichenkette durch _-Zeichen ersetzt werden. Beispiel: $OBJECT:%s$ würde umgewandelt zu Rosette_Nebula.

Sie können auch einige weniger gebräuchliche Formatierer verwenden:

  • Um ein Datum aus einem Datums-/Uhrzeit-Headerfeld zu parsen, können Sie den speziellen Nicht-Standard-Formatierer dm12 verwenden, was "Datum - 12 Stunden" bedeutet. In der obigen Headerzeile hat der Schlüssel DATE-OBS den Wert 2022-01-24T01:03:34.729. $DATE-OBS:dm12$ würde diesen Wert in 2022-01-23 umwandeln, was dem Beginn der Nacht entspricht. Sie können auch den speziellen Formatierer dm0 verwenden, der nur das Datum parst, ohne 12 Stunden zu subtrahieren.

  • Um ein Datum aus einem Datums-/Uhrzeit-Headerfeld zu parsen, können Sie den speziellen Nicht-Standard-Formatierer dt verwenden, was einfach Datum+Zeit bedeutet. Im obigen Header enthält der Schlüssel DATE-OBS den Wert 2022-01-24T01:03:34.729. $DATE-OBS:dt$. $DATE-OBS:dt$ wird das zu 2022-01-24_01-03-34 konvertieren.

  • Um „RA“- und „DEK“-Informationen aus den Header-Schlüsseln „OBJCTRA“ und „OBJCTDEC“ zu analysieren, können Sie die speziellen, nicht standardmäßigen Formatierer ra und **dec* verwenden. *. Im obigen Header haben die Schlüssel „OBJCTRA“ und „OBJCTDEC“ den Wert „06 30 36“ bzw. „+04 58 51“. „$OBJCTRA:ra$_$OBJCTDEC:dec$“ würde in „06h30m36s_+04d58m51s“ umgewandelt werden.

  • Um „RA“- und „DEK“-Informationen aus den Header-Schlüsseln „RA“ und „DEC“ im Dezimalformat zu analysieren, können Sie die speziellen, nicht standardmäßigen Formatierer ran verwenden. und decn. Im obigen Header haben die Schlüssel „RA“ und „DEC“ den Wert „97.6960081674312“ bzw. „4.99212765957446“. „$RA:ran$_$DEC:decn$“ würde in „06h30m47s_+04d59m32s“ umgewandelt werden.

Ein gutes Beispiel für den Ergebnisdateinamen des Stackings ist der folgende Ausdruck:

$OBJECT:%s$_$FILTER:%s$_$STACKCNT:%d$x$EXPTIME:%d$sec_G$GAIN:%d$_O$OFFSET:%d$_T$CCD-TEMP:%d$°C_$DATE-OBS:dm12$

die etwa wie:

NGC_7023_L_57x120sec_G100_O50_T-9°C_2023-10-07

Um die Syntax zu testen, können Sie ein Bild laden und den Befehl parse verwenden, wie unten gezeigt.

Siril Kommandozeile

parse str [-r]
Parsed the String str basierend auf den Informationen im Header des aktuelle geladenen Bildes. Hauptzweck dieses Befehls ist es, das Path-Parsing von Header-Schlüsseln zu debuggen welches in anderen Befehlen genutzt werden kann.
Option -r specifies the string is to be interpreted in read mode. In read mode, all wildcards defined in string str are used to find a file name matching the pattern. Otherwise, default mode is write mode and wildcards, if any, are removed from the string to be parsed.

Wenn str mit dem Präfix $def beginnt, wird es als reserviertes Schlüsselwort erkannt und in den in gui_prepro.dark_lib, gui_prepro.flat_lib, gui_prepro.bias_lib oder gui_prepro.stack_default gespeicherten Strings für $defdark, $defflat, $defbias bzw. $defstack gesucht.
Das Schlüsselwort $seqname$ kann auch verwendet werden, wenn eine Sequenz geladen ist

Auffinden einer Datei mit Pfadanalyse

Im obigen Beispiel haben wir gesehen, dass wir den Namen eines Masterdarks anhand der Informationen aus dem FITS-Header des zu kalibrierenden Lights finden können. Dies wird im Befehl parse der Lesemodus genannt.

Dieses Verhalten wird hauptsächlich in Verbindung mit dem Befehl/Tab calibrate und zum Suchen von Master-Verzerrungsdateien verwendet. In der Option -dark= des Befehls oder im Feld Dark der GUI können Sie die oben beschriebene Syntax verwenden. Damit können Sie sicher sein, dass das passende Dark zum Kalibrieren des Lights abgerufen wird. Dasselbe gilt gleichermaßen für Bias und Flat. Sie können natürlich auch einen vollständigen (oder relativen) Pfad zur Datei angeben. Und der Pfad kann auch Ausdrücke derselben Art enthalten.

Bei Flats zum Beispiel möchten sie vielleicht den Pfad zu einer Bibliothek angeben, die Filter- oder Teleskopinformationen enthalten könnte, da Sie möglicherweise mehrere Setups haben. Ein Pfad wie:

~/astro/masters/flats/$INSTRUME:%s$_$TELESCOP:%s$/$FILTER:%s$/FLAT_bin$XBINNING:%d$.fit

Würde dann umgewandelt in:

~/astro/masters/flats/ZWO_ASI294MC_Pro_61EDPH/DualBand/FLAT_bin1.fit

und ist ein gültiger Wert für Flat.

Wenn Sie dies jedes Mal, wenn Sie kalibrieren, als Befehl in Ihre Skripte oder in das Feld Flat der grafischen Benutzeroberfläche schreiben müssten, könnte das natürlich etwas mühsam werden. In diesem Fall kommen reservierte Schlüsselwörter zu Hilfe. Es gibt 3 reservierte Schlüsselwörter für Master:

  • $defdark

  • $defflat

  • $defbias

  • $defdisto

Ihre Werte werden im Abschnitt Einstellungen ‣ Vorverarbeitung <preferences/preferences_gui:pre-processing> festgelegt. Sie können sie auch über Skripting mit dem Befehl set festlegen. Sie entsprechen den Werten von gui_prepro.dark_lib, gui_prepro.flat_lib, gui_prepro.bias_lib und gui_prepro.disto_lib.

Wenn diese Werte festgelegt wurden und Sie sie als Standardwerte verwenden möchten, werden Sie in den Feldern der Registerkarte Kalibrierung angezeigt. Sie können auch beginnen, Ihre Skripte unter Verwendung dieser Schlüsselwörter zu schreiben. Der Kalibrierungsschritt eines neuen generischen Skripts für eine Farbkamera könnte z.B. folgendermaßen aussehen:

calibrate light -dark=$defdark -cc=dark -flat=$defflat -cfa -equalizecfa -debayer

Auf diese Weise werden die Master-Dateien direkt aus den Bibliotheken ausgewählt, und es wird sichergestellt, dass sie bei der Kalibrierung nicht vertauscht werden.

Schreiben einer Datei mit Dateinamen-Parsing

Es ist zwar praktisch, auf diese Weise Dateien finden zu können, aber es wäre ebenso nützlich, diese Syntax zu verwenden, um Dateien während des Stackings zu speichern. Genau darum geht es beim Schreibmodus. Die Syntax kann im Feld -out= der Befehle stack und stackall, oder im entsprechenden Eingabefeld der GUI benutzt werden.

Nehmen wir an, Sie wollen ein allgemeines Skript schreiben, welches bei jedem Update Ihrer Bibliothek die Master-Darks vorbereitet. In der Zeile stack des Skripts können Sie dann schreiben:

stack dark rej 3 3 -nonorm -out=$defdark

Diese Zeile stellt sicher, dass das resultierende Masterdark an der richtigen Stelle mit dem richtigen Dateinamen gespeichert wird, der dann zur Kalibrierung der Lights abgerufen werden kann.

Um noch mehr Flexibilität mit dem stack-Befehl zu erreichen, gibt es zwei weitere reservierte Schlüsselwörter:

  • $defstack

  • $sequencename$

Wie bei den Standard-Mastern wird $defstack im gleichen Abschnitt der Voreinstellungen konfiguriert, oder mit dem Befehl set auf gui_prepro.stack_default. Nehmen wir zum Beispiel an, Sie haben $defstack definiert als:

Result_$OBJECT:%s$_$DATE-OBS:dm12$_$LIVETIME:%d$s

Die Skriptzeile:

stack r_pp_light rej 3 3 -norm=addscale -output_norm -out=$defstack

wird den Stack unter folgendem Namen speichern:

Result_Rosette_Nebula_2022-01-24_12000s.fit

Seit Siril 1.2.0 ist der Standardname für das Stacking als $sequencename$stacked (das _-Zeichen wird hinzugefügt, falls nicht vorhanden) definiert. Dies ähnelt dem bisherigen Verhalten früherer Versionen, außer dass jetzt explizit angegeben ist, dass Pfadnamen-Parsing verwendet wird.

Verwendung von Platzhaltern/Wildcards

Es könnte sein, dass Sie einen Schlüsselwert im Namen Ihres Masterframes verwenden möchten, der nicht mit dem Schlüsselwert in den zu kalibrierenden Bildern übereinstimmt. Anhand eines Beispiels wird es vielleicht etwas deutlicher. Angenommen, Sie möchten im Namen eines Masterflats die Belichtungszeit festhalten. Etwa so:

FLAT_1.32s_Halpha_G120_O30_bin1.fit

Wenn Sie ein Feld $EXPTIME:%0.2f$ in $defflat einfügen, wird es beim Kalibrierungsschritt zu einem Fehler kommen. Einfach deshalb, weil der EXPTIME-Schlüssel aus dem zu kalibrierenden Light gelesen wird und nicht aus dem Flat.

Um diese Situation zu umgehen, können Sie in den zu parsenden Ausdrücken Platzhalter/Wildcards verwenden:

FLAT_$*EXPTIME:%0.2f$_$FILTER:%s$_G$GAIN:%d$_O$OFFSET:%d$_bin$XBINNING:%d$

Beachten Sie das Symbol *, das direkt vor EXPTIME steht.

Dieses Symbol hat folgende Bedeutung:

  • Im Schreibmodus, also grundsätzlich beim Stacken Ihres Masterflats, wird das Feld EXPOSURE zur Bildung des zu speichernden Dateinamens verwendet. Im obigen Beispiel würden Sie dann effektiv unter FLAT_1.32s_Halpha_G120_O30_bin1.fit speichern.

  • Im Lesemodus, also beim Kalibrieren Ihrer Lights, wird das Feld EXPOSURE durch * ersetzt. Bei der suche nach einer solchen Datei holt Siril alle Dateien, die dem Muster FLAT_*_Halpha_G120_O30_bin1.fit entsprechen. Hoffentlich ist Ihre Namenskonvention robust genug, damit nur genau eine passende Datei gefunden und zur Kalibrierung verwendet wird.

    Dies kann auch nützlich sein, um Master-Verzerrungsdateien anzugeben. Sie könnten beispielsweise Folgendes verwenden:

~/astro/masters/distos/DISTO_$*DATE-LOC:dm12$_$INSTRUMEN:%s$_$TELESCOP:%s$_bin$XBINNING:%d$.wcs

Beachten Sie das Symbol * direkt vor DATE-LOC.

Wenn vor einem DATE-Header-Schlüssel ein Platzhalter verwendet wird, ist die im Lesemodus zurückgegebene Datei die Datei mit dem nächstgelegenen Datum, das kleiner oder gleich dem der Datei ist, deren Header analysiert wird.

Warnung

Falls Siril mehr als eine Datei im Lesemodus findet, wird es eine Warnung in der Konsole ausgeben und die neueste Datei auswählen. Da dies möglicherweise nicht zum gewünschten Ergebnis führt, sollten Sie in diesem Fall Ihre Namenskonvention für Dateien überdenken.

Umgang mit Duplikaten

In manchen Fällen gibt es mehrere Schlüsselwörter für denselben Wert. Das liegt daran, dass Softwareentwickler dieselben Schlüsselwörter verwenden oder neue schaffen können. Siril versucht daher, Duplikate zu erkennen und zu verwalten. Hier ist eine Tabelle, die bekannte Duplikate zusammenfasst. Wenn eine Datei so genannte „alternative“ Schlüsselwörter enthält, dann speichert Siril den Wert in der „primären“ Version.

Primäres Schlüsselwort

Alternative

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