Example #1
0
def sim_image(numpix,
              kwargs_band,
              kwargs_model,
              kwargs_params,
              kwargs_numerics={},
              with_noise=True):
    """
    simulates an image based on chosen model and data settings, effectively makes use of lenstronomy.SimulationAPI

    :param numpix: number of pixels per axis
    :param kwargs_band: keyword arguments specifying the observation to be simulated according to lenstronomy.SimulationAPI
    :param kwargs_model: keyword arguments of model configurations. All possibilities available at lenstronom.Util.class_creator
    :param kwargs_params: keyword arguments of the different model components. Supports 'kwargs_lens', 'kwargs_source_mag',
    'kwargs_lens_light_mag', 'kwargs_ps_mag'
    :param kwargs_numerics: keyword arguments describing the numerical setting of lenstronomy as outlined in lenstronomy.ImSim.Numerics
    :return: 2d numpy array
    """

    sim = SimAPI(numpix=numpix,
                 kwargs_single_band=kwargs_band,
                 kwargs_model=kwargs_model,
                 kwargs_numerics=kwargs_numerics)
    kwargs_lens_light_mag = kwargs_params.get('kwargs_lens_light_mag', None)
    kwargs_source_mag = kwargs_params.get('kwargs_source_mag', None)
    kwargs_ps_mag = kwargs_params.get('kwargs_ps_mag', None)
    kwargs_lens_light, kwargs_source, kwargs_ps = sim.magnitude2amplitude(
        kwargs_lens_light_mag, kwargs_source_mag, kwargs_ps_mag)
    imSim = sim.image_model_class
    image = imSim.image(kwargs_params['kwargs_lens'], kwargs_source,
                        kwargs_lens_light, kwargs_ps)
    if with_noise is True:
        image += sim.noise_for_model(model=image)
    return image
def sim_single_image(sn_data, geo_dict, label):

    DECam = {
        'read_noise':
        10,  # std of noise generated by read-out (in units of electrons)                                                   
        'pixel_scale':
        0.263,  # scale (in arcseonds) of pixels                                                                               
        'ccd_gain':
        4.5  # electrons/ADU (analog-to-digital unit).                                                                      
    }

    obs_info = {
        'exposure_time': 90,
        'sky_brightness': sn_data['SKYMAG'],
        'magnitude_zero_point': sn_data['ZPTMAG'],
        'num_exposures': 1,
        'seeing': sn_data['PSF'] / 3,
        'psf_type': 'GAUSSIAN'
    }

    kwargs_model = {
        'lens_model_list': [
            'SIE', 'SHEAR'
        ],  # list of lens models to be used                                                         
        'lens_light_model_list': [
            'SERSIC_ELLIPSE'
        ],  # list of unlensed light models to be used                                           
        'source_light_model_list': [
            'SERSIC_ELLIPSE'
        ],  # list of extended source models to be used                                        
        'point_source_model_list': [
            'SOURCE_POSITION'
        ],  # list of point source models to be used                                          
    }

    numpix = 64
    kwargs_merged = util.merge_dicts(DECam, obs_info)
    kwargs_numerics = {'point_source_supersampling_factor': 1}

    sim = SimAPI(numpix=numpix,
                 kwargs_single_band=kwargs_merged,
                 kwargs_model=kwargs_model,
                 kwargs_numerics=kwargs_numerics)

    imSim = sim.image_model_class

    x_grid, y_grid = util.make_grid(numPix=10, deltapix=1)
    flux = gauss.function(x_grid,
                          y_grid,
                          amp=1,
                          sigma=2,
                          e1=0.4,
                          e2=0,
                          center_x=0,
                          center_y=0)
    image_gauss = util.array2image(flux)

    ## Set point source mag
    geo_dict['ps_kwargs']['magnitude'] = sn_data['ABMAG'] * 1.4

    if label == 1:
        geo_dict = force_larger_ps_separation(geo_dict)
    elif label == 2:
        geo_dict = force_no_lensing_with_ps(geo_dict)
    elif label == 3:
        geo_dict = force_lensed_agn(geo_dict)
    elif label == 4:
        geo_dict = force_non_lensed_agn(geo_dict)
    else:
        print("Unexpected option passed as class label")
        sys.exit()

    #lens light
    kwargs_lens_light_mag = [geo_dict['lens_kwargs']]
    # source light
    kwargs_source_mag = [geo_dict['source_kwargs']]
    # point source
    kwargs_ps_mag = [geo_dict['ps_kwargs']]

    kwargs_lens_light, kwargs_source, kwargs_ps = sim.magnitude2amplitude(
        kwargs_lens_light_mag, kwargs_source_mag, kwargs_ps_mag)
    kwargs_lens = [
        geo_dict['lens_model_kwargs_sie'], geo_dict['lens_model_kwargs_shear']
    ]

    image = imSim.image(kwargs_lens, kwargs_source, kwargs_lens_light,
                        kwargs_ps)
    image += sim.noise_for_model(model=image)

    return np.log10(image + 2)