def get_map_dataset(sky_model, geom, geom_etrue, edisp=True, name="test", **kwargs): """Returns a MapDatasets""" # define background model m = Map.from_geom(geom) m.quantity = 0.2 * np.ones(m.data.shape) background_model = BackgroundModel(m, datasets_names=[name]) psf = get_psf() exposure = get_exposure(geom_etrue) if edisp: # define energy dispersion e_true = geom_etrue.get_axis_by_name("energy_true") edisp = EDispMap.from_diagonal_response(energy_axis_true=e_true) else: edisp = None # define fit mask center = sky_model.spatial_model.position circle = CircleSkyRegion(center=center, radius=1 * u.deg) mask_fit = background_model.map.geom.region_mask([circle]) mask_fit = Map.from_geom(geom, data=mask_fit) return MapDataset( models=[sky_model, background_model], exposure=exposure, psf=psf, edisp=edisp, mask_fit=mask_fit, name=name, **kwargs )
def test_edisp_from_diagonal_response(position): position = SkyCoord(position) energy_axis_true = MapAxis.from_energy_bounds("0.3 TeV", "10 TeV", nbin=31, name="energy_true") edisp_map = EDispMap.from_diagonal_response(energy_axis_true) edisp_kernel = edisp_map.get_edisp_kernel(position, energy_axis=energy_axis_true) sum_kernel = np.sum(edisp_kernel.data.data, axis=1).data # We exclude the first and last bin, where there is no # e_reco to contribute to assert_allclose(sum_kernel[1:-1], 1)
def test_edisp_map_to_edisp_kernel_map(): energy_axis = MapAxis.from_energy_bounds("1 TeV", "10 TeV", nbin=5) energy_axis_true = MapAxis.from_energy_bounds( "0.3 TeV", "30 TeV", nbin=10, per_decade=True, name="energy_true" ) migra_axis = MapAxis(nodes=np.linspace(0.0, 3.0, 51), unit="", name="migra") edisp_map = EDispMap.from_diagonal_response(energy_axis_true, migra_axis) edisp_kernel_map = edisp_map.to_edisp_kernel_map(energy_axis) position = SkyCoord(0, 0, unit="deg") kernel = edisp_kernel_map.get_edisp_kernel(position) assert edisp_kernel_map.exposure_map.geom.axes[0].name == "energy" actual = kernel.pdf_matrix.sum(axis=0) assert_allclose(actual, 2.0)
def get_map_dataset(geom, geom_etrue, edisp="edispmap", name="test", **kwargs): """Returns a MapDatasets""" # define background model background = Map.from_geom(geom) background.data += 0.2 psf = get_psf() exposure = get_exposure(geom_etrue) e_reco = geom.axes["energy"] e_true = geom_etrue.axes["energy_true"] if edisp == "edispmap": edisp = EDispMap.from_diagonal_response(energy_axis_true=e_true) elif edisp == "edispkernelmap": edisp = EDispKernelMap.from_diagonal_response( energy_axis=e_reco, energy_axis_true=e_true ) elif edisp == "edispkernel": edisp = EDispKernel.from_diagonal_response( energy_true=e_true.edges, energy=e_reco.edges ) else: edisp = None # define fit mask center = SkyCoord("0.2 deg", "0.1 deg", frame="galactic") circle = CircleSkyRegion(center=center, radius=1 * u.deg) mask_fit = geom.region_mask([circle]) mask_fit = Map.from_geom(geom, data=mask_fit) models = FoVBackgroundModel(dataset_name=name) return MapDataset( models=models, exposure=exposure, background=background, psf=psf, edisp=edisp, mask_fit=mask_fit, name=name, **kwargs, )