Compare commits

..

No commits in common. "98a900f2495911198df4505077167ef96a381fed" and "d51c61dd5eee114d04ece5846c548119630cab56" have entirely different histories.

View file

@ -39,10 +39,17 @@ class RawinsObs():
self.values.append(value)
TTAA_HEIGHTS = {
'00': 1000, '92': 925, '85': 850,
'70': 700, '50': 500, '40': 400,
'30': 300, '25': 250, '20': 200,
'15': 150, '10': 100,
'00': 1000,
'92': 925,
'85': 850,
'70': 700,
'50': 500,
'40': 400,
'30': 300,
'25': 250,
'20': 200,
'15': 150,
'10': 100,
}
def parse_timestamp(self, value: str):
@ -63,8 +70,7 @@ class RawinsObs():
def parse_surface_pressure(self, value: str):
if value[0:2] == '99':
return {
'height': None,
'pressure': float(value[2:5])
'surface': float(value[2:5])
}
def parse_temp_dewpoint(self, value: str):
@ -127,49 +133,24 @@ class RawinsObs():
def parse_height_pressure(self, value: str):
token = value[0:2]
if value[2:5] == '///':
return None
if token in self.TTAA_HEIGHTS:
return {
'height': self.TTAA_HEIGHTS[token],
'pressure': float(value[2:5])
}
PRESSURE_SIG = {
PRESSURES_SIG = {
'11': True, '22': True, '33': True, '44': True, '55': True,
'66': True, '77': True, '88': True, '99': True
}
def parse_significant_pressure(self, value: str):
if value[0:2] in self.PRESSURE_SIG:
if value[0:2] in self.PRESSURES_SIG:
return {
'height': None,
'pressure': float(value[2:5])
}
def parse_sample_values(self, values: list[str], first: bool=False) -> RawinsSample:
if first:
hp = self.parse_surface_pressure(values[0])
else:
hp = self.parse_height_pressure(values[0])
if hp is None:
return None
td = self.parse_temp_dewpoint(values[1])
wind = self.parse_wind(values[2])
sample = RawinsSample()
sample.height = hp['height']
sample.pressure = hp['pressure']
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 sample
def parse_ttaa(self):
#
# Return None if there is no height data up to 100mb.
@ -187,21 +168,19 @@ class RawinsObs():
sounding.timestamp = self.parse_timestamp(self.values[0])
sounding.station = int(self.values[1])
sample = self.parse_sample_values(self.values[2:5], True)
if sample is None:
return
sounding.samples.append(sample)
for i in range(5, len(self.values), 3):
if len(self.values) < i+3 or self.values[i][-1] == '=':
for i in range(2, len(self.values), 3):
if len(self.values) <= i+2 or self.values[i][-1] == '=':
break
sample = self.parse_sample_values(self.values[i:i+3])
td = self.parse_temp_dewpoint(self.values[i+1])
wind = self.parse_wind(self.values[i+2])
if sample is None:
continue
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
sounding.samples.append(sample)