Photometry and Filters
Once it has generated a spectrum for a stellar population (see Stellar Atmospheres and Spectral Synthesis), SLUG can convolve that spectrum with filter response curves to produce predictions for photometry. The fundamental calculation that SLUG carries out to compute photometry is to evaluate the integral
where \(L_\lambda\) is the specific luminosity and \(R_\lambda\) is the response
function of the filter, which describes the expected number of counts produced in the
detector per incident photon of wavelength \(\lambda\). Which filter response
function(s) are evaluated is determined by the filters keyword
in the Photometry Keywords section of The SLUG Input Deck.
See Filter Data and Ideal and Special Filters for a list of
available filters in the standard data set, and Adding Additional Filters
for instructions on how to add additional filter data.
Photometric Systems
The fundamental integral of the spectrum \(L_\lambda\) over a filter response
function \(R_\lambda\) returns a mean specific luminosity over the filter in
the same units as \(L_\lambda\): energy per unit time per unit wavelength. SLUG
can automatically convert this output into a variety of other photometric systems,
as specified by the system keyword in the Photometry Keywords section
of The SLUG Input Deck. The allowed photometric systems are:
Flambda: the default, returns \(\left\langle L_\lambda \right\rangle_R\) directlyFnu: returns a specific luminosity \(\left\langle L_\nu \right\rangle_R\) with units of energy per time per frequency, which is related to \(\left\langle L_\lambda \right\rangle_R\) by \(\left\langle L_\nu \right\rangle_R = (\lambda_R^2/c) \left\langle L_\lambda \right\rangle_R\), where \(\lambda_R\) is the pivot wavelength of the filter (see Filter Data)ST: returns a magnitude in the ST system, which is related to \(\left\langle L_\lambda \right\rangle_R\) by \(\mathrm{mag}_\mathrm{ST} = -2.5 \log_{10}[\left\langle L_\lambda \right\rangle_R / (4\pi d^2) / F_\mathrm{ST,0}]\), where \(d = 10\) pc is the standard distance and \(F_\mathrm{ST,0} = 3.631\times 10^{-9}\,\mathrm{erg}/\mathrm{cm}^2/\mathrm{s}/\mathrm{Å}\) is the zero point of the ST magnitude systemAB: returns a magnitude in the AB system, which is related to \(\left\langle L_\nu \right\rangle_R\) by \(\mathrm{mag}_\mathrm{AB} = -2.5 \log_{10}[\left\langle L_\nu \right\rangle_R / (4 \pi d^2) / F_\mathrm{AB,0}]\), where \(d = 10\) pc is the standard distance and \(F_\mathrm{AB,0} = 3631.0\,\mathrm{Jy}\) is the zero point of the AB magnitude systemVega: returns a magnitude in the Vega system, which is computed from \(\left\langle L_\lambda \right\rangle_R\) as \(\mathrm{mag}_\mathrm{Vega} = -2.5 \log_{10}[\left\langle L_\lambda \right\rangle_R / (4\pi d^2) / \langle F_\mathrm{Vega} \rangle_R]\), where \(\langle F_\mathrm{Vega}\rangle_R\) is the flux of Vega convolved with the response function \(R_\lambda\). The Vega flux is computed on-the-fly from a reference Vega spectrum stored in the repository asdata/spectra/vega.h5.
slugpy also contains a tool, phot_convert, to convert between
photometric systems after a simulation has been run.
Filter Data
SLUG’s default data includes response curves and pivot wavelengths for a standard set of
filters, which are taken from the
SVO Filter Profile Service. The
list of filters available is stored in a registry file, data/filters/filters.toml,
and the data themselves are stored in data/filters/filters.h5. SLUG follows the SVO
naming convention where a filter name takes the form FACILITY.INSTRUMENT.FILTER, where
FACILITY is the name of the facility for that filter (e.g., HST), INSTRUMENT is the
name of the instrument on that facility (e.g., ACS_WFC), and FILTER is the name of the
filter on that instrument (e.g., F435W). Thus to generate photometry in this filter, one
would include HST.ACS_WFC.F435W in the list of filters supplied by the filters
keyword in the Photometry Keywords section of The SLUG Input Deck.
Ideal and Special Filters
In addition to real astronomical filters, SLUG also provides “ideal” filters that can be used to compute photometric or photometric-like quantities from spectra. The following entries can be included in the filter list to produce these outputs:
ideal_energy_X_Y: a filter where the response function \(R_\lambda\) is a perfect tophat function that is unity for wavelengths between X and Y (in Angstrom) and 0 elsewhereideal_phot_X_Y: a filter that measures the total number of photons per unit time evaluated over the wavelength range from X to Y, by evaluating the integral \(\int_X^Y L_\lambda / (hc/\lambda) \, \mathrm{d}\lambda\). For filters of this type, Y can be “inf”, in which case the upper limit on the integral is taken to be infinity.Q(<Elem><IonStage>), where<Elem>is the standard elemental symbol for some element (e.g., H, He) and<IonStage>is a Roman numeral giving the ionization stage of that element; this filter returns the number of photons emitted per unit time with energies high enough to ionize the given ion to one higher ionization state, e.g., “Q(HI)” gives the number of photons per second emitted capable of ionizing neutral hydrogen, “Q(CII)” gives the number of photons per second emitted capable of ionizing C+ to C++. This is equivalent toideal_phot_0_Ywith Y set to the wavelength that corresponds to the ionization potential of the ion in question.Lbol: a “filter” that returns the total bolometric luminosity of the stellar population; this is not computed by integrating a spectrum at all, and instead is computed directly from the output of the Stellar Tracks.
Outputs for ideal_energy_X_Y-type filters use the same photometric system as real
filters, while outputs for all the other ideal filter types use units of photons per
time regardless of which photometric system is selected.
Adding Additional Filters
SLUG’s default data set contains all the filters hosted by SVO for the following facilities:
2MASS, CFHT, GALEX, HST, JWST, Paranal, SLOAN, SkyMapper, and Spitzer. It also provides the
“Generic” facility filters (which includes the standard Bessell, Cousins, Johnson, and Stromgren
filters). If you want to add filters from any other facility whose filter data are
hosted on SVO, the repository contains a script data/tools/filters/fetch_filter_vo.py
that can be used to add additional filters to the data/filters/filters.h5 filter
catalogue and add corresponding registry entries to data/filters/filters.toml so
that filters can be accessed by SLUG.
If you want to add filters from another source, you can do so by writing your own HDF5 file (or appending to the existing one) with a corresponding TOML registry file (or entries in the existing registry file).
The required format for HDF5 files containing filter data is as follows.
A filter data file is organized as a three-level nested group hierarchy that
mirrors the facility/instrument/filter naming convention described above: one
top-level group per facility (e.g. HST), containing one subgroup per
instrument on that facility (e.g. ACS_WFC), containing one subgroup per
filter on that instrument (e.g. F435W) – so a given filter’s data live at
the HDF5 path <FACILITY>/<INSTRUMENT>/<FILTER>. The names given to these
groups are exactly the FACILITY, INSTRUMENT, and FILTER names used
to refer to the filter elsewhere (e.g. in the filters keyword of
Photometry Keywords), so they must match the corresponding names used
in the registry entry described below. Each filter’s own group must contain
two 1D datasets of equal length:
wavelength: the wavelength grid, in Angstrom, on which the response function is tabulated. This need not be evenly spaced, but should be sorted in order of increasing wavelength.transmission: the filter’s response function \(R_\lambda\) at each wavelength inwavelength– the expected number of counts produced in the detector per incident photon, as described at the start of this section.
A filter group may also carry additional HDF5 attributes (e.g. the
Description, ZeroPoint, and DetectorType attributes written by
data/tools/filters/fetch_filter_vo.py for filters fetched from SVO); SLUG
itself never reads any of these, so they are optional and are included purely
for reference.
The required format for registry entries for filters is as follows.
Unlike a track or spectra registry, which lists one entry per named
track/atmosphere set, a single filter registry describes every facility,
instrument, and filter in one file, and only ever points to a single HDF5
file. The registry must have a top-level file key (a string): the path to
the HDF5 file described above, resolved relative to the directory containing
the registry file itself, exactly as for a track or spectra registry’s own
file key (see Standard Track Sets).
For every facility to be made available, the registry must also contain a
top-level table of that facility’s name (e.g. [HST]) with an
instruments key (an array of strings, the names of that facility’s
instruments). For every one of those instruments, the registry must in turn
contain a subtable (e.g. [HST.ACS_WFC]) with a filters key (an array
of strings, the names of that instrument’s filters). Finally, for every one
of those filters, the registry must contain a further subtable (e.g.
[HST.ACS_WFC.F435W]) with the following required key:
wl_ref(a number): the filter’s pivot wavelength, in Angstrom – the \(\lambda_R\) used to convert between \(\left\langle L_\lambda \right\rangle_R\) and \(\left\langle L_\nu \right\rangle_R\) for theFnuphotometric system (see theFnuentry under Photometric Systems above). Unlike a filter’s wavelength grid and response function, its pivot wavelength is read from this registry entry alone, not from the HDF5 file.
A filter’s subtable may also include any of the following optional keys,
which SLUG itself never reads but which are included in the standard registry
(as written by fetch_filter_vo.py) for documentation purposes:
description: A short, human-readable description of the filter.source: A URL identifying where this filter’s data came from.
A registry may likewise include top-level name and Facilities keys
(the latter listing every facility the registry describes); SLUG never reads
either of these either, since it always looks a facility up by name directly,
but both are included in the standard registry for documentation purposes.