%pylab inline
import numpy as np
import matplotlib.pyplot as plt
from rayopt import system_from_text, Analysis, GeometricTrace, ParaxialTrace, InfiniteConjugate
np.set_printoptions(precision=3)
Populating the interactive namespace from numpy and matplotlib
columns = "type roc distance diameter material".split()
text = """
O 15 0 19 AIR
S 21.1576 1 16.08 N-K5
S 4.4088 0.7 8.32 AIR
S 6.124 1.6598 7.8 N-K5
S 2.6351 0.6 5.08 AIR
S -4.9887 2.8079 3.88 N-K5
S -2.9312 0.6898 3.88 SF4
S -3.0217 0.4 3.88 N-PSK3
S 2.3857 0.6229 2.88 AIR
S 22.0209 0.8744 2.96 SF4
S -8.2506 0.7 2.96 AIR
S 101.6268 0.8566 2.7 N-SSK5
S -12.9224 0.7 2.7 AIR
S 7.5022 0.4212 2.36 SF4
S 29.4757 0.5714 2.18 AIR
S 7.694 0.2557 2 SF5
S 19.1201 0.4131 2 AIR
A 0 0.5462 1.34 AIR
S -3.7912 0.1681 1.5 SF5
S 4.017 0.2042 1.72 N-LAK7
S -3.5074 0.233 1.72 AIR
S 9.6933 0.0496 1.92 N-LAK7
S -1.6179 0.6446 1.92 SF4
S -6.4878 0.2 2.14 AIR
S 3.5035 0.015 2.14 N-LAK7
S -68.3415 0.5518 2.14 AIR
I 0 2.2162 0 AIR
"""
_text = """
O 0 0 1 AIR
S 18.5303 0.5 6.85 K5
S 3.4238 0.7 3.285 AIR
S 0. 2.709 3.285 K5
S 6.0491 0.6 2.25 AIR
S -5.3944 1.103 2.025 K5
S -2.9078 0.589 2.075 SF1
S -2.8264 0.41 2.075 PK2
S 2.2067 0.377 1.5 AIR
S 0. 0.61 1.55 SF3
S -5.1155 0.488 1.55 AIR
S 2.9583 0.516 1.38 SSKN5
S 3.7464 0.419 1.3 AIR
S 5.1404 0.75 1.13 SF3
S 8.9895 0.399 1.13 AIR
S -7.4972 0.637 1.13 SF5
S -5.3045 0.459 1.13 AIR
A 0. 0.292 0.635 AIR
S -4.0698 0.353 0.76 SF8
S 6.9012 0.204 1.01 LAKN7
S -3.8158 0.504 1.01 AIR
S 8.6763 0.02 1.1 LAKN7
S -1.5178 0.626 1.1 SF3
S -5.9377 0.382 1.26 AIR
S 2.4507 0.024 1.36 LAKN7
S 16.2302 0.506 1.36 AIR
I 0. 2.216 0. AIR
"""
s = system_from_text(text, columns, scale=25.4e-3,
description="wideangle 210deg laikin 2nd ed")
s.stop = 18
s.object = InfiniteConjugate(angle_deg=105, projection="equisolid",
pupil=dict(radius=.1, aim=True))
s.fields = 0., .7, .9, 1.
s.rescale()
s.update()
print(s)
System: wideangle 210deg laikin 2nd ed Scale: 1.0 mm Wavelengths: 588, 656, 486 nm Fields: 0, 0.7, 0.9, 1 Object: Semi-Angle: 105 deg Projection: equisolid Pupil: Pupil Distance: 134.389 Refractive Index: 1.00028 Aim: True Radius: 2.54 Image: Radius: 0 Update Radius: True Pupil: Pupil Distance: -92.883 Refractive Index: 1.00028 Update Radius: True Radius: 26.2964 Stop: 18 Elements: # T Distance Rad Curv Diameter Material n nd Vd 0 S 0 381 482.6 basic/air 1.000 1.000 89.30 1 S 25.4 537.4 408.43 SCHOTT/N-K5 1.522 1.522 59.48 2 S 17.78 112 211.33 basic/air 1.000 1.000 89.30 3 S 42.159 155.5 198.12 SCHOTT/N-K5 1.522 1.522 59.48 4 S 15.24 66.93 129.03 basic/air 1.000 1.000 89.30 5 S 71.321 -126.7 98.552 SCHOTT/N-K5 1.522 1.522 59.48 6 S 17.521 -74.45 98.552 SCHOTT/SF4 1.755 1.755 27.58 7 S 10.16 -76.75 98.552 SCHOTT/N-PSK3 1.552 1.552 63.46 8 S 15.822 60.6 73.152 basic/air 1.000 1.000 89.30 9 S 22.21 559.3 75.184 SCHOTT/SF4 1.755 1.755 27.58 10 S 17.78 -209.6 75.184 basic/air 1.000 1.000 89.30 11 S 21.758 2581 68.58 SCHOTT/N-SSK5 1.658 1.658 50.88 12 S 17.78 -328.2 68.58 basic/air 1.000 1.000 89.30 13 S 10.698 190.6 59.944 SCHOTT/SF4 1.755 1.755 27.58 14 S 14.514 748.7 55.372 basic/air 1.000 1.000 89.30 15 S 6.4948 195.4 50.8 SCHOTT/SF5 1.673 1.673 32.21 16 S 10.493 485.7 50.8 basic/air 1.000 1.000 89.30 17 S 13.873 inf 34.036 basic/air 1.000 1.000 89.30 18 S 4.2697 -96.3 38.1 SCHOTT/SF5 1.673 1.673 32.21 19 S 5.1867 102 43.688 SCHOTT/N-LAK7 1.652 1.652 58.52 20 S 5.9182 -89.09 43.688 basic/air 1.000 1.000 89.30 21 S 1.2598 246.2 48.768 SCHOTT/N-LAK7 1.652 1.652 58.52 22 S 16.373 -41.09 48.768 SCHOTT/SF4 1.755 1.755 27.58 23 S 5.08 -164.8 54.356 basic/air 1.000 1.000 89.30 24 S 0.381 88.99 54.356 SCHOTT/N-LAK7 1.652 1.652 58.52 25 S 14.016 -1736 54.356 basic/air 1.000 1.000 89.30 26 S 56.291 inf 0 basic/air 1.000 1.000 89.30
/home/rj/work/nist/pyrayopt/rayopt/utils.py:56: RuntimeWarning: invalid value encountered in sqrt u1 = u/np.sqrt(1 - u2)
a = Analysis(s)
/home/rj/work/nist/pyrayopt/rayopt/utils.py:56: RuntimeWarning: invalid value encountered in sqrt u1 = u/np.sqrt(1 - u2) /home/rj/work/nist/pyrayopt/rayopt/paraxial_trace.py:186: RuntimeWarning: divide by zero encountered in true_divide return self.n[(0, -2), ]/(2*na) /home/rj/work/nist/pyrayopt/rayopt/paraxial_trace.py:191: RuntimeWarning: divide by zero encountered in true_divide return 1.22*self.wavelength/(2*na)/self.system.scale /home/rj/work/nist/pyrayopt/rayopt/elements.py:497: RuntimeWarning: invalid value encountered in sqrt g = np.sqrt(np.square(d) - e*f) /home/rj/work/nist/pyrayopt/rayopt/elements.py:368: RuntimeWarning: invalid value encountered in sqrt g = -a + np.sign(mu)*np.sqrt(np.square(a) - b) /home/rj/work/nist/pyrayopt/rayopt/elements.py:208: RuntimeWarning: invalid value encountered in less_equal good = np.square(y[:, :2]).sum(1) <= self.radius**2 /home/rj/work/nist/pyrayopt/rayopt/analysis.py:382: RuntimeWarning: divide by zero encountered in true_divide xd = (a[1] - h)/h
System: wideangle 210deg laikin 2nd ed Scale: 1.0 mm Wavelengths: 588, 656, 486 nm Fields: 0, 0.7, 0.9, 1 Object: Semi-Angle: 105 deg Projection: equisolid Pupil: Pupil Distance: 134.389 Refractive Index: 1.00028 Aim: True Radius: 2.54 Image: Radius: 0 Update Radius: True Pupil: Pupil Distance: -92.883 Refractive Index: 1.00028 Update Radius: True Radius: 26.2964 Stop: 18 Elements: # T Distance Rad Curv Diameter Material n nd Vd 0 S 0 381 482.6 basic/air 1.000 1.000 89.30 1 S 25.4 537.4 408.43 SCHOTT/N-K5 1.522 1.522 59.48 2 S 17.78 112 211.33 basic/air 1.000 1.000 89.30 3 S 42.159 155.5 198.12 SCHOTT/N-K5 1.522 1.522 59.48 4 S 15.24 66.93 129.03 basic/air 1.000 1.000 89.30 5 S 71.321 -126.7 98.552 SCHOTT/N-K5 1.522 1.522 59.48 6 S 17.521 -74.45 98.552 SCHOTT/SF4 1.755 1.755 27.58 7 S 10.16 -76.75 98.552 SCHOTT/N-PSK3 1.552 1.552 63.46 8 S 15.822 60.6 73.152 basic/air 1.000 1.000 89.30 9 S 22.21 559.3 75.184 SCHOTT/SF4 1.755 1.755 27.58 10 S 17.78 -209.6 75.184 basic/air 1.000 1.000 89.30 11 S 21.758 2581 68.58 SCHOTT/N-SSK5 1.658 1.658 50.88 12 S 17.78 -328.2 68.58 basic/air 1.000 1.000 89.30 13 S 10.698 190.6 59.944 SCHOTT/SF4 1.755 1.755 27.58 14 S 14.514 748.7 55.372 basic/air 1.000 1.000 89.30 15 S 6.4948 195.4 50.8 SCHOTT/SF5 1.673 1.673 32.21 16 S 10.493 485.7 50.8 basic/air 1.000 1.000 89.30 17 S 13.873 inf 34.036 basic/air 1.000 1.000 89.30 18 S 4.2697 -96.3 38.1 SCHOTT/SF5 1.673 1.673 32.21 19 S 5.1867 102 43.688 SCHOTT/N-LAK7 1.652 1.652 58.52 20 S 5.9182 -89.09 43.688 basic/air 1.000 1.000 89.30 21 S 1.2598 246.2 48.768 SCHOTT/N-LAK7 1.652 1.652 58.52 22 S 16.373 -41.09 48.768 SCHOTT/SF4 1.755 1.755 27.58 23 S 5.08 -164.8 54.356 basic/air 1.000 1.000 89.30 24 S 0.381 88.99 54.356 SCHOTT/N-LAK7 1.652 1.652 58.52 25 S 14.016 -1736 54.356 basic/air 1.000 1.000 89.30 26 S 56.359 inf 0 basic/air 1.000 1.000 89.30 lagrange: nan track length: 378.09 object, image height: [ nan nan] front, back focal length (from PP): [ nan nan] entry, exit pupil height: [ nan nan] entry, exit pupil distance: [ nan nan] front, back focal distance: [ nan nan] front, back principal distance: [ nan nan] front, back nodal distance: [ nan nan] front, back numerical aperture: [ 0. 0.144] front, back f number: [ nan nan] front, back working f number: [ inf 3.474] front, back airy radius: [ inf 0.002] transverse, angular magnification: [ -0. nan] # T path n axial y axial nu chief y chief nu 0 S 0 1 2.54 0 nan 1 1 S 25.4 1.522 2.54 -0.002468 nan nan 2 S 43.18 1 2.511 0.009242 nan nan 3 S 85.34 1.522 2.901-0.0004961 nan nan 4 S 100.6 1 2.896 0.0221 nan nan 5 S 171.9 1.522 4.471 0.04052 nan nan 6 S 189.4 1.755 4.938 0.05596 nan nan 7 S 199.6 1.552 5.262 0.04205 nan nan 8 S 215.4 1 5.69 0.09389 nan nan 9 S 237.6 1.755 7.775 0.08339 nan nan 10 S 255.4 1 8.62 0.05234 nan nan 11 S 277.1 1.658 9.758 0.04986 nan nan 12 S 294.9 1 10.29 0.02922 nan nan 13 S 305.6 1.755 10.61 -0.0128 nan nan 14 S 320.1 1 10.5 -0.002211 nan nan 15 S 326.6 1.673 10.48 -0.03829 nan nan 16 S 337.1 1 10.24 -0.0241 nan nan 17 S 351 1 9.91 -0.0241 nan nan 18 S 355.3 1.673 9.808 0.04438 nan nan 19 S 360.5 1.652 9.945 0.04644 nan nan 20 S 366.4 1 10.11 -0.02749 nan nan 21 S 367.6 1.652 10.08 -0.05414 nan nan 22 S 384 1.755 9.54 -0.03009 nan nan 23 S 389.1 1 9.453 -0.0734 nan nan 24 S 389.5 1.652 9.425 -0.1424 nan nan 25 S 403.5 1 8.217 -0.1455 nan nan 26 S 459.8 1 0.03062 -0.1455 nan nan # T SA3 CMA3 AST3 PTZ3 DIS3 TACHC TCHC 0 S nan nan nan nan nan nan nan 1 S nan nan nan nan nan nan nan 2 S nan nan nan nan nan nan nan 3 S nan nan nan nan nan nan nan 4 S nan nan nan nan nan nan nan 5 S nan nan nan nan nan nan nan 6 S nan nan nan nan nan nan nan 7 S nan nan nan nan nan nan nan 8 S nan nan nan nan nan nan nan 9 S nan nan nan nan nan nan nan 10 S nan nan nan nan nan nan nan 11 S nan nan nan nan nan nan nan 12 S nan nan nan nan nan nan nan 13 S nan nan nan nan nan nan nan 14 S nan nan nan nan nan nan nan 15 S nan nan nan nan nan nan nan 16 S nan nan nan nan nan nan nan 17 S nan nan nan nan nan nan nan 18 S nan nan nan nan nan nan nan 19 S nan nan nan nan nan nan nan 20 S nan nan nan nan nan nan nan 21 S nan nan nan nan nan nan nan 22 S nan nan nan nan nan nan nan 23 S nan nan nan nan nan nan nan 24 S nan nan nan nan nan nan nan 25 S nan nan nan nan nan nan nan 26 S nan nan nan nan nan nan nan nan nan nan nan nan nan nan
%prun Analysis(s)
def f():
s.update()
g = GeometricTrace(s)
g.rays_point((0, 1.), nrays=1000)
%prun [f() for i in range(10)]