Skip to content
Snippets Groups Projects
moon_phase.py 1.34 KiB
import skyfield
from skyfield import api
from skyfield import almanac
from skyfield.api import load
from util.util import get_time_tuple_utc
import numpy as np
import datetime
from datetime import timezone

ts = api.load.timescale()
eph = api.load('de421.bsp')


def convert_time(epoch_time):
    dt_obj, dt_tup = get_time_tuple_utc(epoch_time)
    t = ts.from_datetime(dt_obj)
    t = ts.utc(dt_tup[0], dt_tup[1], dt_tup[2], dt_tup[3])
    return t


def convert_times(epoch_time_s):
    dt_obj_s = []
    for et in epoch_time_s:
        dt_obj_s.append(get_time_tuple_utc(et)[0])
    t = ts.from_datetimes(dt_obj_s)
    return t


def moon_phase(dt_obj_s, phs_deg=50):
    t = ts.from_datetimes(dt_obj_s)
    phase = almanac.moon_phase(eph, t)
    return (phase.degrees > phs_deg) & (phase.degrees < 360-phs_deg)


def make_times(dt_str, num_days):
    dt_obj_s = []
    ts_s = []
    dto_0 = datetime.datetime.strptime(dt_str, '%Y-%m-%d_%H:%M').replace(tzinfo=timezone.utc)
    ts_0 = dto_0.timestamp()

    dt_obj_s.append(dto_0)
    ts_s.append(ts_0)
    dto_last = dto_0
    for k in range(num_days):
        dt_obj = dto_last + datetime.timedelta(days=1)
        dt_obj_s.append(dt_obj)
        ts_s.append(dt_obj.timestamp())
        dto_last = dt_obj

    return dt_obj_s, ts_s


def make_hist(ts_s, edges):
    h = np.histogram(ts_s, bins=edges)
    return h