From db2be3e136aaadb3c749a9067733957bd811cbaf Mon Sep 17 00:00:00 2001 From: Joey Chatelain Date: Thu, 2 Apr 2026 10:47:30 -0700 Subject: [PATCH] shift start of cadence to observation time --- .../cadences/resume_cadence_after_failure.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tom_observations/cadences/resume_cadence_after_failure.py b/tom_observations/cadences/resume_cadence_after_failure.py index cfc663d8a..e597f4a0f 100644 --- a/tom_observations/cadences/resume_cadence_after_failure.py +++ b/tom_observations/cadences/resume_cadence_after_failure.py @@ -49,6 +49,8 @@ def run(self): # Boilerplate to get necessary properties for future calls start_keyword, end_keyword = facility.get_start_end_keywords() observation_payload = last_obs.parameters + observation_payload['last_obs_end'] = last_obs.scheduled_end + observation_payload['last_obs_start'] = last_obs.scheduled_start # Cadence logic # If the observation hasn't finished, do nothing @@ -105,7 +107,14 @@ def advance_window(self, observation_payload, start_keyword='start', end_keyword advance_window_hours = cadence_frequency window_length = parse(observation_payload[end_keyword]) - parse(observation_payload[start_keyword]) - new_start = parse(observation_payload[start_keyword]) + timedelta(hours=advance_window_hours) + # If the last observation has an end or start time recorded use that for the beginning of the new cadence + # Otherwise use the start time of the current cadence. + if observation_payload['last_obs_end']: + new_start = observation_payload['last_obs_end'] + timedelta(hours=advance_window_hours) + elif observation_payload['last_obs_start']: + new_start = observation_payload['last_obs_start'] + timedelta(hours=advance_window_hours) + else: + new_start = parse(observation_payload[start_keyword]) + timedelta(hours=advance_window_hours) if new_start < datetime.now(): # Ensure that the new window isn't in the past new_start = datetime.now() new_end = new_start + window_length