Exemple #1
0
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
Exemple #2
0
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