Source code for ctapipe.io.monitoringsource

"""
Handles reading of monitoring files
"""
from abc import abstractmethod

from ..containers import ArrayEventContainer
from ..core import TelescopeComponent
from .monitoringtypes import MonitoringType

__all__ = ["MonitoringSource"]


[docs] class MonitoringSource(TelescopeComponent): """ Parent class for ``MonitoringSource``. ``MonitoringSource`` read input files and fill `~ctapipe.containers.ArrayEventContainer` instances with corresponding monitoring data based on the event trigger time. A new ``MonitoringSource`` should be created for each type of monitoring file read into ctapipe, e.g. HDF5 files are read by the `~ctapipe.io.HDF5MonitoringSource`. ``MonitoringSource`` provides a common high-level interface for accessing monitoring information from different data sources. Creating an ``MonitoringSource`` for a new file format or other monitoring source ensures that data can be accessed in a common way, regardless of the file format or data origin. ``MonitoringSource`` itself is an abstract class, but will create an appropriate subclass. An ``MonitoringSource`` can also be created through the configuration system, by passing ``config`` or ``parent`` as appropriate. E.g. if using ``MonitoringSource`` inside of a ``Tool``, you would do: >>> self.monitoring_source = MonitoringSource(parent=self) # doctest: +SKIP """ plugin_entry_point = "ctapipe_monitoring" def __init__(self, subarray=None, config=None, parent=None, **kwargs): super().__init__(subarray=subarray, config=config, parent=parent, **kwargs) self.metadata = dict(is_simulation=False) @property @abstractmethod def monitoring_types(self) -> tuple[MonitoringType]: """ The monitoring types provided by this monitoring source Returns ------- tuple[ctapipe.io.MonitoringType] """
[docs] def has_any_monitoring_types(self, monitoring_types) -> bool: """ Check if any of `monitoring_types` is in self.monitoring_types Parameters ---------- monitoring_types: Iterable Iterable of monitoring types """ return any(mt in self.monitoring_types for mt in monitoring_types)
[docs] @abstractmethod def fill_monitoring_container(self, event: ArrayEventContainer): """ Fill the monitoring container for a given event. Parameters ---------- event : ArrayEventContainer The event to fill the monitoring container for. """
def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.close()
[docs] def close(self): """Close this event source. No-op by default. Should be overridden by sources needing a cleanup-step """ pass