Put status email into wiki for further discussion. authored by joha2's avatar joha2
Welcome to the pyrate wiki!
# Status of pyrate (according to email communication)
## Aiming
Status: pyrate kann für objektseitig endlich konjugierte Systeme nach einem paraxialen ABCD-Modell in die Pupille zielen.
Ziel:
* Entwicklung eines Pilot-Strahl-Konzepts und Anpassung der bisherigen Funktionen auf das neue Konzept
* Unterstützung unendlich konjugierter Systeme
Fernziel:
* Option für iteratives (langsames) Zielen mit echten (nicht-paraxialen) Strahlen für Systeme mit Pupillenaberration
* Konzept für Systeme mit Vignettierung
## Optimierung
Status: Die optimierbaren Variablen mögen pickles nicht.
Ziel:
* finale Festlegung der Objekt-Struktur zur Durchreichung der optimierbaren Variablen an den Optimierer
* Damped least square Verfahren, Festlegung einer optimalen default-Dämpfung
* zuverlässige und robuste Optimierung; Der Optimierer soll so gestaltet sein, dass "typische" Merit-Funktionen in möglichst vielen Fällen ein gut konditioniertes Optimierungskriterium darstellen.
Fernziel:
* komplexe Optimierungs-Strategien und globaler Optimierer
## Speichern und Laden von Objektiven
Status: pickles mag die optimierbaren Variablen nicht
Ziel:
* Lösung, die sowohl Optimierung als auch speichern ermöglicht und die Python-Design-Philosophie möglichst wenig verletzt, also wenig C++ Pointer Zeug enthält.
* Idealerweise nur mit mainstream-Paketen wie numpy; Diese werden mit sehr hoher Wahrscheinlichkeit in ein paar Jahren noch unterstützt und auf neue python-Versionen gehoben
## Asphären
Status: Bisher nur Kegelschnitte möglich
Ziel:
* Entwicklung eines iterativen Verfahrens zur Schnittpunkt-Berechnung von Geraden mit Asphären
* Implementierung einer Mutterklasse für Asphären
* Implementierung polynomielle Asphäre
Fernziel:
* Implementierung verschiedener Asphären- und Freiform-Beschreibungen
(Forbes mild & stark, polynomielle Freiform, Zernike sag, ... )
## Solves, Pickups, und Zwangsbedingungen
Status:
* Abstrakt implementiert (Pickup mit Funktion und External mit Funktion)
Ziel:
* Konzept zur Übergabe von Zwangsbedingungen an den Optimierer
* Bereitstellung häufiger solves als fertige Funktionen
## Coordinate Breaks
Status: Tilt ist eine Material-Tochterklasse, Decenter eine Surfshape-Tochterklasse. Ein Tilt-Decenter ist eine ganze Oberfläche.
In Zemax wird die Oberflächen-Tabelle bei mehreren Coordinate Breaks schnell unübersichtlich. In Code V hat jede Oberfläche automatisch die Parameter tilt und decenter.
Eventuell wäre es für pyrate auch günstig, jeder Oberfläche ein Objekt "position" zu spendieren. Die einfachste Tochterklasse ist "thickness", die kann nur einen z-Versatz und kann den Versatz sehr schnell auf Strahlen drauf addieren. Die komplexeren Tochterklassen wie "tiltAndDecenter" mit ihren numerisch aufwendigeren Berechnungen werden
nur verwendet, wo sie gebraucht werden. So bleibt pyrate schnell.
Das opticalSystem kann die gloable Position von Oberflächen besser bestimmen: Bisher müsste man jede Oberfläche fragen: ist dein surfShape ein decenter? Ist dein Material ein tilt ? und mit vielen if-Anweisungen die globale Vertex-Koordinate aus allen vorhergehenden thicknesses, surfShapes und Materials zusammenfrickeln. Die klasse "position" zentralisiert alle Veränderungen der optischen Achse (d.h. des Nullpunkts der Oberflächen-Beschreibung)
# Some Ideas
...
......
......