Source code for rayoptics.seq.twoconicmirrors

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright © 2018 Michael J. Hayford
""" calculate conic constants for different 2 mirror configurations

.. Created on Tue Jun 26 16:11:58 2018
.. |ParaxialModel| replace:: :class:`~.paraxialdesign.ParaxialModel`

.. codeauthor: Michael J. Hayford
"""

from rayoptics.optical.model_constants import ht, slp


def __decode_lens__(lens_package):
    """ decode the lens_package tuple into its constituents

        Args:
            lens_package: a tuple or a |ParaxialModel|. If it's a tuple:

               - the first element is a |ParaxialModel|
               - the second element is a tuple with the begining and ending
                 indicies into lens model lists

        Returns:
            |ParaxialModel|, beginning and ending indicies into paraxial model
    """
    if type(lens_package) is tuple:
        parax_model = lens_package[0]
        bgn, end = lens_package[1]
    else:
        parax_model = lens_package
        bgn, end = (1, -1)
    return parax_model, bgn, end


def _separation_ratio(lens_package):
    """ the ratio of the backfocus to the mirror separation

        Args:
            see description in __decode_lens__
    """
    parax_model, bgn, end = __decode_lens__(lens_package)
    ax_ray = parax_model.ax
#    a = ax_ray[ht][end]/ax_ray[slp][end]
#    B = (ax_ray[ht][end] - ax_ray[ht][bgn])/ax_ray[slp][bgn]
#    s = a/B
    m = ax_ray[bgn][slp]/ax_ray[end][slp]
    s = m*ax_ray[end-1][ht]/(ax_ray[bgn][ht] - ax_ray[end-1][ht])
    return s


def _mag(lens_package):
    """ the magnification of the input paraxial lens over the specified range

        Args:
            see description in __decode_lens__
    """
    parax_model, bgn, end = __decode_lens__(lens_package)
    ax_ray = parax_model.ax
    m = ax_ray[bgn][slp]/ax_ray[end][slp]
    return m


[docs]def cassegrain(lens_package): """ calculate the conic constants for a cassegrain telescope Args: lens_package: a tuple or a |ParaxialModel|. If it's a tuple: - the first element is a |ParaxialModel| - the second element is a tuple with the begining and ending indicies into lens model lists Returns: the conic constants of the primary and secondary mirrors """ m = _mag(lens_package) k_pri = -1.0 k_sec = -4.0*m/(m - 1.0)**2 - 1.0 return k_pri, k_sec
[docs]def dall_kirkham(lens_package): """ calculate the conic constants for a dall-kirkham telescope Args: lens_package: a tuple or a |ParaxialModel|. If it's a tuple: - the first element is a |ParaxialModel| - the second element is a tuple with the begining and ending indicies into lens model lists Returns: the conic constants of the primary and secondary mirrors """ m = _mag(lens_package) s = _separation_ratio(lens_package) k_pri = (s*(m - 1.)*(m + 1.)**2)/((m + s)*m**3) - 1. k_sec = 0.0 return k_pri, k_sec
[docs]def ritchey_chretien(lens_package): """ calculate the conic constants for a ritchey-chretien telescope Args: lens_package: a tuple or a |ParaxialModel|. If it's a tuple: - the first element is a |ParaxialModel| - the second element is a tuple with the begining and ending indicies into lens model lists Returns: the conic constants of the primary and secondary mirrors """ m = _mag(lens_package) s = _separation_ratio(lens_package) k_pri = -2.0*s/m**3 - 1.0 k_sec = -(4.0*m*(m - 1.0) + 2.0*(m + s))/(m - 1.0)**3 - 1.0 return k_pri, k_sec
[docs]def spheres(lens_package): """ function to revert the conic constants to spherical surfaces Args: lens_package: a tuple or a |ParaxialModel|. If it's a tuple: - the first element is a |ParaxialModel| - the second element is a tuple with the begining and ending indicies into lens model lists Returns: the conic constants of the primary and secondary mirrors """ k_pri = 0.0 k_sec = 0.0 return k_pri, k_sec