Algorithms:

Compound prism design:

Compound prisms consists of a series of wedged optical elements placed in optical contact, and are commonly used to achieve direct-vision dispersion. We have written a set of algorithms in numerical python for prism design. At the moment, they are roughly organized, but consist of:

(1) a set of utility functions used in each of the files below. [prism_misc.py]
(2) a set of utility functions to read and interact with the glass refractive index information stored in Zemax' glass catalog format. [read_zemax.py]
(3) an individual file for each prism type for storing the design data in tabulated column format. [prism1.py, prism2.py, prism3.py, prism3a.py, prism5j.py]
(4) a corresponding file for reading the design data for each prism type. [prism2_reader.py, prism3_reader.py, prism3a_reader.py, prism5j_reader.py]

Note that the files assume a specific location for the Zemax glass catalog. This needs to be modified for each user. The function of each design file is listed below:

prism1.py: design singlet (i.e. non-compound wedge) prisms
prism2.py: design doublet prisms (consisting of two wedges in optical contact)
prism3.py: design triplet prisms
prism3a.py: design double-Amici prisms (triplets where the outer elements are mirror images of one another)
prism5j.py: design 5-element Janssen prisms (5-element prisms with mirror symmetry similar to that of the double-Amici)

cmlplot.py

The output of each design file is a long tabular dataset consisting of every glass combination for which the algorithm could obtain a valid design. The corrsponding reader function file will read in this table, sort it by merit function, and return a list of the top few designs. An example output file and two sorted lists from it (sorted respectively by dispersion nonlinearity and system thickness) are: report2_full.dat, report2_nonlin.dat, report2_anglesum.dat