Source code for gwpy.detector.tz

# Copyright (c) 2014-2017 Louisiana State University
#               2017-2025 Cardiff University
#
# This file is part of GWpy.
#
# GWpy 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.
#
# GWpy 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 GWpy.  If not, see <http://www.gnu.org/licenses/>.

"""Timezone utilities for GWOs."""

import datetime

__author__ = "Duncan Macleod <duncan.macleod@ligo.org>"

# local time-zone for ground-based laser interferometers
TIMEZONE: dict[str, str] = {
    "C1": "US/Pacific",
    "G1": "Europe/Berlin",
    "H1": "US/Pacific",
    "I1": "Asia/Kolkata",
    "K1": "Japan",
    "L1": "US/Central",
    "V1": "Europe/Rome",
}


[docs] def get_timezone(ifo: str) -> str: """Return the timezone for the given interferometer prefix. Parameters ---------- ifo : `str` Prefix of interferometer, e.g. ``'X1'`` Returns ------- timezone : `str` The name of the timezone for ``ifo``. Raises ------ ValueError If ``ifo`` is not recognised. Examples -------- >>> get_timezone("G1") 'Europe/Berlin' """ try: return TIMEZONE[ifo] except KeyError as exc: msg = f"Unrecognised ifo: '{ifo}'" raise ValueError(msg) from exc
[docs] def get_timezone_offset(ifo: str, dt: datetime.datetime | None = None) -> float: """Return the offset in seconds between UTC and the given interferometer. Parameters ---------- ifo : `str` Prefix of interferometer, e.g. ``'X1'`` dt : `datetime.datetime`, optional The time at which to calculate the offset. Default is `datetime.datetime.now`. Returns ------- offset : `float` The offset in seconds between the timezone of the interferometer and UTC. """ import pytz if dt is None: dt = datetime.datetime.now(tz=datetime.UTC) if dt.tzinfo is None: dt = dt.astimezone(datetime.UTC) tz = pytz.timezone(get_timezone(ifo)) return dt.astimezone(tz).utcoffset().total_seconds()