def test_to_image_mask_safe(): axis = MapAxis.from_energy_bounds("0.1 TeV", "10 TeV", nbin=2) geom = WcsGeom.create( skydir=(0, 0), binsz=0.5, width=(1, 1), frame="icrs", axes=[axis] ) dataset = MapDataset.create(geom) # Check map_safe handling data = np.array([[[False, True], [True, True]], [[False, False], [True, True]]]) dataset.mask_safe = WcsNDMap.from_geom(geom=geom, data=data) dataset_im = dataset.to_image() assert dataset_im.mask_safe.data.dtype == bool desired = np.array([[False, True], [True, True]]) assert (dataset_im.mask_safe.data == desired).all() # Check that missing entries in the dataset do not break dataset_copy = dataset.copy() dataset_copy.exposure = None dataset_im = dataset_copy.to_image() assert dataset_im.exposure is None dataset_copy = dataset.copy() dataset_copy.counts = None dataset_im = dataset_copy.to_image() assert dataset_im.counts is None
def test_wcsndmap_pad_cval(): geom = WcsGeom.create(npix=(5, 5)) m = WcsNDMap.from_geom(geom) cval = 1.1 m_padded = m.pad(1, mode="constant", cval=cval) assert_allclose(m_padded.data[0, 0], cval)
def exclusion_mask(geom): """Example mask for testing.""" pos = SkyCoord(83.633, 22.014, unit="deg", frame="icrs") region = CircleSkyRegion(pos, Angle(0.15, "deg")) exclusion = WcsNDMap.from_geom(geom) exclusion.data = geom.region_mask([region], inside=False) return exclusion
def test_exclusion_region(tmp_path): config = get_example_config("1d") analysis = Analysis(config) exclusion_region = CircleSkyRegion(center=SkyCoord("85d 23d"), radius=1 * u.deg) exclusion_mask = Map.create(npix=(150, 150), binsz=0.05, skydir=SkyCoord("83d 22d")) mask = exclusion_mask.geom.region_mask([exclusion_region], inside=False) exclusion_mask.data = mask.astype(int) filename = tmp_path / "exclusion.fits" exclusion_mask.write(filename) config.datasets.background.method = "reflected" config.datasets.background.exclusion = filename analysis.get_observations() analysis.get_datasets() assert len(analysis.datasets) == 2 config = get_example_config("3d") analysis = Analysis(config) analysis.get_observations() analysis.get_datasets() geom = analysis.datasets[0]._geom exclusion = WcsNDMap.from_geom(geom) exclusion.data = geom.region_mask([exclusion_region], inside=False).astype(int) filename = tmp_path / "exclusion3d.fits" exclusion.write(filename) config.datasets.background.exclusion = filename analysis.get_datasets() assert len(analysis.datasets) == 1
def _exclusion_mask_ref(reference_geom, exclusion_mask): """Exclusion mask reprojected""" if exclusion_mask: mask = exclusion_mask.interp_to_geom(reference_geom, fill_value=True) else: mask = WcsNDMap.from_geom(geom=reference_geom, data=True) return mask
def exclusion_mask_ref(self): """Exclusion mask reprojected""" if self.exclusion_mask: mask = self.exclusion_mask.interp_to_geom(self.geom_ref, fill_value=True) else: mask = WcsNDMap.from_geom(geom=self.geom_ref, data=True) return mask
def test_to_image(geom): counts = Map.read( "$GAMMAPY_DATA/fermi-3fhl-gc/fermi-3fhl-gc-counts-cube.fits.gz") background = Map.read( "$GAMMAPY_DATA/fermi-3fhl-gc/fermi-3fhl-gc-background-cube.fits.gz") background = BackgroundModel(background, datasets_names=["fermi"]) exposure = Map.read( "$GAMMAPY_DATA/fermi-3fhl-gc/fermi-3fhl-gc-exposure-cube.fits.gz") exposure = exposure.sum_over_axes(keepdims=True) dataset = MapDataset(counts=counts, models=[background], exposure=exposure, name="fermi") dataset_im = dataset.to_image() assert dataset_im.mask_safe is None assert dataset_im.counts.data.sum() == dataset.counts.data.sum() assert_allclose(dataset_im.background_model.map.data.sum(), 28548.625, rtol=1e-5) ebounds = np.logspace(-1.0, 1.0, 3) axis = MapAxis.from_edges(ebounds, name="energy", unit=u.TeV, interp="log") geom = WcsGeom.create(skydir=(0, 0), binsz=0.5, width=(1, 1), frame="icrs", axes=[axis]) dataset = MapDataset.create(geom) # Check map_safe handling data = np.array([[[False, True], [True, True]], [[False, False], [True, True]]]) dataset.mask_safe = WcsNDMap.from_geom(geom=geom, data=data) dataset_im = dataset.to_image() assert dataset_im.mask_safe.data.dtype == bool desired = np.array([[False, True], [True, True]]) assert (dataset_im.mask_safe.data == desired).all() # Check that missing entries in the dataset do not break dataset_copy = dataset.copy() dataset_copy.exposure = None dataset_copy._background_model = None dataset_im = dataset_copy.to_image() assert dataset_im.exposure is None assert dataset_im.background_model == None dataset_copy = dataset.copy() dataset_copy.counts = None dataset_im = dataset_copy.to_image() assert dataset_im.counts is None
def test_to_image(geom): ebounds = np.logspace(-1.0, 1.0, 3) axis = MapAxis.from_edges(ebounds, name="energy", unit=u.TeV, interp="log") geom = WcsGeom.create( skydir=(0, 0), binsz=0.5, width=(1, 1), coordsys="CEL", axes=[axis] ) dataset = MapDataset.create(geom) # Check map_safe handling data = np.array([[[False, True], [True, True]], [[False, False], [True, True]]]) dataset.mask_safe = WcsNDMap.from_geom(geom=geom, data=data) dataset_im = dataset.to_image() assert dataset_im.mask_safe.data.dtype == bool desired = np.array([[False, True], [True, True]]) assert (dataset_im.mask_safe.data == desired).all()
def to_cube(image): # introduce a fake enery axis for now axis = MapAxis.from_edges([1, 10] * u.TeV, name="energy") geom = image.geom.to_cube([axis]) return WcsNDMap.from_geom(geom=geom, data=image.data)