Source code for lenstronomy.SimulationAPI.data_api

from lenstronomy.SimulationAPI.observation_api import SingleBand
from lenstronomy.Data.imaging_data import ImageData
import lenstronomy.Util.util as util
import numpy as np

__all__ = ["DataAPI"]


[docs] class DataAPI(SingleBand): """This class is a wrapper of the general description of data in SingleBand() to translate those quantities into configurations in the core lenstronomy Data modules to simulate images according to those quantities. This class is meant to be an example of a wrapper. More possibilities in terms of PSF and data type options are available. Have a look in the specific modules if you are interested in. """
[docs] def __init__(self, numpix, kwargs_pixel_grid=None, **kwargs_single_band): """ :param numpix: number of pixels per axis in the simulation to be modelled :param kwargs_pixel_grid: if None, uses default pixel grid option if defined, must contain keyword arguments PixelGrid() class :param kwargs_single_band: keyword arguments used to create instance of SingleBand class """ self.numpix = numpix if kwargs_pixel_grid is not None: required_keys = ["ra_at_xy_0", "dec_at_xy_0", "transform_pix2angle"] if not all(k in kwargs_pixel_grid for k in required_keys): raise ValueError( "Missing 1 or more required" + "kwargs_pixel_grid parameters" ) self._kwargs_pixel_grid = kwargs_pixel_grid SingleBand.__init__(self, **kwargs_single_band)
@property def data_class(self): """Creates a Data() instance of lenstronomy based on knowledge of the observation. :return: instance of Data() class """ data_class = ImageData(**self.kwargs_data) return data_class @property def kwargs_data(self): """ :return: keyword arguments for ImageData class instance """ # default pixel grid if self._kwargs_pixel_grid is None: ( _, _, ra_at_xy_0, dec_at_xy_0, _, _, transform_pix2angle, _, ) = util.make_grid_with_coordtransform( numPix=self.numpix, deltapix=self.pixel_scale, subgrid_res=1, left_lower=False, inverse=False, ) # user defined pixel grid else: ra_at_xy_0 = self._kwargs_pixel_grid["ra_at_xy_0"] dec_at_xy_0 = self._kwargs_pixel_grid["dec_at_xy_0"] transform_pix2angle = self._kwargs_pixel_grid["transform_pix2angle"] # CCD gain corrected exposure time to allow a direct Poisson estimates based on IID counts scaled_exposure_time = self.flux_iid(1) kwargs_data = { "image_data": np.zeros((self.numpix, self.numpix)), "ra_at_xy_0": ra_at_xy_0, "dec_at_xy_0": dec_at_xy_0, "transform_pix2angle": transform_pix2angle, "background_rms": self.background_noise, "exposure_time": scaled_exposure_time, } return kwargs_data