Wavelength-dependent Profiles
Real astronomical objects emit photons at a range of wavelengths according to a potentially complicated spectral energy distribution (SED). These photons then may be affected differently by the atmosphere and optics as part of the point-spread function (PSF). Then they typically pass through a bandpass filter with a variable transmission as a function of wavelength. Finally, there may be other wavelength-dependent effects when converting from photons to electrons in the sensor.
GalSim supplies a number of tools to simulate these chromatic effects.
An SED is used to define the SED of the objects. There are a variety of options as to the units
of the input SED function; e.g. photons/cm^2/nm/sec, ergs/cm^2/Hz/s, etc. There are also ways
to adjust the normalization of the SED to give a particular observed magnitude when observed
through a particular Bandpass. And there is a dimensionless option, which may be appropriate
for defining chromatic PSFs.
The Bandpass class represents a spectral throughput function, which could be an
entire imaging system throughput response function (reflection off of mirrors, transmission through
filters, lenses and the atmosphere, and quantum efficiency of detectors), or individual pieces
thereof. Both a Bandpass and the SED are necessary to compute the relative contribution of
each wavelength of a ChromaticObject to a drawn image.
Then there are a number of kinds of ChromaticObject to define the wavelength dependence of an
object’s surface brightness profile. The simplest one is when the spatial and spectral
dependencies are separable; i.e. every part of the profile has the same SED. In this case,
one forms the ChromaticObject simply by multiplying a GSObject by an SED:
>>> obj = galsim.Sersic(n=2.3, half_light_radius=3.5)
>>> sed = galsim.SED('CWW_Sbc_ext.sed', wave_type'Ang', flux_type='flambda')
>>> chromatic_object = obj * sed
Other more complicated kinds of chromatic profiles are subclasses of ChromaticObject and
have their own initialization arguments. See the listings below.
To draw any kind of ChromaticObject, you call its drawImage()
method, which works largely the same as GSObject:drawImage(), but requires a
Bandpass argument to define what bandpass is being used for the observation:
>>> gband = galsim.Bandpass(lambda w:1.0, wave_type='nm', blue_limit=410, red_limit=550)
>>> image = chromatic_obj.drawImage(gband)
The transformation methods of ChromaticObject, like dilate() and
shift(), can also accept as an argument a function of wavelength (in
nanometers) that returns a wavelength-dependent dilation, shift, etc. These can be used to
implement chromatic PSFs. For example, a diffraction limited PSF might look like:
>>> psf500 = galsim.Airy(lam_over_diam=2.0)
>>> chromatic_psf = ChromaticObject(psf500).dilate(lambda w:(w/500)**1.0)