def grib_styles(self, field, grib, path, index): with LOCK: try: styles = macro.wmsstyles(macro.mgrib(grib_input_file_name=path, grib_field_position=index + 1)) # Looks like they are provided in reverse order except Exception as e: self.log.exception('grib_styles: Error: %s', e) styles = {} return [MagicsWebStyle(**s) for s in styles.get('styles', [])]
def as_plottable(field, position=0, metadata=None, preproc=None): # print('as_plottable', preproc) if isinstance(field, str): grib = macro.mgrib(grib_input_file_name=field, grib_file_address_mode='byte_offset', grib_field_position=position) return grib, None, metadata, 'path' if hasattr(field, 'path') and hasattr(field, 'offset') and hasattr( field, 'area'): grib = macro.mgrib(grib_input_file_name=field.path, grib_file_address_mode='byte_offset', grib_field_position=int(field.offset)) return grib, field.area, metadata, 'gridfield' if isinstance(field, xr.DataArray): if metadata is None: metadata = {} grib = {} for k, v in field.attrs.items(): if k.startswith('GRIB_'): grib[k[5:]] = str(v) else: metadata[k] = str(v) # Only key GRIB if grib: metadata = grib n, w, s, e = float(field.latitude[0]), float( field.longitude[0]), float(field.latitude[-1]), float( field.longitude[-1]) ns = float(field.latitude[1]) - float(field.latitude[0]) ew = float(field.longitude[1]) - float(field.longitude[0]) grib = macro.minput( input_field=field.values, input_field_initial_latitude=n, input_field_latitude_step=ns, input_field_initial_longitude=w, input_field_longitude_step=ew, input_metadata=metadata, ) return grib, (n, w, s, e), metadata, 'xarray' if hasattr(field, 'array'): ew, ns = field.grid n, w, s, e = field.area if metadata is None: metadata = field.metadata if preproc: f = preproc else: f = identity grib = macro.minput( input_field=f(field.array), input_field_initial_latitude=float(n), input_field_latitude_step=-float(ns), input_field_initial_longitude=float(w), input_field_longitude_step=float(ew), input_metadata=metadata, ) return grib, (n, w, s, e), metadata, 'bespoke' if isinstance(field, np.ndarray): class F: def __init__(self, f): self.array = f self.grid = metadata['grid'] self.area = metadata['area'] return as_plottable(F(field), metadata=metadata, preproc=preproc) if isinstance(field, list): if isinstance(position, list): return [ as_plottable(f, p, metadata) for (f, p) in zip(field, position) ] else: return [as_plottable(f, 0, metadata) for f in field] raise ValueError("Cannot plot %s" % (type(field), ))
os.environ["MAGPLUS_QUIET"] = "true" area = mm.mmap(**mm_coasts["mmap"]) bg = mm.mcoast(**mm_coasts["background"]) fg = mm.mcoast(**mm_coasts["foreground"]) mm_coasts["mlegend"]["legend_title_text"] = units legend = mm.mlegend(**mm_coasts["mlegend"]) for k, v in gb_met.iteritems(): print("processing: " + args.product + " +" + str(k).zfill(2)) input_data = mm.mgrib( grib_input_file_name = args.grib, grib_field_position = v, grib_automatic_scaling = 'off', grib_scaling_factor = scaling_factor, grib_scaling_offset = scaling_offset, grib_automatic_derived_scaling = 'off', ) #TODO: fileout handling fileout=str(args.product) + '+' + str(k).zfill(2) out = mm.output( output_name = args.outdir + "/" + fileout, output_formats=['png'], output_name_first_page_number = "off", output_width = 1280 ) title = mm.mtext( text_lines = ["<grib_info key='nameECMF'/> - <grib_info key='valid-date'/>"],