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