Skip to content

Commit

Permalink
Change nightevents time object and change visibility redis stored dat…
Browse files Browse the repository at this point in the history
…a format
  • Loading branch information
dngomez committed Jul 17, 2024
1 parent da0055f commit ae6289f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 5 deletions.
16 changes: 13 additions & 3 deletions scheduler/core/calculations/nightevents.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@
from lucupy.decorators import immutable
from lucupy.minimodel import NightIndex, Site, TimeslotIndex
from lucupy.sky.constants import JYEAR, J2000
from scheduler.services.logger_factory import create_logger

logger = create_logger(__name__)

__all__ = [
'NightEvents',
]

# import pdb
import pandas

@final
@immutable
Expand Down Expand Up @@ -71,6 +75,7 @@ class NightEvents:
pm_array: List[npt.NDArray[float]] = field(init=False)

def __post_init__(self):
logger.info("Calculating night events for site %s." % self.site.name)
# Calculate the length of each night at this site, i.e. time between twilights.
night_length = TimeDelta((self.twilight_morning_12 - self.twilight_evening_12).to(u.hour))
object.__setattr__(self, 'night_length', night_length)
Expand All @@ -94,10 +99,15 @@ def __post_init__(self):

# Pre-calculate the different times.
# We want these as Python lists because the entries will have different lengths.
utc_times = [t.to_datetime(ZoneInfo('UTC')) for t in times]
dt_time_starts = time_starts.to_datetime()
dt_time_ends = time_ends.to_datetime()
utc_times = [pandas.date_range(start, end - self.time_slot_length.to_datetime(),
freq=self.time_slot_length.to_datetime(), tz='UTC')
for start, end in zip(dt_time_starts, dt_time_ends)]
local_times = [dt.tz_convert(self.site.timezone) for dt in utc_times]
utc_times = [dt.to_pydatetime() for dt in utc_times]
local_times = [dt.to_pydatetime() for dt in local_times]
object.__setattr__(self, 'utc_times', utc_times)

local_times = [t.to_datetime(self.site.timezone) for t in times]
object.__setattr__(self, 'local_times', local_times)

local_sidereal_times = [sky.local_sidereal_time(t, self.site.location) for t in times]
Expand Down
17 changes: 15 additions & 2 deletions scheduler/services/visibility/snapshot.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
from lucupy.decorators import immutable
from lucupy.minimodel import SkyBackground

import itertools

def group_ranges(i):
for a, b in itertools.groupby(enumerate(i), lambda pair: pair[1] - pair[0]):
b = list(b)
yield b[0][1], b[-1][1]


@final
@immutable
Expand All @@ -23,14 +30,20 @@ class VisibilitySnapshot:

@staticmethod
def from_dict(ti_dict: Dict) -> 'VisibilitySnapshot':
return VisibilitySnapshot(visibility_slot_idx=np.array(ti_dict['visibility_slot_idx'], dtype=int),
try:
slot_list = [list(range(s[0], s[1] + 1)) for s in ti_dict['visibility_slot_idx']]
except Exception as e:
print(e)
print(ti_dict['visibility_slot_idx'])
return VisibilitySnapshot(visibility_slot_idx=np.array([x for xs in slot_list for x in xs], dtype=int),
visibility_time=TimeDelta(ti_dict['visibility_time']['value'],
format=ti_dict['visibility_time']['format']),
)

def to_dict(self) -> Dict:
visibility_ranges = group_ranges(self.visibility_slot_idx.tolist())
return {
'visibility_slot_idx': self.visibility_slot_idx.tolist(),
'visibility_slot_idx': [*visibility_ranges],
'visibility_time': {
'value': self.visibility_time.sec,
'format': self.visibility_time.format
Expand Down

0 comments on commit ae6289f

Please sign in to comment.