Add API saving and remove save folder

This commit is contained in:
30hours 2024-03-09 01:46:39 +00:00
parent 363d08c9d1
commit 5c0a1bb9b4
6 changed files with 64 additions and 8 deletions

View file

@ -30,6 +30,7 @@ services:
volumes:
- ./common:/app/common
- ./test:/app/test
- ./save:/app/save
container_name: 3lips-event
cesium-apache:

View file

@ -25,12 +25,13 @@ class AdsbAssociator:
@brief Constructor for the AdsbAssociator class.
"""
def process(self, radar_list, radar_data):
def process(self, radar_list, radar_data, timestamp):
"""
@brief Associate detections from 2+ radars.
@param radar_list (list): List of radars to associate.
@param radar_data (dict): Radar data for list of radars.
@param timestamp (int): Timestamp to compute delays at (ms).
@return dict: Associated detections by [hex][radar].
"""
@ -60,7 +61,8 @@ class AdsbAssociator:
# associate radar and truth
assoc_detections_radar.append(self.process_1_radar(
radar, radar_data[radar]["detection"], adsb_detections))
radar, radar_data[radar]["detection"],
adsb_detections, timestamp))
# associate detections between radars
output = {}
@ -74,7 +76,7 @@ class AdsbAssociator:
return output
def process_1_radar(self, radar, radar_detections, adsb_detections):
def process_1_radar(self, radar, radar_detections, adsb_detections, timestamp):
"""
@brief Associate detections between 1 radar/truth pair.
@ -94,6 +96,11 @@ class AdsbAssociator:
if 'delay' in adsb_detections[aircraft] and len(radar_detections['delay']) >= 1:
# extrapolate delay/Doppler to current time
# delta_t = (timestamp - adsb_detections[aircraft]['timestamp'])/1000
# delay = 1000*adsb_detections[aircraft]['delay'] + \
# distance from aircraft to all detections
closest_point, distance = self.closest_point(
adsb_detections[aircraft]['delay'],
@ -107,7 +114,8 @@ class AdsbAssociator:
assoc_detections[aircraft] = {
'radar': radar,
'delay': closest_point[0],
'doppler': closest_point[1]
'doppler': closest_point[1],
'timestamp': adsb_detections[aircraft]['timestamp']
}
return assoc_detections

View file

@ -4,7 +4,6 @@
"""
import requests
import math
class AdsbTruth:

View file

@ -33,10 +33,12 @@ ellipseParametric = EllipseParametric()
ellipsoidParametric = EllipsoidParametric()
sphericalIntersection = SphericalIntersection()
adsbTruth = AdsbTruth(5)
save = True
saveFile = '/app/save/' + str(int(time.time())) + '.ndjson'
async def event():
global api
global api, save
timestamp = int(time.time()*1000)
api_event = copy.copy(api)
@ -91,7 +93,6 @@ async def event():
adsb_urls = list(set(adsb_urls))
for url in adsb_urls:
truth_adsb[url] = adsbTruth.process(url)
print(truth_adsb, flush=True)
# main processing
for item in api_event:
@ -122,7 +123,7 @@ async def event():
return
# processing
associated_dets = associator.process(item["server"], radar_dict_item)
associated_dets = associator.process(item["server"], radar_dict_item, timestamp)
associated_dets_3_radars = {
key: value
for key, value in associated_dets.items()
@ -181,6 +182,10 @@ async def event():
# update API
api = api_event
# save to file
if save:
append_api_to_file(api)
# event loop
async def main():
@ -189,6 +194,11 @@ async def main():
await event()
await asyncio.sleep(1)
def append_api_to_file(api_object, filename=saveFile):
with open(filename, 'a') as json_file:
json.dump(api_object, json_file)
json_file.write('\n')
def short_hash(input_string, length=10):
hash_object = hashlib.sha256(input_string.encode())

5
script/README.md Normal file
View file

@ -0,0 +1,5 @@
This folder is for post-processing scripts on API data.
## Scripts
- TODO

33
script/plot_accuracy.py Normal file
View file

@ -0,0 +1,33 @@
import argparse
import json
from datetime import datetime
def parse_posix_time(value):
try:
return int(value)
except ValueError:
raise argparse.ArgumentTypeError("Invalid POSIX time format")
def parse_command_line_arguments():
parser = argparse.ArgumentParser(description="Process command line arguments.")
parser.add_argument("json_string", type=str, help="Input JSON string")
parser.add_argument("target_name", type=str, help="Target name")
parser.add_argument("--start_time", type=parse_posix_time, help="Optional start time in POSIX seconds")
parser.add_argument("--stop_time", type=parse_posix_time, help="Optional stop time in POSIX seconds")
return parser.parse_args()
def main():
args = parse_command_line_arguments()
json_data = json.loads(args.json_string)
start_time = args.start_time if args.start_time else None
stop_time = args.stop_time if args.stop_time else None
print("JSON String:", json_data)
print("Target Name:", args.target_name)
print("Start Time:", start_time)
print("Stop Time:", stop_time)
if __name__ == "__main__":
main()