Slowly nudge TEMP data into better parseability
This commit is contained in:
parent
d51c61dd5e
commit
22a95be5c9
1 changed files with 44 additions and 23 deletions
|
@ -39,17 +39,10 @@ class RawinsObs():
|
||||||
self.values.append(value)
|
self.values.append(value)
|
||||||
|
|
||||||
TTAA_HEIGHTS = {
|
TTAA_HEIGHTS = {
|
||||||
'00': 1000,
|
'00': 1000, '92': 925, '85': 850,
|
||||||
'92': 925,
|
'70': 700, '50': 500, '40': 400,
|
||||||
'85': 850,
|
'30': 300, '25': 250, '20': 200,
|
||||||
'70': 700,
|
'15': 150, '10': 100,
|
||||||
'50': 500,
|
|
||||||
'40': 400,
|
|
||||||
'30': 300,
|
|
||||||
'25': 250,
|
|
||||||
'20': 200,
|
|
||||||
'15': 150,
|
|
||||||
'10': 100,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_timestamp(self, value: str):
|
def parse_timestamp(self, value: str):
|
||||||
|
@ -70,7 +63,8 @@ class RawinsObs():
|
||||||
def parse_surface_pressure(self, value: str):
|
def parse_surface_pressure(self, value: str):
|
||||||
if value[0:2] == '99':
|
if value[0:2] == '99':
|
||||||
return {
|
return {
|
||||||
'surface': float(value[2:5])
|
'height': None,
|
||||||
|
'pressure': float(value[2:5])
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_temp_dewpoint(self, value: str):
|
def parse_temp_dewpoint(self, value: str):
|
||||||
|
@ -133,24 +127,49 @@ class RawinsObs():
|
||||||
def parse_height_pressure(self, value: str):
|
def parse_height_pressure(self, value: str):
|
||||||
token = value[0:2]
|
token = value[0:2]
|
||||||
|
|
||||||
|
if value[2:5] == '///':
|
||||||
|
return None
|
||||||
|
|
||||||
if token in self.TTAA_HEIGHTS:
|
if token in self.TTAA_HEIGHTS:
|
||||||
return {
|
return {
|
||||||
'height': self.TTAA_HEIGHTS[token],
|
'height': self.TTAA_HEIGHTS[token],
|
||||||
'pressure': float(value[2:5])
|
'pressure': float(value[2:5])
|
||||||
}
|
}
|
||||||
|
|
||||||
PRESSURES_SIG = {
|
PRESSURE_SIG = {
|
||||||
'11': True, '22': True, '33': True, '44': True, '55': True,
|
'11': True, '22': True, '33': True, '44': True, '55': True,
|
||||||
'66': True, '77': True, '88': True, '99': True
|
'66': True, '77': True, '88': True, '99': True
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_significant_pressure(self, value: str):
|
def parse_significant_pressure(self, value: str):
|
||||||
if value[0:2] in self.PRESSURES_SIG:
|
if value[0:2] in self.PRESSURE_SIG:
|
||||||
return {
|
return {
|
||||||
'height': None,
|
'height': None,
|
||||||
'pressure': float(value[2:5])
|
'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):
|
def parse_ttaa(self):
|
||||||
#
|
#
|
||||||
# Return None if there is no height data up to 100mb.
|
# Return None if there is no height data up to 100mb.
|
||||||
|
@ -168,19 +187,21 @@ class RawinsObs():
|
||||||
sounding.timestamp = self.parse_timestamp(self.values[0])
|
sounding.timestamp = self.parse_timestamp(self.values[0])
|
||||||
sounding.station = int(self.values[1])
|
sounding.station = int(self.values[1])
|
||||||
|
|
||||||
for i in range(2, len(self.values), 3):
|
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+2 or self.values[i][-1] == '=':
|
if len(self.values) <= i+2 or self.values[i][-1] == '=':
|
||||||
break
|
break
|
||||||
|
|
||||||
td = self.parse_temp_dewpoint(self.values[i+1])
|
sample = self.parse_sample_values(self.values[i:i+3])
|
||||||
wind = self.parse_wind(self.values[i+2])
|
|
||||||
|
|
||||||
sample = RawinsSample()
|
if sample is None:
|
||||||
sample.pressure = self.parse_surface_pressure(self.values[i])
|
continue
|
||||||
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)
|
sounding.samples.append(sample)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue