Source code for ligo.skymap.io.events.base

# Copyright (C) 2017-2020  Leo Singer
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""Base classes for reading events from search pipelines."""

from abc import ABCMeta, abstractmethod
from collections.abc import Mapping

__all__ = ('EventSource', 'Event', 'SingleEvent')


def _fmt(obj, keys):
    kvs = ', '.join('{}={!r}'.format(key, getattr(obj, key)) for key in keys)
    return '<{}({})>'.format(obj.__class__.__name__, kvs)


[docs] class EventSource(Mapping): """Abstraction of a source of coincident events. This is a mapping from event IDs (which may be any hashable type, but are generally integers or strings) to instances of `Event`. """ def __str__(self): try: length = len(self) except (NotImplementedError, TypeError): contents = '...' else: contents = '...{} items...'.format(length) return '<{}({{{}}})>'.format(self.__class__.__name__, contents) def __repr__(self): try: len(self) except NotImplementedError: contents = '...' else: contents = ', '.join('{}: {!r}'.format(key, value) for key, value in self.items()) return '{}({{{}}})'.format(self.__class__.__name__, contents)
[docs] class Event(metaclass=ABCMeta): """Abstraction of a coincident trigger. Attributes ---------- singles : list, tuple Sequence of `SingleEvent` template_args : dict Dictionary of template parameters """ @property @abstractmethod def singles(self): raise NotImplementedError @property @abstractmethod def template_args(self): raise NotImplementedError __str_keys = ('singles',) def __str__(self): return _fmt(self, self.__str_keys) __repr__ = __str__
[docs] class SingleEvent(metaclass=ABCMeta): """Abstraction of a single-detector trigger. Attributes ---------- detector : str Instrument name (e.g. 'H1') snr : float Signal to noise ratio phase : float Phase on arrival time : float GPS time on arrival zerolag_time : float GPS time on arrival in zero-lag data, without time slides applied psd : `REAL8FrequencySeries` Power spectral density snr_series : `COMPLEX8TimeSeries` SNR time series """ @property @abstractmethod def detector(self): raise NotImplementedError @property @abstractmethod def snr(self): raise NotImplementedError @property @abstractmethod def phase(self): raise NotImplementedError @property @abstractmethod def time(self): raise NotImplementedError @property @abstractmethod def zerolag_time(self): raise NotImplementedError @property @abstractmethod def psd(self): raise NotImplementedError @property def snr_series(self): return None __str_keys = ('detector', 'snr', 'phase', 'time') def __str__(self): keys = self.__str_keys if self.time != self.zerolag_time: keys += ('zerolag_time',) return _fmt(self, keys) __repr__ = __str__