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 durch einen Rechtsklick auf ein geöffnetes Bild und Auswahl von FITS Header... auslesen. Normalerweise erhalten Sie eine Ausgabe wie untenstehend (einige der Schlüssel wurden zur Übersichtlichkeit 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.
Die Option -r gibt an, dass die Zeichenkette im Lesemodus interpretiert werden soll. Im Lesemodus werden alle in der Zeichenkette str definierten Wildcards verwendet, um einen Dateinamen zu finden, der dem Muster entspricht. Andernfalls ist der Standardmodus der Schreibmodus, und etwaige Platzhalter werden aus der zu parsenden Zeichenkette entfernt.

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/der Registerkarte calibrate verwendet. Bei der option -dark= des Befehls oder im Feld Dark der Benutzeroberfläche, können Sie die oben beschriebene Syntax verwenden. So können Sie sicher sein, dass das passende Masterdark zur Kalibrierung der Lights verwendet wird. Das Gleiche gilt auch für Bias- und Flat-Dateien. Sie können natürlich auch einen vollständigen (oder relativen) Pfadnamen zu der Datei angeben. Und der Pfadname kann ebenfalls Ausdrücke der gleichen 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

Ihre Werte werden in Preferences ‣ Pre-processing section festgelegt. Sie können auch durch Skripting mit dem Befehl set festgelegt werden. Sie entsprechen den werten von gui_prepro.dark_lib, gui_prepro.flat_lib``und ``gui_prepro.bias_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.

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.