Skip to content

Commit

Permalink
change FoVAlignment based on meta infos
Browse files Browse the repository at this point in the history
Signed-off-by: Quentin Remy <[email protected]>
  • Loading branch information
QRemy committed Jul 30, 2024
1 parent fa0cef3 commit 9662926
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 6 deletions.
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
24 changes: 22 additions & 2 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 @@ class Observation:
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 @@ def __init__(
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,25 @@ def _repr_html_(self):
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
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
return bkg

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

@property
def meta(self):
"""Return metadata container."""
Expand Down
3 changes: 3 additions & 0 deletions gammapy/irf/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ class FoVAlignment(str, Enum):

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


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
6 changes: 2 additions & 4 deletions gammapy/makers/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
from gammapy.utils.coordinates import sky_to_fov
from gammapy.utils.regions import compound_region_to_regions

REVERSE_FOV_LON = False

__all__ = [
"make_counts_rad_max",
"make_edisp_kernel_map",
Expand Down Expand Up @@ -83,14 +81,14 @@ 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:
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 REVERSE_FOV_LON:
if irf.fov_alignment == FoVAlignment.REVERSE_LON_RADEC:
fov_lon = -fov_lon
else:
raise ValueError(
Expand Down

0 comments on commit 9662926

Please sign in to comment.