Beispiel #1
0
def test_wcsndmap_reproject():
    skydir = SkyCoord(110.0, 75.0, unit="deg", frame="icrs")
    geom = WcsGeom.create(npix=10,
                          binsz=1.0,
                          coordsys="GAL",
                          proj="AIT",
                          skydir=skydir)
    geom_new = geom.downsample(2)

    data = np.arange(np.prod(geom.data_shape)).reshape(geom.data_shape)
    m = WcsNDMap(data=data, geom=geom, unit="m2")

    m_reprojected = m.reproject(geom_new, order=1)
    assert m.unit == m_reprojected.unit

    assert_allclose(m_reprojected.data[0, 0], 5.5)
    assert_allclose(m_reprojected.data[4, 4], 93.5)

    energy_axis = MapAxis.from_bounds(0.1, 10, 2, name="energy", interp="log")
    geom_3d = geom.to_cube([energy_axis])

    data = np.arange(np.prod(geom_3d.data_shape)).reshape(geom_3d.data_shape)
    m = WcsNDMap(data=data, geom=geom_3d, unit="m2")

    m_reprojected = m.reproject(geom_new, order=1)
    assert m.unit == m_reprojected.unit

    assert_allclose(m_reprojected.data[0, 0, 0], 5.5)
    assert_allclose(m_reprojected.data[1, 4, 4], 193.5)

    assert m_reprojected.geom.axes[0].name == "energy"
Beispiel #2
0
def test_map_reproject_wcs_to_wcs():
    energy_nodes = np.arange(3)
    time_nodes = np.arange(4)

    axis1 = MapAxis(energy_nodes,
                    interp="lin",
                    name="energy",
                    node_type="center")
    axis2 = MapAxis(time_nodes, interp="lin", name="time", node_type="center")
    geom_wcs_1 = WcsGeom.create(
        skydir=(266.405, -28.936),
        npix=(11, 11),
        binsz=0.1,
        axes=[axis1, axis2],
        coordsys="CEL",
    )
    geom_wcs_2 = WcsGeom.create(skydir=(0, 0),
                                npix=(11, 11),
                                binsz=0.1,
                                coordsys="GAL")

    spatial_data = np.zeros((11, 11))
    energy_data = energy_nodes.reshape(3, 1, 1)
    time_data = time_nodes.reshape(4, 1, 1, 1)
    data = spatial_data + energy_data + 0.5 * time_data
    m = WcsNDMap(geom_wcs_1, data=data)

    m_r = m.reproject(geom_wcs_2)

    assert m.data.shape == m_r.data.shape

    for data, idx in m_r.iter_by_image():
        ref = idx[1] + 0.5 * idx[0]
        assert_allclose(np.nanmean(data), ref)
Beispiel #3
0
def test_wcsndmap_reproject_allsky_car():
    geom = WcsGeom.create(binsz=10.0, proj="CAR", coordsys="CEL")
    m = WcsNDMap(geom)
    coords = m.geom.get_coord()
    m.set_by_coord(coords, coords[0].value)

    geom0 = WcsGeom.create(binsz=1.0,
                           proj="CAR",
                           coordsys="CEL",
                           skydir=(180.0, 0.0),
                           width=30.0)
    m0 = m.reproject(geom0, order=1)
    coords0 = m0.geom.get_coord()
    assert_allclose(m0.get_by_coord(coords0), coords0[0].value)

    geom1 = HpxGeom.create(binsz=5.0, coordsys="CEL")
    m1 = m.reproject(geom1, order=1)
    coords1 = m1.geom.get_coord()

    m = (coords1[0] > 10) & (coords1[0] < 350)
    assert_allclose(m1.get_by_coord((coords1[0][m], coords1[1][m])),
                    coords1[0][m])
Beispiel #4
0
def test_map_reproject_wcs_to_hpx():
    axis = MapAxis.from_bounds(1.0,
                               10.0,
                               3,
                               interp="log",
                               name="energy",
                               node_type="center")
    geom_wcs = WcsGeom.create(skydir=(0, 0),
                              npix=(11, 11),
                              binsz=10,
                              axes=[axis],
                              coordsys="GAL")
    geom_hpx = HpxGeom.create(binsz=10, coordsys="GAL", axes=[axis])

    data = np.arange(11 * 11 * 3).reshape(geom_wcs.data_shape)
    m = WcsNDMap(geom_wcs, data=data)

    m_r = m.reproject(geom_hpx)
    actual = m_r.get_by_coord({
        "lon": 0,
        "lat": 0,
        "energy": [1.0, 3.16227766, 10.0]
    })
    assert_allclose(actual, [65.0, 186.0, 307.0], rtol=1e-3)