@@ -907,8 +907,8 class PlotterData(object): | |||||
907 | Object to hold data to be plotted |
|
907 | Object to hold data to be plotted | |
908 | ''' |
|
908 | ''' | |
909 |
|
909 | |||
910 |
MAXNUMX = |
|
910 | MAXNUMX = 1000 | |
911 |
MAXNUMY = |
|
911 | MAXNUMY = 1000 | |
912 |
|
912 | |||
913 | def __init__(self, code, exp_code, localtime=True): |
|
913 | def __init__(self, code, exp_code, localtime=True): | |
914 |
|
914 | |||
@@ -993,25 +993,28 class PlotterData(object): | |||||
993 |
|
993 | |||
994 | self.__heights = [H for tm in self.times] |
|
994 | self.__heights = [H for tm in self.times] | |
995 |
|
995 | |||
996 | def jsonify(self, tm, plot_name, plot_type, decimate=False): |
|
996 | def jsonify(self, tm, plot_name, plot_type, key=None, decimate=False): | |
997 | ''' |
|
997 | ''' | |
998 | Convert data to json |
|
998 | Convert data to json | |
999 | ''' |
|
999 | ''' | |
1000 |
|
1000 | |||
|
1001 | if key is None: | |||
|
1002 | key = self.key | |||
|
1003 | ||||
1001 | meta = {} |
|
1004 | meta = {} | |
1002 | meta['xrange'] = [] |
|
1005 | meta['xrange'] = [] | |
1003 | dy = int(len(self.yrange)/self.MAXNUMY) + 1 |
|
1006 | dy = int(len(self.yrange)/self.MAXNUMY) + 1 | |
1004 |
tmp = self.data[tm][ |
|
1007 | tmp = self.data[tm][key] | |
1005 | shape = tmp.shape |
|
1008 | shape = tmp.shape | |
1006 | if len(shape) == 2: |
|
1009 | if len(shape) == 2: | |
1007 |
data = self.roundFloats(self.data[tm][ |
|
1010 | data = self.roundFloats(self.data[tm][key][::, ::dy].tolist()) | |
1008 | elif len(shape) == 3: |
|
1011 | elif len(shape) == 3: | |
1009 |
dx = int(self.data[tm][ |
|
1012 | dx = int(self.data[tm][key].shape[1]/self.MAXNUMX) + 1 | |
1010 | data = self.roundFloats( |
|
1013 | data = self.roundFloats( | |
1011 |
self.data[tm][ |
|
1014 | self.data[tm][key][::, ::dx, ::dy].tolist()) | |
1012 | meta['xrange'] = self.roundFloats(self.xrange[2][::dx].tolist()) |
|
1015 | meta['xrange'] = self.roundFloats(self.xrange[2][::dx].tolist()) | |
1013 | else: |
|
1016 | else: | |
1014 |
data = self.roundFloats(self.data[tm][ |
|
1017 | data = self.roundFloats(self.data[tm][key].tolist()) | |
1015 |
|
1018 | |||
1016 | ret = { |
|
1019 | ret = { | |
1017 | 'plot': plot_name, |
|
1020 | 'plot': plot_name, | |
@@ -1022,7 +1025,9 class PlotterData(object): | |||||
1022 | meta['type'] = plot_type |
|
1025 | meta['type'] = plot_type | |
1023 | meta['interval'] = float(self.interval) |
|
1026 | meta['interval'] = float(self.interval) | |
1024 | meta['localtime'] = self.localtime |
|
1027 | meta['localtime'] = self.localtime | |
1025 | meta['yrange'] = self.roundFloats(self.yrange[::dy].tolist()) |
|
1028 | #meta['yrange'] = self.roundFloats(self.yrange[::dy].tolist()) | |
|
1029 | meta['yrange'] = self.roundFloats(self.lat[::dy].tolist()) | |||
|
1030 | meta['xrange'] = self.roundFloats(self.lon[::dy].tolist()) | |||
1026 | meta.update(self.meta) |
|
1031 | meta.update(self.meta) | |
1027 | ret['metadata'] = meta |
|
1032 | ret['metadata'] = meta | |
1028 | return json.dumps(ret) |
|
1033 | return json.dumps(ret) | |
@@ -1066,4 +1071,4 class PlotterData(object): | |||||
1066 | if isinstance(obj, list): |
|
1071 | if isinstance(obj, list): | |
1067 | return list(map(PlotterData.roundFloats, obj)) |
|
1072 | return list(map(PlotterData.roundFloats, obj)) | |
1068 | elif isinstance(obj, float): |
|
1073 | elif isinstance(obj, float): | |
1069 |
return round(obj, |
|
1074 | return round(obj, 4) |
@@ -596,9 +596,9 class Plot(Operation): | |||||
596 | if isinstance(value, (numpy.float32, numpy.float64)): |
|
596 | if isinstance(value, (numpy.float32, numpy.float64)): | |
597 | value = round(float(value), 2) |
|
597 | value = round(float(value), 2) | |
598 | self.data.meta[attr] = value |
|
598 | self.data.meta[attr] = value | |
599 | if self.colormap == 'jet': |
|
599 | if self.colormap == 'jet' or self.colormap == 'sophy_w': | |
600 | self.data.meta['colormap'] = 'Jet' |
|
600 | self.data.meta['colormap'] = 'Jet' | |
601 |
elif ' |
|
601 | elif 'sophy_v' in self.colormap: | |
602 | self.data.meta['colormap'] = 'RdBu' |
|
602 | self.data.meta['colormap'] = 'RdBu' | |
603 | else: |
|
603 | else: | |
604 | self.data.meta['colormap'] = 'Viridis' |
|
604 | self.data.meta['colormap'] = 'Viridis' | |
@@ -611,7 +611,7 class Plot(Operation): | |||||
611 | tm = self.sender_queue.popleft() |
|
611 | tm = self.sender_queue.popleft() | |
612 | except IndexError: |
|
612 | except IndexError: | |
613 | break |
|
613 | break | |
614 | msg = self.data.jsonify(tm, self.save_code, self.plot_type) |
|
614 | msg = self.data.jsonify(tm, self.save_code, self.plot_type, key='var') | |
615 | self.socket.send_string(msg) |
|
615 | self.socket.send_string(msg) | |
616 | socks = dict(self.poll.poll(2000)) |
|
616 | socks = dict(self.poll.poll(2000)) | |
617 | if socks.get(self.socket) == zmq.POLLIN: |
|
617 | if socks.get(self.socket) == zmq.POLLIN: |
@@ -6,8 +6,8 from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter | |||||
6 | from schainpy.model.graphics.jroplot_base import Plot, plt |
|
6 | from schainpy.model.graphics.jroplot_base import Plot, plt | |
7 | from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot |
|
7 | from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot | |
8 | from schainpy.utils import log |
|
8 | from schainpy.utils import log | |
9 | # libreria wradlib |
|
9 | ||
10 |
|
|
10 | import wradlib.georef as georef | |
11 |
|
11 | |||
12 | EARTH_RADIUS = 6.3710e3 |
|
12 | EARTH_RADIUS = 6.3710e3 | |
13 |
|
13 | |||
@@ -372,7 +372,7 class PolarMapPlot(Plot): | |||||
372 | class WeatherParamsPlot(Plot): |
|
372 | class WeatherParamsPlot(Plot): | |
373 | #CODE = 'RHI' |
|
373 | #CODE = 'RHI' | |
374 | #plot_name = 'RHI' |
|
374 | #plot_name = 'RHI' | |
375 |
|
|
375 | plot_type = 'scattermap' | |
376 | buffering = False |
|
376 | buffering = False | |
377 |
|
377 | |||
378 | def setup(self): |
|
378 | def setup(self): | |
@@ -418,10 +418,20 class WeatherParamsPlot(Plot): | |||||
418 |
|
418 | |||
419 | if 'pow' in self.attr_data[0].lower(): |
|
419 | if 'pow' in self.attr_data[0].lower(): | |
420 | # data['data'] = 10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor)) |
|
420 | # data['data'] = 10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor)) | |
421 |
|
|
421 | tmp = numpy.ma.masked_array(10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor)), mask=mask) | |
422 | else: |
|
422 | else: | |
423 |
|
|
423 | tmp = numpy.ma.masked_array(getattr(dataOut, self.attr_data[0]), mask=mask) | |
424 |
# |
|
424 | # tmp = getattr(dataOut, self.attr_data[0]) | |
|
425 | ||||
|
426 | r = dataOut.heightList | |||
|
427 | delta_height = r[1]-r[0] | |||
|
428 | valid = numpy.where(r>=0)[0] | |||
|
429 | data['r'] = numpy.arange(len(valid))*delta_height | |||
|
430 | ||||
|
431 | try: | |||
|
432 | data['data'] = tmp[self.channels[0]][:,valid] | |||
|
433 | except: | |||
|
434 | data['data'] = tmp[0][:,valid] | |||
425 |
|
435 | |||
426 | if dataOut.mode_op == 'PPI': |
|
436 | if dataOut.mode_op == 'PPI': | |
427 | self.CODE = 'PPI' |
|
437 | self.CODE = 'PPI' | |
@@ -430,25 +440,22 class WeatherParamsPlot(Plot): | |||||
430 | self.CODE = 'RHI' |
|
440 | self.CODE = 'RHI' | |
431 | self.title = self.CODE |
|
441 | self.title = self.CODE | |
432 |
|
442 | |||
433 |
data['azi'] |
|
443 | data['azi'] = dataOut.data_azi | |
434 |
data['ele'] |
|
444 | data['ele'] = dataOut.data_ele | |
435 | data['mode_op'] = dataOut.mode_op |
|
445 | data['mode_op'] = dataOut.mode_op | |
436 |
|
446 | var = data['data'].flatten() | ||
|
447 | r = numpy.tile(data['r'], data['data'].shape[0]).reshape(data['data'].shape)*1000 | |||
|
448 | lla = georef.spherical_to_proj(r, data['azi'], data['ele'], (-75.295893, -12.040436, 3379.2147)) | |||
|
449 | meta['lat'] = lla[:,:,1].flatten()[var.mask==False] | |||
|
450 | meta['lon'] = lla[:,:,0].flatten()[var.mask==False] | |||
|
451 | data['var'] = numpy.array([var[var.mask==False]]) | |||
|
452 | ||||
437 | return data, meta |
|
453 | return data, meta | |
438 |
|
454 | |||
439 | def plot(self): |
|
455 | def plot(self): | |
440 |
data |
|
456 | data = self.data[-1] | |
441 | r = self.data.yrange |
|
457 | z = data['data'] | |
442 | delta_height = r[1]-r[0] |
|
458 | r = data['r'] | |
443 | r_mask = numpy.where(r>=0)[0] |
|
|||
444 | r = numpy.arange(len(r_mask))*delta_height |
|
|||
445 | self.y = 2*r |
|
|||
446 |
|
||||
447 | try: |
|
|||
448 | z = data['data'][self.channels[0]][:,r_mask] |
|
|||
449 | except: |
|
|||
450 | z = data['data'][0][:,r_mask] |
|
|||
451 |
|
||||
452 | self.titles = [] |
|
459 | self.titles = [] | |
453 |
|
460 | |||
454 | self.ymax = self.ymax if self.ymax else numpy.nanmax(r) |
|
461 | self.ymax = self.ymax if self.ymax else numpy.nanmax(r) |
General Comments 0
You need to be logged in to leave comments.
Login now