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)