Fix issues with misaligned samples
This commit is contained in:
parent
8bea18af4d
commit
aca0547b93
1 changed files with 65 additions and 23 deletions
|
@ -122,7 +122,11 @@ class RAOBSounding():
|
||||||
return
|
return
|
||||||
|
|
||||||
sample = self.sample_by_pressure(pressure)
|
sample = self.sample_by_pressure(pressure)
|
||||||
|
|
||||||
|
if sample.temp is None:
|
||||||
sample.temp = temp
|
sample.temp = temp
|
||||||
|
|
||||||
|
if sample.dewpoint is None:
|
||||||
sample.dewpoint = dewpoint
|
sample.dewpoint = dewpoint
|
||||||
|
|
||||||
def record_wind_speed_dir(self,
|
def record_wind_speed_dir(self,
|
||||||
|
@ -133,7 +137,11 @@ class RAOBSounding():
|
||||||
return
|
return
|
||||||
|
|
||||||
sample = self.sample_by_pressure(pressure)
|
sample = self.sample_by_pressure(pressure)
|
||||||
|
|
||||||
|
if sample.wind_speed is None:
|
||||||
sample.wind_speed = wind_speed
|
sample.wind_speed = wind_speed
|
||||||
|
|
||||||
|
if sample.wind_dir is None:
|
||||||
sample.wind_dir = wind_dir
|
sample.wind_dir = wind_dir
|
||||||
|
|
||||||
class RAOBObs():
|
class RAOBObs():
|
||||||
|
@ -313,9 +321,22 @@ class RAOBObs():
|
||||||
code, pressure = token[0:2], token[2:5]
|
code, pressure = token[0:2], token[2:5]
|
||||||
|
|
||||||
if pressure != '///' and code in self.PRESSURE_CODES:
|
if pressure != '///' and code in self.PRESSURE_CODES:
|
||||||
value = float(pressure)
|
p100 = pressure[0]
|
||||||
|
p10 = pressure[1]
|
||||||
|
p1 = pressure[2]
|
||||||
|
|
||||||
if value < 100:
|
value = 0.0
|
||||||
|
|
||||||
|
if p100 != '/':
|
||||||
|
value += 100.0 * int(p100)
|
||||||
|
|
||||||
|
if p10 != '/':
|
||||||
|
value += 10.0 * int(p10)
|
||||||
|
|
||||||
|
if p1 != '/':
|
||||||
|
value += int(p1)
|
||||||
|
|
||||||
|
if value < 100.0:
|
||||||
value += 1000.0
|
value += 1000.0
|
||||||
|
|
||||||
ret['pressure'] = value
|
ret['pressure'] = value
|
||||||
|
@ -335,12 +356,12 @@ class RAOBObs():
|
||||||
wind = self.parse_wind(tokens[2])
|
wind = self.parse_wind(tokens[2])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'pressure': hp['pressure'],
|
'pressure': hp.get('pressure'),
|
||||||
'height': hp['height'],
|
'height': hp.get('height'),
|
||||||
'temp': td['temp'],
|
'temp': td.get('temp'),
|
||||||
'dewpoint': td['dewpoint'],
|
'dewpoint': td.get('dewpoint'),
|
||||||
'wind_speed': wind['speed'],
|
'wind_speed': wind.get('speed'),
|
||||||
'wind_dir': wind['dir']
|
'wind_dir': wind.get('dir')
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_ttaa(self) -> dict:
|
def parse_ttaa(self) -> dict:
|
||||||
|
@ -360,21 +381,30 @@ class RAOBObs():
|
||||||
station = self.tokens[1]
|
station = self.tokens[1]
|
||||||
samples = list()
|
samples = list()
|
||||||
|
|
||||||
for i in range(2, len(self.tokens), 3):
|
i = 2
|
||||||
|
|
||||||
|
while i < len(self.tokens):
|
||||||
if len(self.tokens) < i+3:
|
if len(self.tokens) < i+3:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
prefix = self.tokens[i][0:2]
|
||||||
|
|
||||||
#
|
#
|
||||||
# Stop parsing tokens at the tropopause.
|
# Stop parsing tokens at the tropopause
|
||||||
#
|
#
|
||||||
if self.tokens[i][0:2] == '88':
|
if prefix == '88':
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if prefix in self.PRESSURE_CODES:
|
||||||
sample = self.parse_ttaa_sample(self.tokens[i:i+3])
|
sample = self.parse_ttaa_sample(self.tokens[i:i+3])
|
||||||
|
|
||||||
if sample is not None:
|
if sample is not None:
|
||||||
samples.append(sample)
|
samples.append(sample)
|
||||||
|
|
||||||
|
i += 3
|
||||||
|
else:
|
||||||
|
i += 1
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'station': station,
|
'station': station,
|
||||||
'timestamp': timestamp,
|
'timestamp': timestamp,
|
||||||
|
@ -382,18 +412,21 @@ class RAOBObs():
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_ttbb_sample(self, tokens: list[str]) -> dict:
|
def parse_ttbb_sample(self, tokens: list[str]) -> dict:
|
||||||
|
if tokens[0] == 'NIL':
|
||||||
|
return {}
|
||||||
|
|
||||||
hp = self.parse_pressure(tokens[0])
|
hp = self.parse_pressure(tokens[0])
|
||||||
|
|
||||||
ret = {
|
ret = {
|
||||||
'pressure': hp['pressure'],
|
'pressure': hp.get('pressure'),
|
||||||
'temp': None,
|
'temp': None,
|
||||||
'dewpoint': None
|
'dewpoint': None
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(tokens) > 1:
|
if len(tokens) > 1:
|
||||||
td = self.parse_temp_dewpoint(tokens[1])
|
td = self.parse_temp_dewpoint(tokens[1])
|
||||||
ret['temp'] = td['temp']
|
ret['temp'] = td.get('temp')
|
||||||
ret['dewpoint'] = td['dewpoint']
|
ret['dewpoint'] = td.get('dewpoint')
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -402,9 +435,18 @@ class RAOBObs():
|
||||||
station = self.tokens[1]
|
station = self.tokens[1]
|
||||||
samples = list()
|
samples = list()
|
||||||
|
|
||||||
for i in range(2, len(self.tokens), 2):
|
i = 2
|
||||||
|
|
||||||
|
while i < len(self.tokens):
|
||||||
|
prefix = self.tokens[i][0:2]
|
||||||
|
|
||||||
|
if prefix in self.PRESSURE_CODES:
|
||||||
samples.append(self.parse_ttbb_sample(self.tokens[i:i+2]))
|
samples.append(self.parse_ttbb_sample(self.tokens[i:i+2]))
|
||||||
|
|
||||||
|
i += 2
|
||||||
|
else:
|
||||||
|
i += 1
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'station': station,
|
'station': station,
|
||||||
'timestamp': timestamp,
|
'timestamp': timestamp,
|
||||||
|
|
Loading…
Add table
Reference in a new issue