Ring background

Overview

This technique is used in classical Cherenkov astronomy for the 2D image computation.

To include the classical ring background estimation into a data reduction chain, Gammapy provides the RingBackgroundMaker and AdaptiveRingBackgroundMaker classed. Theses classes can only be used for image based data. A given MapDataset has to be reduced to a single image by calling MapDataset.to_image()

from gammapy.makers import MapDatasetMaker, RingBackgroundMaker, SafeMaskMaker
from gammapy.datasets import MapDataset
from gammapy.data import DataStore
from gammapy.maps import MapAxis, WcsGeom, Map
from regions import CircleSkyRegion
from astropy import units as u

data_store = DataStore.from_dir("$GAMMAPY_DATA/hess-dl3-dr1")
observations = data_store.get_observations([23592, 23559])

energy_axis = MapAxis.from_energy_bounds("1 TeV", "10 TeV", nbin=1)
energy_axis_true = MapAxis.from_energy_bounds("0.3 TeV", "30 TeV", nbin=20, per_decade=True, name="energy_true")

geom = WcsGeom.create(skydir=(83.63, 22.01), axes=[energy_axis], width=5, binsz=0.02)

stacked = MapDataset.create(geom, energy_axis_true=energy_axis_true)

maker = MapDatasetMaker()
safe_mask_maker = SafeMaskMaker(
        methods=["aeff-default", "offset-max"], offset_max="2.5 deg"
)

circle = CircleSkyRegion(center=geom.center_skydir, radius=0.2 * u.deg)
exclusion_mask = Map.from_geom(geom, data=geom.region_mask([circle], inside=False))

ring_bkg_maker = RingBackgroundMaker(r_in="0.3 deg", width="0.3 deg", exclusion_mask=exclusion_mask)

for obs in observations:
        dataset = maker.run(stacked, obs)
        dataset = safe_mask_maker.run(dataset, obs)
        dataset_on_off = ring_bkg_maker.run(dataset)
        stacked.stack(dataset_on_off)