@@ -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
496513def gaussian1d_conv (f , sigma , deltax ):
497514 """Apply a gaussian convolution to a 1D array f(x).
0 commit comments