def test_get_wcs_coord_and_weights(region): # test on circular region geom = RegionGeom(region) region_coord, weights = geom.get_wcs_coord_and_weights() wcs_geom = geom.to_wcs_geom() solid_angles = wcs_geom.solid_angle().T[wcs_geom.coord_to_idx( region_coord)] area = (weights * solid_angles).sum() assert_allclose(area.value, geom.solid_angle().value, rtol=1e-3) assert region_coord.shape == weights.shape # test on rectangular region (assymetric) center = SkyCoord("0 deg", "0 deg", frame="galactic") region = RectangleSkyRegion(center=center, width=1 * u.deg, height=2 * u.deg, angle=15 * u.deg) geom = RegionGeom(region) wcs_geom = geom.to_wcs_geom() region_coord, weights = geom.get_wcs_coord_and_weights() solid_angles = wcs_geom.solid_angle().T[wcs_geom.coord_to_idx( region_coord)] area = (weights * solid_angles).sum() assert_allclose(area.value, geom.solid_angle().value, rtol=1e-3) assert region_coord.shape == weights.shape
def test_compute_flux_spatial(): center = SkyCoord("0 deg", "0 deg", frame="galactic") region = CircleSkyRegion(center=center, radius=0.1 * u.deg) nbin = 2 energy_axis_true = MapAxis.from_energy_bounds(".1 TeV", "10 TeV", nbin=nbin, name="energy_true") spectral_model = ConstantSpectralModel() spatial_model = PointSpatialModel(lon_0=0 * u.deg, lat_0=0 * u.deg, frame="galactic") models = SkyModel(spectral_model=spectral_model, spatial_model=spatial_model) model = Models(models) exposure_region = RegionNDMap.create(region, axes=[energy_axis_true], binsz_wcs="0.01deg") exposure_region.data += 1.0 exposure_region.unit = "m2 s" geom = RegionGeom(region, axes=[energy_axis_true], binsz_wcs="0.01deg") psf = PSFKernel.from_gauss(geom.to_wcs_geom(), sigma="0.1 deg") evaluator = MapEvaluator(model=model[0], exposure=exposure_region, psf=psf) flux = evaluator.compute_flux_spatial() g = Gauss2DPDF(0.1) reference = g.containment_fraction(0.1) assert_allclose(flux.value, reference, rtol=0.003)
def test_to_wcs_geom(region): geom = RegionGeom(region) wcs_geom = geom.to_wcs_geom() assert_allclose(wcs_geom.center_coord[1].value, 0, rtol=0.001, atol=0) assert_allclose(wcs_geom.width[0], 360*u.deg, rtol=1, atol=0) assert wcs_geom.wcs.wcs.ctype[1] == 'GLAT-TAN' # test with an extra axis axis = MapAxis.from_energy_bounds("1 TeV", "10 TeV", nbin=10) geom_cube = geom.to_cube([axis]) wcs_geom_cube = geom_cube.to_wcs_geom() assert wcs_geom_cube.to_image() == wcs_geom assert wcs_geom_cube.axes[0] == axis