Esempio n. 1
0
    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])
Esempio n. 2
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)