Skip to content

Commit 91428c5

Browse files
committed
handle unitless quantities
1 parent 66f6656 commit 91428c5

1 file changed

Lines changed: 30 additions & 13 deletions

File tree

src/pst/utils.py

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -463,35 +463,52 @@ def flux_conserving_interpolation(new_wave, wave, spectra, *,
463463
-----
464464
- For rigorous covariance propagation, prefer `method="binfrac"`.
465465
"""
466-
wave = check_unit(wave)
467-
new_wave = check_unit(new_wave, wave.unit)
468-
if not isinstance(spectra, u.Quantity):
469-
spectra = spectra.copy() << u.dimensionless_unscaled
466+
if isinstance(wave, u.Quantity):
467+
new_wave = check_unit(new_wave, wave.unit)
468+
wl_unit = wave.unit
469+
wl = wave.value
470+
new_wl = new_wave.value
471+
elif isinstance(new_wave, u.Quantity):
472+
raise ValueError("New wavelength is a Quantity but original wavelength"
473+
" is not")
474+
else:
475+
wl_unit = 1.0
476+
wl = wave
477+
new_wl = new_wave
478+
479+
if isinstance(spectra, u.Quantity):
480+
spec_unit = spectra.unit
481+
spec = spectra.value
482+
else:
483+
spec_unit = 1.0
484+
spec = spectra
470485

471486
if spectra_err is not None:
472-
spectra_var_v = spectra_err.to_value(spectra.unit)**2
487+
if isinstance(spectra_err, u.Quantity):
488+
spectra_var_v = spectra_err.to_value(spec_unit)**2
489+
else:
490+
spectra_var_v = spectra_err**2
473491
else:
474492
spectra_var_v = None
475493
# Select interpolation method
476494
if method == "cumulative":
477-
int_spec = resample_via_cumulative_masked(wave.value, spectra.value,
478-
w_out=new_wave.value,
495+
int_spec = resample_via_cumulative_masked(wl, spec, w_out=new_wl,
479496
**interp_args)
480497
int_var = None
481498
if spectra_err is not None:
482-
int_var = resample_via_cumulative_masked(wave.value, spectra_var_v,
483-
w_out=new_wave.value,
499+
int_var = resample_via_cumulative_masked(wl, spectra_var_v,
500+
w_out=new_wl,
484501
**interp_args)
485502
elif method == "binfrac":
486-
int_spec, int_var = resample_via_bin_frac(wave, spectra.value,
487-
w_out=new_wave.value,
503+
int_spec, int_var = resample_via_bin_frac(wl, spec,
504+
w_out=new_wl,
488505
var_in=spectra_var_v,
489506
**interp_args)
490507
else:
491508
raise KeyError(f"Unrecognised interpolation method {method}")
492509
if spectra_var_v is None:
493-
return int_spec << spectra.unit
494-
return int_spec << spectra.unit, int_var << spectra.unit**2
510+
return int_spec * spec_unit
511+
return int_spec * spec_unit, int_var * spec_unit**2
495512

496513
def gaussian1d_conv(f, sigma, deltax):
497514
"""Apply a gaussian convolution to a 1D array f(x).

0 commit comments

Comments
 (0)