示例#1
0
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)
示例#2
0
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"
示例#3
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
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
示例#5
0
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
示例#6
0
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
示例#7
0
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)
示例#8
0
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