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"
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)
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])
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)