Exemple #1
0
    def __init__(self, light_model_list, smoothing=0.001):
        """

        :param light_model_list: list of light models
        :param smoothing: smoothing factor for certain models (deprecated)
        """
        self.profile_type_list = light_model_list
        self.func_list = []
        for profile_type in light_model_list:
            if profile_type == 'GAUSSIAN':
                from lenstronomy.LightModel.Profiles.gaussian import Gaussian
                self.func_list.append(Gaussian())
            elif profile_type == 'GAUSSIAN_ELLIPSE':
                from lenstronomy.LightModel.Profiles.gaussian import GaussianEllipse
                self.func_list.append(GaussianEllipse())
            elif profile_type == 'ELLIPSOID':
                from lenstronomy.LightModel.Profiles.ellipsoid import Ellipsoid
                self.func_list.append(Ellipsoid())
            elif profile_type == 'MULTI_GAUSSIAN':
                from lenstronomy.LightModel.Profiles.gaussian import MultiGaussian
                self.func_list.append(MultiGaussian())
            elif profile_type == 'MULTI_GAUSSIAN_ELLIPSE':
                from lenstronomy.LightModel.Profiles.gaussian import MultiGaussianEllipse
                self.func_list.append(MultiGaussianEllipse())
            elif profile_type == 'SERSIC':
                from lenstronomy.LightModel.Profiles.sersic import Sersic
                self.func_list.append(Sersic(smoothing=smoothing))
            elif profile_type == 'SERSIC_ELLIPSE':
                from lenstronomy.LightModel.Profiles.sersic import SersicElliptic
                self.func_list.append(
                    SersicElliptic(smoothing=smoothing,
                                   sersic_major_axis=sersic_major_axis_conf))
            elif profile_type == 'CORE_SERSIC':
                from lenstronomy.LightModel.Profiles.sersic import CoreSersic
                self.func_list.append(CoreSersic(smoothing=smoothing))
            elif profile_type == 'SHAPELETS':
                from lenstronomy.LightModel.Profiles.shapelets import ShapeletSet
                self.func_list.append(ShapeletSet())
            elif profile_type == 'SHAPELETS_POLAR':
                from lenstronomy.LightModel.Profiles.shapelets_polar import ShapeletSetPolar
                self.func_list.append(ShapeletSetPolar(exponential=False))
            elif profile_type == 'SHAPELETS_POLAR_EXP':
                from lenstronomy.LightModel.Profiles.shapelets_polar import ShapeletSetPolar
                self.func_list.append(ShapeletSetPolar(exponential=True))
            elif profile_type == 'HERNQUIST':
                from lenstronomy.LightModel.Profiles.hernquist import Hernquist
                self.func_list.append(Hernquist())
            elif profile_type == 'HERNQUIST_ELLIPSE':
                from lenstronomy.LightModel.Profiles.hernquist import HernquistEllipse
                self.func_list.append(HernquistEllipse())
            elif profile_type == 'PJAFFE':
                from lenstronomy.LightModel.Profiles.p_jaffe import PJaffe
                self.func_list.append(PJaffe())
            elif profile_type == 'PJAFFE_ELLIPSE':
                from lenstronomy.LightModel.Profiles.p_jaffe import PJaffe_Ellipse
                self.func_list.append(PJaffe_Ellipse())
            elif profile_type == 'UNIFORM':
                from lenstronomy.LightModel.Profiles.uniform import Uniform
                self.func_list.append(Uniform())
            elif profile_type == 'POWER_LAW':
                from lenstronomy.LightModel.Profiles.power_law import PowerLaw
                self.func_list.append(PowerLaw())
            elif profile_type == 'NIE':
                from lenstronomy.LightModel.Profiles.nie import NIE
                self.func_list.append(NIE())
            elif profile_type == 'CHAMELEON':
                from lenstronomy.LightModel.Profiles.chameleon import Chameleon
                self.func_list.append(Chameleon())
            elif profile_type == 'DOUBLE_CHAMELEON':
                from lenstronomy.LightModel.Profiles.chameleon import DoubleChameleon
                self.func_list.append(DoubleChameleon())
            elif profile_type == 'TRIPLE_CHAMELEON':
                from lenstronomy.LightModel.Profiles.chameleon import TripleChameleon
                self.func_list.append(TripleChameleon())
            elif profile_type == 'INTERPOL':
                from lenstronomy.LightModel.Profiles.interpolation import Interpol
                self.func_list.append(Interpol())
            elif profile_type == 'SLIT_STARLETS':
                from lenstronomy.LightModel.Profiles.starlets import SLIT_Starlets
                self.func_list.append(
                    SLIT_Starlets(fast_inverse=True, second_gen=False))
            elif profile_type == 'SLIT_STARLETS_GEN2':
                from lenstronomy.LightModel.Profiles.starlets import SLIT_Starlets
                self.func_list.append(SLIT_Starlets(second_gen=True))
            else:
                raise ValueError(
                    'No light model of type %s found! Supported are the following models: %s'
                    % (profile_type, _MODELS_SUPPORTED))
        self._num_func = len(self.func_list)
Exemple #2
0
    def __init__(self, light_model_list, smoothing=0.0000001):
        """

        :param light_model_list: list of light models
        :param deflection_scaling_list: list of floats, rescales the original reduced deflection angles from the lens model
        to enable different models to be placed at different optical (redshift) distances. None means they are all
        :param source_redshift_list: list of redshifts of the model components
        :param smoothing: smoothing factor for certain models (deprecated)
        """
        self.profile_type_list = light_model_list
        self.func_list = []
        for profile_type in light_model_list:
            if profile_type == 'GAUSSIAN':
                from lenstronomy.LightModel.Profiles.gaussian import Gaussian
                self.func_list.append(Gaussian())
            elif profile_type == 'GAUSSIAN_ELLIPSE':
                from lenstronomy.LightModel.Profiles.gaussian import GaussianEllipse
                self.func_list.append(GaussianEllipse())
            elif profile_type == 'MULTI_GAUSSIAN':
                from lenstronomy.LightModel.Profiles.gaussian import MultiGaussian
                self.func_list.append(MultiGaussian())
            elif profile_type == 'MULTI_GAUSSIAN_ELLIPSE':
                from lenstronomy.LightModel.Profiles.gaussian import MultiGaussianEllipse
                self.func_list.append(MultiGaussianEllipse())
            elif profile_type == 'SERSIC':
                from lenstronomy.LightModel.Profiles.sersic import Sersic
                self.func_list.append(Sersic(smoothing=smoothing))
            elif profile_type == 'SERSIC_ELLIPSE':
                from lenstronomy.LightModel.Profiles.sersic import SersicElliptic
                self.func_list.append(SersicElliptic(smoothing=smoothing))
            elif profile_type == 'CORE_SERSIC':
                from lenstronomy.LightModel.Profiles.sersic import CoreSersic
                self.func_list.append(CoreSersic(smoothing=smoothing))
            elif profile_type == 'SHAPELETS':
                from lenstronomy.LightModel.Profiles.shapelets import ShapeletSet
                self.func_list.append(ShapeletSet())
            elif profile_type == 'SHAPELETS_POLAR':
                from lenstronomy.LightModel.Profiles.shapelets_polar import ShapeletSetPolar
                self.func_list.append(ShapeletSetPolar(exponential=False))
            elif profile_type == 'SHAPELETS_POLAR_EXP':
                from lenstronomy.LightModel.Profiles.shapelets_polar import ShapeletSetPolar
                self.func_list.append(ShapeletSetPolar(exponential=True))
            elif profile_type == 'HERNQUIST':
                from lenstronomy.LightModel.Profiles.hernquist import Hernquist
                self.func_list.append(Hernquist())
            elif profile_type == 'HERNQUIST_ELLIPSE':
                from lenstronomy.LightModel.Profiles.hernquist import HernquistEllipse
                self.func_list.append(HernquistEllipse())
            elif profile_type == 'PJAFFE':
                from lenstronomy.LightModel.Profiles.p_jaffe import PJaffe
                self.func_list.append(PJaffe())
            elif profile_type == 'PJAFFE_ELLIPSE':
                from lenstronomy.LightModel.Profiles.p_jaffe import PJaffe_Ellipse
                self.func_list.append(PJaffe_Ellipse())
            elif profile_type == 'UNIFORM':
                from lenstronomy.LightModel.Profiles.uniform import Uniform
                self.func_list.append(Uniform())
            elif profile_type == 'POWER_LAW':
                from lenstronomy.LightModel.Profiles.power_law import PowerLaw
                self.func_list.append(PowerLaw())
            elif profile_type == 'NIE':
                from lenstronomy.LightModel.Profiles.nie import NIE
                self.func_list.append(NIE())
            elif profile_type == 'CHAMELEON':
                from lenstronomy.LightModel.Profiles.chameleon import Chameleon
                self.func_list.append(Chameleon())
            elif profile_type == 'DOUBLE_CHAMELEON':
                from lenstronomy.LightModel.Profiles.chameleon import DoubleChameleon
                self.func_list.append(DoubleChameleon())
            elif profile_type == 'TRIPLE_CHAMELEON':
                from lenstronomy.LightModel.Profiles.chameleon import TripleChameleon
                self.func_list.append(TripleChameleon())
            elif profile_type == 'INTERPOL':
                from lenstronomy.LightModel.Profiles.interpolation import Interpol
                self.func_list.append(Interpol())
            else:
                raise ValueError('Warning! No light model of type',
                                 profile_type, ' found!')
Exemple #3
0
 def setup(self):
     self.shapeletSet = ShapeletSetPolar(exponential=True)
     self.shapelets = ShapeletsPolarExp()
     self.x, self.y = util.make_grid(10, 0.1, 1)
Exemple #4
0
class TestShapeletSetPolarExp(object):
    """
    class to test Shapelets
    """
    def setup(self):
        self.shapeletSet = ShapeletSetPolar(exponential=True)
        self.shapelets = ShapeletsPolarExp()
        self.x, self.y = util.make_grid(10, 0.1, 1)

    def test_shapelet_set(self):
        """

        #:return:
        """
        n_max = 2
        beta = 1.
        amp = [1, 0, 0, 0, 0, 0, 0, 0, 0]
        output = self.shapeletSet.function(np.array(1),
                                           np.array(1),
                                           amp,
                                           n_max,
                                           beta,
                                           center_x=0,
                                           center_y=0)
        npt.assert_almost_equal(output, 0.19397908887786985, decimal=8)
        input = np.array(0.)
        input += output

        output = self.shapeletSet.function(self.x,
                                           self.y,
                                           amp,
                                           n_max,
                                           beta,
                                           center_x=0,
                                           center_y=0)
        npt.assert_almost_equal(output[10], 0.4511844400064266, decimal=8)
        output = self.shapeletSet.function(1,
                                           1,
                                           amp,
                                           n_max,
                                           beta,
                                           center_x=0,
                                           center_y=0)
        npt.assert_almost_equal(output, 0.19397908887786985, decimal=8)

        n_max = -1
        beta = 1.
        amp = [1, 0, 0]
        output = self.shapeletSet.function(np.array(1),
                                           np.array(1),
                                           amp,
                                           n_max,
                                           beta,
                                           center_x=0,
                                           center_y=0)
        assert output == 0

    def test_decomposition(self):
        """

        #:return:
        """
        scale = 10
        n_max = 2
        beta = 1. * scale
        deltaPix = 0.5 * scale
        amp = np.array([1, 1, -1, 1, 1, 1, 1, 1, 1])
        x, y = util.make_grid(1000, deltaPix, 1)
        input = self.shapeletSet.function(x,
                                          y,
                                          amp,
                                          n_max,
                                          beta,
                                          center_x=0,
                                          center_y=0)
        amp_out = self.shapeletSet.decomposition(input,
                                                 x,
                                                 y,
                                                 n_max,
                                                 beta,
                                                 deltaPix,
                                                 center_x=0,
                                                 center_y=0)
        print(amp_out, 'amp_out')
        for i in range(len(amp)):
            print(self.shapeletSet.shapelets.index2poly(i))
        for i in range(len(amp)):
            print(i, 'i test')
            npt.assert_almost_equal(amp_out[i], amp[i], decimal=2)

    def test_function_split(self):
        n_max = 2
        beta = 10.
        deltaPix = 0.1
        amp = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1])
        x, y = util.make_grid(10, deltaPix, 1)
        function_set = self.shapeletSet.function_split(x,
                                                       y,
                                                       amp,
                                                       n_max,
                                                       beta,
                                                       center_x=0,
                                                       center_y=0)
        test_flux = self.shapelets.function(x,
                                            y,
                                            amp=1.,
                                            n=0,
                                            m=0,
                                            complex_bool=False,
                                            beta=beta,
                                            center_x=0,
                                            center_y=0)
        print(np.shape(function_set))
        print(np.shape(test_flux))
        assert function_set[0][10] == test_flux[10]

    def test_index2poly(self):
        index = 0
        n, m, complex_bool = self.shapeletSet.index2poly(index)
        assert n == 0
        assert m == 0
        assert complex_bool is False
Exemple #5
0
 def setup(self):
     self.shapeletSet = ShapeletSetPolar()
     self.shapelets = ShapeletsPolar()
     self.x, self.y = util.make_grid(10, 0.1, 1)
Exemple #6
0
class TestShapeletSetPolar(object):
    """
    class to test Shapelets
    """
    def setup(self):
        self.shapeletSet = ShapeletSetPolar()
        self.shapelets = ShapeletsPolar()
        self.x, self.y = util.make_grid(10, 0.1, 1)

    def test_shapelet_set(self):
        """

        :return:
        """
        n_max = 2
        beta = 1.
        amp = [1, 0, 0, 0, 0, 0]
        output = self.shapeletSet.function(np.array(1),
                                           np.array(1),
                                           amp,
                                           n_max,
                                           beta,
                                           center_x=0,
                                           center_y=0)
        npt.assert_almost_equal(output, 0.20755374871029739, decimal=8)
        input = np.array(0.)
        input += output

        output = self.shapeletSet.function(self.x,
                                           self.y,
                                           amp,
                                           n_max,
                                           beta,
                                           center_x=0,
                                           center_y=0)
        npt.assert_almost_equal(output[10], 0.47957022395315946, decimal=8)
        output = self.shapeletSet.function(1,
                                           1,
                                           amp,
                                           n_max,
                                           beta,
                                           center_x=0,
                                           center_y=0)
        npt.assert_almost_equal(output, 0.20755374871029739, decimal=8)

        n_max = -1
        beta = 1.
        amp = [1, 0, 0, 0, 0, 0]
        output = self.shapeletSet.function(np.array(1),
                                           np.array(1),
                                           amp,
                                           n_max,
                                           beta,
                                           center_x=0,
                                           center_y=0)
        assert output == 0

    def test_decomposition(self):
        """

        :return:
        """
        n_max = 2
        beta = 10.
        deltaPix = 2
        amp = np.array([1, 1, -1, 1, 1, 1])
        x, y = util.make_grid(100, deltaPix, 1)
        input = self.shapeletSet.function(x,
                                          y,
                                          amp,
                                          n_max,
                                          beta,
                                          center_x=0,
                                          center_y=0)
        amp_out = self.shapeletSet.decomposition(input,
                                                 x,
                                                 y,
                                                 n_max,
                                                 beta,
                                                 deltaPix,
                                                 center_x=0,
                                                 center_y=0)
        print(amp_out, 'amp_out')
        for i in range(len(amp)):
            print(i, 'i test')
            npt.assert_almost_equal(amp_out[i], amp[i], decimal=4)

    def test_function_split(self):
        n_max = 2
        beta = 10.
        deltaPix = 0.1
        amp = np.array([1, 1, 1, 1, 1, 1])
        x, y = util.make_grid(10, deltaPix, 1)
        function_set = self.shapeletSet.function_split(x,
                                                       y,
                                                       amp,
                                                       n_max,
                                                       beta,
                                                       center_x=0,
                                                       center_y=0)
        test_flux = self.shapelets.function(x,
                                            y,
                                            amp=1.,
                                            n=0,
                                            m=0,
                                            complex_bool=False,
                                            beta=beta,
                                            center_x=0,
                                            center_y=0)
        print(np.shape(function_set))
        print(np.shape(test_flux))
        assert function_set[0][10] == test_flux[10]