def test_normalize_parts():
    w = np.arange(4000., 5000., 10.)
    coeff = [1., 0.1, 0.1]
    pol = Polynomial(coeff)
    obs_spectrum = Spectrum1D.from_array(w, pol(w), dispersion_unit=u.AA)
    parts = [slice(0, 30), slice(30, None)]
    norm_parts = NormalizeParts(obs_spectrum, parts, npol=[3, 3])
    model = Spectrum1D.from_array(w, np.ones_like(w), dispersion_unit=u.AA)
    fit = norm_parts(model)
    npt.assert_allclose(fit.flux.value, obs_spectrum.flux.value)
    for normalizer in norm_parts.normalizers:
        npt.assert_allclose(normalizer.polynomial.convert().coef,
                            np.array(coeff + [0.]),
                            rtol=1e-3,
                            atol=1.e-5)
    # try also with boolean arrays
    parts = [np.where(w < 4400.), np.where(w >= 4400.)]
    norm_parts = NormalizeParts(obs_spectrum, parts, npol=[3, 3])
    model = Spectrum1D.from_array(w, np.ones_like(w), dispersion_unit=u.AA)
    fit = norm_parts(model)
    npt.assert_allclose(fit.flux, obs_spectrum.flux)
    for normalizer in norm_parts.normalizers:
        npt.assert_allclose(normalizer.polynomial.convert().coef,
                            np.array(coeff + [0.]),
                            rtol=1e-3,
                            atol=1.e-5)
Beispiel #2
0
def test_normalize():
    w = np.arange(4000., 5000., 10.)
    coeff = [1., 0.1, 0.1]
    pol = Polynomial(coeff)
    obs_spectrum = Spectrum1D.from_array(w, pol(w), dispersion_unit=u.AA,unit='erg/(cm^2 s Angstrom)')
    norm = Normalize(obs_spectrum, npol=3)
    model = Spectrum1D.from_array(w, np.ones_like(w), dispersion_unit=u.AA,unit='erg/(cm^2 s Angstrom)')
    fit = norm(model)
    nptesting.assert_allclose(fit.flux.value, obs_spectrum.flux.value)
    nptesting.assert_allclose(norm.polynomial(obs_spectrum.wavelength.value),
                        obs_spectrum.flux.value)
    nptesting.assert_allclose(norm.polynomial.convert().coef,
                        np.array(coeff + [0.]), rtol=1e-5, atol=1.e-10)
def test_flux_fix_spectrum1d():
    test_spec = Spectrum1D.from_array(np.arange(3000, 9000),
                                      np.random.random(6000),
                                      dispersion_unit='angstrom',
                                      unit='erg/s')

    assert test_spec.flux.unit == u.Unit('erg/s')
Beispiel #4
0
def test_interpolate():
    obs_spectrum = Spectrum1D.from_array(np.arange(1,26), np.zeros(25),
                                         dispersion_unit='micron',
                                         unit='erg/(cm^2 s Angstrom)')
    test_spectrum = Spectrum1D.from_array(np.arange(0.5, 26.5, 1),
                                          np.arange(0.5, 26.5, 1),
                                          dispersion_unit='micron',
                                          unit='erg/(cm^2 s Angstrom)')

    interpolate_plugin = Interpolate(obs_spectrum)
    interpolated_test_spectrum = interpolate_plugin(test_spectrum)

    expected_interpolated_flux = np.arange(1,26)
    interpolated_test_flux = interpolated_test_spectrum.flux

    nptesting.assert_array_almost_equal(interpolated_test_flux.value,
                                  expected_interpolated_flux, decimal=6)
Beispiel #5
0
def test_normalize_parts():
    w = np.arange(4000., 5000., 10.)
    coeff = [1., 0.1, 0.1]
    pol = Polynomial(coeff)
    obs_spectrum = Spectrum1D.from_array(w, pol(w), dispersion_unit=u.AA)
    parts = [slice(0, 30), slice(30, None)]
    norm_parts = NormalizeParts(obs_spectrum, parts, npol=[3, 3])
    model = Spectrum1D.from_array(w, np.ones_like(w), dispersion_unit=u.AA)
    fit = norm_parts(model)
    nptesting.assert_allclose(fit.flux.value, obs_spectrum.flux.value)
    for normalizer in norm_parts.normalizers:
        nptesting.assert_allclose(normalizer.polynomial.convert().coef,
                            np.array(coeff + [0.]), rtol=1e-3, atol=1.e-5)
    # try also with boolean arrays
    parts = [np.where(w < 4400.), np.where(w >= 4400.)]
    norm_parts = NormalizeParts(obs_spectrum, parts, npol=[3, 3])
    model = Spectrum1D.from_array(w, np.ones_like(w), dispersion_unit=u.AA)
    fit = norm_parts(model)
    nptesting.assert_allclose(fit.flux, obs_spectrum.flux)
    for normalizer in norm_parts.normalizers:
        nptesting.assert_allclose(normalizer.polynomial.convert().coef,
                            np.array(coeff + [0.]), rtol=1e-3, atol=1.e-5)
Beispiel #6
0
def test_convolution():
    my_spec = Spectrum1D.from_array(np.linspace(6000, 8000, 2000),
                                    np.ones(2000), dispersion_unit='Angstrom',
                                    unit='erg/(cm^2 s Angstrom)')
    my_spec.flux[1000] = 0.0


    convolve_plugin = InstrumentConvolve(R=6000)
    conv_spectrum = convolve_plugin(my_spec)
    assert conv_spectrum.flux[999].value < 1.
    assert conv_spectrum.flux[1000].value > 0

    integral_pre_convolved = simps(my_spec.flux, my_spec.wavelength.value)
    integral_convolved = simps(conv_spectrum.flux,
                               conv_spectrum.wavelength.value)

    nptesting.assert_allclose(integral_pre_convolved, integral_convolved,
                        rtol=1.0, atol=0.0002)
def test_flux_fix_spectrum1d():
    test_spec = Spectrum1D.from_array(np.arange(3000, 9000), np.random.random(6000),
                          dispersion_unit='angstrom',
                          unit='erg/s')

    assert test_spec.flux.unit == u.Unit('erg/s')