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)
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)
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))
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)