ConicSag#
- class optika.sags.ConicSag(radius=<Quantity inf mm>, conic=<Quantity 0.>, *, transformation=None, parameters_slope_error=None, parameters_roughness=None, parameters_microroughness=None)[source]#
Bases:
AbstractConicSagSurface of revolution of a conic section
The sag (\(z\) coordinate) of a conic sag function is calculated using the expression
\[z(x, y) = \frac{c (x^2 + y^2)}{1 + \sqrt{1 - c^2 (1 + k) (x^2 + y^2)}}\]where \(c\) is the
curvature, \(x,y\), are the 2D components of the evaluation point. and \(k\) is theconicconstant. See the table below for the meaning of the conic constant.conic constant
conic section type
\(k < -1\)
hyperbola
\(k = -1\)
parabola
\(-1 < k < 0\)
ellipse
\(k = 0\)
sphere
\(k > 0\)
oblate ellipsoid
Examples
Plot a slice through the sag surface
import matplotlib.pyplot as plt import astropy.units as u import astropy.visualization import named_arrays as na import optika sag = optika.sags.ConicSag( radius=100 * u.mm, conic=na.ScalarArray( ndarray=[-1.5, -1, -0.5, 0, 0.5] * u.dimensionless_unscaled, axes="conic", ) ) position = na.Cartesian3dVectorArray( x=na.linspace(-90, 90, axis="x", num=101) * u.mm, y=0 * u.mm, z=0 * u.mm ) z = sag(position) with astropy.visualization.quantity_support(): plt.figure() plt.gca().set_aspect("equal") na.plt.plot(position.x, z, axis="x", label=sag.conic) plt.legend(title="conic constant")
Attributes
The conic constant of this conic section.
The microroughness parameters for this sag profile.
The roughness parameters for this sag profile.
The slope error parameters for this sag profile.
The effective radius of this conic section.
The array shape of this object.
The transformation between the surface coordinate system and the sag coordinate system.
Methods
__init__([radius, conic, transformation, ...])intercept(rays)A set of new rays with the same direction as the input rays, but with the
optika.rays.RayVectorArray.positionupdated to their interception point with this sag function.normal(position)The vector perpendicular to the surface at the given position.
propagate_rays(rays)For the given input rays, calculate new rays based off of their interation with this object.
to_string([prefix])Public-facing version of the
__repr__method that allows for defining a prefix string, which can be used to calculate how much whitespace to add to the beginning of each line of the result.Inheritance Diagram

- Parameters:
radius (Quantity | AbstractScalar)
conic (float | AbstractScalar)
transformation (None | AbstractTransformation)
parameters_slope_error (None | SlopeErrorParameters)
parameters_roughness (None | RoughnessParameters)
parameters_microroughness (None | RoughnessParameters)
- intercept(rays)#
A set of new rays with the same direction as the input rays, but with the
optika.rays.RayVectorArray.positionupdated to their interception point with this sag function.- Parameters:
rays (AbstractRayVectorArray) – input rays that will intercept this sag function
- Return type:
- normal(position)#
The vector perpendicular to the surface at the given position.
- Parameters:
position (AbstractCartesian3dVectorArray) – The location on the surface to evaluate the normal vector
- Return type:
- propagate_rays(rays)#
For the given input rays, calculate new rays based off of their interation with this object.
- Parameters:
rays (AbstractRayVectorArray) – a set of input rays that will interact with this object
- Return type:
- to_string(prefix=None)#
Public-facing version of the
__repr__method that allows for defining a prefix string, which can be used to calculate how much whitespace to add to the beginning of each line of the result.
- conic: float | AbstractScalar = <Quantity 0.>#
The conic constant of this conic section.
- parameters_microroughness: None | RoughnessParameters = None#
The microroughness parameters for this sag profile.
- parameters_roughness: None | RoughnessParameters = None#
The roughness parameters for this sag profile.
- parameters_slope_error: None | SlopeErrorParameters = None#
The slope error parameters for this sag profile.
- radius: Quantity | AbstractScalar = <Quantity inf mm>#
The effective radius of this conic section.
- transformation: None | AbstractTransformation = None#
The transformation between the surface coordinate system and the sag coordinate system.