LazuliFlat#

class LazuliFlat(lbda, flux, amplitude=1, **kwargs)[source]#

Bases: VirtualLazuliTarget, Target

A spatially uniform source observed with Lazuli.

The scene contains neither point source nor host: the input spectrum is used as a spatially flat background filling the field.

Warning

Instantiation currently fails with a TypeError, as the parent initialisation resolves to Target, which expects lbda and flux. See Lazuli3DFlat for flat-field calibration exposures.

Parameters:
  • lbda (array_like) – Wavelengths in Angstrom of the reference spectrum.

  • flux (array_like) – Flux of the reference spectrum, in erg/s/cm^2/A per spaxel.

  • amplitude (float, optional) – Scaling factor applied to flux. It is a mutable parameter of the scene, so the flat level can be changed afterwards without rebuilding the target. Default is 1.

  • **kwargs – Goes to from_config.

Methods

change_configuration

Change the Lazuli instrument configuration.

change_detector

Change the detector read-out configuration.

change_properties

Change any mutable parameter of the simulation.

change_spectrograph

Change the spectrograph configuration.

from_scene

Load the instance from a scene configuration.

from_simulation

Load the instance from an already-built simulation.

get_band_snr

Get the signal-to-noise ratio over a wavelength range.

get_cube

Get the simulated cubes, for one or both Lazuli fields.

get_data_volume

Get the data volume of the observation.

get_detector_image

Project the narrow and wide field cubes onto a single detector image.

get_exposure_time

Get the exposure time of the current configuration.

get_properties

Get parameter values of the target's simulation.

get_readout_config

Get the current MACC mode and number of ramps.

get_spectrograph_field

Get the current spectrograph field.

get_spectrum

Get the simulated spectrum of the point source.

get_variance_contribution

Get the contribution of each noise source to the variance.

setup_to_snr

Find the detector read-out configuration reaching a target SNR.

to_image

Project the narrow and wide field cubes onto a single detector image.

Attributes

pointsource_properties

Names of the mutable parameters of the point source (list of str).

simulation

The Simulation wrapped by the target.

change_configuration(which)#

Change the Lazuli instrument configuration.

The corresponding configuration file (lazuli_eol.toml or lazuli_cbe.toml) is read and the simulation updated with it.

Parameters:

which (str) – Name of the configuration: "eol" (end of life) or "cbe" (current best estimate); "bol" (beginning of life) is an alias of "cbe".

Returns:

None

change_detector(nmd=None, max_group=None, nramps=None)#

Change the detector read-out configuration.

Parameters set to None are left unchanged.

Parameters:
  • nmd (tuple of int, optional) – MACC mode (n_groups, n_frames_per_group, n_drops). Default is None.

  • max_group (int, optional) – Maximum number of groups in a single ramp. Default is None.

  • nramps (int, optional) – Number of ramps. Default is None.

Returns:

None

change_properties(**kwargs)#

Change any mutable parameter of the simulation.

Shortcut to update.

Parameters:

**kwargs – The parameters to change, as name=value (e.g. redshift=0.5 or pointsource__phase=-2).

Returns:

None

change_spectrograph(field=None, spatial_shape=None, spatial_scale=None)#

Change the spectrograph configuration.

Parameters:
  • field (str, optional) –

    Lazuli field to use (see SPECTROGRAPH_FIELD):

    • "narrow": finely sampled field, with 0.04 arcsec spaxels.

    • "wide": coarser field, with 0.08 arcsec spaxels.

    If None, only spatial_shape and spatial_scale are applied. Default is None.

  • spatial_shape (tuple of int, optional) – Spaxel grid shape (e.g. (40, 40)), overriding that of field if any. Default is None.

  • spatial_scale (float or list of float, optional) – Spaxel size in arcsec, overriding that of field if any. If a float, spaxels are square; if a list, (x, y). Default is None.

Returns:

None

Raises:

ValueError – If field is not a known Lazuli field.

classmethod from_scene(scene=None, **kwargs)#

Load the instance from a scene configuration.

Parameters:
  • scene (dict or str, optional) –

    Scene configuration (see get_scene), in the format:

    scene = {"scene": {"pointsource": {},  # PSF
                       "background": {},   # spatially flat
                       "host": {}}}        # structured background
    

    or the name of a scene configuration file. Default is None.

  • **kwargs – Goes to get_config, overriding the scene and the Lazuli instrument configuration.

Returns:

VirtualLazuliTarget – An instance of the class.

classmethod from_simulation(simulation)#

Load the instance from an already-built simulation.

Warning

This override is currently broken and always raises TypeError: super().__init__ is called from a classmethod, so no instance is ever built. It shadows the working from_simulation for Target and its subclasses.

Parameters:

simulation (slicersim.simulation.Simulation) – The simulation the target wraps.

Returns:

Target – An instance of the class, once the implementation is fixed.

Raises:

TypeError – Always, see the warning above.

get_band_snr(lbda_range, frame='obs', per_resolution=True, statistic=<function nanmean>, **kwargs)#

Get the signal-to-noise ratio over a wavelength range.

Parameters:
  • lbda_range (tuple of float or list of tuple) – Wavelength range (min, max) in Angstrom (or a list of them).

  • frame (str, optional) – Reference frame of lbda_range: "rest" or "obs". Default is "obs".

  • per_resolution (bool, optional) – If True, return the SNR per spectral resolution element, otherwise per wavelength bin. Default is True.

  • statistic (callable, optional) – Function used to summarise the signal and variance over lbda_range. Default is numpy.nanmean.

  • **kwargs – Goes to get_band_snr (e.g. switch_off).

Returns:

float or numpy.ndarray – The SNR, one per wavelength range if a list is given. If any detector pixel saturates, numpy.inf is returned.

get_cube(which='both', **kwargs)#

Get the simulated cubes, for one or both Lazuli fields.

Parameters:
  • which (str, optional) –

    Which cube should be computed:

    • "both": both narrow and wide fields.

    • "current": only the current setup.

    • "narrow": only the narrow field.

    • "wide": only the wide field.

    Default is "both".

  • **kwargs – Goes to get_cube.

Returns:

tuple – (cube, varcube), the cube (ADU) and variance cube (ADU^2) of the requested field, or, if which="both", ((cube_narrow, varcube_narrow), (cube_wide, varcube_wide)).

Raises:
  • ValueError – If which is not "current" while the spectrograph is set up neither as the narrow nor the wide field.

  • NotImplementedError – If the scene contains a host (not yet supported).

Notes

When switching field, the point source position is converted to the spaxel units of the other field. The original spectrograph setup and position are restored afterwards.

get_data_volume(units='GB', per_ramp=False)#

Get the data volume of the observation.

Parameters:
  • units (str, optional) – Unit of the returned volume (any astropy data unit, e.g. "MB" or "GB"). Default is "GB".

  • per_ramp (bool, optional) – If True, return the volume of a single ramp instead of the total volume over all ramps. Default is False.

Returns:

float – Data volume in units.

See also

get_data_volume

The underlying method.

get_detector_image(mapper, cubes=None, **kwargs)#

Project the narrow and wide field cubes onto a single detector image.

Deprecated since version 1.1.1: Use to_image instead, which this simply forwards to.

Parameters:
Returns:

numpy.ndarray – 2D detector image.

Warns:

UserWarning – Always, since this method is deprecated in favour of to_image.

get_exposure_time(snr=None, full=False, **kwargs)#

Get the exposure time of the current configuration.

Parameters:
  • snr (float, optional) – Currently has no effect on the returned time: setup_to_snr is called with inplace=False, so the configuration used for the exposure time remains the current one. Default is None.

  • full (bool, optional) – If True, return all timing details; otherwise only the total exposure time. Default is False.

  • **kwargs – Goes to setup_to_snr. Ignored if snr is None.

Returns:

float or dict – Total exposure time in seconds (all ramps included), or, if full is True, a dict of times in seconds with keys "integration_time", "exposure_time" (one ramp), "tframe", "tgroup" and "total_exptime".

get_properties(which, default=None, as_dict=True)#

Get parameter values of the target’s simulation.

Shortcut to get_parameter.

Parameters:
  • which (str or list of str) – Name(s) of the parameter(s), e.g. "redshift" or ["nmd", "nramps"].

  • default (object, optional) – Value returned if a parameter is not found. Default is None.

  • as_dict (bool, optional) – Only used when which is a single name that is not found: if True, {which: default} is returned instead of default. Default is True.

Returns:

object or dict – The parameter value if which is a str, a dict {name: value} if it is a list.

get_readout_config()#

Get the current MACC mode and number of ramps.

Returns:

dict – Read-out configuration, with keys:

  • "nmd": (n_groups, n_frames_per_group, n_drops).

  • "nramps": number of ramps, each ramp following the nmd MACC mode.

get_spectrograph_field()#

Get the current spectrograph field.

Returns:

  • field (str) – Name of the current field ("narrow" or "wide"), or "unknown" if the spectrograph matches neither (see spectroconfig_to_fieldname).

  • config (dict) – Current "spatial_shape" and "spatial_scale" (arcsec) of the spectrograph.

get_spectrum(unit='adu', incl_error=True, **kwargs)#

Get the simulated spectrum of the point source.

The spectrum is extracted from the simulation in ADU and converted to unit.

Parameters:
  • unit (str, optional) –

    Unit of the returned flux (and of the variance, squared):

    • "adu": total ADU integrated over all ramps.

    • "flambda": erg/s/cm^2/A.

    • "fphoton": photon/s.

    • "rate": ADU/s.

    • "framerate": ADU/frame.

    Default is "adu".

  • incl_error (bool, optional) – If True, the returned flux is randomly scattered according to the variance (hence realistic). If False, the noise-free flux is returned. Default is True.

  • **kwargs – Goes to get_spectrum (e.g. switch_off).

Returns:

get_variance_contribution()#

Get the contribution of each noise source to the variance.

Returns:

pandas.DataFrame – One row per wavelength, with columns "lbda" (Angstrom), "flux" and "variance" (ADU, ADU^2), and one column per variance source (see variance_sources, e.g. "dark", "ron", "pointsource", "background", "thermal") giving its contribution to the variance in ADU^2.

setup_to_snr(snr, per_resolution=True, lbda_range=[4000, 6800], frame='rest', statistic=<function nanmean>, inplace=True, **kwarg)#

Find the detector read-out configuration reaching a target SNR.

The MACC mode and number of ramps are varied until the signal-to-noise ratio over lbda_range reaches snr (see fetch_snr).

Parameters:
  • snr (float) – Target signal-to-noise ratio.

  • per_resolution (bool, optional) – If True, snr is given per spectral resolution element and is converted into a SNR per wavelength bin, snr / sqrt(dispersion_resolution), before being passed to fetch_snr. If False, snr is per wavelength bin. Default is True.

  • lbda_range (list of float, optional) – Wavelength range [min, max] in Angstrom over which the SNR is computed. Default is [4000, 6800].

  • frame (str, optional) – Reference frame of lbda_range: "rest" (rest-frame) or "obs" (observer-frame). Default is "rest".

  • statistic (callable, optional) – Function used to summarise the SNR over lbda_range. Default is numpy.nanmean.

  • inplace (bool, optional) – If True, the simulation is updated to the returned configuration. Default is True.

  • **kwarg – Goes to fetch_snr (e.g. max_group or ndrop). nframe_per_group is set to 8 and cannot be given.

Returns:

  • config (dict) – Read-out configuration reaching snr, with keys "nmd" and "nramps".

  • reached_snr (float) – SNR reached with config, per resolution element if per_resolution is True, per wavelength bin otherwise.

to_image(mapper, cubes=None, **kwargs)#

Project the narrow and wide field cubes onto a single detector image.

Both fields are generated, then each is projected onto the slices it occupies: the narrow field fills the first nslices_narrow slices and the wide field the ones immediately above. The two projections are summed into one image.

Parameters:
  • mapper (slicersim.mapper.SlicerMapper) – Mapper describing where each slice falls on the detector.

  • cubes (tuple of numpy.ndarray, optional) – (cube_narrow, cube_wide) to project, to avoid regenerating them. If None, both are generated with get_cube(which="both"). Default is None.

  • **kwargs – Goes to get_cube. Ignored if cubes is given.

Returns:

numpy.ndarray – 2D detector image, summing the narrow and wide field contributions.

Notes

The slice identifiers are reversed ([::-1]) before being handed to the mapper, because the mapper numbers slices from the top of the detector while the cubes are ordered from the bottom.

pointsource_properties#

Names of the mutable parameters of the point source (list of str).

simulation#

The Simulation wrapped by the target.