From 8eb4cf15080c081cda7b5b558e4a420f8fc3348f Mon Sep 17 00:00:00 2001 From: Maximilian Linhoff Date: Thu, 19 Oct 2023 18:58:02 +0200 Subject: [PATCH] Interpolate in HDF5EventSource --- ctapipe/io/hdf5eventsource.py | 51 +++++++++++++++++++++++++---------- ctapipe/io/tableloader.py | 6 ++--- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/ctapipe/io/hdf5eventsource.py b/ctapipe/io/hdf5eventsource.py index c7bda1f9b7d..5b532349390 100644 --- a/ctapipe/io/hdf5eventsource.py +++ b/ctapipe/io/hdf5eventsource.py @@ -38,6 +38,7 @@ SimulatedShowerContainer, SimulationConfigContainer, TelescopeImpactParameterContainer, + TelescopePointingContainer, TelescopeTriggerContainer, TelEventIndexContainer, TimingParametersContainer, @@ -51,7 +52,8 @@ from .datalevels import DataLevel from .eventsource import EventSource from .hdf5tableio import HDF5TableReader, get_column_attrs -from .tableloader import DL2_SUBARRAY_GROUP, DL2_TELESCOPE_GROUP +from .pointing import PointingInterpolator +from .tableloader import DL2_SUBARRAY_GROUP, DL2_TELESCOPE_GROUP, POINTING_GROUP __all__ = ["HDF5EventSource"] @@ -570,10 +572,17 @@ def _generator(self): self.file_.root.dl1.monitoring.subarray.pointing.col("time") ) - tel_pointing_finder = { - table.name: IndexFinder(table.col("time")) - for table in self.file_.root.dl1.monitoring.telescope.pointing - } + if POINTING_GROUP in self.file_.root: + pointing_interpolator = PointingInterpolator( + h5file=self.file_, + parent=self, + ) + else: + pointing_interpolator = None + tel_pointing_finder = { + table.name: IndexFinder(table.col("time")) + for table in self.file_.root.dl1.monitoring.telescope.pointing + } counter = 0 for trigger, index in events: @@ -624,7 +633,9 @@ def _generator(self): continue self._fill_array_pointing(data, array_pointing_finder) - self._fill_telescope_pointing(data, tel_pointing_finder) + self._fill_telescope_pointing( + data, tel_pointing_finder, pointing_interpolator + ) for tel_id in data.trigger.tel.keys(): key = f"tel_{tel_id:03d}" @@ -730,10 +741,21 @@ def _fill_array_pointing(self, data, array_pointing_finder): self._subarray_pointing_attrs["array_dec"]["UNIT"], ) - def _fill_telescope_pointing(self, data, tel_pointing_finder): + def _fill_telescope_pointing( + self, data, tel_pointing_finder, tel_pointing_interpolator=None + ): """ Fill the telescope pointing information of a given event """ + if tel_pointing_interpolator is not None: + for tel_id, trigger in data.trigger.tel.items(): + alt, az = tel_pointing_interpolator(tel_id, trigger.time) + data.pointing.tel[tel_id] = TelescopePointingContainer( + altitude=alt, + azimuth=az, + ) + return + # Same comments as to _fill_array_pointing apply pointing_group = self.file_.root.dl1.monitoring.telescope.pointing for tel_id in data.trigger.tel.keys(): @@ -749,11 +771,12 @@ def _fill_telescope_pointing(self, data, tel_pointing_finder): pointing_telescope = tel_pointing_table[closest_time_index] attrs = self._telescope_pointing_attrs(tel_id) - data.pointing.tel[tel_id].azimuth = u.Quantity( - pointing_telescope["azimuth"], - attrs["azimuth"]["UNIT"], - ) - data.pointing.tel[tel_id].altitude = u.Quantity( - pointing_telescope["altitude"], - attrs["altitude"]["UNIT"], + data.pointing.tel[tel_id] = TelescopePointingContainer( + azimuth=u.Quantity( + pointing_telescope["azimuth"], attrs["azimuth"]["UNIT"] + ), + altitude=u.Quantity( + pointing_telescope["altitude"], + attrs["altitude"]["UNIT"], + ), ) diff --git a/ctapipe/io/tableloader.py b/ctapipe/io/tableloader.py index f8ee7d38413..a3cb9329c1d 100644 --- a/ctapipe/io/tableloader.py +++ b/ctapipe/io/tableloader.py @@ -12,12 +12,10 @@ from astropy.table import Table, hstack, vstack from astropy.utils.decorators import lazyproperty -from ctapipe.instrument.optics import FocalLengthKind -from ctapipe.io.pointing import PointingInterpolator - from ..core import Component, Provenance, traits -from ..instrument import SubarrayDescription +from ..instrument import FocalLengthKind, SubarrayDescription from .astropy_helpers import join_allow_empty, read_table +from .pointing import PointingInterpolator __all__ = ["TableLoader"]