Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions utils/b2i/b2iconverter/ioda_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
from .ioda_metadata import IODAMetadata
from .ioda_addl_vars import IODAAdditionalVariables

# Error values are hard-coded in the converters using functions
# like the set_salinity_error below
# These values are overwritten at run time.


class IODAVariables:
def __init__(self):
Expand Down
51 changes: 0 additions & 51 deletions utils/b2i/bufr2ioda_insitu_profile_pirata.py

This file was deleted.

95 changes: 95 additions & 0 deletions utils/b2i/bufr2ioda_insitu_profile_pirata_saln.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#!/usr/bin/env python3

import sys
from b2iconverter.util import parse_arguments
from b2iconverter.bufr2ioda_config import Bufr2iodaConfig
from b2iconverter.bufr2ioda_converter import Bufr2ioda_Converter
from b2iconverter.ioda_variables import IODAVariables
from b2iconverter.ioda_metadata import IODAMetadata
from b2iconverter.ioda_addl_vars import IODAAdditionalVariables
from wmo_codes import *

import numpy as np


platform_description = 'PIRATA Tropical mooring profiles from mbuoyb: salinity'


class PirataConfig(Bufr2iodaConfig):
def ioda_filename(self):
return f"{self.cycle_type}.t{self.hh}z.insitu_profile_pirata_saln.{self.cycle_datetime}.nc"


class PirataIODAVariables(IODAVariables):
def __init__(self):
self.construct()
self.metadata = IODAMetadata()
self.additional_vars = PirataAdditionalVariables(self)

def build_query(self):
q = super().build_query()
q.add('latitude', '*/CLATH')
q.add('longitude', '*/CLONH')
q.add('stationID', '*/RPID')
q.add('depth', '*/IDMSMDBS/BBYSTSL/DBSS')
q.add('saln', '*/IDMSMDBS/BBYSTSL/SALN')
return q

def set_obs_from_query_result(self, r):
self.saln = r.get('saln', group_by='depth')

def filter(self):
super().filter()
mask = [True if int(rpid) in PIRATA else False for rpid in self.metadata.stationID]
mask = mask & self.SalinityFilter()
self.metadata.filter(mask)
self.saln = self.saln[mask]

def write_to_ioda_file(self, obsspace):
self.metadata.write_to_ioda_file(obsspace)
self.additional_vars.write_to_ioda_file(obsspace)
self.write_obs_value_s(obsspace)

def log_obs(self, logger):
self.log_salinity(logger)


class PirataAdditionalVariables(IODAAdditionalVariables):
def construct(self):
n = len(self.ioda_vars.metadata.lon)
self.PreQC = (np.ma.masked_array(np.full(n, 0))).astype(np.int32)
self.ObsError_saln = \
np.float32(np.ma.masked_array(np.full(n, self.ioda_vars.S_error)))
self.compute_ocean_basin()

def write_to_ioda_file(self, obsspace):
self.write_preqc(obsspace, self.ioda_vars.S_name)
self.write_obs_errorS(obsspace)
self.write_ocean_basin(obsspace)

def log(self, logger):
self.log_preqc(logger)
self.log_obs_error_saln(logger)
self.log_ocean_basin(logger)


if __name__ == '__main__':

script_name, config_file, log_file, test_file = parse_arguments()

bufr2ioda_config = PirataConfig(
script_name,
config_file,
platform_description)

ioda_vars = PirataIODAVariables()
ioda_vars.set_salinity_var_name("salinity")
ioda_vars.set_salinity_error(0.01)

tropical = Bufr2ioda_Converter(bufr2ioda_config, ioda_vars, log_file)

tropical.run()

if test_file:
result = tropical.test(test_file)
sys.exit(result)
97 changes: 97 additions & 0 deletions utils/b2i/bufr2ioda_insitu_profile_pirata_temp.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#!/usr/bin/env python3

import sys
from b2iconverter.util import parse_arguments
from b2iconverter.bufr2ioda_config import Bufr2iodaConfig
from b2iconverter.bufr2ioda_converter import Bufr2ioda_Converter
from b2iconverter.ioda_variables import IODAVariables
from b2iconverter.ioda_metadata import IODAMetadata
from b2iconverter.ioda_addl_vars import IODAAdditionalVariables
from wmo_codes import *

import numpy as np


platform_description = 'PIRATA Tropical mooring profiles from mbuoyb: temperature'


class PirataConfig(Bufr2iodaConfig):
def ioda_filename(self):
return f"{self.cycle_type}.t{self.hh}z.insitu_profile_pirata_temp.{self.cycle_datetime}.nc"


class PirataIODAVariables(IODAVariables):
def __init__(self):
self.construct()
self.metadata = IODAMetadata()
self.additional_vars = PirataAdditionalVariables(self)

def build_query(self):
q = super().build_query()
q.add('latitude', '*/CLATH')
q.add('longitude', '*/CLONH')
q.add('stationID', '*/RPID')
q.add('depth', '*/IDMSMDBS/BBYSTSL/DBSS')
q.add('temp', '*/IDMSMDBS/BBYSTSL/SST1')
return q

def set_obs_from_query_result(self, r):
self.temp = r.get('temp', group_by='depth')
self.temp -= 273.15

def filter(self):
super().filter()
mask = [True if int(rpid) in PIRATA else False for rpid in self.metadata.stationID]
mask = mask & self.TemperatureFilter()
self.metadata.filter(mask)
self.temp = self.temp[mask]

def write_to_ioda_file(self, obsspace):
self.metadata.write_to_ioda_file(obsspace)
self.additional_vars.write_to_ioda_file(obsspace)
self.write_obs_value_t(obsspace)

def log_obs(self, logger):
self.log_temperature(logger)


class PirataAdditionalVariables(IODAAdditionalVariables):
def construct(self):
n = len(self.ioda_vars.metadata.lon)
self.PreQC = (np.ma.masked_array(np.full(n, 0))).astype(np.int32)
self.ObsError_temp = \
np.float32(np.ma.masked_array(np.full(n, self.ioda_vars.T_error)))
self.compute_ocean_basin()

def write_to_ioda_file(self, obsspace):
self.write_preqc(obsspace, self.ioda_vars.T_name)
self.write_obs_errorT(obsspace)
self.write_ocean_basin(obsspace)

def log(self, logger):
self.log_preqc(logger)
self.log_obs_error_temp(logger)
self.log_ocean_basin(logger)



if __name__ == '__main__':

script_name, config_file, log_file, test_file = parse_arguments()

bufr2ioda_config = PirataConfig(
script_name,
config_file,
platform_description)

ioda_vars = PirataIODAVariables()
ioda_vars.set_temperature_var_name("waterTemperature")
ioda_vars.set_temperature_error(0.02)
Comment thread
givelberg marked this conversation as resolved.

tropical = Bufr2ioda_Converter(bufr2ioda_config, ioda_vars, log_file)

tropical.run()

if test_file:
result = tropical.test(test_file)
sys.exit(result)
49 changes: 0 additions & 49 deletions utils/b2i/bufr2ioda_insitu_profile_rama.py

This file was deleted.

Loading
Loading