in analysis/webservice/algorithms/doms/BaseDomsHandler.py [0:0]
def writeGroup(self):
#
# Create variables, enrich with attributes, and add data
#
lonVar = self.group.createVariable('lon', 'f4', ('dim',), fill_value=-32767.0)
latVar = self.group.createVariable('lat', 'f4', ('dim',), fill_value=-32767.0)
timeVar = self.group.createVariable('time', 'f4', ('dim',), fill_value=-32767.0)
self.__enrichLon(lonVar, min(self.lon), max(self.lon))
self.__enrichLat(latVar, min(self.lat), max(self.lat))
self.__enrichTime(timeVar)
latVar[:] = self.lat
lonVar[:] = self.lon
timeVar[:] = self.time
# Add depth variable, if present
if self.depth and any(self.depth):
depthVar = self.group.createVariable('depth', 'f4', ('dim',), fill_value=-32767.0)
self.__enrichDepth(depthVar, self.__calcMin(self.depth), max(self.depth))
depthVar[:] = self.depth
for variable_name, data in self.data_map.items():
units = {}
variables = dict.fromkeys(
((variable['variable_name'], variable['cf_variable_name']) for match in data for variable in match),
None
)
for variable in variables:
variables[variable] = np.repeat(np.nan, len(data))
for i, match in enumerate(data):
for variable in match:
key = (variable['variable_name'], variable['cf_variable_name'])
unit = variable['variable_unit']
units[key] = str(unit) if unit is not None else 'UNKNOWN'
variables[key][i] = variable['variable_value']
for variable in variables:
# Create a variable for each data point
name = variable[0]
cf_name = variable[1]
data_variable = self.group.createVariable(
cf_name if cf_name is not None and cf_name != '' else name, 'f4', ('dim',), fill_value=-32767.0)
# Find min/max for data variables. It is possible for 'None' to
# be in this list, so filter those out when doing the calculation.
min_data = np.nanmin(variables[variable])
max_data = np.nanmax(variables[variable])
self.__enrichVariable(data_variable, min_data, max_data, has_depth=None, unit=units[variable])
data_variable[:] = np.ma.masked_invalid(variables[variable])
data_variable.long_name = name
data_variable.standard_name = cf_name