204.4. Filter bandpasses#
204.4. Filter bandpasses¶
For the Rubin Science Platform at data.lsst.cloud.
Data Release: Data Preview 2
Container Size: Large
LSST Science Pipelines version: r30.0.10
Last verified to run: 2026-07-22
Repository: github.com/lsst/tutorial-notebooks
DOI: 10.11578/rubin/dc.20250909.20
Learning objective: How to access the filter bandpass data.
LSST data products: standard_passband
Packages: lsst.daf.butler, lsst.utils.plotting
Credit: Originally developed by the Rubin Community Science team. Please consider acknowledging them if this notebook is used for the preparation of journal articles, software releases, or other notebooks.
Get Support: Everyone is encouraged to ask questions or raise issues in the Support Category of the Rubin Community Forum. Rubin staff will respond to all questions posted there.
1. Introduction¶
The filter bandpasses, throughput vs. wavelength, tabulate the full-system transmission of the six LSSTCam filters. The throughput is the percentage of incidental flux at the top of the atmosphere that is recorded by the detectors. These bandpasses were used as reference for calibrating the DP2 photometry.
Related tutorials: See the 100-level tutorials on how to use the Butler.
1.1. Import packages¶
Import the Rubin data Butler from the lsst.daf.butler package
(pipelines.lsst.io).
Import numpy (numpy.org), a fundamental package for scientific computing with arrays in Python,
and matplotlib (matplotlib.org), a comprehensive library for data visualization.
from lsst.daf.butler import Butler
import numpy as np
import matplotlib.pyplot as plt
from lsst.utils.plotting import (get_multiband_plot_colors,
get_multiband_plot_linestyles)
1.2. Define parameters and functions¶
Instantiate the Butler for the DP2 data release.
butler = Butler('dp2', collections=['dp2'])
Get the colorblind-friendly colors and linestyles for the six LSST filters, $ugrizy$, using the lsst.utils.plotting helpers recommended in RTN-045.
filter_colors = get_multiband_plot_colors()
filter_linestyles = get_multiband_plot_linestyles()
filter_names = filter_colors.keys()
2. Data access¶
The filter bandpasses are only accessible via the Butler.
Show the Butler dimensions for standard_passband.
print(butler.get_dataset_type('standard_passband'))
print('Required dimensions: ',
butler.get_dataset_type('standard_passband').dimensions.required)
DatasetType('standard_passband', {band, instrument}, ArrowAstropy)
Required dimensions: {band, instrument}
2.1. Retrieve one bandpass¶
Retrieve the $r$-band bandpass as an ArrowAstropy table.
bp_table = butler.get("standard_passband",
instrument="LSSTCam", band="r")
Show the table.
bp_table
| wavelength | throughput |
|---|---|
| nm | % |
| float64 | float64 |
| 300.0 | 0.0 |
| 300.5 | 0.0 |
| 301.0 | 0.0 |
| 301.5 | 0.0 |
| 302.0 | 0.0 |
| 302.5 | 0.0 |
| 303.0 | 0.0 |
| 303.5 | 0.0 |
| 304.0 | 0.0 |
| 304.5 | 0.0 |
| 305.0 | 0.0 |
| 305.5 | 0.0 |
| 306.0 | 0.0 |
| 306.5 | 0.0 |
| 307.0 | 0.0 |
| 307.5 | 0.0 |
| 308.0 | 0.0 |
| 308.5 | 0.0 |
| 309.0 | 0.0 |
| 309.5 | 0.0 |
| 310.0 | 0.0 |
| 310.5 | 0.0 |
| 311.0 | 0.0 |
| 311.5 | 0.0 |
| ... | ... |
| 1088.0 | 1.4047478487131598e-05 |
| 1088.5 | 1.3381635345231842e-05 |
| 1089.0 | 1.2695562694036574e-05 |
| 1089.5 | 1.178503602729762e-05 |
| 1090.0 | 1.0911615893675223e-05 |
| 1090.5 | 1.0059334791878973e-05 |
| 1091.0 | 9.3327321715833e-06 |
| 1091.5 | 8.914499693094114e-06 |
| 1092.0 | 8.386950403699205e-06 |
| 1092.5 | 7.877550647137384e-06 |
| 1093.0 | 7.476924019368631e-06 |
| 1093.5 | 7.2659050779381405e-06 |
| 1094.0 | 6.9762677914632815e-06 |
| 1094.5 | 6.629896382855556e-06 |
| 1095.0 | 6.325236419150495e-06 |
| 1095.5 | 5.436392903270596e-06 |
| 1096.0 | 4.598409290875889e-06 |
| 1096.5 | 3.877249400605691e-06 |
| 1097.0 | 3.206190869040487e-06 |
| 1097.5 | 2.7525637363371258e-06 |
| 1098.0 | 2.3390496522720234e-06 |
| 1098.5 | 2.217769197697782e-06 |
| 1099.0 | 1.8478640665008953e-06 |
| 1099.5 | 7.121949252324133e-07 |
| 1100.0 | 0.0 |
3. Plot the ugrizy bandpasses¶
Plot the bandpass (throughput vs. wavelength) for each filter.
fig = plt.figure(figsize=(6, 4))
for filt in filter_names:
bp_table = butler.get("standard_passband",
instrument="LSSTCam", band=filt)
plt.plot(bp_table['wavelength'], bp_table['throughput'],
ls=filter_linestyles[filt], color=filter_colors[filt],
label=filt)
plt.ylim([0.0, 65])
plt.xlabel('Wavelength (nm)')
plt.ylabel('Throughput (%)')
plt.legend(loc='upper left', ncol=2)
plt.show()
Figure 1: Throughputs as a function of wavelength for the six LSSTCam filters, $ugrizy$.