Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use sky_to_fov() also for RADEC FoVAlignment in make_map_background_irf #4667

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions gammapy/data/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ def from_header(cls, header, format="gadf"):
"PRESSURE",
"RELHUM",
"NSBLEVEL",
"CREATOR",
"HDUVERS",
]
optional = dict()
for key in optional_keywords:
Expand Down
29 changes: 26 additions & 3 deletions gammapy/data/observations.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from astropy.units import Quantity
from astropy.utils import lazyproperty
import matplotlib.pyplot as plt
from gammapy.irf import FoVAlignment
from gammapy.utils.deprecation import GammapyDeprecationWarning, deprecated
from gammapy.utils.fits import LazyFitsData, earth_location_to_dict
from gammapy.utils.metadata import CreatorMetaData, TargetMetaData, TimeInfoMetaData
Expand Down Expand Up @@ -67,7 +68,7 @@
aeff = LazyFitsData(cache=False)
edisp = LazyFitsData(cache=False)
psf = LazyFitsData(cache=False)
bkg = LazyFitsData(cache=False)
_bkg = LazyFitsData(cache=False)
_rad_max = LazyFitsData(cache=True)
_events = LazyFitsData(cache=False)
_gti = LazyFitsData(cache=True)
Expand Down Expand Up @@ -101,7 +102,7 @@
self.aeff = aeff
self.edisp = edisp
self.psf = psf
self.bkg = bkg
self._bkg = bkg
self._rad_max = rad_max
self._gti = gti
self._events = events
Expand All @@ -116,6 +117,28 @@
except AttributeError:
return f"<pre>{html.escape(str(self))}</pre>"

@property
def bkg(self):
"""Background of the observation."""
bkg = self._bkg
# used for backward compatibility of old HESS data
try:
if (
bkg
and self._meta
and self._meta.optional
and self._meta.optional["CREATOR"] == "SASH FITS::EventListWriter"
and self._meta.optional["HDUVERS"] == "0.2"
):
bkg._fov_alignment = FoVAlignment.REVERSE_LON_RADEC
except KeyError:
pass

Check warning on line 135 in gammapy/data/observations.py

View check run for this annotation

Codecov / codecov/patch

gammapy/data/observations.py#L134-L135

Added lines #L134 - L135 were not covered by tests
return bkg

@bkg.setter
def bkg(self, value):
self._bkg = value

@property
def meta(self):
"""Return metadata container."""
Expand Down Expand Up @@ -148,7 +171,7 @@
def available_hdus(self):
"""Which HDUs are available."""
available_hdus = []
keys = ["_events", "_gti", "aeff", "edisp", "psf", "bkg", "_rad_max"]
keys = ["_events", "_gti", "aeff", "edisp", "psf", "_bkg", "_rad_max"]
hdus = ["events", "gti", "aeff", "edisp", "psf", "bkg", "rad_max"]
for key, hdu in zip(keys, hdus):
available = self.__dict__.get(key, False)
Expand Down
2 changes: 2 additions & 0 deletions gammapy/irf/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ class FoVAlignment(str, Enum):

ALTAZ = "ALTAZ"
RADEC = "RADEC"
# used for backward compatibility of old HESS data
REVERSE_LON_RADEC = "REVERSE_LON_RADEC"


class IRF(metaclass=abc.ABCMeta):
Expand Down
6 changes: 6 additions & 0 deletions gammapy/makers/tests/test_spectrum.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from regions import CircleSkyRegion
from gammapy.data import DataStore
from gammapy.datasets import SpectrumDataset
from gammapy.irf import FoVAlignment
from gammapy.makers import (
ReflectedRegionsBackgroundMaker,
SafeMaskMaker,
Expand Down Expand Up @@ -125,6 +126,11 @@ def test_spectrum_dataset_maker_hess_dl3(spectrum_dataset_crab, observations_hes

datasets = []
for obs in observations_hess_dl3:

assert obs.meta.optional["CREATOR"] == "SASH FITS::EventListWriter"
assert obs.meta.optional["HDUVERS"] == "0.2"
assert obs.bkg.fov_alignment == FoVAlignment.REVERSE_LON_RADEC

dataset = maker.run(spectrum_dataset_crab, obs)
datasets.append(dataset)

Expand Down
17 changes: 10 additions & 7 deletions gammapy/makers/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import warnings
import numpy as np
import astropy.units as u
from astropy.coordinates import Angle, SkyOffsetFrame
from astropy.coordinates import Angle
from astropy.table import Table
from gammapy.data import FixedPointingInfo
from gammapy.irf import BackgroundIRF, EDispMap, FoVAlignment, PSFMap
Expand Down Expand Up @@ -81,12 +81,15 @@ def _get_fov_coords(pointing, irf, geom, use_region_center=True, obstime=None):
fov_lon, fov_lat = sky_to_fov(
altaz_coord.az, altaz_coord.alt, pointing_altaz.az, pointing_altaz.alt
)
elif irf.fov_alignment == FoVAlignment.RADEC:
# Create OffsetFrame
frame = SkyOffsetFrame(origin=pointing_icrs)
pseudo_fov_coord = sky_coord.transform_to(frame)
fov_lon = pseudo_fov_coord.lon
fov_lat = pseudo_fov_coord.lat
elif irf.fov_alignment in [FoVAlignment.RADEC, FoVAlignment.REVERSE_LON_RADEC]:
fov_lon, fov_lat = sky_to_fov(
sky_coord.icrs.ra,
sky_coord.icrs.dec,
pointing_icrs.icrs.ra,
pointing_icrs.icrs.dec,
)
if irf.fov_alignment == FoVAlignment.REVERSE_LON_RADEC:
fov_lon = -fov_lon
else:
raise ValueError(
f"Unsupported background coordinate system: {irf.fov_alignment!r}"
Expand Down
Loading