#!/usr/bin/env python # coding: utf-8 # In[1]: get_ipython().run_line_magic('pylab', 'inline') import warnings import numpy as np import matplotlib.pyplot as plt import rayopt as ro # ignore matplotlib and numpy warning each other warnings.simplefilter("ignore", FutureWarning) # ignore floating point exceptions np.seterr(divide="ignore", invalid="ignore") # by default only print 4 significant digits np.set_printoptions(precision=4) # In[82]: description = "Nikkor-Z-58mmf0.95-WO2019229849A1" columns = "type distance roc diameter material" # Three different takes on dimensions text1 = """ O 0 0 100.0 AIR S 5.0 108.488 66.0 1.902650/35.77 S 7.65 -848.550 63.9 1.552981/55.07 S 2.8 50.252 56.9 AIR S 18.12 -60.720 56.9 1.612660/44.46 S 2.8 2497.5 63.9 1.59319/67.9 S 9.15 -77.239 63.9 AIR S 0.40 113.763 69.4 1.8485/43.79 S 10.95 -178.06 69.4 AIR S 0.4 70.659 63.2 1.59319/67.9 S 9.74 -1968.5 63.2 AIR S 0.2 289.687 59.7 1.59319/67.9 S 8.0 -97.087 57.6 1.738/32.33 S 2.8 47.074 48.6 AIR A 8.7 0 45.8 AIR S 5.29 -95.230 47.2 1.612660/44.46 S 2.2 41.204 47.2 1.497820/82.57 S 11.55 -273.092 47.2 AIR S 0.2 76.173 50.0 1.883/40.69 S 9.5 -101.575 50.0 AIR S 0.20 176.128 45.8 1.953750/32.33 S 7.45 -67.221 44.4 1.738/32.33 S 1.8 55.51 38.2 AIR S 2.68 71.413 38.2 1.883/40.69 S 6.35 -115.025 38.2 1.69895/30.13 S 1.81 46.943 38.2 AIR S 0.8 55.281 38.2 1.883/40.69 S 9.11 -144.041 38.2 1.765538/46.76 S 3.0 52.858 37.5 AIR S 14.5 0 43.4 1.5168/64.14 S 1.6 0 43.4 AIR I 1.0 0 43.4 AIR """ text2 = """ O 0 0 100.0 AIR S 5.0 108.488 65.6 1.902650/35.77 S 7.65 -848.550 64.6 1.552981/55.07 S 2.8 50.252 56.9 AIR S 18.12 -60.720 57.6 1.612660/44.46 S 2.8 2497.5 64.2 1.59319/67.9 S 9.15 -77.239 64.2 AIR S 0.40 113.763 69.4 1.8485/43.79 S 10.95 -178.06 69.4 AIR S 0.4 70.659 63.2 1.59319/67.9 S 9.74 -1968.5 63.2 AIR S 0.2 289.687 59.7 1.59319/67.9 S 8.0 -97.087 58.0 1.738/32.33 S 2.8 47.074 49.0 AIR A 8.7 0 46.5 AIR S 5.29 -95.230 47.9 1.612660/44.46 S 2.2 41.204 48.6 1.497820/82.57 S 11.55 -273.092 48.6 AIR S 0.2 76.173 50.0 1.883/40.69 S 9.5 -101.575 50.0 AIR S 0.20 176.128 45.8 1.953750/32.33 S 7.45 -67.221 44.4 1.738/32.33 S 1.8 55.51 38.5 AIR S 2.68 71.413 38.5 1.883/40.69 S 6.35 -115.025 38.5 1.69895/30.13 S 1.81 46.943 38.5 AIR S 0.8 55.281 38.2 1.883/40.69 S 9.11 -144.041 38.2 1.765538/46.76 S 3.0 52.858 37.5 AIR S 14.5 0 43.4 1.5168/64.14 S 1.6 0 43.4 AIR I 1.0 0 43.4 AIR """ text3 = """ O 0 0 100.0 AIR S 5.0 108.488 65.1 1.902650/35.77 S 7.65 -848.550 64.1 1.552981/55.07 S 2.8 50.252 56.5 AIR S 18.12 -60.720 57.2 1.612660/44.46 S 2.8 2497.5 63.7 1.59319/67.9 S 9.15 -77.239 63.7 AIR S 0.40 113.763 68.9 1.8485/43.79 S 10.95 -178.06 68.9 AIR S 0.4 70.659 62.7 1.59319/67.9 S 9.74 -1968.5 62.7 AIR S 0.2 289.687 59.2 1.59319/67.9 S 8.0 -97.087 57.5 1.738/32.33 S 2.8 47.074 48.6 AIR A 8.7 0 45.85 AIR S 5.29 -95.230 47.5 1.612660/44.46 S 2.2 41.204 48.2 1.497820/82.57 S 11.55 -273.092 48.2 AIR S 0.2 76.173 49.6 1.883/40.69 S 9.5 -101.575 49.6 AIR S 0.20 176.128 45.5 1.953750/32.33 S 7.45 -67.221 44.1 1.738/32.33 S 1.8 55.51 38.2 AIR S 2.68 71.413 38.2 1.883/40.69 S 6.35 -115.025 38.2 1.69895/30.13 S 1.81 46.943 37.9 AIR S 0.8 55.281 37.9 1.883/40.69 S 9.11 -144.041 37.9 1.765538/46.76 S 3.0 52.858 37.2 AIR S 14.5 0 43.1 1.5168/64.14 S 1.6 0 43.1 AIR I 1.0 0 43.4 AIR """ text4 = """ O 0 0 100.0 AIR S 5.0 108.488 66.5 1.902650/35.77 S 7.65 -848.550 65.3 1.552981/55.07 S 2.8 50.252 58.3 AIR S 18.12 -60.720 58.5 1.612660/44.46 S 2.8 2497.5 65.3 1.59319/67.9 S 9.15 -77.239 65.3 AIR S 0.40 113.763 71.0 1.8485/43.79 S 10.95 -178.06 71.0 AIR S 0.4 70.659 64.5 1.59319/67.9 S 9.74 -1968.5 64.5 AIR S 0.2 289.687 60.5 1.59319/67.9 S 8.0 -97.087 59.2 1.738/32.33 S 2.8 47.074 49.8 AIR A 8.7 0 47.7 AIR S 5.29 -95.230 50.0 1.612660/44.46 S 2.2 41.204 50.0 1.497820/82.57 S 11.55 -273.092 48.1 AIR S 0.2 76.173 51.0 1.883/40.69 S 9.5 -101.575 49.4 AIR S 0.20 176.128 46.3 1.953750/32.33 S 7.45 -67.221 45.1 1.738/32.33 S 1.8 55.51 39.1 AIR S 2.68 71.413 39.1 1.883/40.69 S 6.35 -115.025 39.1 1.69895/30.13 S 1.81 46.943 39.1 AIR S 0.8 55.281 38.5 1.883/40.69 S 9.11 -144.041 38.0 1.765538/46.76 S 3.0 52.858 38.0 AIR S 14.5 0 43.4 1.5168/64.14 S 1.6 0 43.4 AIR I 1.0 0 43.4 AIR """ # A was 45.8 - changed to 44.6 to get F 0.9799 text5 = """ O 0 0 100.0 AIR S 5.0 108.488 64.8 1.902650/35.77 S 7.65 -848.550 63.4 1.552981/55.07 S 2.8 50.252 56.0 AIR S 18.12 -60.720 56.5 1.612660/44.46 S 2.8 2497.5 63.4 1.59319/67.9 S 9.15 -77.239 63.4 AIR S 0.40 113.763 68.3 1.8485/43.79 S 10.95 -178.06 68.3 AIR S 0.4 70.659 62.5 1.59319/67.9 S 9.74 -1968.5 62.5 AIR S 0.2 289.687 58.7 1.59319/67.9 S 8.0 -97.087 57.2 1.738/32.33 S 2.8 47.074 48.3 AIR A 8.7 0 44.6 AIR S 5.29 -95.230 48.1 1.612660/44.46 S 2.2 41.204 48.1 1.497820/82.57 S 11.55 -273.092 48.1 AIR S 0.2 76.173 49.4 1.883/40.69 S 9.5 -101.575 49.4 AIR S 0.20 176.128 45.3 1.953750/32.33 S 7.45 -67.221 44.1 1.738/32.33 S 1.8 55.51 38.1 AIR S 2.68 71.413 38.1 1.883/40.69 S 6.35 -115.025 38.1 1.69895/30.13 S 1.81 46.943 38.1 AIR S 0.8 55.281 38.0 1.883/40.69 S 9.11 -144.041 37.6 1.765538/46.76 S 3.0 52.858 37.1 AIR S 14.5 0 42.9 1.5168/64.14 S 1.6 0 42.9 AIR I 1.0 0 43.4 AIR """ # 2 has error text=text5 # In[83]: # wavelengths=[588e-9], s = ro.system_from_text(text, columns.split(), description=description) s.object.angle = np.deg2rad(20.0) ## Aspheric data s[1].conic = 0.0 s[1].aspherics = [0, -3.82177E-07, -6.06486E-11, -3.80172E-15, -1.32266E-18] s[20].conic = 0.0 s[20].aspherics = [0, -1.15028E-06, -4.51771E-10, 2.72670E-13, -7.66812E-17] s[28].conic = 0.0 s[28].aspherics = [0, 3.18645E-06, -1.14718E-08, 7.74567E-11, -2.24225E-13, 3.34790E-16, -1.70470E-19] s.fields = 0, .7, 1. # In[84]: s.update() #s.paraxial.resize() print(s) # In[85]: ro.Analysis(s) # In[ ]: