astropy / astropy/specutils

fit_generic_continuum compatibility with Astropy BlackBody model

Open
#795 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
204
Forks
134
Avg merge
12h 55m
Merged PRs (30d)
1

Description

Hi,

I am trying to use specutils to fit the continuum of some spectrum with a black body model. I think the appropriate way to do that is initialise the model and pass it into the fit_generic_continuum function, as below. However, somehow specutils or Astropy do not recognise the temperature parameter as a Quantity, even though it is passed in as a Quantity. I'm using Astropy version=4.2 and specutils version=1.1.1.

Thanks in advance,

Ben

```
import numpy as np
import astropy.units as u
from specutils import Spectrum1D
from specutils.fitting import fit_generic_continuum
from astropy.modeling.models import BlackBody

dat = np.loadtxt('some/spectrum/file.dat')
wav = (dat[:,0] / (1 + 0.032)) * u.AA
flux = dat[:,1] * u.Unit('erg cm-2 s-1 AA-1')
temp = 10000*u.K
spec = Spectrum1D(spectral_axis=wav, flux=flux)
continuum_model = fit_generic_continuum(spec, model=BlackBody(temperature=temp))

---------------------------------------------------------------------------
UnitsError Traceback (most recent call last)
~/Documents/postdoc/het/analysis/SN2020wnt/flatten/flatten_templates.py in
34
35 spec = Spectrum1D(spectral_axis=wav, flux=flux)
---> 36 continuum_model = fit_generic_continuum(spec,model=[BlackBody(temperature=temp)])
37 continuum_flux = continuum_model(spec.spectral_axis)
38

~/anaconda3/lib/python3.7/site-packages/specutils/fitting/continuum.py in fit_generic_continuum(spectrum, median_window, model, fitter, exclude_regions, weights)
57 #
58
---> 59 return fit_continuum(spectrum_smoothed, model, fitter, exclude_regions, weights)
60
61

~/anaconda3/lib/python3.7/site-packages/specutils/fitting/continuum.py in fit_continuum(spectrum, model, fitter, exclude_regions, window, weights)
102
103 continuum_spectrum = fit_lines(spectrum, model, fitter, exclude_regions,
--> 104 weights, w)
105
106 return continuum_spectrum

~/anaconda3/lib/python3.7/site-packages/specutils/fitting/fitmodels.py in fit_lines(spectrum, model, fitter, exclude_regions, weights, window, **kwargs)
362 fit_model = _fit_lines(spectrum, model_guess, fitter,
363 exclude_regions, weights, model_window,
--> 364 ignore_units, **kwargs)
365 if model_guess.name is not None:
366 fit_model.name = model_guess.name

~/anaconda3/lib/python3.7/site-packages/specutils/fitting/fitmodels.py in _fit_lines(spectrum, model, fitter, exclude_regions, weights, window, ignore_units, **kwargs)
493
494 model_unitless, dispersion_unitless, flux_unitless = \
--> 495 _strip_units_from_model(model, spectrum, convert=not ignore_units)
496
497 #

~/anaconda3/lib/python3.7/site-packages/specutils/fitting/fitmodels.py in _strip_units_from_model(model_in, spectrum, convert)
654 # new sub model.
655 #
--> 656 setattr(new_sub_model, pn, v)
657
658 #

~/anaconda3/lib/python3.7/site-packages/astropy/modeling/core.py in __setattr__(self, attr, value)
899 else:
900 if not isinstance(value, Quantity):
--> 901 raise UnitsError(f"The '{param.name}' parameter should be given as a"
902 " Quantity because it was originally "
903 "initialized as a Quantity")

UnitsError: The 'temperature' parameter should be given as a Quantity because it was originally initialized as a Quantity

```

Contributor guide

Open the contributing guide

Research direction

Start in specutils/fitting/continuum.py and follow the fit_continuum path into specutils/fitting/fitmodels.py, especially _strip_units_from_model. Reproduce the failure with the supplied Spectrum1D and BlackBody example using the reported Astropy and specutils versions. Done means the model can be passed to fit_generic_continuum without losing the Quantity required by its temperature parameter.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.