Exemple #1
0
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
    )
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
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,
    )