Get better at parsing heights at different pressures
This commit is contained in:
parent
16693a686b
commit
d1269d0e2f
1 changed files with 50 additions and 21 deletions
|
@ -110,37 +110,62 @@ class RawinsObs():
|
|||
'speed': wind_speed
|
||||
}
|
||||
|
||||
TTAA_HEIGHTS = {
|
||||
TTAA_PRESSURES = {
|
||||
'00': 1000, '92': 925, '85': 850,
|
||||
'70': 700, '50': 500, '40': 400,
|
||||
'30': 300, '25': 250, '20': 200,
|
||||
'15': 150, '10': 100,
|
||||
}
|
||||
|
||||
def calc_1000mb_height(self, num: float):
|
||||
if num >= 500:
|
||||
return 0 - (num - 500)
|
||||
def code_to_pressure(self, code: str):
|
||||
if code in self.TTAA_PRESSURES:
|
||||
return self.TTAA_PRESSURES[code]
|
||||
|
||||
return num
|
||||
return None
|
||||
|
||||
def calc_1000mb_height(self, height: float) -> float:
|
||||
if height >= 500:
|
||||
return 0 - (height - 500)
|
||||
|
||||
return height
|
||||
|
||||
def calc_850mb_height(self, height: float) -> float:
|
||||
return 1000.0 + height
|
||||
|
||||
def calc_500mb_height(self, height: float) -> float:
|
||||
print(f"Calculating 500mb height")
|
||||
return 10 * height
|
||||
|
||||
def parse_height_pressure(self, value: str):
|
||||
token = value[0:2]
|
||||
num = value[2:5]
|
||||
code = value[0:2]
|
||||
num = value[2:5]
|
||||
|
||||
if num == '///':
|
||||
return None
|
||||
|
||||
if token == '00':
|
||||
return {
|
||||
'height': self.calc_1000mb_height(float(num)),
|
||||
'pressure': 1000
|
||||
}
|
||||
#
|
||||
# Ignore the tropopause or height of max wind velocity.
|
||||
#
|
||||
if code == '77' or code == '88':
|
||||
return None
|
||||
|
||||
if token in self.TTAA_HEIGHTS:
|
||||
return {
|
||||
'height': float(num),
|
||||
'pressure': self.TTAA_HEIGHTS[token]
|
||||
}
|
||||
pressure = self.code_to_pressure(code)
|
||||
|
||||
if pressure is None:
|
||||
return None
|
||||
elif pressure == 1000:
|
||||
height = self.calc_1000mb_height(float(num))
|
||||
elif pressure <= 500:
|
||||
height = self.calc_500mb_height(float(num))
|
||||
elif pressure <= 850:
|
||||
height = self.calc_850mb_height(float(num))
|
||||
else:
|
||||
height = float(num)
|
||||
|
||||
return {
|
||||
'pressure': pressure,
|
||||
'height': height
|
||||
}
|
||||
|
||||
PRESSURE_SIG = {
|
||||
'11': True, '22': True, '33': True, '44': True, '55': True,
|
||||
|
@ -148,17 +173,21 @@ class RawinsObs():
|
|||
}
|
||||
|
||||
def parse_significant_pressure(self, value: str):
|
||||
if value[0:2] in self.PRESSURE_SIG:
|
||||
code, pressure = value[0:2], value[2:5]
|
||||
|
||||
if code in self.PRESSURE_SIG:
|
||||
return {
|
||||
'height': None,
|
||||
'pressure': float(value[2:5])
|
||||
'pressure': float(pressure)
|
||||
}
|
||||
|
||||
def parse_surface_pressure(self, value: str):
|
||||
if value[0:2] == '99':
|
||||
code, pressure = value[0:2], value[2:5]
|
||||
|
||||
if code == '99':
|
||||
return {
|
||||
'height': None,
|
||||
'pressure': float(value[2:5])
|
||||
'pressure': float(pressure)
|
||||
}
|
||||
|
||||
def parse_sample_values(self, values: list[str]) -> RawinsSample:
|
||||
|
|
Loading…
Add table
Reference in a new issue