##// END OF EJS Templates
Merge branch 'schain_mp' of http://jro-dev.igp.gob.pe/rhodecode/schain into schain_mp
José Chávez -
r940:3b577291ba9a merge
parent child
Show More
@@ -1216,7 +1216,10 class Parameters(Spectra):
1216 1216
1217 1217 def getTimeInterval(self):
1218 1218
1219 return self.timeInterval1
1219 if hasattr(self, 'timeInterval1'):
1220 return self.timeInterval1
1221 else:
1222 return self.paramInterval
1220 1223
1221 1224 def getNoise(self):
1222 1225
@@ -95,13 +95,12 class PlotData(Operation, Process):
95 95 print 'plotting...{}'.format(self.CODE)
96 96
97 97 if self.show:
98 print 'showing'
99 98 self.figure.show()
100 99
101 100 self.plot()
102 101 plt.tight_layout()
103 self.figure.canvas.manager.set_window_title('{} {} - Date:{}'.format(self.title, self.CODE.upper(),
104 datetime.datetime.fromtimestamp(self.max_time).strftime('%y/%m/%d %H:%M:%S')))
102 self.figure.canvas.manager.set_window_title('{} {} - {}'.format(self.title, self.CODE.upper(),
103 datetime.datetime.fromtimestamp(self.max_time).strftime('%Y/%m/%d')))
105 104
106 105 if self.save:
107 106 figname = os.path.join(self.save, '{}_{}.png'.format(self.CODE,
@@ -119,12 +118,19 class PlotData(Operation, Process):
119 118 def run(self):
120 119
121 120 print '[Starting] {}'.format(self.name)
121
122 122 context = zmq.Context()
123 123 receiver = context.socket(zmq.SUB)
124 124 receiver.setsockopt(zmq.SUBSCRIBE, '')
125 125 receiver.setsockopt(zmq.CONFLATE, self.CONFLATE)
126 receiver.connect("ipc:///tmp/zmq.plots")
126
127 if 'server' in self.kwargs['parent']:
128 receiver.connect('ipc:///tmp/{}.plots'.format(self.kwargs['parent']['server']))
129 else:
130 receiver.connect("ipc:///tmp/zmq.plots")
131
127 132 seconds_passed = 0
133
128 134 while True:
129 135 try:
130 136 self.data = receiver.recv_pyobj(flags=zmq.NOBLOCK)#flags=zmq.NOBLOCK
@@ -610,6 +616,7 class PlotNoiseData(PlotData):
610 616
611 617
612 618 class PlotWindProfilerData(PlotRTIData):
619
613 620 CODE = 'wind'
614 621 colormap = 'seismic'
615 622
@@ -619,7 +626,7 class PlotWindProfilerData(PlotRTIData):
619 626 self.width = 10
620 627 self.height = 2.2*self.nrows
621 628 self.ylabel = 'Height [Km]'
622 self.titles = ['Zonal' ,'Meridional', 'Vertical']
629 self.titles = ['Zonal Wind' ,'Meridional Wind', 'Vertical Wind']
623 630 self.clabels = ['Velocity (m/s)','Velocity (m/s)','Velocity (cm/s)']
624 631 self.windFactor = [1, 1, 100]
625 632
@@ -643,13 +650,13 class PlotWindProfilerData(PlotRTIData):
643 650 self.z = []
644 651
645 652 for ch in range(self.nrows):
646 self.z.append([self.data[self.CODE][t][ch] for t in self.times])
653 self.z.append([self.data['output'][t][ch] for t in self.times])
647 654
648 655 self.z = np.array(self.z)
649 656 self.z = numpy.ma.masked_invalid(self.z)
650 657
651 658 cmap=plt.get_cmap(self.colormap)
652 cmap.set_bad('white', 1.)
659 cmap.set_bad('black', 1.)
653 660
654 661 for n, ax in enumerate(self.axes):
655 662 x, y, z = self.fill_gaps(*self.decimate())
@@ -668,9 +675,9 class PlotWindProfilerData(PlotRTIData):
668 675 )
669 676 divider = make_axes_locatable(ax)
670 677 cax = divider.new_horizontal(size='2%', pad=0.05)
671 cax.set_ylabel(self.clabels[n])
672 678 self.figure.add_axes(cax)
673 plt.colorbar(plot, cax)
679 cb = plt.colorbar(plot, cax)
680 cb.set_label(self.clabels[n])
674 681 ax.set_ylim(self.ymin, self.ymax)
675 682
676 683 ax.xaxis.set_major_formatter(FuncFormatter(func))
@@ -707,3 +714,62 class PlotDOPData(PlotRTIData):
707 714 class PlotPHASEData(PlotCOHData):
708 715 CODE = 'phase'
709 716 colormap = 'seismic'
717
718
719 class PlotSkyMapData(PlotData):
720
721 CODE = 'met'
722
723 def setup(self):
724
725 self.ncols = 1
726 self.nrows = 1
727 self.width = 7.2
728 self.height = 7.2
729
730 self.xlabel = 'Zonal Zenith Angle (deg)'
731 self.ylabel = 'Meridional Zenith Angle (deg)'
732
733 if self.figure is None:
734 self.figure = plt.figure(figsize=(self.width, self.height),
735 edgecolor='k',
736 facecolor='w')
737 else:
738 self.figure.clf()
739
740 self.ax = plt.subplot2grid((self.nrows, self.ncols), (0, 0), 1, 1, polar=True)
741 self.ax.firsttime = True
742
743
744 def plot(self):
745
746 arrayParameters = np.concatenate([self.data['param'][t] for t in self.times])
747 error = arrayParameters[:,-1]
748 indValid = numpy.where(error == 0)[0]
749 finalMeteor = arrayParameters[indValid,:]
750 finalAzimuth = finalMeteor[:,3]
751 finalZenith = finalMeteor[:,4]
752
753 x = finalAzimuth*numpy.pi/180
754 y = finalZenith
755
756 if self.ax.firsttime:
757 self.ax.plot = self.ax.plot(x, y, 'bo', markersize=5)[0]
758 self.ax.set_ylim(0,90)
759 self.ax.set_yticks(numpy.arange(0,90,20))
760 self.ax.set_xlabel(self.xlabel)
761 self.ax.set_ylabel(self.ylabel)
762 self.ax.yaxis.labelpad = 40
763 self.ax.firsttime = False
764 else:
765 self.ax.plot.set_data(x, y)
766
767
768 dt1 = datetime.datetime.fromtimestamp(self.min_time).strftime('%y/%m/%d %H:%M:%S')
769 dt2 = datetime.datetime.fromtimestamp(self.max_time).strftime('%y/%m/%d %H:%M:%S')
770 title = 'Meteor Detection Sky Map\n %s - %s \n Number of events: %5.0f\n' % (dt1,
771 dt2,
772 len(x))
773 self.ax.set_title(title, size=8)
774
775 self.saveTime = self.max_time
@@ -149,6 +149,7 class ProcessingUnit(object):
149 149 self.mp = True
150 150 self.start()
151 151 else:
152 self.operationKwargs[opId]['parent'] = self.kwargs
152 153 methodToCall(**self.operationKwargs[opId])
153 154 else:
154 155 if name=='run':
@@ -187,6 +188,7 class ProcessingUnit(object):
187 188
188 189 if hasattr(externalProcObj, 'mp'):
189 190 if externalProcObj.mp is False:
191 externalProcObj.kwargs['parent'] = self.kwargs
190 192 self.operationKwargs[objId] = externalProcObj.kwargs
191 193 externalProcObj.mp = True
192 194 externalProcObj.start()
@@ -194,6 +196,7 class ProcessingUnit(object):
194 196 externalProcObj.run(self.dataOut, **externalProcObj.kwargs)
195 197 self.operationKwargs[objId] = externalProcObj.kwargs
196 198
199
197 200 return True
198 201
199 202 def call(self, opType, opName=None, opId=None):
@@ -373,8 +373,10 class ReceiverData(ProcessingUnit, Process):
373 373 self.data[plottype][t] = self.dataOut.getCoherence()
374 374 if plottype == 'phase':
375 375 self.data[plottype][t] = self.dataOut.getCoherence(phase=True)
376 if plottype == 'wind':
376 if plottype == 'output':
377 377 self.data[plottype][t] = self.dataOut.data_output
378 if plottype == 'param':
379 self.data[plottype][t] = self.dataOut.data_param
378 380 if self.realtime:
379 381 self.data_web['timestamp'] = t
380 382 if plottype == 'spc':
@@ -402,8 +404,14 class ReceiverData(ProcessingUnit, Process):
402 404 self.sender_web = self.context.socket(zmq.PUB)
403 405 self.sender_web.connect(self.plot_address)
404 406 time.sleep(1)
405 self.sender.bind("ipc:///tmp/zmq.plots")
407
408 if 'server' in self.kwargs:
409 self.sender.bind("ipc:///tmp/{}.plots".format(self.kwargs['server']))
410 else:
411 self.sender.bind("ipc:///tmp/zmq.plots")
412
406 413 time.sleep(3)
414
407 415 t = Thread(target=self.event_monitor, args=(monitor,))
408 416 t.start()
409 417
General Comments 0
You need to be logged in to leave comments. Login now