StaticArraySpectrum#

class scarlet2.StaticArraySpectrum(data, bands, band_selector=<function StaticArraySpectrum.<lambda>>)[source]#

Bases: Spectrum

Static (non-variable) source in a transient scene

In the frames of transient scenes, the attribute channels are overloaded and defined with a spectral and a temporal component, e.g. channel = (band, epoch). This class is for models that do not vary in time, i.e. only have a spectral dependency. The length of data is thus given by the number of distinct spectral bands.

Parameters:
  • data (array) – Spectrum without temporal variation. Contains as many elements as there are spectral channels in the model.

  • bands (list, array) – Identifier for the list of unique bands in the model frame channels

  • band_selector (callable, optional) – Identify the spectral “band” component from the name/ID used in the channels of the model frame

Examples

>>> # model channels: [('G',0),('G',1),('R',0),('R',1),('R',2)]
>>> spectrum = jnp.ones(2)
>>> bands = ['G','R']
>>> band_selector = lambda channel: channel[0]
>>> StaticArraySpectrum(spectrum, bands, band_selector=band_selector)

This constructs a 2-element spectrum to describe the spectral properties in all epochs 0,1,2.

__call__()[source]#

What to run when the StaticArraySpectrum is called

bands: list#

Identifier for the list of unique bands in the model frame channels

data: array#

Data to describe the static spectrum

The order in this array should be given by bands.

get(name=None)#

Get parameter(s) from this module

Parameters:

name (str, optional) – Name of parameter. If not set, returns all parameters.

Returns:

requested data arrays for parameters

Return type:

dict

property parameters#

Parameters defined for this module

Returns:

name: (node, param) mapping for all parameters

Return type:

dict

replace(name, value)#

Replace member attribuge name with value

Parameters:
  • name (str) – Name of member to replace

  • value (any) – Value to replace member with

Returns:

The modified module.

Return type:

Module

replace_subtree(where, value, parameters=None)#

Replace the subtree where(self) with value and carry over all other parameters

Unlike replace(), value does not need to have the same structure as the subtree it replaces, e.g. an array morphology can be replaced by a SersicMorphology. Parameters defined for this module remain attached to the same nodes, except those inside the replaced subtree, which are dropped.

Parameters:
  • where (callable) – Function module -> node that selects the subtree to replace, as in equinox.tree_at()

  • value (any) – Replacement for the subtree. If this module has a frame, attributes of value given in sky coordinates are converted to pixel coordinates of that frame.

  • parameters (callable, optional) – Function module -> None that is called with the new module inside of a Parameters context to define parameters for the replacement, e.g. by calling Parameter on nodes of value.

Returns:

The modified module.

Return type:

Module

Examples

>>> sersic = SersicMorphology(n=jnp.array(2.), size=jnp.array(2.), shape=morph.shape)
>>> def sersic_parameters(morph):
>>>     Parameter(morph.n, name="n:0", prior=dist.Uniform(0.5, 6))
>>>     Parameter(morph.size, name="size:0", constraint=constraints.positive, stepsize=0.1)
>>>
>>> scene_ = scene.replace_subtree(lambda sc: sc.sources[0].morphology, sersic, sersic_parameters)

See also

remap()

set(values)#

Set parameter(s) from this module with values

Parameters:

values (dict[str,jnp.array]) – values to replace parameters with, identified by their name

Returns:

new module with parameter(s) replaced by values

Return type:

Module

property shape#

The shape of the spectrum data