|
|
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
|
|
|
...
|
|
|
|
... | ... | |