def test_curved_arc_estimate_tan_diff(self): arc_tan_diff = CurvedArcTanDiff() lens_model_list = ['SIE'] lens = LensModel(lens_model_list=lens_model_list) arc = LensModel(lens_model_list=['CURVED_ARC_TAN_DIFF']) theta_E = 4 # here we model an off-axis ellisoid relative to the x-axis e1, e2 = 0., -0.1 x_0, y_0 = 5, 0 kwargs_lens = [{ 'theta_E': theta_E, 'e1': e1, 'e2': e2, 'center_x': 0, 'center_y': 0 }] ext = LensModelExtensions(lensModel=lens) kwargs_arc = ext.curved_arc_estimate(x_0, y_0, kwargs_lens, tan_diff=True, smoothing_3rd=0.01) theta_E_sie, e1_sie, e2_sie, kappa_ext, center_x_sis, center_y_sis = arc_tan_diff.stretch2sie_mst( **kwargs_arc) print(theta_E_sie, e1_sie, e2_sie, center_x_sis, center_y_sis) npt.assert_almost_equal(e2_sie - e2, 0, decimal=1) npt.assert_almost_equal(e1_sie, e1, decimal=3) # here we model an off-axis ellisoid relative to the y-axis e1, e2 = 0.1, 0. x_0, y_0 = 0, 5 kwargs_lens = [{ 'theta_E': theta_E, 'e1': e1, 'e2': e2, 'center_x': 0, 'center_y': 0 }] ext = LensModelExtensions(lensModel=lens) kwargs_arc = ext.curved_arc_estimate(x_0, y_0, kwargs_lens, tan_diff=True, smoothing_3rd=0.01) theta_E_sie, e1_sie, e2_sie, kappa_ext, center_x_sis, center_y_sis = arc_tan_diff.stretch2sie_mst( **kwargs_arc) print(theta_E_sie, e1_sie, e2_sie, center_x_sis, center_y_sis) npt.assert_almost_equal(e1_sie - e1, 0, decimal=1) npt.assert_almost_equal(e2_sie, e2, decimal=3) x, y = util.make_grid(numPix=100, deltapix=0.1) kappa = lens.kappa(x, y, kwargs_lens) kappa_arc = arc.kappa(x, y, [kwargs_arc])
def test_curved_arc_finite_area(self): lens_model_list = ['SPP'] lens = LensModel(lens_model_list=lens_model_list) arc = LensModel(lens_model_list=['CURVED_ARC_SPP']) theta_E = 4 gamma = 2. kwargs_lens = [{ 'theta_E': theta_E, 'gamma': gamma, 'center_x': 0, 'center_y': 0 }] ext = LensModelExtensions(lensModel=lens) x_0, y_0 = 5, 0 kwargs_arc = ext.curved_arc_estimate(x_0, y_0, kwargs_lens) dr = 0.001 kwargs_arc_finite = ext.curved_arc_finite_area(x_0, y_0, kwargs_lens, dr) npt.assert_almost_equal(kwargs_arc['direction'], kwargs_arc_finite['direction'], decimal=3) npt.assert_almost_equal(kwargs_arc['radial_stretch'], kwargs_arc_finite['radial_stretch'], decimal=3) npt.assert_almost_equal(kwargs_arc['tangential_stretch'], kwargs_arc_finite['tangential_stretch'], decimal=3) npt.assert_almost_equal(kwargs_arc['curvature'], kwargs_arc_finite['curvature'], decimal=3)
def _test_curved_arc_recovery(self, kwargs_arc_init): ext = LensModelExtensions( LensModel(lens_model_list=['CURVED_ARC_TAN_DIFF'])) center_x, center_y = kwargs_arc_init['center_x'], kwargs_arc_init[ 'center_y'] kwargs_arc = ext.curved_arc_estimate(center_x, center_y, [kwargs_arc_init]) lambda_rad, lambda_tan, orientation_angle, dlambda_tan_dtan, dlambda_tan_drad, dlambda_rad_drad, dlambda_rad_dtan, dphi_tan_dtan, dphi_tan_drad, dphi_rad_drad, dphi_rad_dtan = ext.radial_tangential_differentials( center_x, center_y, [kwargs_arc_init]) print(lambda_tan, dlambda_tan_dtan, kwargs_arc_init['dtan_dtan']) npt.assert_almost_equal(kwargs_arc['tangential_stretch'] / kwargs_arc_init['tangential_stretch'], 1, decimal=3) npt.assert_almost_equal(kwargs_arc['radial_stretch'], kwargs_arc_init['radial_stretch'], decimal=3) npt.assert_almost_equal(kwargs_arc['curvature'], kwargs_arc_init['curvature'], decimal=2) npt.assert_almost_equal(dphi_tan_dtan, kwargs_arc_init['curvature'], decimal=2) npt.assert_almost_equal(kwargs_arc['direction'], kwargs_arc_init['direction'], decimal=3) npt.assert_almost_equal(dlambda_tan_dtan / lambda_tan, kwargs_arc_init['dtan_dtan'], decimal=2)
def test_curved_arc_estimate(self): lens_model_list = ['SPP'] lens = LensModel(lens_model_list=lens_model_list) arc = LensModel(lens_model_list=['CURVED_ARC_SPP']) theta_E = 4 gamma = 2. kwargs_lens = [{ 'theta_E': theta_E, 'gamma': gamma, 'center_x': 0, 'center_y': 0 }] ext = LensModelExtensions(lensModel=lens) x_0, y_0 = 5, 0 kwargs_arc = ext.curved_arc_estimate(x_0, y_0, kwargs_lens) theta_E_arc, gamma_arc, center_x_spp_arc, center_y_spp_arc = CurvedArcSPP.stretch2spp( **kwargs_arc) npt.assert_almost_equal(theta_E_arc, theta_E, decimal=4) npt.assert_almost_equal(gamma_arc, gamma, decimal=3) npt.assert_almost_equal(center_x_spp_arc, 0, decimal=3) npt.assert_almost_equal(center_y_spp_arc, 0, decimal=3) x, y = util.make_grid(numPix=10, deltapix=1) alpha_x, alpha_y = lens.alpha(x, y, kwargs_lens) alpha0_x, alpha0_y = lens.alpha(x_0, y_0, kwargs_lens) alpha_x_arc, alpha_y_arc = arc.alpha(x, y, [kwargs_arc]) npt.assert_almost_equal(alpha_x_arc, alpha_x - alpha0_x, decimal=3) npt.assert_almost_equal(alpha_y_arc, alpha_y - alpha0_y, decimal=3) x_0, y_0 = 0., 3 kwargs_arc = ext.curved_arc_estimate(x_0, y_0, kwargs_lens) theta_E_arc, gamma_arc, center_x_spp_arc, center_y_spp_arc = CurvedArcSPP.stretch2spp( **kwargs_arc) print(kwargs_arc) print(theta_E_arc, gamma_arc, center_x_spp_arc, center_y_spp_arc) npt.assert_almost_equal(theta_E_arc, theta_E, decimal=4) npt.assert_almost_equal(gamma_arc, gamma, decimal=3) npt.assert_almost_equal(center_x_spp_arc, 0, decimal=3) npt.assert_almost_equal(center_y_spp_arc, 0, decimal=3) x_0, y_0 = -2, -3 kwargs_arc = ext.curved_arc_estimate(x_0, y_0, kwargs_lens) theta_E_arc, gamma_arc, center_x_spp_arc, center_y_spp_arc = CurvedArcSPP.stretch2spp( **kwargs_arc) npt.assert_almost_equal(theta_E_arc, theta_E, decimal=4) npt.assert_almost_equal(gamma_arc, gamma, decimal=3) npt.assert_almost_equal(center_x_spp_arc, 0, decimal=3) npt.assert_almost_equal(center_y_spp_arc, 0, decimal=3)
def test_arcs_at_image_position(self): # lensing quantities kwargs_spp = { 'theta_E': 1.26, 'gamma': 2., 'e1': 0.1, 'e2': -0.1, 'center_x': 0.0, 'center_y': 0.0 } # parameters of the deflector lens model # the lens model is a supperposition of an elliptical lens model with external shear lens_model_list = ['SPEP'] #, 'SHEAR'] kwargs_lens = [kwargs_spp] #, kwargs_shear] lens_model_class = LensModel(lens_model_list=lens_model_list) lensEquationSolver = LensEquationSolver(lens_model_class) source_x = 0. source_y = 0.05 x_image, y_image = lensEquationSolver.findBrightImage( source_x, source_y, kwargs_lens, numImages=4, min_distance=0.05, search_window=5) arc_model = LensModel(lens_model_list=['CURVED_ARC_SPP', 'SHIFT']) for i in range(len(x_image)): x0, y0 = x_image[i], y_image[i] print(x0, y0, i) ext = LensModelExtensions(lensModel=lens_model_class) kwargs_arc_i = ext.curved_arc_estimate(x0, y0, kwargs_lens) alpha_x, alpha_y = lens_model_class.alpha(x0, y0, kwargs_lens) kwargs_arc = [ kwargs_arc_i, { 'alpha_x': alpha_x, 'alpha_y': alpha_y } ] print(kwargs_arc_i) direction = kwargs_arc_i['direction'] print(np.cos(direction), np.sin(direction)) x, y = util.make_grid(numPix=5, deltapix=0.01) x = x0 y = y0 gamma1_arc, gamma2_arc = arc_model.gamma(x, y, kwargs_arc) gamma1, gamma2 = lens_model_class.gamma(x, y, kwargs_lens) print(gamma1, gamma2) npt.assert_almost_equal(gamma1_arc, gamma1, decimal=3) npt.assert_almost_equal(gamma2_arc, gamma2, decimal=3) theta_E_arc, gamma_arc, center_x_spp_arc, center_y_spp_arc = CurvedArcSPP.stretch2spp( **kwargs_arc_i) print(theta_E_arc, gamma_arc, center_x_spp_arc, center_y_spp_arc) npt.assert_almost_equal(center_x_spp_arc, 0, decimal=3) npt.assert_almost_equal(center_y_spp_arc, 0, decimal=3)