diff --git a/lib/xmet/rawins.py b/lib/xmet/rawins.py index d367540..cfdc537 100644 --- a/lib/xmet/rawins.py +++ b/lib/xmet/rawins.py @@ -23,12 +23,17 @@ class RawinsSample(): self.wind_dir: float = None self.wind_speed: float = None +class RawinsSounding(): + def __init__(self): + self.timestamp: datetime.datetime = None + self.station: int = None + self.cur: RawinsSample = None + self.samples: list[RawinsSample] = list() + class RawinsObs(): def __init__(self, kind: str): - self.kind: str = kind - self.timestamp: datetime.datetime = None - self.surface: float = None - self.values: list[str] = list() + self.kind: str = kind + self.values: list[str] = list() def read(self, value: str): self.values.append(value) @@ -147,26 +152,30 @@ class RawinsObs(): } def parse_ttaa(self): - samples = list() + if self.values[1][0:3] == 'NIL': + return None + + sounding = RawinsSounding() + sounding.timestamp = self.parse_timestamp(self.values[0]) + sounding.station = int(self.values[1]) for i in range(2, len(self.values), 3): if len(self.values) <= i+2 or self.values[i][-1] == '=': break - samples.append({ - 'pressure': self.parse_surface_pressure(self.values[i]), - 'temp_dewp': self.parse_temp_dewpoint(self.values[i+1]), - 'wind': self.parse_wind(self.values[i+2]) - }) + td = self.parse_temp_dewpoint(self.values[i+1]) + wind = self.parse_wind(self.values[i+2]) - if self.values[1][0:3] == 'NIL': - return None + sample = RawinsSample() + sample.pressure = self.parse_surface_pressure(self.values[i]) + sample.temp = td['temp'] if td is not None else None + sample.dewpoint = td['dewpoint'] if td is not None else None + sample.wind_dir = wind['dir'] if wind is not None else None + sample.wind_speed = wind['speed'] if wind is not None else None - return { - 'timestamp': self.parse_timestamp(self.values[0]), - 'station': int(self.values[1]), - 'samples': samples - } + sounding.samples.append(sample) + + return sounding class RawinsChunk(): def __init__(self,