specutils fit_generic_continuum дает TypeError при использовании на Spectrum1D - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь подогнать общий континуум c к моему спектру, чтобы его нормализовать (я понимаю, что это не очень хороший метод для сложных спектров, но не могу найти хорошую процедуру нормализации континуума для спектров. в Python, поэтому, если вы знаете один, дайте мне знать !!).

Вот мой код. w - это массив длин волн, а f - массив потоков (которые являются просто импортированными данными):

from astropy.modeling import models
from astropy import units as u

from specutils import Spectrum1D, SpectralRegion
from specutils.fitting import fit_generic_continuum

spectrum = Spectrum1D(spectral_axis=w*u.Angstrom, flux=f*u.Jy)

g1_fit = fit_generic_continuum(spectrum)

f_continuum_fitted = g1_fit(w*u.Angstrom)

spec_normalized = spectrum / f_continuum_fitted

Теперь это работало ДО того, как я недавно обновил astropy и specutils. Но теперь я внезапно получаю TypeError: 'int' object is not callable в строке g1_fit = fit_generic_continuum(spectrum). Я пробовал удалить и переустановить specutils, но все равно получаю ту же ошибку. Еще пробовал переименовать спектр во что-то другое.

Было ли что-то новенькое в обновлении с fit_generic_continuum, или мне чего-то не хватает?

Заранее большое спасибо !!

Я использую Astropy версии 4.0.1 и specutils версии 0.6

Полная ошибка:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-b277c08fb857> in <module>
     14 spectrum = Spectrum1D(spectral_axis=w*u.Angstrom, flux=f*u.Jy)
     15 
---> 16 g1_fit = fit_generic_continuum(spectrum)
     17 
     18 f_continuum_fitted = g1_fit(w*u.Angstrom)

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

/anaconda3/lib/python3.6/site-packages/specutils/fitting/continuum.py in fit_continuum(spectrum, model, fitter, exclude_regions, window, weights)
     95     #
     96 
---> 97     continuum_spectrum = fit_lines(spectrum, model, fitter, exclude_regions, weights)
     98 
     99     return continuum_spectrum

/anaconda3/lib/python3.6/site-packages/specutils/fitting/fitmodels.py in fit_lines(spectrum, model, fitter, exclude_regions, weights, window, **kwargs)
    358         fit_model = _fit_lines(spectrum, model_guess, fitter,
    359                                exclude_regions, weights, model_window,
--> 360                                ignore_units, **kwargs)
    361 
    362         fitted_models.append(fit_model)

/anaconda3/lib/python3.6/site-packages/specutils/fitting/fitmodels.py in _fit_lines(spectrum, model, fitter, exclude_regions, weights, window, ignore_units, **kwargs)
    474 
    475     model_unitless, dispersion_unitless, flux_unitless = \
--> 476         _strip_units_from_model(model, spectrum, convert=not ignore_units)
    477 
    478     #

/anaconda3/lib/python3.6/site-packages/specutils/fitting/fitmodels.py in _strip_units_from_model(model_in, spectrum, convert)
    602     #
    603 
--> 604     compound_model = model_in.n_submodels() > 1
    605 
    606     if not compound_model:

TypeError: 'int' object is not callable

1 Ответ

0 голосов
/ 22 мая 2020

У меня нет решения вашей проблемы с кодом, но, поскольку вы запросили рекомендации по процедурам нормализации, я могу вам с этим помочь. Я использую пакет linetools на основе Python. В нем есть процедура lt_continuumfit, которая прекрасно справляется с нормализацией континуума. Это все, что я сейчас использую для нормализации. Он очень прост в установке и использовании, а также имеет множество других функций (ребин, графики скорости, сращивание и т. Д. c). https://linetools.readthedocs.io/en/latest/

...