Beispiel #1
0
 def test_real_similar_to_parax(self, n=100, e=1e-3):
     y0p = np.random.randn(n, 2)*e
     u0p = np.random.randn(n, 2)*e
     y0r = np.hstack((y0p, np.ones((n, 1))*-self.s.distance))
     u0r = np.hstack((sinarctan(u0p), np.zeros((n, 1))))
     u0r[:, 2] = np.sqrt(1 - np.square(u0p).sum(1))
     yup, np_ = self.s.propagate_paraxial(np.hstack((y0p, u0p)).T, 1., 1.)
     yp, up = np.hsplit(yup.T, 2)
     # y0r, u0r = self.s.to_normal(y0r, u0r)
     yr, ur, nr, tr = self.s.propagate(y0r, u0r, 1., 1.)
     # yr, ur = self.s.from_normal(yr, ur)
     yr, ur = self.sa.to_axis(yr, ur)
     nptest.assert_allclose(nr, np_, rtol=e**2, atol=3e-8)
     nptest.assert_allclose(yr[:, :2], yp, rtol=e**2, atol=3e-8)
     nptest.assert_allclose(tanarcsin(ur), up/np_, rtol=e**2, atol=3e-8)
Beispiel #2
0
 def test_real_similar_to_parax(self, n=100, e=1e-3):
     y0p = np.random.randn(n, 2) * e
     u0p = np.random.randn(n, 2) * e
     y0r = np.hstack((y0p, np.ones((n, 1)) * -self.s.distance))
     u0r = np.hstack((sinarctan(u0p), np.zeros((n, 1))))
     u0r[:, 2] = np.sqrt(1 - np.square(u0p).sum(1))
     yup, np_ = self.s.propagate_paraxial(np.hstack((y0p, u0p)).T, 1., 1.)
     yp, up = np.hsplit(yup.T, 2)
     # y0r, u0r = self.s.to_normal(y0r, u0r)
     yr, ur, nr, tr = self.s.propagate(y0r, u0r, 1., 1.)
     # yr, ur = self.s.from_normal(yr, ur)
     yr, ur = self.sa.to_axis(yr, ur)
     nptest.assert_allclose(nr, np_, rtol=e**2, atol=3e-8)
     nptest.assert_allclose(yr[:, :2], yp, rtol=e**2, atol=3e-8)
     nptest.assert_allclose(tanarcsin(ur), up / np_, rtol=e**2, atol=3e-8)
Beispiel #3
0
 def test_paraxial(self):
     p = ParaxialTrace(self.s)
     #print(str(p))
     nptest.assert_allclose(p.u[0, 0], 0)
     nptest.assert_allclose(p.u[0, 1], tanarcsin(self.s.object.angle))
     nptest.assert_allclose(p.y[self.s.stop, 0],
             self.s[self.s.stop].radius)
     nptest.assert_allclose(p.y[self.s.stop, 1], 0, atol=1e-9)
     nptest.assert_allclose(p.working_f_number[1], 4, rtol=1e-2)
     nptest.assert_allclose(p.focal_length[1], 50, rtol=1e-3)
     nptest.assert_allclose(p.magnification[0], 0, rtol=1e-3)
     nptest.assert_allclose(p.numerical_aperture[1], .124, rtol=1e-3)
     p.update_conjugates()
     self.s.image.na = .125
     p.update_stop("image")
     p = ParaxialTrace(self.s)
     p.update_conjugates()
     print(system_to_yaml(self.s))
     print(str(p))
 def test_paraxial(self):
     p = ParaxialTrace(self.s)
     # print(str(p))
     nptest.assert_allclose(p.u[0, 0], 0)
     nptest.assert_allclose(p.u[0, 1],
                            p.n[0] * tanarcsin(self.s.object.angle))
     nptest.assert_allclose(p.y[self.s.stop, 0],
                            self.s[self.s.stop].radius,
                            rtol=1e-2)
     nptest.assert_allclose(p.y[self.s.stop, 1], 0, atol=1e-9)
     nptest.assert_allclose(p.working_f_number[1],
                            -self.s.image.pupil.fno,
                            rtol=1e-2)
     nptest.assert_allclose(p.working_f_number[1], 4, rtol=1e-2)
     nptest.assert_allclose(p.focal_length[1], 50, rtol=5e-3)
     nptest.assert_allclose(p.magnification[0], 0, rtol=1e-3)
     nptest.assert_allclose(p.numerical_aperture[1], .124, rtol=5e-3)
     p.update_conjugates()
     self.s.image.na = .125
     p.update_stop("image")
     p = ParaxialTrace(self.s)
     p.update_conjugates()
     print(system_to_yaml(self.s))
     print(str(p))
Beispiel #5
0
 def assert_hits(self, y, u, z, yp):
     y1 = y[:, :2] + (z - y[:, 2])*tanarcsin(u)
     nptest.assert_allclose(y1, yp, atol=1e-14, rtol=1e-2)