コード例 #1
0
ファイル: test_spectral.py プロジェクト: maxnoe/gammapy
def test_template_ND(tmpdir):
    energy_axis = MapAxis.from_bounds(1.0,
                                      100,
                                      10,
                                      interp="log",
                                      name="energy_true",
                                      unit="GeV")
    norm = MapAxis.from_bounds(0, 10, 10, interp="lin", name="norm", unit="")
    tilt = MapAxis.from_bounds(-1.0, 1, 5, interp="lin", name="tilt", unit="")
    region_map = RegionNDMap.create(region="icrs;point(83.63, 22.01)",
                                    axes=[energy_axis, norm, tilt])
    region_map.data[:, :, :5, 0, 0] = 1
    region_map.data[:, :, 5:, 0, 0] = 2

    template = TemplateNDSpectralModel(region_map)
    assert len(template.parameters) == 2
    assert template.parameters["norm"].value == 5
    assert template.parameters["tilt"].value == 0
    assert_allclose(template([1, 100, 1000] * u.GeV), [1.0, 2.0, 2.0])

    template.parameters["norm"].value = 1
    template.filename = str(tmpdir / "template_ND.fits")
    template.write()
    dict_ = template.to_dict()
    template_new = TemplateNDSpectralModel.from_dict(dict_)
    assert_allclose(template_new.map.data, region_map.data)
    assert len(template_new.parameters) == 2
    assert template_new.parameters["norm"].value == 1
    assert template_new.parameters["tilt"].value == 0
コード例 #2
0
ファイル: test_spectral.py プロジェクト: maxnoe/gammapy
def test_template_ND_no_energy(tmpdir):
    norm = MapAxis.from_bounds(0, 10, 10, interp="lin", name="norm", unit="")
    tilt = MapAxis.from_bounds(-1.0, 1, 5, interp="lin", name="tilt", unit="")
    region_map = RegionNDMap.create(region="icrs;point(83.63, 22.01)",
                                    axes=[norm, tilt])
    region_map.data[:, :5, 0, 0] = 1
    region_map.data[:, 5:, 0, 0] = 2

    with pytest.raises(ValueError):
        TemplateNDSpectralModel(region_map)
コード例 #3
0
ファイル: test_spectral.py プロジェクト: maxnoe/gammapy
def test_template_ND_EBL(tmpdir):

    #TODO: add RegionNDMap.read(format="xspec")
    # Create EBL data array
    filename = "$GAMMAPY_DATA/ebl/ebl_franceschini.fits.gz"
    filename = make_path(filename)
    table_param = Table.read(filename, hdu="PARAMETERS")
    npar = len(table_param)
    par_axes = []
    idx_data = []
    for k in range(npar):
        name = table_param["NAME"][k].lower().strip()
        param, idx = np.unique(table_param[0]["VALUE"], return_index=True)
        par_axes.append(
            MapAxis(param,
                    node_type="center",
                    interp="lin",
                    name=name,
                    unit=""))
        idx_data.append(idx)
    idx_data.append(Ellipsis)
    idx_data = tuple(idx_data)

    # Get energy values
    table_energy = Table.read(filename, hdu="ENERGIES")
    energy_lo = u.Quantity(table_energy["ENERG_LO"], "keV",
                           copy=False)  # unit not stored in file
    energy_hi = u.Quantity(table_energy["ENERG_HI"], "keV",
                           copy=False)  # unit not stored in file
    energy = np.sqrt(energy_lo * energy_hi)

    # Get spectrum values
    table_spectra = Table.read(filename, hdu="SPECTRA")

    energy_axis = MapAxis(energy,
                          node_type="center",
                          interp="log",
                          name="energy_true")
    region_map = RegionNDMap.create(region="galactic;point(0, 0)",
                                    axes=[energy_axis] + par_axes)
    #TODO: here we use a fake position, is it possible to allow region=None ?
    data = table_spectra["INTPSPEC"].data[idx_data]
    region_map.data[:, :, 0, 0] = data

    template = TemplateNDSpectralModel(region_map)
    assert len(template.parameters) == 1
    assert_allclose(template.parameters["redshift"].value, 1.001, rtol=1e-3)
    expected = [9.950501e-01, 4.953951e-01, 1.588062e-06]
    assert_allclose(template([1, 100, 1000] * u.GeV), expected, rtol=1e-3)
    template.parameters["redshift"].value = 0.1
    template.filename = str(tmpdir / "template_ND_ebl_franceschini.fits")
    template.write()
    dict_ = template.to_dict()
    template_new = TemplateNDSpectralModel.from_dict(dict_)
    assert_allclose(template_new.map.data, region_map.data)
    assert len(template.parameters) == 1
    assert_allclose(template.parameters["redshift"].value, 0.1)