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 test_ring_bkg_maker(geom, observations, exclusion_mask): ring_bkg_maker = RingBackgroundMaker(r_in="0.2 deg", width="0.3 deg", exclusion_mask=exclusion_mask) safe_mask_maker = SafeMaskMaker(methods=["offset-max"], offset_max="2 deg") map_dataset_maker = MapDatasetMaker( selection=["counts", "background", "exposure"]) reference = MapDataset.create(geom) datasets = [] for obs in observations: cutout = reference.cutout(obs.pointing_radec, width="4 deg") dataset = map_dataset_maker.run(cutout, obs) dataset = safe_mask_maker.run(dataset, obs) dataset = dataset.to_image() dataset_on_off = ring_bkg_maker.run(dataset) datasets.append(dataset_on_off) mask = dataset.mask_safe assert_allclose(datasets[0].counts_off.data[mask].sum(), 2511333) assert_allclose(datasets[1].counts_off.data[mask].sum(), 2143577.0) assert_allclose(datasets[0].acceptance_off.data[mask].sum(), 2961300, rtol=1e-5) assert_allclose(datasets[1].acceptance_off.data[mask].sum(), 2364657.2, rtol=1e-5) assert_allclose(datasets[0].alpha.data[0][100][100], 0.00063745599, rtol=1e-5) assert_allclose(datasets[0].exposure.data[0][100][100], 806254444.8480084, rtol=1e-5)
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