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_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, interp="nearest"))
print(diffuse_galactic.geom.axes[0]) # In[ ]: diffuse_galactic.slice_by_idx({"energy": 0}).plot(); # In[ ]: # Exposure varies very little with energy at these high energies energy = np.logspace(1, 3, 10) * u.GeV dnde = diffuse_galactic.interp_by_coord( {"skycoord": gc_pos, "energy": energy}, interp="linear", fill_value=None ) plt.plot(energy.value, dnde, "*") plt.loglog() plt.xlabel("Energy (GeV)") plt.ylabel("Flux (cm-2 s-1 MeV-1 sr-1)") # In[ ]: # TODO: show how one can fix the extrapolate to high energy # by computing and padding an extra plane e.g. at 1e3 TeV # that corresponds to a linear extrapolation