Optical Calculations and Analysis

Paraxial Design Model

Overview

Paraxial layout operations are handled via the ParaxialModel. This enables model manipulation via the \(y-\overline{y}\) or \(\omega-\overline{\omega}\) diagrams.

Optical layout is facilitated by being able to use paraxial properties to solve for constructional parameters.

Ray Tracing

Ray Tracing Overview

Real Ray Tracing is a fundamental operation in optical design and analysis. Ray-optics has a layered architecture for the ray trace engine. The low level interface can be used directly or through higher level interfaces.

The low level trace_raw() function is the building block of the ray trace system, based on Spencer and Murty’s General Ray-Tracing Procedure. The first argument to this function is an iterator that returns a tuple of interface, gap, refractive index, transform to the next interface and a z direction. This information is sufficent to satisfy the input requirements of the ray trace algorithm.

The Interface API is used extensively by the ray trace. The following methods are required by the ray trace:

The following attributes of Interface are used:

Ray tracing is two operations, repeated until reaching the image. They are:

  • find the next ray-interface intersection

  • scatter the ray based on the interface properties

Sequential models of optical systems make the first operation very straightforward. No search for the next closest surface is performed, rather, the sequence of the interfaces is used to determine the next surface interface to calculate. Sequential models also have only one dominant optical behavior per interface. This means there will be a one to one relationship between the incident and exiting rays from an interface.

Sequential ray tracing in ray-optics by default is configured to ray trace the seq_model of the OpticalModel. The trace() function is the low level interface to the ray trace system. It’s arguments include a SequentialModel and the ray starting point, direction and wavelength.

The trace_raw() function is the building block of the ray trace system. The first argument to this function is an iterator that returns a tuple of interface, gap, refractive index, transform to the next interface and a z direction. Python provides a generator capability that could be used to programmatically generate a sequence of interfaces, for example for a ghost image analysis, without explicitly constructing a list of interfaces. The method path() in SequentialModel returns a Python generator that is used to drive the ray tracing process.