From b3d3dc3be7440ed5cdd6b7d9da172ff7739db7ae Mon Sep 17 00:00:00 2001 From: "Fabian P. Schmidt" Date: Wed, 6 Nov 2019 18:12:58 +0100 Subject: [PATCH] find_passes: Group satellite and transmitter keys This change enables an easy separation of those keys from this function in a future patch, following the goal of separating pass prediction and observation planning specific code. --- auto_scheduler/pass_predictor.py | 22 +++++++++++++--------- schedule_single_station.py | 8 ++++---- utils.py | 24 ++++++++++++------------ 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/auto_scheduler/pass_predictor.py b/auto_scheduler/pass_predictor.py index 476c2fb..48e8af2 100644 --- a/auto_scheduler/pass_predictor.py +++ b/auto_scheduler/pass_predictor.py @@ -108,10 +108,12 @@ def find_passes(satellite, # get pass information satpass = { - 'name': str(satellite.name), - 'id': str(satellite.id), - 'tle1': str(satellite.tle1), - 'tle2': str(satellite.tle2), + 'satellite': { + 'name': str(satellite.name), + 'id': str(satellite.id), + 'tle1': str(satellite.tle1), + 'tle2': str(satellite.tle2), + }, 'tr': tr.datetime(), # Rise time 'azr': azimuth_r, # Rise Azimuth 'tt': tt.datetime(), # Max altitude time @@ -119,11 +121,13 @@ def find_passes(satellite, 'ts': ts.datetime(), # Set time 'azs': azimuth_s, # Set azimuth 'valid': valid, - 'uuid': satellite.transmitter, - 'success_rate': satellite.success_rate, - 'good_count': satellite.good_count, - 'data_count': satellite.data_count, - 'mode': satellite.mode, + 'transmitter': { + 'uuid': satellite.transmitter, + 'success_rate': satellite.success_rate, + 'good_count': satellite.good_count, + 'data_count': satellite.data_count, + 'mode': satellite.mode, + }, 'scheduled': False } passes.append(satpass) diff --git a/schedule_single_station.py b/schedule_single_station.py index 0d47e76..775d7ad 100755 --- a/schedule_single_station.py +++ b/schedule_single_station.py @@ -246,7 +246,7 @@ def main(): report_efficiency(scheduledpasses, passes) # Find unique objects - satids = sorted(set([satpass['id'] for satpass in passes])) + satids = sorted(set([satpass['satellite']['id'] for satpass in passes])) print_scheduledpass_summary(scheduledpasses, ground_station_id, printer=logging.info) @@ -282,10 +282,10 @@ def main(): for satpass in tqdm(scheduledpasses_sorted): if not satpass['scheduled']: logging.debug("Scheduling %05d %s %s %3.0f %4.3f %s %s" % - (int(satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), + (int(satpass['satellite']['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']), - satpass['priority'], satpass['uuid'], satpass['name'].rstrip())) - schedule_observation(session, int(satpass['id']), satpass['uuid'], + satpass['priority'], satpass['transmitter']['uuid'], satpass['satellite']['name'].rstrip())) + schedule_observation(session, int(satpass['satellite']['id']), satpass['transmitter']['uuid'], ground_station_id, satpass['tr'].strftime("%Y-%m-%d %H:%M:%S") + ".000", satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000") diff --git a/utils.py b/utils.py index 05e311a..4c839e5 100644 --- a/utils.py +++ b/utils.py @@ -33,25 +33,25 @@ def get_priority_passes(passes, priorities, favorite_transmitters, only_priority normal = [] for satpass in passes: # Is this satellite a priority satellite? - if satpass['id'] in priorities: + if satpass['satellite']['id'] in priorities: # Is this transmitter a priority transmitter? - if satpass['uuid'] == favorite_transmitters[satpass['id']]: - satpass['priority'] = priorities[satpass['id']] - satpass['uuid'] = favorite_transmitters[satpass['id']] + if satpass['transmitter']['uuid'] == favorite_transmitters[satpass['satellite']['id']]: + satpass['priority'] = priorities[satpass['satellite']['id']] + satpass['transmitter']['uuid'] = favorite_transmitters[satpass['satellite']['id']] # Add if priority is high enough if satpass['priority'] >= min_priority: priority.append(satpass) elif only_priority: # Find satellite transmitter with highest number of good observations - max_good_count = max([s['good_count'] for s in passes if s["id"] == satpass["id"]]) + max_good_count = max([s['transmitter']['good_count'] for s in passes if s['satellite']["id"] == satpass['satellite']["id"]]) if max_good_count > 0: satpass['priority'] = \ (float(satpass['altt']) / 90.0) \ - * satpass['success_rate'] \ - * float(satpass['good_count']) / max_good_count + * satpass['transmitter']['success_rate'] \ + * float(satpass['transmitter']['good_count']) / max_good_count else: - satpass['priority'] = (float(satpass['altt']) / 90.0) * satpass['success_rate'] + satpass['priority'] = (float(satpass['altt']) / 90.0) * satpass['transmitter']['success_rate'] # Add if priority is high enough if satpass['priority'] >= min_priority: @@ -85,11 +85,11 @@ def print_scheduledpass_summary(scheduledpasses, ground_station_id, printer=prin "%3d | %3.d | %05d | %s | %s | %3.0f | %4.6f | %s | %-10s | %s"%( ground_station_id, satpass['scheduled'], - int(satpass['id']), + int(satpass['satellite']['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']) if satpass['altt'] else 0., satpass.get('priority', 0.0), - satpass.get('uuid', ''), - satpass.get('mode', ''), - satpass['name'].rstrip())) + satpass['transmitter'].get('uuid', ''), + satpass['transmitter'].get('mode', ''), + satpass['satellite']['name'].rstrip()))