From 8498668775dd5dec7cfee531bc782f1e7bc27235 Mon Sep 17 00:00:00 2001 From: Simone Mender Date: Thu, 3 Mar 2022 15:17:52 +0100 Subject: [PATCH 1/5] add pdf files to gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index b6e4761..b39089b 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,6 @@ dmypy.json # Pyre type checker .pyre/ + +# plots +.pdf \ No newline at end of file From 14a6d0dfe22564bd05b89b41ce6f5855a97dcc0f Mon Sep 17 00:00:00 2001 From: Simone Mender Date: Thu, 3 Mar 2022 15:19:13 +0100 Subject: [PATCH 2/5] add exclusion region method & rename bkgmodel -> pybkgmodel --- bkgmodel/__init__.py | 1 - bkgmodel/tests/test_version.py | 2 - pybkgmodel/__init__.py | 4 + pybkgmodel/exclusion_region_method.py | 281 ++++++++++++++++++ pybkgmodel/scripts/alpha_map.pdf | Bin 0 -> 17209 bytes pybkgmodel/scripts/background_overview_2D.pdf | Bin 0 -> 27101 bytes .../scripts/background_overview_2D3D.pdf | Bin 0 -> 32717 bytes pybkgmodel/scripts/background_overview_3D.pdf | Bin 0 -> 23297 bytes pybkgmodel/scripts/counts_map_corr.pdf | Bin 0 -> 16243 bytes pybkgmodel/scripts/counts_map_eff.pdf | Bin 0 -> 15651 bytes pybkgmodel/scripts/counts_map_obs.pdf | Bin 0 -> 15695 bytes .../example_exclusion_region_method.py | 24 ++ pybkgmodel/scripts/plotting.py | 224 ++++++++++++++ .../tests/test_exclusion_region_method.py | 4 + pybkgmodel/tests/test_utils.py | 8 + pybkgmodel/tests/test_version.py | 2 + pybkgmodel/utils.py | 36 +++ setup.cfg | 8 +- 18 files changed, 588 insertions(+), 6 deletions(-) delete mode 100644 bkgmodel/__init__.py delete mode 100644 bkgmodel/tests/test_version.py create mode 100644 pybkgmodel/__init__.py create mode 100644 pybkgmodel/exclusion_region_method.py create mode 100644 pybkgmodel/scripts/alpha_map.pdf create mode 100644 pybkgmodel/scripts/background_overview_2D.pdf create mode 100644 pybkgmodel/scripts/background_overview_2D3D.pdf create mode 100644 pybkgmodel/scripts/background_overview_3D.pdf create mode 100644 pybkgmodel/scripts/counts_map_corr.pdf create mode 100644 pybkgmodel/scripts/counts_map_eff.pdf create mode 100644 pybkgmodel/scripts/counts_map_obs.pdf create mode 100644 pybkgmodel/scripts/example_exclusion_region_method.py create mode 100644 pybkgmodel/scripts/plotting.py create mode 100644 pybkgmodel/tests/test_exclusion_region_method.py create mode 100644 pybkgmodel/tests/test_utils.py create mode 100644 pybkgmodel/tests/test_version.py create mode 100644 pybkgmodel/utils.py diff --git a/bkgmodel/__init__.py b/bkgmodel/__init__.py deleted file mode 100644 index b794fd4..0000000 --- a/bkgmodel/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = '0.1.0' diff --git a/bkgmodel/tests/test_version.py b/bkgmodel/tests/test_version.py deleted file mode 100644 index 01c5569..0000000 --- a/bkgmodel/tests/test_version.py +++ /dev/null @@ -1,2 +0,0 @@ -def test_version(): - from bkgmodel import __version__ diff --git a/pybkgmodel/__init__.py b/pybkgmodel/__init__.py new file mode 100644 index 0000000..db8f62c --- /dev/null +++ b/pybkgmodel/__init__.py @@ -0,0 +1,4 @@ +__version__ = '0.1.0' + +from .exclusion_region_method import ExclusionMapBackgroundMaker + diff --git a/pybkgmodel/exclusion_region_method.py b/pybkgmodel/exclusion_region_method.py new file mode 100644 index 0000000..57f382b --- /dev/null +++ b/pybkgmodel/exclusion_region_method.py @@ -0,0 +1,281 @@ +from astropy.coordinates import SkyCoord, AltAz +from astropy.time import Time +from gammapy.estimators import ExcessMapEstimator +from gammapy.datasets import MapDataset +from gammapy.maps import MapAxis, WcsGeom, Map +from regions import CircleSkyRegion +from astropy import units as u +from astropy.coordinates import Angle +import numpy as np +from gammapy.catalog import CATALOG_REGISTRY +from gammapy.irf import Background2D, Background3D +from gammapy.utils.coordinates import sky_to_fov, fov_to_sky +from .utils import cone_solid_angle, cone_solid_angle_rectangular_pyramid + +__all__ = ["ExclusionMapBackgroundMaker"] + + +class ExclusionMapBackgroundMaker: + """Exclusion map background algorithm. + Calculates background in FOV coordinate system aligned with the `ALTAZ` system. + + Parameters + ---------- + e_reco : `~gammapy.maps.MapAxis` + Reconstructed energy axis, + for example: MapAxis.from_energy_bounds(0.1, 10, 5, unit="TeV", name="energy") + location : `astropy.coordinates.EarthLocation` + Location of the telescopes (later the information should be included in the DataStore!). + nbins : int + Number of bins to hist the events. + Default is 20. + exclusion_radius : str + Exclusion radius around Fermi sources. + Default is "0.3 deg". + offset_max : str + Maximal offset. + Default is "1.75 deg" + """ + + def __init__( + self, + e_reco, + location, + nbins=20, + exclusion_radius="0.3 deg", + offset_max="1.75 deg", + ): + self.e_reco = e_reco + self.location = location + self.nbins = nbins + self.exclusion_radius = Angle(exclusion_radius) + self.offset_max = Angle(offset_max) + self.offset = MapAxis.from_bounds( + 0, self.offset_max, nbin=6, interp="lin", unit="deg", name="offset" + ) + self.lon_axis = MapAxis.from_bounds( + -self.offset_max.value, + self.offset_max.value, + self.nbins, + interp="lin", + unit="deg", + name="fov_lon", + ) + self.lat_axis = MapAxis.from_bounds( + -self.offset_max.value, + self.offset_max.value, + self.nbins, + interp="lin", + unit="deg", + name="fov_lat", + ) + self.counts_map_eff = np.zeros((e_reco.nbin, nbins, nbins)) + self.counts_map_obs = np.zeros((e_reco.nbin, nbins, nbins)) + self.time_map_obs = u.Quantity(np.zeros((nbins, nbins)), u.h) + self.time_map_eff = u.Quantity(np.zeros((nbins, nbins)), u.h) + self.get_offset_map() + + + def get_offset_map(self): + """Calculate offset to pointing position for every bin. + """ + lon, lat = np.meshgrid(self.lon_axis.center.value, self.lat_axis.center.value) + self.offset_map = np.sqrt(lon ** 2 + lat ** 2) + + def get_exclusion_mask(self, obs): + """define exclusion mask for all sources in 4fgl catalog in the region""" + fgl = CATALOG_REGISTRY.get_cls("4fgl")() + geom = WcsGeom.create( + skydir=obs.pointing_radec, + axes=[self.e_reco], + width= 2 * self.offset_max + 2 * self.exclusion_radius, + ) + inside_geom = geom.to_image().contains(fgl.positions) + idx = np.where(inside_geom)[0] + exclusion_mask = ( + fgl.positions[0].separation( + obs.events.radec) > self.exclusion_radius + ) + for id in idx: + exclusion_mask &= ( + fgl.positions[id].separation(obs.events.radec) + > self.exclusion_radius + ) + return exclusion_mask + + def fill_counts(self, obs, exclusion_mask): + # hist events in evergy energy bin + for j in range(self.e_reco.nbin): + energy_mask = self.e_reco.edges[j] <= obs.events.energy + energy_mask &= obs.events.energy < self.e_reco.edges[j + 1] + mask = exclusion_mask & energy_mask + # convert coordinates from Ra/Dec to Alt/Az + t = obs.events.time + frame = AltAz(obstime=t, location=self.location) + pointing_altaz = obs.events.pointing_radec.transform_to(frame) + position_events = obs.events.radec.transform_to(frame) + # convert Alt/Az to Alt/Az FoV + # effective counts + lon, lat = sky_to_fov( + position_events.az[mask], + position_events.alt[mask], + pointing_altaz.az[mask], + pointing_altaz.alt[mask], + ) + counts_eff, xedges, yedges = np.histogram2d( + lon.value, lat.value, bins=( + self.lon_axis.edges.value, self.lat_axis.edges.value) + ) + # observed counts + lon, lat = sky_to_fov( + position_events.az[energy_mask], + position_events.alt[energy_mask], + pointing_altaz.az[energy_mask], + pointing_altaz.alt[energy_mask], + ) + counts_obs, xedges, yedges = np.histogram2d( + lon.value, lat.value, bins=( + self.lon_axis.edges.value, self.lat_axis.edges.value) + ) + # + if j == 0: + counts_map_eff = counts_eff + counts_map_obs = counts_obs + else: + counts_map_eff = np.dstack((counts_map_eff, counts_eff)) + counts_map_obs = np.dstack((counts_map_obs, counts_obs)) + counts_map_eff = counts_map_eff.transpose() + counts_map_obs = counts_map_obs.transpose() + self.counts_map_eff += counts_map_eff + self.counts_map_obs += counts_map_obs + + + def fill_time_maps(self, obs): + # define exclusion mask for all sources in 4fgl catalog in the region + fgl = CATALOG_REGISTRY.get_cls("4fgl")() + geom = WcsGeom.create( + skydir=obs.pointing_radec, + axes=[self.e_reco], + width= 2 * self.offset_max + 2 * self.exclusion_radius, + ) + inside_geom = geom.to_image().contains(fgl.positions) + idx = np.where(inside_geom)[0] + + # time_map + t_binning = np.linspace(obs.tstart.value, obs.tstop.value, 30) + t_binning = Time(t_binning, format='mjd') + t_delta = np.diff(t_binning) + t_center = t_binning[:-1] + 0.5 * t_delta + lon, lat = np.meshgrid(self.lon_axis.center, self.lat_axis.center) + # create observation time 2d arrays + observation_time_obs = np.zeros((self.nbins, self.nbins)) + observation_time_eff = np.zeros((self.nbins, self.nbins)) + # iterate time bins + pointing_positions = [] + for t_c, t_d in zip(t_center, t_delta): + # transform from camera coordinates to FoV coordinates (Alt/Az) dependent on the time + frame = AltAz(obstime=t_c, location=self.location) + pointing_position = obs.pointing_radec.transform_to(frame) + pointing_positions.append(pointing_position) + az, alt = fov_to_sky( + self.lon_axis.center, + self.lat_axis.center, + pointing_position.az, + pointing_position.alt + ) + az, alt = np.meshgrid(az, alt) + + coord_radec = SkyCoord(az, alt, frame=frame).transform_to('icrs') + # calculate masks for FoV and exclusion regions in Ra/Dec coordinates + coord_lonlat = SkyCoord(lon, lat) + mask_fov = coord_lonlat.separation( + SkyCoord(0*u.deg, 0*u.deg)) < self.offset_max + exclusion_mask = fgl.positions[0].separation( + coord_radec) > self.exclusion_radius + for id in idx: + exclusion_mask &= ( + fgl.positions[id].separation( + coord_radec) > self.exclusion_radius + ) + # fill observatione time 2d arays + observation_time_obs[mask_fov] += t_d.to(u.Unit(u.h)).value + observation_time_eff[exclusion_mask & mask_fov] += t_d.to(u.Unit(u.h)).value + self.time_map_obs += u.Quantity(observation_time_obs, u.h) + self.time_map_eff += u.Quantity(observation_time_eff, u.h) + + + def run(self, data_store, obs_ids=None): + observations = data_store.get_observations( + obs_ids, + required_irf=['aeff', 'edisp', 'psf']) + for obs in observations: + exclusion_mask = self.get_exclusion_mask(obs) + self.fill_counts(obs, exclusion_mask) + self.fill_time_maps(obs) + self.alpha_map = self.time_map_eff / self.time_map_obs + self.bg = self.get_bg_offset(self.counts_map_eff) + self.bg_rate = self.get_bg_rate() + + def get_bg_offset_1r(self, counts_map): + rmin = self.offset.edges.value[:-1] * self.offset.unit + rmax = self.offset.edges.value[1:] * self.offset.unit + bg_offset = [] + for rmi, rma in zip(rmin, rmax): + mask = (self.offset_map >= rmi.value) & ( + self.offset_map < rma.value + ) + sum_counts = np.sum(counts_map[mask]) + solid_angle_diff = cone_solid_angle(rma) - cone_solid_angle(rmi) + mean_alpha = np.mean(self.alpha_map[mask]) + mean_time = np.mean(self.time_map_obs) + counts_corrected = sum_counts / mean_alpha / solid_angle_diff / mean_time + bg_offset.append(counts_corrected.value) + return np.array(bg_offset) * counts_corrected.unit + + def get_bg_offset(self, counts_map): + return [self.get_bg_offset_1r(c) for c in self.counts_map_eff] + + def get_bg_rate(self): + bg_rate = [] + BACKGROUND_UNIT = u.Unit("s-1 MeV-1 sr-1") + for bg_r, e_width in zip(self.bg, self.e_reco.bin_width): + a = bg_r / e_width + a = a.to(BACKGROUND_UNIT) + bg_rate.append(a) + return bg_rate + + def get_bg_2d(self): + BACKGROUND_UNIT = u.Unit("s-1 MeV-1 sr-1") + bg_2d = Background2D( + axes=[ + self.e_reco, + self.offset], + data=self.bg_rate, + unit=BACKGROUND_UNIT + ) + return bg_2d + + + def get_bg_3d(self): + bg_3d_counts = self.counts_map_eff / self.alpha_map + bg_rate = [] + BACKGROUND_UNIT = u.Unit("s-1 MeV-1 sr-1") + # calculate solid angle for each pixel + lon, lat = np.meshgrid(self.lon_axis.bin_width, self.lat_axis.bin_width) + solid_angle_pixel = cone_solid_angle_rectangular_pyramid(lon, lat) + # go through every energy bin + for bg_r, e_width in zip(bg_3d_counts, self.e_reco.bin_width): + a = bg_r / e_width / self.time_map_obs / solid_angle_pixel + a[np.isnan(a)] = 0 + a = a.to(BACKGROUND_UNIT) + bg_rate.append(a) + bg_3d = Background3D( + axes = [ + self.e_reco, + self.lon_axis, + self.lat_axis], + data=bg_rate, + unit=BACKGROUND_UNIT, + meta = {"FOVALIGN":"ALTAZ"} + ) + return bg_3d diff --git a/pybkgmodel/scripts/alpha_map.pdf b/pybkgmodel/scripts/alpha_map.pdf new file mode 100644 index 0000000000000000000000000000000000000000..96dbafd19a3bbdf901ae87d63df129b481c1af3f GIT binary patch literal 17209 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 E0Q9DeCIA2c literal 0 HcmV?d00001 diff --git a/pybkgmodel/scripts/background_overview_2D.pdf b/pybkgmodel/scripts/background_overview_2D.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cc48bee97980b33a1478ed0646d510a34b5d2ea7 GIT binary patch literal 27101 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 UTV}(!yDf5v$yFB@_rD*iFTW+Ri2wiq literal 0 HcmV?d00001 diff --git a/pybkgmodel/scripts/background_overview_2D3D.pdf b/pybkgmodel/scripts/background_overview_2D3D.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a9e880d8c676cfaac8f9264ccecac90e1c8aa91e GIT binary patch literal 32717 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

LCeGz+2Xt1P2A)m&a<+5p8_#a!6kNelZ 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 Q$WMUa*|qDS?jfH40CdW86#xJL literal 0 HcmV?d00001 diff --git a/pybkgmodel/scripts/background_overview_3D.pdf b/pybkgmodel/scripts/background_overview_3D.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d2939fc087062e97964d381ec61afb941b3f9766 GIT binary patch literal 23297 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 JR$Y$je*jXw^bi05 literal 0 HcmV?d00001 diff --git a/pybkgmodel/scripts/counts_map_corr.pdf b/pybkgmodel/scripts/counts_map_corr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b4b9e1e0c5b645e26fcef839fe19b9d4c70a062 GIT binary patch literal 16243 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 a9xO!K@gy?!RYzh`C^VCxpt80K)Bgi7nsj>r literal 0 HcmV?d00001 diff --git a/pybkgmodel/scripts/counts_map_eff.pdf b/pybkgmodel/scripts/counts_map_eff.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d4c0d709ffc86c93ec515ab9d69b9656eea98380 GIT binary patch literal 15651 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 literal 0 HcmV?d00001 diff --git a/pybkgmodel/scripts/example_exclusion_region_method.py b/pybkgmodel/scripts/example_exclusion_region_method.py new file mode 100644 index 0000000..8db1bc7 --- /dev/null +++ b/pybkgmodel/scripts/example_exclusion_region_method.py @@ -0,0 +1,24 @@ +from gammapy.data import DataStore +from gammapy.maps import MapAxis +from astropy.coordinates import EarthLocation +from pybkgmodel.exclusion_region_method import ExclusionMapBackgroundMaker +from plotting import ( + plot_alpha_map, + plot_counts_maps, + plot_Background2D, + plot_Background3D, + plot_Background2D3D, +) + + +location_hess = EarthLocation(lon=-23.27133, lat=16.5, height=1.8) +data_store = DataStore.from_dir("$GAMMAPY_DATA/hess-dl3-dr1") +e_reco = MapAxis.from_energy_bounds(0.1, 10, 2, unit="TeV", name="energy") +bg = ExclusionMapBackgroundMaker(e_reco, location=location_hess) +bg.run(data_store, [23523, 23526, 23559, 23592]) + +plot_alpha_map(bg) +plot_counts_maps(bg) +plot_Background2D(bg) +plot_Background3D(bg) +plot_Background2D3D(bg) \ No newline at end of file diff --git a/pybkgmodel/scripts/plotting.py b/pybkgmodel/scripts/plotting.py new file mode 100644 index 0000000..da05caa --- /dev/null +++ b/pybkgmodel/scripts/plotting.py @@ -0,0 +1,224 @@ +from matplotlib import pyplot as plt +import numpy as np +from gammapy.maps import MapAxis +import matplotlib.colors as colors + +def plot_alpha_map(bg, path="./"): + plt.figure() + plt.pcolormesh( + bg.lon_axis.edges.value, + bg.lat_axis.edges.value, + bg.alpha_map, + vmin=0, + vmax=1, + rasterized=True + ) + plt.colorbar(label="Alpha = exposure_effective / exposure_observed") + plt.xlabel("Lon / deg ") + plt.ylabel("Lat / deg ") + plt.savefig(path + "alpha_map.pdf") + + +def plot_counts_maps(bg, path="./"): + counts_eff = np.sum(bg.counts_map_eff, axis=0) + counts_obs = np.sum(bg.counts_map_obs, axis=0) + counts_corr = np.sum(bg.counts_map_eff, axis=0) / bg.alpha_map + + counts_max = np.max([ + counts_eff[np.isfinite(counts_eff)].max(), + counts_obs[np.isfinite(counts_obs)].max(), + counts_corr[np.isfinite(counts_corr)].max().value + ]) + + plt.figure() + im = plt.pcolormesh( + bg.lon_axis.edges.value, + bg.lat_axis.edges.value, + counts_eff, + vmin = 0, + vmax = counts_max + ) + im.set_rasterized(True) + plt.colorbar(label="Effective Counts") + plt.xlabel("Lon / deg ") + plt.ylabel("Lat / deg ") + plt.savefig(path + "counts_map_eff.pdf") + + plt.figure() + im = plt.pcolormesh( + bg.lon_axis.edges.value, + bg.lat_axis.edges.value, + counts_obs, + vmin = 0, + vmax = counts_max + ) + im.set_rasterized(True) + plt.colorbar(label="Observed Counts") + plt.xlabel("Lon / deg ") + plt.ylabel("Lat / deg ") + plt.savefig(path + "counts_map_obs.pdf") + + plt.figure() + im = plt.pcolormesh( + bg.lon_axis.edges.value, + bg.lat_axis.edges.value, + counts_corr, + vmin = 0, + vmax = counts_max + ) + im.set_rasterized(True) + plt.colorbar(label="Corrected Counts") + plt.xlabel("Lon / deg ") + plt.ylabel("Lat / deg ") + plt.savefig(path + "counts_map_corr.pdf") + + + + +def plot_Background2D(bg, path="./"): + nbins=200 + rmin = bg.offset.edges[:-1] + rmax = bg.offset.edges[1:] + # calculate local radius map for this binning + lon_axis = MapAxis.from_bounds( + -bg.offset_max.value, + bg.offset_max.value, + nbins, + interp="lin", + unit="deg", + name="fov_lon", + ) + lat_axis = MapAxis.from_bounds( + -bg.offset_max.value, + bg.offset_max.value, + nbins, + interp="lin", + unit="deg", + name="fov_lat", + ) + lon, lat = np.meshgrid(lon_axis.center.value, lat_axis.center.value) + radius_map = np.sqrt(lon ** 2 + lat ** 2) + #plotting + fig, axs = plt.subplots(bg.e_reco.nbin, 1, figsize=(5, 4*bg.e_reco.nbin), constrained_layout=True) + for i, bg_rate in enumerate(bg.bg_rate): + z = np.zeros((200,200)) + z[:] = np.nan + j = 0 + for rmi, rma in zip(rmin.value, rmax.value): + mask = (radius_map >= rmi) & (radius_map < rma) + z[mask] = bg_rate[j] + j += 1 + axs[i].set_title( + f"{bg.e_reco.edges[i]:.2f} $= rmi) & (radius_map < rma) + z[mask] = bg_rate[j] + j += 1 + axs[0,i].set_title( + f"{bg.e_reco.edges[i]:.2f} $ author_email = url = https://github.com/cta-observatory/pybkgmodel @@ -17,7 +17,9 @@ python_requires = >=3.6 install_requires = pyirf ~= 0.5.0 astropy >= 4.2 - gammapy ~= 0.18.2 + gammapy ~= 0.19 + numpy + regions [options.extras_require] tests = From cc590b38696623be2bc1a8f2d879804f9f245b4b Mon Sep 17 00:00:00 2001 From: Simone Mender Date: Thu, 3 Mar 2022 15:21:06 +0100 Subject: [PATCH 3/5] Add instructions how to download gammapy testdataset --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 92b4e11..6dfba40 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,9 @@ # pybkgmodel [![CI](https://github.com/cta-observatory/pybkgmodel/actions/workflows/ci.yml/badge.svg)](https://github.com/cta-observatory/pybkgmodel/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/cta-observatory/pybkgmodel/branch/main/graph/badge.svg?token=WsJUEfyBsv)](https://codecov.io/gh/cta-observatory/pybkgmodel) Background Modelling of IACTs + + +Download the gammapy test datasets using +``` +gammapy download datasets +export GAMMAPY_DATA=$PWD/gammapy-datasets +``` \ No newline at end of file From 51f367a68a33e59bc63bc92df83deca905bf7af2 Mon Sep 17 00:00:00 2001 From: Simone Mender Date: Tue, 12 Apr 2022 11:53:13 +0200 Subject: [PATCH 4/5] remove psf, aeff and edisp as required irf --- pybkgmodel/exclusion_region_method.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pybkgmodel/exclusion_region_method.py b/pybkgmodel/exclusion_region_method.py index 57f382b..6914188 100644 --- a/pybkgmodel/exclusion_region_method.py +++ b/pybkgmodel/exclusion_region_method.py @@ -207,7 +207,7 @@ def fill_time_maps(self, obs): def run(self, data_store, obs_ids=None): observations = data_store.get_observations( obs_ids, - required_irf=['aeff', 'edisp', 'psf']) + required_irf=[]) for obs in observations: exclusion_mask = self.get_exclusion_mask(obs) self.fill_counts(obs, exclusion_mask) From f43af5dd60723442a5c41946d5c9b501fa78e6f8 Mon Sep 17 00:00:00 2001 From: Simone Mender Date: Tue, 8 Aug 2023 18:30:45 +0200 Subject: [PATCH 5/5] Add example in README.md --- README.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6dfba40..b784833 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,38 @@ Download the gammapy test datasets using ``` gammapy download datasets export GAMMAPY_DATA=$PWD/gammapy-datasets -``` \ No newline at end of file +``` + +Example +``` +from pybkgmodel import ExclusionMapBackgroundMaker +from astropy.coordinates import EarthLocation +from astropy import units as u +from gammapy.maps import MapAxis +from gammapy.data import DataStore + +longitude = 16.500222 * u.deg +latitude = -23.271778 * u.deg +altitude = 1800 * u.m +location = EarthLocation(lon=longitude, lat=latitude, height=altitude) + +e_reco = MapAxis.from_energy_bounds( + 0.2, + 10, + 7, + unit="TeV", + name="energy" +) + +bg_maker = ExclusionMapBackgroundMaker(e_reco,location,15) + +data_store = DataStore.from_dir("$GAMMAPY_DATA/hess-dl3-dr1") + +obs_id = data_store.obs_table["OBS_ID"][data_store.obs_table["OBJECT"] == "Crab Nebula"] + +bg_maker.run(data_store, obs_id) + +bg3d = bg_maker.get_bg_3d() + +bg2d = bg_maker.get_bg_2d() +```