def test_wcsndmap_init(npix, binsz, frame, proj, skydir, axes): geom = WcsGeom.create(npix=npix, binsz=binsz, proj=proj, frame=frame, axes=axes) m0 = WcsNDMap(geom) coords = m0.geom.get_coord() m0.set_by_coord(coords, coords[1]) m1 = WcsNDMap(geom, m0.data) assert_allclose(m0.data, m1.data)
def test_wcsndmap_interp_by_coord(npix, binsz, frame, proj, skydir, axes): geom = WcsGeom.create( npix=npix, binsz=binsz, skydir=skydir, proj=proj, frame=frame, axes=axes ) m = WcsNDMap(geom) coords = m.geom.get_coord().flat m.set_by_coord(coords, coords[1].value) assert_allclose(coords[1].value, m.interp_by_coord(coords, method="nearest")) assert_allclose(coords[1].value, m.interp_by_coord(coords, method="linear")) assert_allclose(coords[1].value, m.interp_by_coord(coords, method="linear"))
def test_set_get_by_coord_quantities(): ax = MapAxis(np.logspace(0.0, 3.0, 3), interp="log", name="energy", unit="TeV") geom = WcsGeom.create(binsz=0.1, npix=(3, 4), axes=[ax]) m = WcsNDMap(geom) coords_dict = {"lon": 0, "lat": 0, "energy": 1000 * u.GeV} m.set_by_coord(coords_dict, 42) coords_dict["energy"] = 1 * u.TeV assert_allclose(42, m.get_by_coord(coords_dict))
def test_wcsndmap_interp_by_coord(npix, binsz, frame, proj, skydir, axes): geom = WcsGeom.create( npix=npix, binsz=binsz, skydir=skydir, proj=proj, frame=frame, axes=axes ) m = WcsNDMap(geom) coords = m.geom.get_coord(flat=True) m.set_by_coord(coords, coords[1].value) assert_allclose(coords[1].value, m.interp_by_coord(coords, interp="nearest")) assert_allclose(coords[1].value, m.interp_by_coord(coords, interp="linear")) assert_allclose(coords[1].value, m.interp_by_coord(coords, interp=1)) if geom.is_regular and not geom.is_allsky: assert_allclose( coords[1].to_value("deg"), m.interp_by_coord(coords, interp="cubic") )
def test_interp_by_coord_quantities(): ax = MapAxis( np.logspace(0.0, 3.0, 3), interp="log", name="energy", unit="TeV", node_type="center", ) geom = WcsGeom.create(binsz=0.1, npix=(3, 3), axes=[ax]) m = WcsNDMap(geom) coords_dict = {"lon": 0, "lat": 0, "energy": 1000 * u.GeV} m.set_by_coord(coords_dict, 42) coords_dict["energy"] = 1 * u.TeV assert_allclose(42.0, m.interp_by_coord(coords_dict, method="nearest"))
def test_wcsndmap_set_get_by_coord(npix, binsz, frame, proj, skydir, axes): geom = WcsGeom.create( npix=npix, binsz=binsz, skydir=skydir, proj=proj, frame=frame, axes=axes ) m = WcsNDMap(geom) coords = m.geom.get_coord() m.set_by_coord(coords, coords[0]) assert_allclose(coords[0].value, m.get_by_coord(coords)) # Test with SkyCoords m = WcsNDMap(geom) coords = m.geom.get_coord() skydir = coords.skycoord skydir_cel = skydir.transform_to("icrs") skydir_gal = skydir.transform_to("galactic") m.set_by_coord((skydir_gal,) + tuple(coords[2:]), coords[0]) assert_allclose(coords[0].value, m.get_by_coord(coords)) assert_allclose( m.get_by_coord((skydir_cel,) + tuple(coords[2:])), m.get_by_coord((skydir_gal,) + tuple(coords[2:])), ) # Test with MapCoord m = WcsNDMap(geom) coords = m.geom.get_coord() coords_dict = dict(lon=coords[0], lat=coords[1]) if axes: for i, ax in enumerate(axes): coords_dict[ax.name] = coords[i + 2] map_coords = MapCoord.create(coords_dict, frame=frame) m.set_by_coord(map_coords, coords[0]) assert_allclose(coords[0].value, m.get_by_coord(map_coords))
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_wcsndmap_set_get_by_coord(npix, binsz, coordsys, proj, skydir, axes): geom = WcsGeom.create(npix=npix, binsz=binsz, skydir=skydir, proj=proj, coordsys=coordsys, axes=axes) m = WcsNDMap(geom) coords = m.geom.get_coord() m.set_by_coord(coords, coords[0]) assert_allclose(coords[0], m.get_by_coord(coords)) if not geom.is_allsky: coords[1][...] = 0.0 assert_allclose(np.nan * np.ones(coords[0].shape), m.get_by_coord(coords)) # Test with SkyCoords m = WcsNDMap(geom) coords = m.geom.get_coord() skydir = SkyCoord(coords[0], coords[1], unit="deg", frame=coordsys_to_frame(geom.coordsys)) skydir_cel = skydir.transform_to("icrs") skydir_gal = skydir.transform_to("galactic") m.set_by_coord((skydir_gal, ) + tuple(coords[2:]), coords[0]) assert_allclose(coords[0], m.get_by_coord(coords)) assert_allclose( m.get_by_coord((skydir_cel, ) + tuple(coords[2:])), m.get_by_coord((skydir_gal, ) + tuple(coords[2:])), ) # Test with MapCoord m = WcsNDMap(geom) coords = m.geom.get_coord() coords_dict = dict(lon=coords[0], lat=coords[1]) if axes: for i, ax in enumerate(axes): coords_dict[ax.name] = coords[i + 2] map_coords = MapCoord.create(coords_dict, coordsys=coordsys) m.set_by_coord(map_coords, coords[0]) assert_allclose(coords[0], m.get_by_coord(map_coords))