def test_create_onoff(geom): # tests empty datasets created migra_axis = MapAxis(nodes=np.linspace(0.0, 3.0, 51), unit="", name="migra") rad_axis = MapAxis(nodes=np.linspace(0.0, 1.0, 51), unit="deg", name="theta") energy_axis = geom.get_axis_by_name("energy").copy(name="energy_true") empty_dataset = MapDatasetOnOff.create(geom, energy_axis, migra_axis, rad_axis) assert_allclose(empty_dataset.counts.data.sum(), 0.0) assert_allclose(empty_dataset.counts_off.data.sum(), 0.0) assert_allclose(empty_dataset.acceptance.data.sum(), 0.0) assert_allclose(empty_dataset.acceptance_off.data.sum(), 0.0) assert empty_dataset.psf.psf_map.data.shape == (2, 50, 10, 10) assert empty_dataset.psf.exposure_map.data.shape == (2, 1, 10, 10) assert empty_dataset.edisp.edisp_map.data.shape == (2, 50, 10, 10) assert empty_dataset.edisp.exposure_map.data.shape == (2, 1, 10, 10) assert_allclose(empty_dataset.edisp.edisp_map.data.sum(), 200) assert_allclose(empty_dataset.gti.time_delta, 0.0 * u.s)
def test_stack_onoff_cutout(geom_image): # Test stacking of cutouts energy_axis_true = MapAxis.from_energy_bounds( "1 TeV", "10 TeV", nbin=3, name="energy_true" ) dataset = MapDatasetOnOff.create(geom_image, energy_axis_true=energy_axis_true) dataset.gti = GTI.create([0 * u.s], [1 * u.h], reference_time="2010-01-01T00:00:00") kwargs = {"position": geom_image.center_skydir, "width": 1 * u.deg} geoms = {name: geom.cutout(**kwargs) for name, geom in dataset.geoms.items()} dataset_cutout = MapDatasetOnOff.from_geoms(**geoms, name="cutout-dataset") dataset_cutout.gti = GTI.create( [0 * u.s], [1 * u.h], reference_time="2010-01-01T00:00:00" ) dataset_cutout.mask_safe.data += True dataset_cutout.counts.data += 1 dataset_cutout.counts_off.data += 1 dataset_cutout.exposure.data += 1 dataset.stack(dataset_cutout) assert_allclose(dataset.counts.data.sum(), 2500) assert_allclose(dataset.counts_off.data.sum(), 2500) assert_allclose(dataset.alpha.data.sum(), 0) assert_allclose(dataset.exposure.data.sum(), 7500) assert dataset_cutout.name == "cutout-dataset"
def create_stacked_dataset(analysis): # source_pos = SkyCoord.from_name("MSH 15-52") source_pos = SkyCoord(228.32, -59.08, unit="deg") # get the geom that we use geom = analysis.datasets[0].counts.geom energy_axis = analysis.datasets[0].counts.geom.axes["energy"] geom_image = geom.to_image().to_cube([energy_axis.squash()]) # Make the exclusion mask regions = CircleSkyRegion(center=source_pos, radius=0.3 * u.deg) exclusion_mask = geom_image.region_mask([regions], inside=False) ring_maker = RingBackgroundMaker(r_in="0.5 deg", width="0.3 deg", exclusion_mask=exclusion_mask) # Creation of the MapDatasetOnOff energy_axis_true = analysis.datasets[0].exposure.geom.axes["energy_true"] stacked_on_off = MapDatasetOnOff.create(geom=geom_image, energy_axis_true=energy_axis_true, name="stacked") for dataset in analysis.datasets: # Ring extracting makes sense only for 2D analysis dataset_on_off = ring_maker.run(dataset.to_image()) stacked_on_off.stack(dataset_on_off) return stacked_on_off
def extract_ring_adaptive(datasets, exclusion_mask, r_in="0.6 deg", width="0.3 deg", r_out_max=2.3*u.deg, method = 'fixed_width'): geom = datasets[0].counts.geom energy_axis = datasets[0].counts.geom.axes["energy"] geom_image = geom.to_image().to_cube([energy_axis.squash()]) ring_maker = AdaptiveRingBackgroundMaker( r_in=r_in, width=width, exclusion_mask=exclusion_mask, r_out_max = r_out_max, method=method ) energy_axis_true = datasets[0].exposure.geom.axes["energy_true"] stacked_on_off = MapDatasetOnOff.create( geom=geom_image, energy_axis_true=energy_axis_true, name="stacked" ) for dataset in datasets: dataset_on_off = ring_maker.run(dataset.to_image()) stacked_on_off.stack(dataset_on_off) return stacked_on_off
def simple_dataset_on_off(): axis = MapAxis.from_energy_bounds(0.1, 10, 2, unit="TeV") geom = WcsGeom.create(npix=20, binsz=0.02, axes=[axis]) dataset = MapDatasetOnOff.create(geom) dataset.mask_safe += np.ones(dataset.data_shape, dtype=bool) dataset.counts += 2 dataset.counts_off += 1 dataset.acceptance += 1 dataset.acceptance_off += 1 return dataset
def get_simple_dataset_on_off(): axis = MapAxis.from_energy_bounds(0.1, 10, 2, unit="TeV") geom = WcsGeom.create(npix=40, binsz=0.01, axes=[axis]) dataset = MapDatasetOnOff.create(geom) dataset.mask_safe += 1 dataset.counts += 5 dataset.counts_off += 1 dataset.acceptance += 1 dataset.acceptance_off += 1 dataset.exposure += 1000 * u.m ** 2 * u.s dataset.gti = GTI.create([0 * u.s], [5 * u.h], reference_time="2010-01-01T00:00:00") return dataset
def test_stack_dataset_dataset_on_off(): axis = MapAxis.from_edges([1, 10] * u.TeV, name="energy") geom = WcsGeom.create(width=1, axes=[axis]) gti = GTI.create([0 * u.s], [1 * u.h]) dataset = MapDataset.create(geom, gti=gti) dataset_on_off = MapDatasetOnOff.create(geom, gti=gti) dataset_on_off.mask_safe.data += True dataset_on_off.acceptance_off += 5 dataset_on_off.acceptance += 1 dataset_on_off.counts_off += 1 dataset.stack(dataset_on_off) assert_allclose(dataset.npred_background().data, 0.166667, rtol=1e-3)
def test_stack_onoff_cutout(geom_image): # Test stacking of cutouts dataset = MapDatasetOnOff.create(geom_image) gti = GTI.create([0 * u.s], [1 * u.h], reference_time="2010-01-01T00:00:00") dataset.gti = gti geom_cutout = geom_image.cutout(position=geom_image.center_skydir, width=1 * u.deg) dataset_cutout = dataset.create(geom_cutout) dataset.stack(dataset_cutout) assert_allclose(dataset.counts.data.sum(), dataset_cutout.counts.data.sum()) assert_allclose(dataset.counts_off.data.sum(), dataset_cutout.counts_off.data.sum()) assert_allclose(dataset.alpha.data.sum(), dataset_cutout.alpha.data.sum()) assert_allclose(dataset.exposure.data.sum(), dataset_cutout.exposure.data.sum()) assert dataset_cutout.name != dataset.name
def extract_ring(datasets, exclusion_mask, r_in="1.0 deg", width="0.3 deg"): geom = datasets[0].counts.geom energy_axis = datasets[0].counts.geom.axes["energy"] geom_image = geom.to_image().to_cube([energy_axis.squash()]) ring_maker = RingBackgroundMaker( r_in=r_in, width=width, exclusion_mask=exclusion_mask ) energy_axis_true = datasets[0].exposure.geom.axes["energy_true"] stacked_on_off = MapDatasetOnOff.create( geom=geom_image, energy_axis_true=energy_axis_true, name="stacked" ) for dataset in datasets: dataset_on_off = ring_maker.run(dataset.to_image()) stacked_on_off.stack(dataset_on_off) return stacked_on_off