Ejemplo n.º 1
0
def test_hpxgeom_coord_to_idx(nside, nested, frame, region, axes):
    import healpy as hp

    geom = HpxGeom(nside, nested, frame, region=region, axes=axes)
    lon = np.array([112.5, 135.0, 105.0])
    lat = np.array([75.3, 75.3, 74.6])
    coords = make_test_coords(geom, lon, lat)
    zidx = tuple([ax.coord_to_idx(t) for t, ax in zip(coords[2:], geom.axes)])

    if geom.nside.size > 1:
        nside = geom.nside[zidx]
    else:
        nside = geom.nside

    phi, theta = coords.phi, coords.theta
    idx = geom.coord_to_idx(coords)
    assert_allclose(hp.ang2pix(nside, theta, phi), idx[0])
    for i, z in enumerate(zidx):
        assert_allclose(z, idx[i + 1])

    # Test w/ coords outside the geometry
    lon = np.array([0.0, 5.0, 10.0])
    lat = np.array([75.3, 75.3, 74.6])
    coords = make_test_coords(geom, lon, lat)
    zidx = [ax.coord_to_idx(t) for t, ax in zip(coords[2:], geom.axes)]

    idx = geom.coord_to_idx(coords)
    if geom.region is not None:
        assert_allclose(np.full_like(coords[0], -1, dtype=int), idx[0])

    idx = geom.coord_to_idx(coords, clip=True)
    assert np.all(np.not_equal(np.full_like(coords[0], -1, dtype=int), idx[0]))
Ejemplo n.º 2
0
def test_map_fill_events_hpx(events):
    # 2D map
    m = Map.from_geom(HpxGeom(1))
    m.fill_events(events)
    assert m.data[4] == 2

    # 3D with energy axis
    axis = MapAxis.from_edges([9, 11, 13], name="energy", unit="TeV")
    m = Map.from_geom(HpxGeom(1, axes=[axis]))
    m.fill_events(events)
    assert m.data[0, 4] == 1
    assert m.data[1, 4] == 1
Ejemplo n.º 3
0
def test_hpxgeom_get_hpxregion_dir():
    geom = HpxGeom.create(nside=128,
                          region="DISK(110.,75.,2.)",
                          frame="galactic")
    refdir = geom.center_skydir
    assert_allclose(refdir.l.deg, 110.0)
    assert_allclose(refdir.b.deg, 75.0)

    geom = HpxGeom.create(nside=128, frame="galactic")
    refdir = geom.center_skydir
    assert_allclose(refdir.l.deg, 0.0)
    assert_allclose(refdir.b.deg, 0.0)
Ejemplo n.º 4
0
def test_hpxgeom_init_with_pix(nside, nested, frame, region, axes):
    geom = HpxGeom(nside, nested, frame, region=region, axes=axes)

    idx0 = geom.get_idx(flat=True)
    idx1 = tuple([t[::10] for t in idx0])
    geom = HpxGeom(nside, nested, frame, region=idx0, axes=axes)
    assert_allclose(idx0, geom.get_idx(flat=True))
    assert_allclose(len(idx0[0]), np.sum(geom.npix))
    geom = HpxGeom(nside, nested, frame, region=idx1, axes=axes)
    assert_allclose(idx1, geom.get_idx(flat=True))
    assert_allclose(len(idx1[0]), np.sum(geom.npix))
Ejemplo n.º 5
0
def test_interp_to_geom():
    energy = MapAxis.from_energy_bounds("1 TeV",
                                        "300 TeV",
                                        nbin=5,
                                        name="energy")
    energy_target = MapAxis.from_energy_bounds("1 TeV",
                                               "300 TeV",
                                               nbin=7,
                                               name="energy")
    value = 30
    coords = {
        'skycoord': SkyCoord("0 deg", "0 deg"),
        'energy': energy_target.center[3]
    }

    #WcsNDMap
    geom_wcs = WcsGeom.create(npix=(5, 3),
                              proj="CAR",
                              binsz=60,
                              axes=[energy],
                              skydir=(0, 0))
    wcs_map = Map.from_geom(geom_wcs, unit="")
    wcs_map.data = value * np.ones(wcs_map.data.shape)

    wcs_geom_target = WcsGeom.create(skydir=(0, 0),
                                     width=(10, 10),
                                     binsz=0.1 * u.deg,
                                     axes=[energy_target])
    interp_wcs_map = wcs_map.interp_to_geom(wcs_geom_target, interp=1)

    assert_allclose(interp_wcs_map.get_by_coord(coords)[0], value, atol=1e-7)
    assert isinstance(interp_wcs_map, WcsNDMap)
    assert interp_wcs_map.geom == wcs_geom_target

    #HpxNDMap
    geom_hpx = HpxGeom.create(binsz=60, axes=[energy], skydir=(0, 0))
    hpx_map = Map.from_geom(geom_hpx, unit="")
    hpx_map.data = value * np.ones(hpx_map.data.shape)

    hpx_geom_target = HpxGeom.create(skydir=(0, 0),
                                     width=10,
                                     binsz=0.1 * u.deg,
                                     axes=[energy_target])
    interp_hpx_map = hpx_map.interp_to_geom(hpx_geom_target)

    assert_allclose(interp_hpx_map.get_by_coord(coords)[0], value, atol=1e-7)
    assert isinstance(interp_hpx_map, HpxNDMap)
    assert interp_hpx_map.geom == hpx_geom_target
Ejemplo n.º 6
0
def create_map(nside, nested, coordsys, region, axes):
    return HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                coordsys=coordsys,
                region=region,
                axes=axes))
Ejemplo n.º 7
0
def create_map(nside, nested, frame, region, axes):
    return HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                frame=frame,
                region=region,
                axes=axes))
Ejemplo n.º 8
0
def test_hpx_geom_is_aligned():
    geom = HpxGeom.create(nside=8, frame="galactic")

    assert geom.is_aligned(geom)

    cutout = geom.cutout(position=SkyCoord("0d", "0d"), width=30 * u.deg)
    assert cutout.is_aligned(geom)

    geom_other = HpxGeom.create(nside=4, frame="galactic")
    assert not geom.is_aligned(geom_other)

    geom_other = HpxGeom.create(nside=8, frame="galactic", nest=False)
    assert not geom.is_aligned(geom_other)

    geom_other = HpxGeom.create(nside=8, frame="icrs")
    assert not geom.is_aligned(geom_other)
Ejemplo n.º 9
0
def test_convolve_full(region):
    energy = MapAxis.from_bounds(1,
                                 100,
                                 unit='TeV',
                                 nbin=2,
                                 name='energy_true')
    nside = 256

    all_sky_geom = HpxGeom(nside=nside,
                           axes=[energy],
                           region=region,
                           nest=False,
                           frame='icrs')

    all_sky_map = Map.from_geom(all_sky_geom)
    all_sky_map.set_by_coord((0, 0, [2, 90]), 1)
    all_sky_map.set_by_coord((10, 10, [2, 90]), 1)
    all_sky_map.set_by_coord((30, 30, [2, 90]), 1)
    all_sky_map.set_by_coord((-40, -40, [2, 90]), 1)
    all_sky_map.set_by_coord((60, 0, [2, 90]), 1)
    all_sky_map.set_by_coord((-45, 30, [2, 90]), 1)
    all_sky_map.set_by_coord((30, -45, [2, 90]), 1)

    wcs_geom = WcsGeom.create(width=5, binsz=0.05, axes=[energy])
    psf = PSFMap.from_gauss(energy_axis_true=energy, sigma=[0.5, 0.6] * u.deg)

    kernel = psf.get_psf_kernel(geom=wcs_geom, max_radius=1 * u.deg)
    convolved_map = all_sky_map.convolve_full(kernel)
    assert_allclose(convolved_map.data.sum(), 14, rtol=1e-5)
Ejemplo n.º 10
0
def test_hpxgeom_read_write(tmp_path, nside, nested, frame, region, axes):
    geom0 = HpxGeom(nside, nested, frame, region=region, axes=axes)
    hdu_bands = geom0.to_bands_hdu(hdu_bands="TEST_BANDS")
    hdu_prim = fits.PrimaryHDU()
    hdu_prim.header.update(geom0.to_header())

    hdulist = fits.HDUList([hdu_prim, hdu_bands])
    hdulist.writeto(tmp_path / "tmp.fits")

    with fits.open(tmp_path / "tmp.fits", memmap=False) as hdulist:
        geom1 = HpxGeom.from_header(hdulist[0].header, hdulist["TEST_BANDS"])

    assert_allclose(geom0.nside, geom1.nside)
    assert_allclose(geom0.npix, geom1.npix)
    assert_allclose(geom0.nest, geom1.nest)
    assert geom0.frame == geom1.frame
Ejemplo n.º 11
0
def test_interp_to_geom():
    energy = MapAxis.from_energy_bounds("1 TeV", "300 TeV", nbin=5, name="energy")
    energy_target = MapAxis.from_energy_bounds(
        "1 TeV", "300 TeV", nbin=7, name="energy"
    )
    value = 30
    coords = {"skycoord": SkyCoord("0 deg", "0 deg"), "energy": energy_target.center[3]}

    # WcsNDMap
    geom_wcs = WcsGeom.create(
        npix=(5, 3), proj="CAR", binsz=60, axes=[energy], skydir=(0, 0)
    )
    wcs_map = Map.from_geom(geom_wcs, unit="")
    wcs_map.data = value * np.ones(wcs_map.data.shape)

    wcs_geom_target = WcsGeom.create(
        skydir=(0, 0), width=(10, 10), binsz=0.1 * u.deg, axes=[energy_target]
    )
    interp_wcs_map = wcs_map.interp_to_geom(wcs_geom_target, method="linear")

    assert_allclose(interp_wcs_map.get_by_coord(coords)[0], value, atol=1e-7)
    assert isinstance(interp_wcs_map, WcsNDMap)
    assert interp_wcs_map.geom == wcs_geom_target

    # HpxNDMap
    geom_hpx = HpxGeom.create(binsz=60, axes=[energy], skydir=(0, 0))
    hpx_map = Map.from_geom(geom_hpx, unit="")
    hpx_map.data = value * np.ones(hpx_map.data.shape)

    hpx_geom_target = HpxGeom.create(
        skydir=(0, 0), width=10, binsz=0.1 * u.deg, axes=[energy_target]
    )
    interp_hpx_map = hpx_map.interp_to_geom(hpx_geom_target)

    assert_allclose(interp_hpx_map.get_by_coord(coords)[0], value, atol=1e-7)
    assert isinstance(interp_hpx_map, HpxNDMap)
    assert interp_hpx_map.geom == hpx_geom_target

    # Preserving the counts
    geom_initial = WcsGeom.create(skydir=(20, 20), width=(5, 5), binsz=0.2 * u.deg,)

    test_map = Map.from_geom(geom_initial, unit="")
    test_map.data = value * np.ones(test_map.data.shape)
    geom_target = WcsGeom.create(skydir=(20, 20), width=(5, 5), binsz=0.1 * u.deg,)
    new_map = test_map.interp_to_geom(geom_target, preserve_counts=True)
    assert np.floor(np.sum(new_map.data)) == np.sum(test_map.data)
Ejemplo n.º 12
0
def test_hpxgeom_pixel_scales():
    geom = HpxGeom.create(nside=8,
                          frame="galactic",
                          axes=[MapAxis.from_edges([0, 2, 3])])

    pixel_scales = geom.pixel_scales

    assert_allclose(pixel_scales, [4] * u.deg)
Ejemplo n.º 13
0
def test_hpxmap_ud_grade(nside, nested, frame, region, axes):
    m = HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                frame=frame,
                region=region,
                axes=axes))
    m.to_ud_graded(4)
Ejemplo n.º 14
0
def create_map(nside, nested, coordsys, region, axes, sparse):
    if sparse:
        m = HpxSparseMap(
            HpxGeom(nside=nside,
                    nest=nested,
                    coordsys=coordsys,
                    region=region,
                    axes=axes))
    else:
        m = HpxNDMap(
            HpxGeom(nside=nside,
                    nest=nested,
                    coordsys=coordsys,
                    region=region,
                    axes=axes))

    return m
Ejemplo n.º 15
0
def test_hpxmap_ud_grade(nside, nested, coordsys, region, axes):
    m = HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                coordsys=coordsys,
                region=region,
                axes=axes))
    m.to_ud_graded(4)
Ejemplo n.º 16
0
def test_hpxmap_crop(nside, nested, coordsys, region, axes):
    m = HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                coordsys=coordsys,
                region=region,
                axes=axes))
    m.crop(1)
Ejemplo n.º 17
0
def geom(map_type, ebounds):
    axis = MapAxis.from_edges(ebounds, name="energy", unit="TeV", interp="log")
    if map_type == "wcs":
        return WcsGeom.create(npix=(4, 3), binsz=2, axes=[axis])
    elif map_type == "hpx":
        return HpxGeom(256, axes=[axis])
    else:
        raise ValueError()
Ejemplo n.º 18
0
def test_hpxmap_crop(nside, nested, frame, region, axes):
    m = HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                frame=frame,
                region=region,
                axes=axes))
    m.crop(1)
Ejemplo n.º 19
0
def test_hpxmap_to_wcs(nside, nested, coordsys, region, axes):
    m = HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                coordsys=coordsys,
                region=region,
                axes=axes))
    m.to_wcs(sum_bands=False, oversample=2, normalize=False)
    m.to_wcs(sum_bands=True, oversample=2, normalize=False)
Ejemplo n.º 20
0
def test_hpxgeom_solid_angle():
    geom = HpxGeom.create(nside=8,
                          frame="galactic",
                          axes=[MapAxis.from_edges([0, 2, 3])])

    solid_angle = geom.solid_angle()

    assert solid_angle.shape == (1, )
    assert_allclose(solid_angle.value, 0.016362461737446838)
Ejemplo n.º 21
0
def test_map_from_geom():
    geom = WcsGeom.create(binsz=1.0, width=10.0)
    m = Map.from_geom(geom)
    assert isinstance(m, WcsNDMap)
    assert m.geom.is_image

    geom = HpxGeom.create(binsz=1.0, width=10.0)
    m = Map.from_geom(geom)
    assert isinstance(m, HpxNDMap)
    assert m.geom.is_image
Ejemplo n.º 22
0
def test_from_wcs_tiles():
    geom = HpxGeom.create(nside=8)

    wcs_geoms = geom.to_wcs_tiles(nside_tiles=4)

    wcs_tiles = [Map.from_geom(geom, data=1) for geom in wcs_geoms]

    m = HpxNDMap.from_wcs_tiles(wcs_tiles=wcs_tiles)

    assert_allclose(m.data, 1)
Ejemplo n.º 23
0
def test_map_plot_mask():
    geom = HpxGeom.create(nside=16)

    region = CircleSkyRegion(center=SkyCoord("0d", "0d", frame="galactic"),
                             radius=20 * u.deg)

    mask = geom.region_mask([region])

    with mpl_plot_check():
        mask.plot_mask()
Ejemplo n.º 24
0
def test_hpxmap_swap_scheme(nside, nested, coordsys, region, axes):
    m = HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                coordsys=coordsys,
                region=region,
                axes=axes))
    fill_poisson(m, mu=1.0, random_state=0)
    m2 = m.to_swapped()
    coords = m.geom.get_coord(flat=True)
    assert_allclose(m.get_by_coord(coords), m2.get_by_coord(coords))
Ejemplo n.º 25
0
def test_hpxmap_interp_by_coord(nside, nested, coordsys, region, axes):
    m = HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                coordsys=coordsys,
                region=region,
                axes=axes))
    coords = m.geom.get_coord(flat=True)
    m.set_by_coord(coords, coords[1])
    assert_allclose(m.get_by_coord(coords),
                    m.interp_by_coord(coords, interp="linear"))
Ejemplo n.º 26
0
def test_hpxmap_swap_scheme(nside, nested, frame, region, axes):
    m = HpxNDMap(
        HpxGeom(nside=nside,
                nest=nested,
                frame=frame,
                region=region,
                axes=axes))
    m.data = np.arange(m.data.size).reshape(m.geom.data_shape)
    m2 = m.to_swapped()
    coords = m.geom.get_coord(flat=True)
    assert_allclose(m.get_by_coord(coords), m2.get_by_coord(coords))
Ejemplo n.º 27
0
def test_hpx_geom_separation():
    geom = HpxGeom.create(binsz=0.1, frame="galactic", nest=True)
    position = SkyCoord(0, 0, unit="deg", frame="galactic")
    separation = geom.separation(position)
    assert separation.unit == "deg"
    assert_allclose(separation.value[0], 45.000049)

    # Make sure it also works for 2D maps as input
    separation = geom.to_image().separation(position)
    assert separation.unit == "deg"
    assert_allclose(separation.value[0], 45.000049)

    # make sure works for partial geometry
    geom = HpxGeom.create(binsz=0.1,
                          frame="galactic",
                          nest=True,
                          region="DISK(0,0,10)")
    separation = geom.separation(position)
    assert separation.unit == "deg"
    assert_allclose(separation.value[0], 9.978725)
Ejemplo n.º 28
0
def geom_config_hpx():
    energy_axis = MapAxis.from_energy_bounds("0.5 TeV", "30 TeV", nbin=3)

    energy_axis_true = MapAxis.from_energy_bounds(
        "0.3 TeV", "30 TeV", nbin=3, per_decade=True, name="energy_true"
    )

    geom_hpx = HpxGeom.create(
        binsz=0.1, frame="galactic", axes=[energy_axis], region="DISK(0, 0, 5.)"
    )
    return {"geom": geom_hpx, "energy_axis_true": energy_axis_true}
Ejemplo n.º 29
0
def test_hpx_nd_map_to_nside():
    axis = MapAxis.from_edges([1, 2, 3], name="test-1")

    geom = HpxGeom.create(nside=64, axes=[axis])
    m = HpxNDMap(geom, unit="m2")
    m.data += 1

    m2 = m.to_nside(nside=32)
    assert_allclose(m2.data, 4)

    m3 = m.to_nside(nside=128)
    assert_allclose(m3.data, 0.25)
Ejemplo n.º 30
0
def test_hpx_geom_to_binsz():
    geom = HpxGeom.create(nside=32, frame="galactic", nest=True)

    geom_new = geom.to_binsz(1 * u.deg)

    assert geom_new.nside[0] == 64
    assert geom_new.frame == "galactic"
    assert geom_new.nest

    geom = HpxGeom.create(nside=32,
                          frame="galactic",
                          nest=True,
                          region="DISK(110.,75.,10.)")

    geom_new = geom.to_binsz(1 * u.deg)
    assert geom_new.nside[0] == 64

    center = geom_new.center_skydir.galactic

    assert_allclose(center.l.deg, 110)
    assert_allclose(center.b.deg, 75)