Svenesis LightCurve
Version 1.0.0 – GPL-3.0-or-later
🚧 Aktuelle Version 1.0.0. Noch nicht im offiziellen Siril-Script-Repository – Download direkt von GitHub.
LightCurve macht Exoplaneten-Transitphotometrie innerhalb von Siril – in der Tradition von EXOTIC (der Pipeline von NASAs Exoplanet Watch) und HOPS. Man zeigt auf den Ordner mit den Subs einer Nacht auf einen Exoplaneten-Wirtsstern. Das Skript misst, wie sich dessen Helligkeit relativ zu anderen Sternen im selben Feld verändert hat, entfernt die systematischen Trends, die es verantworten kann, fittet einen Transit – und sagt, ob die Delle echt ist oder ob man eine Wolke ansieht.
Wer macht was
Die Arbeitsteilung ist bewusst gewählt und erklärt den größten Teil des Designs.
| Zuständig für | |
|---|---|
| Siril | Bereitstellen, Kalibrieren, Zwei-Pass-Registrierung, Sternerkennung, Plate Solve und die Qualität pro Frame – also das, was es nachweislich gut kann |
| Das Skript | Den Fluss selbst: jeder Stern pro Frame aus seiner vorhergesagten Position neu zentriert (der „Follow Star“, der Sirils light_curve fehlt), Subpixel-Aperturen gegen einen sigma-geclippten Himmelsring, die Apertur nach Punkt-zu-Punkt-Rauschen gewählt, Fehler aus der CCD-Gleichung mit gemessenen Termen |
| Und die Entscheidungen | Welcher Stern das Ziel ist, wie die Airmass-Rampe verschwindet, ohne die Transittiefe mitzunehmen – und ob überhaupt etwas behauptet werden darf |
Am selben driftenden 142-Frame-Lauf gemessen: Die eigene Engine behält 140 Punkte bei 6,3 mmag, wo Sirils light_curve 67 behielt. Letzteres bleibt als lauter Fallback intakt – misst die Engine unter 30 Prozent der Frames, sagt sie es und übergibt.
Gegen EXOTIC validiert
An EXOTICs eigenen Beispieldaten geprüft (HAT-P-32 b, 142 Frames): Rp/R★ = 0,1525 ± 0,0064 gegen EXOTICs publizierte 0,1541 ± 0,0033 – 0,2 σ auseinander, bei gleicher Residuenstreuung (0,58 % gegen 0,55 %).
Beide Tiefen-Konventionen werden gemeldet und benannt: die randverdunkelte zentrale Tiefe, die der Fit misst, und das (Rp/R★)², das EXOTIC, HOPS und AstroImageJ angeben – bei einem sonnenähnlichen Stern rund 20 Prozent flacher. Vergleichen sollte man diese mit deren Werten und mit dem Archiv.
Warum nicht Sirils eigenes Lichtkurven-Werkzeug?
Sirils Lichtkurven-Workflow erzeugt eine Lichtkurve; dieses Skript erzeugt eine Messung. Dazwischen liegen das Follow-Star-Zentrieren, die Driftbehandlung und die Prüfung der Vergleichssterne – und die Analyse, bei der das native Werkzeug aufhört: BJD_TDB, ein simultaner randverdunkelter Fit, eine kalibrierte Signifikanz, O−C und die AAVSO-Datei.
Kalibrierung findet ihre eigenen Frames
Nichts muss vorbereitet werden. Man zeigt auf die Subs – oder auf irgendeinen Ordner darüber, der Scan ist rekursiv und sortiert anhand der FITS-Header – und einmalig auf den Ordner mit den wiederverwendbaren Darks. Die Flats werden neben den Lights im N.I.N.A.-Layout gefunden, nach Belichtung, Gain, Temperatur, Binning, Bildgröße und Kamera gruppiert, zu Mastern gestapelt und für den nächsten Lauf gecacht. Die Pixelarbeit macht Sirils calibrate – in diesem Skript steckt keine Bias-, Dark- oder Flat-Arithmetik, aus demselben Grund, aus dem keine Photometrie in Siril steckt.
Was abgelehnt wird, wird ausgesprochen – denn ein Master, der gefunden und dann verworfen wurde, hinterlässt einen Lauf, der genau so aussieht wie einer ohne jeden Master:
| Abgelehnt | Warum |
|---|---|
| Falsche Belichtungszeit (Dark) | Ein 3-Sekunden-Dark auf 60-Sekunden-Lights entfernt 5 % des Dunkelstroms, lässt den Rest stehen und legt sein eigenes Ausleserauschen auf jeden Frame. Gemeldet mit beiden Zahlen – und damit, was es angerichtet hätte |
| Falsche Temperatur | Darks werden nach Temperatur gruppiert; −10 °C und −20 °C zusammengemittelt ist für keines von beiden richtig. Bias wird nicht getrennt – es ist reines Ausleserauschen, eine Trennung machte jeden Master nur verrauschter |
| Falsche Kamera oder Größe | Zwei Gehäuse mit demselben Sensorformat würden sich sonst gegenseitig kalibrieren |
| Bias zusammen mit einem Dark | Das Dark enthält den Offset bereits; beides abzuziehen entfernt ihn doppelt. Das Bias korrigiert stattdessen weiterhin die Flats |
Ein Flat muss die Belichtungszeit der Lights dagegen nicht treffen – ein Flat ist ein Verhältnis, seine eigene Belichtungszeit sagt nichts über die Lights.
Registrierung ohne Resampling
register -2pass berechnet die Registrierungsdaten und hört dann auf. seqapplyreg würde jedes Pixel interpolieren – und Interpolation korreliert benachbartes Rauschen und verschiebt Fluss innerhalb der Apertur. Stattdessen folgt die Photometrie den Sternen über die Registrierungsdaten: Die Apertur landet auf dem Stern, während die Pixel exakt so bleiben, wie der Sensor sie aufgezeichnet hat.
Die Airmass-Rampe entfernen, ohne die Tiefe mitzunehmen
Ein schlichter Fit durch alle Punkte absorbiert einen Teil des Transits, sobald die Delle mit der Rampe korreliert – der Standardfall bei einem Ziel, das im Lauf der Nacht sinkt. Deshalb wird die Baseline zunächst einseitig getrimmt gefittet und anschließend direkt auf den Punkten außerhalb des Transitfensters neu gefittet.
Gemessen an synthetischen Läufen mit bekannter 30-mmag-pro-Airmass-Rampe: Der schlichte Fit trifft die Steigung 6 bis 11 Prozent zu niedrig; dieses Verfahren landet bis 50 Prozent Duty Cycle innerhalb von einem Prozent und bei 75 Prozent innerhalb von drei.
Ist es echt? Eine Schwelle, die gemessen wurde
Der Signifikanztest ist zweiseitig. Ein echter Transit kehrt zu der Baseline zurück, die er verlassen hat; ein Trend nicht. Fasst man beide Seiten zu einem gemeinsamen Außer-Transit-Mittel zusammen, geht genau dieser Unterschied verloren: Auf einer monotonen Rampe ohne jeden Transit – unkorrigierte Extinktion, ziehende Wolke, Fokusdrift – erreicht der gepoolte Kontrast +25σ. Vergleicht man jede Seite getrennt und nimmt die schwächere, liefern dieselben Daten −10σ und werden abgelehnt.
Die Signifikanz ist die beste aus rund 40.000 Gitterpunkten, also kein gaußsches σ. Deshalb wurde die Schwelle nicht gewählt, sondern gemessen – an 1.200 transitfreien Rauschläufen durch dieselbe Suche:
| Schwelle | Falschalarm | 4 mmag | 6 mmag | 8 mmag | 12 mmag |
|---|---|---|---|---|---|
| 3,0 σ | 7,67 % | 88 % | 100 % | 100 % | 100 % |
| 3,5 σ | 1,92 % | 70 % | 97 % | 100 % | 100 % |
| 4,0 σ | 0,50 % | 45 % | 93 % | 100 % | 100 % |
| 4,5 σ | 0,25 % | 29 % | 89 % | 100 % | 100 % |
| 5,0 σ | 0,00 % | 15 % | 78 % | 100 % | 100 % |
Eine 3σ-Schwelle lässt jeden zehnten reinen Rauschlauf durch – wo „3σ“ allgemein als einer von 750 gelesen wird. Die gemessene Rate steht neben jedem Ergebnis. Und ein Transit, den Anfang oder Ende des Laufs abschneiden, liefert Signifikanz null, nicht einfach weniger: Ohne Baseline auf beiden Seiten lässt sich die Frage mit keiner Methode beantworten.
Die Apertur wird gewählt, nicht angenommen
Die Aperturgröße ist die wirksamste Zahl der Aperturphotometrie. Zu klein verliert einen seeingabhängigen Anteil des Sterns – eine Systematik, die mit der Nacht wandert. Zu groß sammelt Himmel und Nachbarn ein. Deshalb werden sechs Radien von 0,75 bis 2,5 × FWHM je einmal durchphotometriert, und der mit der geringsten robusten Streuung gewinnt. Bei Gleichstand entscheidet die Zahl der gemessenen Frames – eine Apertur, die gut abschneidet, weil sie weniger Frames misst, hat nichts gewonnen.
Vergleichssterne
Vier Filter entscheiden, jeder gegen ein anderes Versagen:
| Verworfen wenn | Warum |
|---|---|
| Gesättigt | Ein abgeschnittener Kern skaliert nicht mit der Transparenz – ein gesättigter Vergleichsstern macht aus jeder Wolke einen falschen Transit |
| SNR unter der Grenze | Jeder Vergleichsstern bringt sein eigenes Photonenrauschen ins Ensemble. Unter etwa 20 fügt er mehr Streuung hinzu, als er als Referenz wert ist |
| Näher als 10 × FWHM | Die Aperturen teilen sich Himmelsring und Sternflügel. Die Kontamination hängt vom Seeing ab, wandert also durch die Nacht und sieht aus wie ein langsamer Trend |
| Nicht isoliert | Dasselbe Argument, gerichtet auf jeden Nachbarn des Vergleichssterns. Der Radius ist Sirils eigene Geometrie, kein Geschmack: -autoring setzt den Außenring auf 6,3 × FWHM, zwei Ringe berühren sich also ab dem Doppelten nicht mehr |
Darüber hinaus wird jeder Kandidat gegen die anderen photometriert und an der robusten Streuung seiner eigenen Kurve beurteilt. Ein Stern, der gegen seine Kollegen schwankt, schreibt dieses Schwanken invertiert in die Zielkurve – und nichts sonst würde es je bemerken. Die Schwelle ist ein Verhältnis zum Ensemble-Median, keine absolute Millimagnitude: Eine gute und eine schlechte Nacht unterscheiden sich um einen Faktor, eine feste Grenze würde in der einen alles und in der anderen nichts verwerfen.
Jede Ablehnung steht im Log und im Report – und die Aufstellung erfasst auch die Sterne, die alle vier Filter bestanden haben und schlicht nicht gebraucht wurden. Ohne diese Zeile läse sich „6 gewählt, 668 abgelehnt“ bei 864 Erkennungen wie ein Feld, das kaum einen Vergleichsstern hergab – dabei gab es 195 her, und die besten sechs wurden genommen.
Ein Satellit darf nicht den Nachweis kosten
Gemessen an einem echten 12-mmag-Transit bei 4 mmag pro Punkt: Ein einziger 100-mmag-Ausreißer drückte die Signifikanz von 12,1σ auf 3,2σ – unter die Nachweisschwelle. Ein gemessener Transit wurde als nicht behauptet gemeldet.
Bemerkenswert daran: Die Parameter bewegten sich kaum. Kaputt ging der Nenner – die Streuung hinter der Signifikanz war eine gewöhnliche RMS, und ein Ausreißer bläht sie auf. Der Wechsel auf einen MAD holt 6,9σ zurück, das Entfernen des Punktes den Rest. Referenz ist dabei ein gleitender Median über neun Punkte – weit kürzer als jeder Transit, eine glatte mehrpunktige Delle geht also unangetastet durch. Entfernt werden nie mehr als 5 Prozent eines Laufs; darüber sind die Ausreißer die Daten, und der Lauf sagt genau das.
Die Ausgabe
| Datei | Inhalt |
|---|---|
lightcurve.csv | Jeder Punkt: JD, roh, zentriert, detrended, Fehler, Airmass |
lightcurve.png | Das Diagramm |
report.txt | Der ganze Lauf als Text – Vergleichssterne, jede Ablehnung samt Grund, die Methode und das Ergebnis |
AAVSO_exoplanet.txt | Im Format von Exoplanet Watch, mit T0 ± Fehler, beiden Tiefen-Konventionen, Rp/R★ ± Fehler und Dauer im Kopf |
⚠️ Die AAVSO-Datei wird verweigert, solange die Zeiten nicht BJD_TDB sind. Der Kopf deklariert dieses System; JD_UTC darunter zu schreiben hieße, einer Einreichung einen Acht-Minuten-Fehler mitzugeben, den niemand sehen kann. Verschickt wird nichts – Einreichen bleibt deine Entscheidung.
Gute Daten aufnehmen
| Baseline | Mindestens eine Transitdauer vor dem Ingress anfangen und ebenso lange nach dem Egress weiterlaufen |
| Nicht sättigen | Weder Ziel noch Vergleichssterne. Spitze unter etwa halbem Full Well halten |
| Leicht defokussieren | Gegenintuitiv, aber Standard: Den Stern über mehr Pixel zu verteilen mittelt Flatfield-Fehler weg und schafft Sättigungsreserve. FWHM 4–6 px ist ein guter Zielwert |
| Nicht dithern | Das Gegenteil des Stacking-Rats. Dithern schiebt den Stern auf Pixel mit anderer Empfindlichkeit – Rauschen, das man nicht braucht, wenn der Stern ohnehin stillsteht |
| Belichtung nicht wechseln | Ein Wechsel mitten im Lauf ändert Sättigungsreserve und Szintillationsstatistik gleichzeitig |
Voraussetzungen
Siril 1.4+ mit Python-Unterstützung, numpy, PyQt6, matplotlib, astropy – die Abhängigkeiten werden beim ersten Start automatisch installiert. Zehn Frames sind das absolute Minimum, ein echter Transitlauf hat Hunderte. Für den Airmass-Detrend werden Breite und Länge des Standorts gebraucht; ohne sie entfällt er, und der Report sagt es.
Zum Skript gehört eine Testsuite: tests/test_lightcurve_helpers.py läuft mit bloßem python3, ohne Siril, und prüft über 450 Fälle gegen Eingaben mit bekannter Antwort – synthetische Transits bekannter Tiefe durch die volle Photometrie- und Fit-Kette, zwölf reine Rauschläufe, die nicht behauptet werden dürfen, und Fehlerbalken gegen 24 unabhängige synthetische Nächte.