From 715d0a3c6692765a520ee0dfb159d36277b53013 Mon Sep 17 00:00:00 2001 From: JoseAndresMR Date: Tue, 26 Jun 2018 16:22:42 +0200 Subject: [PATCH] implementation of uncertainty values from csv files --- pyModeS/decoder/adsb.py | 228 +++++++++--------- pyModeS/decoder/adsb_ua_parameters/NACp.csv | 13 + pyModeS/decoder/adsb_ua_parameters/NACv.csv | 6 + pyModeS/decoder/adsb_ua_parameters/NIC_v1.csv | 22 ++ pyModeS/decoder/adsb_ua_parameters/NIC_v2.csv | 26 ++ pyModeS/decoder/adsb_ua_parameters/NUCp.csv | 18 ++ pyModeS/decoder/adsb_ua_parameters/NUCv.csv | 6 + pyModeS/decoder/adsb_ua_parameters/SIL.csv | 5 + pyModeS/streamer/stream.py | 52 ++-- 9 files changed, 241 insertions(+), 135 deletions(-) create mode 100644 pyModeS/decoder/adsb_ua_parameters/NACp.csv create mode 100644 pyModeS/decoder/adsb_ua_parameters/NACv.csv create mode 100644 pyModeS/decoder/adsb_ua_parameters/NIC_v1.csv create mode 100644 pyModeS/decoder/adsb_ua_parameters/NIC_v2.csv create mode 100644 pyModeS/decoder/adsb_ua_parameters/NUCp.csv create mode 100644 pyModeS/decoder/adsb_ua_parameters/NUCv.csv create mode 100644 pyModeS/decoder/adsb_ua_parameters/SIL.csv diff --git a/pyModeS/decoder/adsb.py b/pyModeS/decoder/adsb.py index 3230706..a604040 100644 --- a/pyModeS/decoder/adsb.py +++ b/pyModeS/decoder/adsb.py @@ -19,6 +19,7 @@ The wrapper for decoding ADS-B messages from __future__ import absolute_import, print_function, division from pyModeS.decoder import common +import pandas as pd # JoseAndresMR: I suppose you already have pandas in a common function, just change all occurrencies # from pyModeS.decoder.bds import bds05, bds06, bds09 from pyModeS.decoder.bds.bds05 import airborne_position, airborne_position_with_ref, altitude @@ -197,63 +198,30 @@ def version(msg): return version -def nic_v1(msg, nic_sup_b): - """Calculate NIC, navigation integrity category for ADS-B version 1 +def nic_v1(msg,nic_sup_b): + """Calculate NIC, navigation integrity category, for ADS-B version 1 Args: msg (string): 28 bytes hexadecimal message string nic_sup_b (int or string): NIC supplement Returns: - int: NIC number (from 0 to 11), -1 if not applicable + int or string: Horizontal Radius of Containment + int or string: Vertical Protection Limit """ if typecode(msg) < 5 or typecode(msg) > 22: raise RuntimeError("%s: Not a surface position message (5 22: raise RuntimeError("%s: Not a surface position message (5 22: + raise RuntimeError("%s: Not a surface position message (5>>>>>> upstream/master # Uncertainty & accuracy ac = self.acs[icao] if (5 <= tc <= 8) or (9 <= tc <= 18) or (20 <= tc <= 22): + if 20 <= tc <= 22: + ac['HPL'], ac['RCu'], ac['RCv'] = pms.adsb.nuc_p(msg) + else: + ac['HPL'], ac['RCu'] = pms.adsb.nuc_p(msg) + if (ac['ver'] == 1) and ('nic_s' in ac.keys()): - self.acs[icao]['NIC'] = pms.adsb.nic_v1(msg, ac['nic_s']) + ac['Rc'], ac['VPL'] = pms.adsb.nic_v1(msg, ac['nic_s']) elif (ac['ver'] == 2) and ('nic_a' in ac.keys()) and ('nic_b' in ac.keys()): - self.acs[icao]['NIC'] = pms.adsb.nic_v2(msg, ac['nic_a'], ac['nic_b'], ac['nic_c']) + ac['Rc'], ac['VPL'] = pms.adsb.nic_v2(msg, ac['nic_a'], ac['nic_b'], ac['nic_c']) + if tc == 19: + ac['HVE'], ac['VVE'] = pms.adsb.nuc_v(msg) if ac['ver'] in [1, 2]: - self.acs[icao]['NACv'] = pms.adsb.nac_v(msg) + ac['HFU'], ac['VEPU'] = pms.adsb.nac_v(msg) + if tc == 29: - if ac['ver'] != None: - self.acs[icao]['SIL'], self.acs[icao]['sil_s'] = pms.adsb.sil(msg, ac['ver']) - self.acs[icao]['NACp'] = pms.adsb.nac_p(msg) + if ac['ver'] == 1: + ac['PR_RCu'], ac['PE_VPL'] = pms.adsb.sil(msg, ac['ver']) + elif ac['ver'] == 2: + ac['PR_RCu'], ac['PE_VPL'], ac['sil_base'] = pms.adsb.sil(msg, ac['ver']) + ac['HFOMr'], ac['VFOMr'] = pms.adsb.nac_p(msg) + if tc == 31: - self.acs[icao]['ver'] = pms.adsb.version(msg) - self.acs[icao]['SIL'] = pms.adsb.version(msg) - self.acs[icao]['NACp'] = pms.adsb.nac_p(msg) - if self.acs[icao]['ver'] == 1: - self.acs[icao]['nic_s'] = pms.adsb.nic_s(msg) - elif self.acs[icao]['ver'] == 2: - self.acs[icao]['nic_a'], self.acs[icao]['nic_c'] = pms.adsb.nic_a_c(msg) + ac['ver'] = pms.adsb.version(msg) + ac['HFOMr'], ac['VFOMr'] = pms.adsb.nac_p(msg) + if ac['ver'] == 1: + ac['nic_s'] = pms.adsb.nic_s(msg) + ac['PR_RCu'], ac['PE_VPL'] = pms.adsb.sil(msg, ac['ver']) + elif ac['ver'] == 2: + ac['nic_a'], ac['nic_c'] = pms.adsb.nic_a_c(msg) + ac['PR_RCu'], ac['PE_VPL'], ac['sil_base'] = pms.adsb.sil(msg, ac['ver']) # process commb message