Skip to content

Commit e7bb4cc

Browse files
committed
filter accepts fnu and flambda
1 parent 784002a commit e7bb4cc

1 file changed

Lines changed: 42 additions & 3 deletions

File tree

src/pst/observables.py

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,10 +292,49 @@ def interpolate(self, wavelength=None):
292292
return self.response
293293

294294
def _check_spectra(self, spectra, default_unit=u.Lsun / u.angstrom / u.cm**2):
295-
if spectra is not None and not isinstance(spectra, u.Quantity):
296-
return spectra * default_unit
297-
else:
295+
"""
296+
Ensure that ``spectra`` is an astropy Quantity and return it as flux density
297+
per wavelength (F_lambda), using `self.wavelength` for conversions if
298+
necessary.
299+
300+
Parameters
301+
----------
302+
spectra : array-like or ~astropy.units.Quantity
303+
Spectrum values. If array-like (dimensionless), it will be multiplied by
304+
`default_unit`. If a Quantity, it may be either F_nu (per frequency) or
305+
F_lambda (per wavelength).
306+
default_unit : ~astropy.units.Unit, optional
307+
Target per-wavelength flux-density unit to return, e.g. Lsun / Å / cm²
308+
(must be equivalent to power / area / length).
309+
310+
Returns
311+
-------
312+
astropy.units.Quantity
313+
Spectrum expressed in `default_unit` (per-wavelength flux density).
314+
315+
Notes
316+
-----
317+
- Requires `self.wavelength` to be defined as an astropy Quantity with
318+
length units.
319+
- If `spectra` is already per wavelength, only a unit conversion is applied.
320+
- If `spectra` is per frequency, the conversion uses
321+
`equivalencies=u.spectral_density(self.wavelength)`.
322+
"""
323+
if spectra is None:
324+
return None
325+
326+
if not isinstance(spectra, u.Quantity):
327+
spectra = u.Quantity(spectra, default_unit)
328+
# Check flux density units
329+
if spectra.unit.is_equivalent(u.W / (u.m**2 * u.m)):
298330
return spectra
331+
elif spectra.unit.is_equivalent(u.W / (u.m**2 * u.Hz)):
332+
return spectra.to(default_unit, equivalencies=u.spectral_density(self.wavelength))
333+
else:
334+
raise ValueError(
335+
f"Cannot interpret spectral flux units {spectra.unit}. "
336+
"Expected per-frequency or per-wavelength flux density."
337+
)
299338

300339
def get_photons(self, spectra, spectra_err=None, mask_nan=True):
301340
r"""Compute the photon flux from an input spectra.

0 commit comments

Comments
 (0)