Wer hat Erfahrung mit astropy/specutils/specreduce?

Michael_Haardt

Aktives Mitglied
Hallo,

ich mache damit meine ersten Schritte und habe ein paar Anfängerfragen. Kennt sich jemand mit diesen Paketen aus?

Konkret habe ich ein 2D Spektrum einer Kalibrierlampe, kann die Peaks extrahieren, anhand der Daten vom NIST zuordnen und daraus ein Kalibrierungsmodell erstellen. Aber Letzteres schon nur mit astropy selbst, mit specreduce bekomme ich es nicht hin. Es wäre nun hilfreich, die zugeordneten Kalibrierungsdaten irgendwie abzuspeichern. Wie macht man das konzeptuell üblicherweise? Eigentlich werden damit ja reihenweise Messdaten kalibriert und man möchte die Zuordnung nicht immer wieder neu machen. Natürlich kann ich mir für mich irgendwas ausdenken, aber ich würde mich gerne an bewährten Abläufen orientieren.

Michael
 
Frag mal mistral.ai, oder chatGPT, oder gemini.google.com

Ich benutze die drei oft wenn ich schnell python code schreiben will.
 
Ich bezweifle, dass die mir sagen können, warum das Beispiel aus der Dokumentation von specreduce nicht funktioniert, aber der extrem ähnliche Code in astropy schon (was bei Python schon fast normal ist).

Aber mir geht es eigentlich um die Frage, wie man denn üblicherweise mit den Daten verfährt. Speichert man die Daten, aus denen man den Fit erzeugt, oder den Fit? Soweit ich sehe, kommen Spektrogramme als FITS auf viele Weisen daher, und eine davon sind Rohdaten mit dem Fit als WCS, dessen Algorithmus und Parameter in Metadaten stecken. Aber wie wird die Kalibrierung selbst gespeichert, um solche Spektrogramme zu erzeugen? Das ist so eine alltägliche Frage, dass es vermutlich jeder weiß, der das macht, und darum schreibt keiner darüber.

Michael
 
Die Antwort ist wohl eher, dass es fuer jedes Instrument eine eigene pipeline gibt und jeder das macht wie er will. Solange man die Rohdaten hat und das Endergebnis fuer andere reproduzierbar ist, ist das OK. Die Kalibrationsdaten sind im allgemeinen nicht stabil und daher meistens mit den Objektdaten assoziiert.

Wenn ich dich richtig verstanden habe, willst du nicht jedesmal die Linien deiner Kalibrationslampe neu identifizieren und die Dispersion neu berechnen?

Gerade was python und coding angeht, sind die normalen chatbots erstaunlich hilfreich und potent. Du kannst auch die python Fehlermeldungen reingeben, oder die beiden codes miteinander vergleichen lassen. Probiers einfach mal.

Mehr kann ich dir leider nicht helfen :-/
 
Michael,
mein Eindruck ist, du machst dir als Beginner das Leben unnötig schwer. Ausgehend von deinem Beispiel des 2D Spektrums der Kalibrierlampe möchte ich dir die Software "SpectroCalc" von Manfred Schwarz (Österereich) nahelegen. Die ist sehr umfangreich und erfüllt alle Ansprüche der heutigen professionellen Spektrenreduktion. Sie ist zu finden unter:
ms@astrophoto.at
 
Pro Messung Kalibrierungsdaten zu sammeln ist schon OK. Aber wenn ich die Linien manuell zugeordnet habe (weil ich RASCAL nicht ans Laufen bekam), dann würde ich das gerne irgendwie speichern, um den Schritt nicht wieder machen zu müssen, wenn ich die eigentlichen Messdaten auswerte, und das kann man ja ganz verschieden machen. Das Prinzip wird hier gezeigt:


Hier wird die Zuordnung direkt in den Code geschrieben und den Messdaten dann mit apply_to_spectrum als WCS-Objekt hinzugefügt. Ich kann nicht glauben, dass das so üblich ist, aber es ist ja auch nur ein Beispiel.

@Ernst_Pollmann Sehr interessante Software, aber leider nur für Windows, anscheinend auch nicht open source, aber vor allem rein interaktiv. Das Handbuch sieht so aus, als ob man in einem Schritt die Zuordnung der Linien für die Kalibrierung macht und danach direkt die Messdaten kalibriert, d.h. die eigentlichen Kalibrierungsdaten werden nur im RAM gehalten. Verstehe ich das richtig? Ich fand nicht beschrieben, welche Art von WCS in den kalibrierten Messdaten gespeichert wird und ob man das daraus zurück lesen kann. Die Kalibrierung wird mit einem Polynom gemacht, was bei mir auch gut klappt. Sollten später Zweifel aufkommen, wäre es schön zu wissen, wie die Linien der Lampe zugeordnet wurden, denn darauf beruht ja alles.

Ich fand eine Version 2 der Software: SpectroCalc2 - freeware to process spectra from the RAW images to the final spectrum Ich werde in die Tutorials sicher reinschauen.

Michael
 
Hallo Michael,

ich verwende hauptsächlich ESO-MIDAS unter Linux (was aber inzwischen in die Jahre gekommen ist...) und habe mir eine komplette Reduktions (Langspalt) - und Analysepipeline geschrieben, die komplett automatisch von den Ordnen mit Rohdaten bis zu Analyseprodukten laufen kann. Ich bin allerdings in py nicht drin.

Ich bzw. die implementierten Midas Routinen machen es so, dass die Positionen der Kalibrationslinien im Pixelraum gefunden werden. Dazu werden ein Linienkatalog, eine angenommene zentrale Wellenlänge sowie eine Dispersion geliefert. So kann dann per Näherungsverfahren die Kalibrationslösung gefunden werden. Habe allerdings bisher nicht in den Quellcode geschaut, wie die implementierten Routinen es machen.

Spontan, ohne lange drauf zu Denken:
Wenn ich es richtig verstehe, bräuchtest Du die Linienzuordnung automatisiert - der Rest funktioniert?! Also eventuell zunächst ein Verfahren zum Finden der Linienpositionen im Pixelraum (Bestimmung von Maxima / Gaußfits...). Aus zentraler Wellenlänge, Dispersion und Linienpositionsdaten könnte man dann auf die Pixelkoordinaten schließen und eventuell eine Korrelation versuchen (iterativ, um die geschätzten Startparameter bis zu einem Abbruch-Kriterium zu verbessern ?!).

Am Ende speichere ich alle Infos im Header des reduzierten Spektrums und zusätzlich das mit reduzierte Kalibrationsspektrum mit befülltem Header ab.

Viele Grüße
Christoph
 
Die Ermittelung der Linien im Pixelraum geht automatisch über Gauss-Fits mit der FWHM. Die Zuordnung zu Wellenlängen mache ich für den Anfang manuell. specreduce hat dafür noch nichts (IRAF schon...) und RASCAL bekam ich nicht ans Laufen. Das ist im Moment auch kein Problem, aber egal ob manuell oder automatisch, endet man ja mit den Positionen der Kalibrationslinien. Wie speicherst Du die im reduzierten Kalibrationsspektrum ab? Ich fand mit google verschiedene WCS Objekte, die über Daten im Header angegeben werden, z.B. Koeffizienten von Polynomen. Damit kann man die Positionen umrechnen, aber die Linienermittelung und Zuordnung ist dann weg.

Könntest Du mir vielleicht so ein reduziertes Kalibrationsspektrum mit Header schicken? Eins von einer Kalibrierunglampe wäre natürlich besonders gut. Ich bin neugierig, wie das bei ESO-MIDAS aussieht, auch wenn mir klar ist, dass das nur eine Variante von vielen ist. Vielleicht ist das die Antwort auf meine Frage.

Python ist mir auch neu. Man kommt leider nicht mehr daran vorbei.

Michael
 
Hallo Michael,

MIDAS bietet die Möglichkeit arrays im Header zu hinterlegen, was sehr praktisch, aber kein FITS-Standard ist (oder war? Ich kenne den aktuellen Standard nicht genau...).

Ich persönlich speichere die gefundenen Positionen im Wellenlängen oder Pixelraum nicht ab. Nur den gefundenen Fehler aus der Näherung. Ich bewahre aber die Rohdaten auf und das Vorgehen ist ja durch die komplett automatische Routine sehr gut reproduzierbar. Die Parameter sind hart gecodet, da ich nur wenige Sterne mit den gleichen Setup messe. Ansonsten packe ich auch immer alle Parameter in den Header der Output-Produkte. Sei es nun das 1d Spektrum oder die Fits-Tabelle mit Analysedaten. Der Header ist genauso wichtig, wie das eigentliche Daten-Array, besonders wenn man Messkampagnen mit Serien durchführt.

Ich denke, dass man allgemein so arbeiten sollte, dass es für andere reproduzierbar ist.

Ja, klar... ich schicke Dir heute oder morgen was zu, wenn ich an meinen Rechner komme...

Christoph
 
@ Michael, ich habe Dir ne PN geschickt. Das Forum unterstützt nicht alle nötigen Dateiformate.

Michael,
mein Eindruck ist, du machst dir als Beginner das Leben unnötig schwer. Ausgehend von deinem Beispiel des 2D Spektrums der Kalibrierlampe möchte ich dir die Software "SpectroCalc" von Manfred Schwarz (Österereich) nahelegen. Die ist sehr umfangreich und erfüllt alle Ansprüche der heutigen professionellen Spektrenreduktion. Sie ist zu finden unter:
ms@astrophoto.at

Es mag durchaus sein, dass heutige professionelle Ansprüche erfüllt werden, aber ist dies denn auch getestet und dokumentiert?

Auf der Seite (SpectroCalc2 - freeware to process spectra from the RAW images to the final spectrum) ist auch zu lesen: "The tool is designed to get a high accurate result with clear and transparent algorithms." Aber wo ist denn der Quellcode zu finden/dokumentiert? So klar, sauber und transparent finde ich das nicht.

Das soll nun kein Angriff sein, bevor es falsch aufgefasst wird und der Code mag auch deutlich eleganter sein, als ich jemals vermögen werde, welchen zu schreiben...
 
Hallo Michael,
hast du schon mal BASS angeschaut?
Damit kannst du exemplarisch ein Spektrum kalibrieren und als Fits abspeichern um den Header samt der aus der Kalibrierung resultierenden Koeffizienten darin anzuschauen.
CS
Christof
 
Du meinst vermutlich die -TAB WCS Objekte. Richtig, aber das ist für Fälle gedacht, wo z.B. ein Polynom nicht reicht. Wie beim Polynom weiß man aber nicht, auf welcher Grundlage es entstand. Die WCS Objekte dienen nur der Abbildung von Koordinaten in den physikalischen Raum. Bei mir reicht ein Polynom 2. Grades, weil die Abweichungen den Ungenauigkeiten des Pixelrasters entsprechen.

Christoph hat mir ein Beispiel geschickt, was mich noch eine Weile beschäftigen wird. Vielen Dank! Ich habe vom Überfliegen den Eindruck, dass dort mehr im Header geschrieben wird, als die Standards vorgeben, um später leichter zu verstehen, wie man zur Kalibrierung kam.

Ich kenne es aus anderen Projekten, dass man manchmal Jahre später mit neuen Fragen nochmal in Rohdaten schaut und die damalige Auswertung und Konvertierung hinterfragt. Wenn die Konvertierung eines Referenzspektrums in ein WCS-Objekt vielleicht mit inzwischen aktualisierter Software leicht andere Ergebnisse für das WCS-Objekt liefert, dann ist die Frage, welche Linien damals als Stützpunkte des Polynoms dienten und wo die Maxima gesehen wurden, um zu verstehen, wo die Unterschiede herkommen.

Michael
 
Inzwischen läuft der Code bei mir und ich habe die wichtigen Schritte und Fallen dokumentiert:


Ich hab's nicht hinbekommen, dass specutils das kalibrierte 1D-Spektrogramm nicht als tabular data, sondern als Original mit WCS speichert. Die Linien schreibe ich als HISTORY in den Header, genau so wie alle anderen Bearbeitungsschritte. Insgesamt finde ich Python und astropy/specutils/specreduce eher abschreckend. Die Dokumentation ist großteils schlecht und es gibt viele Fallen, die unglaublich Zeit kosten. Der Start von Programmen ist unfassbar lahmarschig und ein venv frisst mal eben ein paar Hundert MB Speicher, aber das ist halt aktuell der Stand der Technik.

Dafür funktioniert es und man kann nachsehen, wie die Algorithmen arbeiten. Muss man teilweise auch, um zu verstehen, wie etwas funktioniert.

Michael
 
Zurück
Oben