specutils fit_generic_continuum 在 Spectrum1D 上使用时出现 TypeError
specutils fit_generic_continuum giving TypeError when used on Spectrum1D
我正在尝试将通用连续谱拟合到我的光谱中以对其进行归一化(我意识到这对于复杂的光谱来说不是一个很好的方法,但似乎无法找到一个好的连续谱归一化例程用于光谱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 之前起作用了。但是现在,我突然在 g1_fit = fit_generic_continuum(spectrum)
行得到一个 TypeError: 'int' object is not callable
。我已经尝试卸载并重新安装 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
我没有解决您的代码问题的方法,但由于您要求提供规范化例程的建议,我可以帮助您解决这个问题。我使用基于 Python 的 linetools 包。其中有一个例程 "lt_continuumfit" 可以很好地标准化连续体。这就是我现在用于规范化的全部内容。它非常易于安装和使用,并且还有许多其他功能(重组、速度图、拼接等)。 https://linetools.readthedocs.io/en/latest/
我正在尝试将通用连续谱拟合到我的光谱中以对其进行归一化(我意识到这对于复杂的光谱来说不是一个很好的方法,但似乎无法找到一个好的连续谱归一化例程用于光谱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 之前起作用了。但是现在,我突然在 g1_fit = fit_generic_continuum(spectrum)
行得到一个 TypeError: 'int' object is not callable
。我已经尝试卸载并重新安装 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
我没有解决您的代码问题的方法,但由于您要求提供规范化例程的建议,我可以帮助您解决这个问题。我使用基于 Python 的 linetools 包。其中有一个例程 "lt_continuumfit" 可以很好地标准化连续体。这就是我现在用于规范化的全部内容。它非常易于安装和使用,并且还有许多其他功能(重组、速度图、拼接等)。 https://linetools.readthedocs.io/en/latest/