Source code for spinifex.times
"""Time utilities for ionospheric analysis."""
from __future__ import annotations
import astropy.units as u
import numpy as np
from astropy.time import Time
from numpy.typing import NDArray
[docs]
def get_gps_week(time: Time) -> NDArray[np.int32]:
"""Get the GPS week from a time.
Parameters
----------
time : Time
Time(s) to get the GPS week from
Returns
-------
NDArray
GPS week(s)
"""
return np.array(np.floor((time.gps * u.s).to(u.week).value), dtype=np.int32)
[docs]
def get_unique_days(times: Time) -> Time:
"""Get the unique days from a list of times.
Parameters
----------
times : Time
Times to get the unique days from.
Returns
-------
Time
Unique days
"""
return Time(np.sort(np.unique(np.floor(times.mjd))), format="mjd")
[docs]
def get_unique_days_index(times: Time) -> NDArray[np.int32]:
"""Get the unique days index from a list of times.
Parameters
----------
times : Time
Times to get the unique days index from.
Returns
-------
NDArray
Unique days index
"""
return np.array(
np.searchsorted(get_unique_days(times).mjd, np.floor(times.mjd)), dtype=np.int32
)
# TODO: Add docs
[docs]
def get_indexlist_unique_days(unique_days: Time, times: Time) -> NDArray[np.bool_]:
return np.array(
np.floor(times.mjd)[np.newaxis] == unique_days.mjd[:, np.newaxis],
dtype=np.bool_,
)
# TODO: Add docs
[docs]
def get_consecutive_days(unique_days: Time) -> NDArray[np.int32]:
return np.cumsum(np.diff(unique_days.mjd, prepend=unique_days.mjd[0]) > 1)