@@ -6,12 +6,13 Signal Chain (SCh) is a radar data processing library developed using [Python](w | |||
|
6 | 6 | |
|
7 | 7 | ## Installation |
|
8 | 8 | |
|
9 |
Install system dependencies, |
|
|
9 | Install system dependencies, clone the latest version from [git](http://jro-dev.igp.gob.pe/rhodecode/schain/) and install it as a normal python package. | |
|
10 | 10 | |
|
11 | 11 | ``` |
|
12 | 12 | $ sudo apt-get install python-pip python-dev gfortran libpng-dev freetype* libblas-dev liblapack-dev libatlas-base-dev python-qt4 python-tk libssl-dev libhdf5-dev |
|
13 | $ tar xvzf schainpy-2.2.5.tar.gz | |
|
14 | $ cd schainpy-2.2.5 | |
|
13 | $ sudo pip install numpy | |
|
14 | $ git clone http://jro-dev.igp.gob.pe/rhodecode/schain/ | |
|
15 | $ cd schain | |
|
15 | 16 | $ sudo pip install ./ |
|
16 | 17 | ``` |
|
17 | 18 | |
@@ -21,7 +22,7 $ sudo pip install ./ | |||
|
21 | 22 | $ sudo pip install virtualenv |
|
22 | 23 | $ virtualenv /path/to/virtual --system-site-packages |
|
23 | 24 | $ source /path/to/virtual/bin/activate |
|
24 |
(virtual) $ cd schain |
|
|
25 | (virtual) $ cd schain | |
|
25 | 26 | (virtual) $ pip install ./ |
|
26 | 27 | ``` |
|
27 | 28 |
@@ -50,6 +50,8 def multiSchain(child, nProcess=cpu_count(), startDate=None, endDate=None, by_da | |||
|
50 | 50 | if by_day: |
|
51 | 51 | continue |
|
52 | 52 | nFiles = q.get() |
|
53 | if nFiles==0: | |
|
54 | continue | |
|
53 | 55 | firstProcess.terminate() |
|
54 | 56 | skip = int(math.ceil(nFiles/nProcess)) |
|
55 | 57 | while True: |
@@ -70,8 +72,10 def multiSchain(child, nProcess=cpu_count(), startDate=None, endDate=None, by_da | |||
|
70 | 72 | for process in processes: |
|
71 | 73 | process.join() |
|
72 | 74 | process.terminate() |
|
75 | ||
|
73 | 76 | time.sleep(3) |
|
74 | 77 | |
|
78 | ||
|
75 | 79 | class ParameterConf(): |
|
76 | 80 | |
|
77 | 81 | id = None |
@@ -8,5 +8,5 | |||
|
8 | 8 | from data import * |
|
9 | 9 | from io import * |
|
10 | 10 | from proc import * |
|
11 |
|
|
|
11 | from graphics import * | |
|
12 | 12 | from utils import * |
@@ -6,6 +6,7 import numpy | |||
|
6 | 6 | import datetime |
|
7 | 7 | import numpy as np |
|
8 | 8 | import matplotlib |
|
9 | import glob | |
|
9 | 10 | matplotlib.use('TkAgg') |
|
10 | 11 | import matplotlib.pyplot as plt |
|
11 | 12 | from mpl_toolkits.axes_grid1 import make_axes_locatable |
@@ -61,6 +62,15 class PlotData(Operation, Process): | |||
|
61 | 62 | self.times = [] |
|
62 | 63 | #self.interactive = self.kwargs['parent'] |
|
63 | 64 | |
|
65 | ''' | |
|
66 | this new parameter is created to plot data from varius channels at different figures | |
|
67 | 1. crear una lista de figuras donde se puedan plotear las figuras, | |
|
68 | 2. dar las opciones de configuracion a cada figura, estas opciones son iguales para ambas figuras | |
|
69 | 3. probar? | |
|
70 | ''' | |
|
71 | self.ind_plt_ch = kwargs.get('ind_plt_ch', False) | |
|
72 | self.figurelist = None | |
|
73 | ||
|
64 | 74 | |
|
65 | 75 | def fill_gaps(self, x_buffer, y_buffer, z_buffer): |
|
66 | 76 | |
@@ -92,25 +102,98 class PlotData(Operation, Process): | |||
|
92 | 102 | |
|
93 | 103 | return x, y, z |
|
94 | 104 | |
|
105 | ''' | |
|
106 | JM: | |
|
107 | elimana las otras imagenes generadas debido a que lso workers no llegan en orden y le pueden | |
|
108 | poner otro tiempo a la figura q no necesariamente es el ultimo. | |
|
109 | Solo se realiza cuando termina la imagen. | |
|
110 | Problemas: | |
|
111 | ||
|
112 | File "/home/ci-81/workspace/schainv2.3/schainpy/model/graphics/jroplot_data.py", line 145, in __plot | |
|
113 | for n, eachfigure in enumerate(self.figurelist): | |
|
114 | TypeError: 'NoneType' object is not iterable | |
|
115 | ||
|
116 | ''' | |
|
117 | def deleteanotherfiles(self): | |
|
118 | figurenames=[] | |
|
119 | if self.figurelist != None: | |
|
120 | for n, eachfigure in enumerate(self.figurelist): | |
|
121 | #add specific name for each channel in channelList | |
|
122 | ghostfigname = os.path.join(self.save, '{}_{}_{}'.format(self.titles[n].replace(' ',''),self.CODE, | |
|
123 | datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d'))) | |
|
124 | figname = os.path.join(self.save, '{}_{}_{}.png'.format(self.titles[n].replace(' ',''),self.CODE, | |
|
125 | datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d_%H%M%S'))) | |
|
126 | ||
|
127 | for ghostfigure in glob.glob(ghostfigname+'*'): #ghostfigure will adopt all posible names of figures | |
|
128 | if ghostfigure != figname: | |
|
129 | os.remove(ghostfigure) | |
|
130 | print 'Removing GhostFigures:' , figname | |
|
131 | else : | |
|
132 | '''Erasing ghost images for just on******************''' | |
|
133 | ghostfigname = os.path.join(self.save, '{}_{}'.format(self.CODE,datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d'))) | |
|
134 | figname = os.path.join(self.save, '{}_{}.png'.format(self.CODE,datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d_%H%M%S'))) | |
|
135 | for ghostfigure in glob.glob(ghostfigname+'*'): #ghostfigure will adopt all posible names of figures | |
|
136 | if ghostfigure != figname: | |
|
137 | os.remove(ghostfigure) | |
|
138 | print 'Removing GhostFigures:' , figname | |
|
139 | ||
|
95 | 140 | def __plot(self): |
|
96 | 141 | |
|
97 | 142 | print 'plotting...{}'.format(self.CODE) |
|
98 | ||
|
99 | if self.show: | |
|
100 | self.figure.show() | |
|
101 | ||
|
102 | self.plot() | |
|
103 | plt.tight_layout() | |
|
104 | self.figure.canvas.manager.set_window_title('{} {} - {}'.format(self.title, self.CODE.upper(), | |
|
143 | if self.ind_plt_ch is False : #standard | |
|
144 | if self.show: | |
|
145 | self.figure.show() | |
|
146 | self.plot() | |
|
147 | plt.tight_layout() | |
|
148 | self.figure.canvas.manager.set_window_title('{} {} - {}'.format(self.title, self.CODE.upper(), | |
|
105 | 149 | datetime.datetime.fromtimestamp(self.max_time).strftime('%Y/%m/%d'))) |
|
150 | else : | |
|
151 | print 'len(self.figurelist): ',len(self.figurelist) | |
|
152 | for n, eachfigure in enumerate(self.figurelist): | |
|
153 | if self.show: | |
|
154 | eachfigure.show() | |
|
155 | ||
|
156 | self.plot() | |
|
157 | eachfigure.tight_layout() # ajuste de cada subplot | |
|
158 | eachfigure.canvas.manager.set_window_title('{} {} - {}'.format(self.title[n], self.CODE.upper(), | |
|
159 | datetime.datetime.fromtimestamp(self.max_time).strftime('%Y/%m/%d'))) | |
|
160 | ||
|
161 | # if self.save: | |
|
162 | # if self.ind_plt_ch is False : #standard | |
|
163 | # figname = os.path.join(self.save, '{}_{}.png'.format(self.CODE, | |
|
164 | # datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d_%H%M%S'))) | |
|
165 | # print 'Saving figure: {}'.format(figname) | |
|
166 | # self.figure.savefig(figname) | |
|
167 | # else : | |
|
168 | # for n, eachfigure in enumerate(self.figurelist): | |
|
169 | # #add specific name for each channel in channelList | |
|
170 | # figname = os.path.join(self.save, '{}_{}_{}.png'.format(self.titles[n],self.CODE, | |
|
171 | # datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d_%H%M%S'))) | |
|
172 | # | |
|
173 | # print 'Saving figure: {}'.format(figname) | |
|
174 | # eachfigure.savefig(figname) | |
|
175 | ||
|
176 | if self.ind_plt_ch is False : | |
|
177 | self.figure.canvas.draw() | |
|
178 | else : | |
|
179 | for eachfigure in self.figurelist: | |
|
180 | eachfigure.canvas.draw() | |
|
106 | 181 | |
|
107 | 182 | if self.save: |
|
108 | figname = os.path.join(self.save, '{}_{}.png'.format(self.CODE, | |
|
109 | datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d_%H%M%S'))) | |
|
110 | print 'Saving figure: {}'.format(figname) | |
|
111 | self.figure.savefig(figname) | |
|
183 | if self.ind_plt_ch is False : #standard | |
|
184 | figname = os.path.join(self.save, '{}_{}.png'.format(self.CODE, | |
|
185 | datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d_%H%M%S'))) | |
|
186 | print 'Saving figure: {}'.format(figname) | |
|
187 | self.figure.savefig(figname) | |
|
188 | else : | |
|
189 | for n, eachfigure in enumerate(self.figurelist): | |
|
190 | #add specific name for each channel in channelList | |
|
191 | figname = os.path.join(self.save, '{}_{}_{}.png'.format(self.titles[n].replace(' ',''),self.CODE, | |
|
192 | datetime.datetime.fromtimestamp(self.saveTime).strftime('%y%m%d_%H%M%S'))) | |
|
193 | ||
|
194 | print 'Saving figure: {}'.format(figname) | |
|
195 | eachfigure.savefig(figname) | |
|
112 | 196 | |
|
113 | self.figure.canvas.draw() | |
|
114 | 197 | |
|
115 | 198 | def plot(self): |
|
116 | 199 | |
@@ -125,7 +208,7 class PlotData(Operation, Process): | |||
|
125 | 208 | receiver = context.socket(zmq.SUB) |
|
126 | 209 | receiver.setsockopt(zmq.SUBSCRIBE, '') |
|
127 | 210 | receiver.setsockopt(zmq.CONFLATE, self.CONFLATE) |
|
128 | ||
|
211 | ||
|
129 | 212 | if 'server' in self.kwargs['parent']: |
|
130 | 213 | receiver.connect('ipc:///tmp/{}.plots'.format(self.kwargs['parent']['server'])) |
|
131 | 214 | else: |
@@ -159,6 +242,7 class PlotData(Operation, Process): | |||
|
159 | 242 | self.ended = True |
|
160 | 243 | self.isConfig = False |
|
161 | 244 | self.__plot() |
|
245 | self.deleteanotherfiles() #CLPDG | |
|
162 | 246 | elif seconds_passed >= self.data['throttle']: |
|
163 | 247 | print 'passed', seconds_passed |
|
164 | 248 | self.__plot() |
@@ -232,7 +316,6 class PlotSpectraData(PlotData): | |||
|
232 | 316 | z = self.data[self.CODE] |
|
233 | 317 | |
|
234 | 318 | for n, ax in enumerate(self.axes): |
|
235 | ||
|
236 | 319 | if ax.firsttime: |
|
237 | 320 | self.xmax = self.xmax if self.xmax else np.nanmax(x) |
|
238 | 321 | self.xmin = self.xmin if self.xmin else -self.xmax |
@@ -464,87 +547,184 class PlotRTIData(PlotData): | |||
|
464 | 547 | self.ncols = 1 |
|
465 | 548 | self.nrows = self.dataOut.nChannels |
|
466 | 549 | self.width = 10 |
|
467 | self.height = 2.2*self.nrows if self.nrows<6 else 12 | |
|
550 | #TODO : arreglar la altura de la figura, esta hardcodeada. | |
|
551 | #Se arreglo, testear! | |
|
552 | if self.ind_plt_ch: | |
|
553 | self.height = 3.2#*self.nrows if self.nrows<6 else 12 | |
|
554 | else: | |
|
555 | self.height = 2.2*self.nrows if self.nrows<6 else 12 | |
|
556 | ||
|
557 | ''' | |
|
468 | 558 | if self.nrows==1: |
|
469 | 559 | self.height += 1 |
|
560 | ''' | |
|
470 | 561 | self.ylabel = 'Range [Km]' |
|
471 | 562 | self.titles = ['Channel {}'.format(x) for x in self.dataOut.channelList] |
|
472 | 563 | |
|
473 | if self.figure is None: | |
|
474 | self.figure = plt.figure(figsize=(self.width, self.height), | |
|
475 | edgecolor='k', | |
|
476 | facecolor='w') | |
|
477 | else: | |
|
478 | self.figure.clf() | |
|
479 | self.axes = [] | |
|
480 | ||
|
481 | for n in range(self.nrows): | |
|
482 | ax = self.figure.add_subplot(self.nrows, self.ncols, n+1) | |
|
483 | ax.firsttime = True | |
|
484 | self.axes.append(ax) | |
|
485 | ||
|
486 | def plot(self): | |
|
487 | ||
|
488 | self.x = np.array(self.times) | |
|
489 | self.y = self.dataOut.getHeiRange() | |
|
490 | self.z = [] | |
|
491 | ||
|
492 | for ch in range(self.nrows): | |
|
493 | self.z.append([self.data[self.CODE][t][ch] for t in self.times]) | |
|
494 | ||
|
495 | self.z = np.array(self.z) | |
|
496 | for n, ax in enumerate(self.axes): | |
|
497 | x, y, z = self.fill_gaps(*self.decimate()) | |
|
498 | if self.xmin is None: | |
|
499 | xmin = self.min_time | |
|
500 | else: | |
|
501 | xmin = fromtimestamp(int(self.xmin), self.min_time) | |
|
502 | if self.xmax is None: | |
|
503 | xmax = xmin + self.xrange*60*60 | |
|
564 | ''' | |
|
565 | Logica: | |
|
566 | 1) Si la variable ind_plt_ch es True, va a crear mas de 1 figura | |
|
567 | 2) guardamos "Figures" en una lista y "axes" en otra, quizas se deberia guardar el | |
|
568 | axis dentro de "Figures" como un diccionario. | |
|
569 | ''' | |
|
570 | if self.ind_plt_ch is False: #standard mode | |
|
571 | ||
|
572 | if self.figure is None: #solo para la priemra vez | |
|
573 | self.figure = plt.figure(figsize=(self.width, self.height), | |
|
574 | edgecolor='k', | |
|
575 | facecolor='w') | |
|
504 | 576 | else: |
|
505 | xmax = xmin + (self.xmax - self.xmin) * 60 * 60 | |
|
506 | self.zmin = self.zmin if self.zmin else np.min(self.z) | |
|
507 | self.zmax = self.zmax if self.zmax else np.max(self.z) | |
|
508 | if ax.firsttime: | |
|
509 | self.ymin = self.ymin if self.ymin else np.nanmin(self.y) | |
|
510 | self.ymax = self.ymax if self.ymax else np.nanmax(self.y) | |
|
511 | plot = ax.pcolormesh(x, y, z[n].T, | |
|
512 | vmin=self.zmin, | |
|
513 | vmax=self.zmax, | |
|
514 | cmap=plt.get_cmap(self.colormap) | |
|
515 | ) | |
|
516 | divider = make_axes_locatable(ax) | |
|
517 | cax = divider.new_horizontal(size='2%', pad=0.05) | |
|
518 | self.figure.add_axes(cax) | |
|
519 | plt.colorbar(plot, cax) | |
|
520 | ax.set_ylim(self.ymin, self.ymax) | |
|
577 | self.figure.clf() | |
|
578 | self.axes = [] | |
|
521 | 579 | |
|
522 | ax.xaxis.set_major_formatter(FuncFormatter(func)) | |
|
523 | ax.xaxis.set_major_locator(LinearLocator(6)) | |
|
524 | 580 | |
|
525 | ax.set_ylabel(self.ylabel) | |
|
581 | for n in range(self.nrows): | |
|
582 | ax = self.figure.add_subplot(self.nrows, self.ncols, n+1) | |
|
583 | #ax = self.figure(n+1) | |
|
584 | ax.firsttime = True | |
|
585 | self.axes.append(ax) | |
|
586 | ||
|
587 | else : #append one figure foreach channel in channelList | |
|
588 | if self.figurelist == None: | |
|
589 | self.figurelist = [] | |
|
590 | for n in range(self.nrows): | |
|
591 | self.figure = plt.figure(figsize=(self.width, self.height), | |
|
592 | edgecolor='k', | |
|
593 | facecolor='w') | |
|
594 | #add always one subplot | |
|
595 | self.figurelist.append(self.figure) | |
|
596 | ||
|
597 | else : # cada dia nuevo limpia el axes, pero mantiene el figure | |
|
598 | for eachfigure in self.figurelist: | |
|
599 | eachfigure.clf() # eliminaria todas las figuras de la lista? | |
|
600 | self.axes = [] | |
|
601 | ||
|
602 | for eachfigure in self.figurelist: | |
|
603 | ax = eachfigure.add_subplot(1,1,1) #solo 1 axis por figura | |
|
604 | #ax = self.figure(n+1) | |
|
605 | ax.firsttime = True | |
|
606 | #Cada figura tiene un distinto puntero | |
|
607 | self.axes.append(ax) | |
|
608 | #plt.close(eachfigure) | |
|
526 | 609 | |
|
527 | # if self.xmin is None: | |
|
528 | # xmin = self.min_time | |
|
529 | # else: | |
|
530 | # xmin = (datetime.datetime.combine(self.dataOut.datatime.date(), | |
|
531 | # datetime.time(self.xmin, 0, 0))-d1970).total_seconds() | |
|
532 | 610 | |
|
533 | ax.set_xlim(xmin, xmax) | |
|
534 | ax.firsttime = False | |
|
535 | else: | |
|
536 | ax.collections.remove(ax.collections[0]) | |
|
537 | ax.set_xlim(xmin, xmax) | |
|
538 | plot = ax.pcolormesh(x, y, z[n].T, | |
|
539 | vmin=self.zmin, | |
|
540 | vmax=self.zmax, | |
|
541 | cmap=plt.get_cmap(self.colormap) | |
|
542 | ) | |
|
543 | ax.set_title('{} {}'.format(self.titles[n], | |
|
544 | datetime.datetime.fromtimestamp(self.max_time).strftime('%y/%m/%d %H:%M:%S')), | |
|
545 | size=8) | |
|
611 | def plot(self): | |
|
546 | 612 | |
|
547 | self.saveTime = self.min_time | |
|
613 | if self.ind_plt_ch is False: #standard mode | |
|
614 | self.x = np.array(self.times) | |
|
615 | self.y = self.dataOut.getHeiRange() | |
|
616 | self.z = [] | |
|
617 | ||
|
618 | for ch in range(self.nrows): | |
|
619 | self.z.append([self.data[self.CODE][t][ch] for t in self.times]) | |
|
620 | ||
|
621 | self.z = np.array(self.z) | |
|
622 | for n, ax in enumerate(self.axes): | |
|
623 | x, y, z = self.fill_gaps(*self.decimate()) | |
|
624 | if self.xmin is None: | |
|
625 | xmin = self.min_time | |
|
626 | else: | |
|
627 | xmin = fromtimestamp(int(self.xmin), self.min_time) | |
|
628 | if self.xmax is None: | |
|
629 | xmax = xmin + self.xrange*60*60 | |
|
630 | else: | |
|
631 | xmax = xmin + (self.xmax - self.xmin) * 60 * 60 | |
|
632 | self.zmin = self.zmin if self.zmin else np.min(self.z) | |
|
633 | self.zmax = self.zmax if self.zmax else np.max(self.z) | |
|
634 | if ax.firsttime: | |
|
635 | self.ymin = self.ymin if self.ymin else np.nanmin(self.y) | |
|
636 | self.ymax = self.ymax if self.ymax else np.nanmax(self.y) | |
|
637 | plot = ax.pcolormesh(x, y, z[n].T, | |
|
638 | vmin=self.zmin, | |
|
639 | vmax=self.zmax, | |
|
640 | cmap=plt.get_cmap(self.colormap) | |
|
641 | ) | |
|
642 | divider = make_axes_locatable(ax) | |
|
643 | cax = divider.new_horizontal(size='2%', pad=0.05) | |
|
644 | self.figure.add_axes(cax) | |
|
645 | plt.colorbar(plot, cax) | |
|
646 | ax.set_ylim(self.ymin, self.ymax) | |
|
647 | ax.xaxis.set_major_formatter(FuncFormatter(func)) | |
|
648 | ax.xaxis.set_major_locator(LinearLocator(6)) | |
|
649 | ax.set_ylabel(self.ylabel) | |
|
650 | # if self.xmin is None: | |
|
651 | # xmin = self.min_time | |
|
652 | # else: | |
|
653 | # xmin = (datetime.datetime.combine(self.dataOut.datatime.date(), | |
|
654 | # datetime.time(self.xmin, 0, 0))-d1970).total_seconds() | |
|
655 | ||
|
656 | ax.set_xlim(xmin, xmax) | |
|
657 | ax.firsttime = False | |
|
658 | else: | |
|
659 | ax.collections.remove(ax.collections[0]) | |
|
660 | ax.set_xlim(xmin, xmax) | |
|
661 | plot = ax.pcolormesh(x, y, z[n].T, | |
|
662 | vmin=self.zmin, | |
|
663 | vmax=self.zmax, | |
|
664 | cmap=plt.get_cmap(self.colormap) | |
|
665 | ) | |
|
666 | ax.set_title('{} {}'.format(self.titles[n], | |
|
667 | datetime.datetime.fromtimestamp(self.max_time).strftime('%y/%m/%d %H:%M:%S')), | |
|
668 | size=8) | |
|
669 | ||
|
670 | self.saveTime = self.min_time | |
|
671 | else : | |
|
672 | self.x = np.array(self.times) | |
|
673 | self.y = self.dataOut.getHeiRange() | |
|
674 | self.z = [] | |
|
675 | ||
|
676 | for ch in range(self.nrows): | |
|
677 | self.z.append([self.data[self.CODE][t][ch] for t in self.times]) | |
|
678 | ||
|
679 | self.z = np.array(self.z) | |
|
680 | for n, eachfigure in enumerate(self.figurelist): #estaba ax in axes | |
|
681 | ||
|
682 | x, y, z = self.fill_gaps(*self.decimate()) | |
|
683 | xmin = self.min_time | |
|
684 | xmax = xmin+self.xrange*60*60 | |
|
685 | self.zmin = self.zmin if self.zmin else np.min(self.z) | |
|
686 | self.zmax = self.zmax if self.zmax else np.max(self.z) | |
|
687 | if self.axes[n].firsttime: | |
|
688 | self.ymin = self.ymin if self.ymin else np.nanmin(self.y) | |
|
689 | self.ymax = self.ymax if self.ymax else np.nanmax(self.y) | |
|
690 | plot = self.axes[n].pcolormesh(x, y, z[n].T, | |
|
691 | vmin=self.zmin, | |
|
692 | vmax=self.zmax, | |
|
693 | cmap=plt.get_cmap(self.colormap) | |
|
694 | ) | |
|
695 | divider = make_axes_locatable(self.axes[n]) | |
|
696 | cax = divider.new_horizontal(size='2%', pad=0.05) | |
|
697 | eachfigure.add_axes(cax) | |
|
698 | #self.figure2.add_axes(cax) | |
|
699 | plt.colorbar(plot, cax) | |
|
700 | self.axes[n].set_ylim(self.ymin, self.ymax) | |
|
701 | ||
|
702 | self.axes[n].xaxis.set_major_formatter(FuncFormatter(func)) | |
|
703 | self.axes[n].xaxis.set_major_locator(LinearLocator(6)) | |
|
704 | ||
|
705 | self.axes[n].set_ylabel(self.ylabel) | |
|
706 | ||
|
707 | if self.xmin is None: | |
|
708 | xmin = self.min_time | |
|
709 | else: | |
|
710 | xmin = (datetime.datetime.combine(self.dataOut.datatime.date(), | |
|
711 | datetime.time(self.xmin, 0, 0))-d1970).total_seconds() | |
|
712 | ||
|
713 | self.axes[n].set_xlim(xmin, xmax) | |
|
714 | self.axes[n].firsttime = False | |
|
715 | else: | |
|
716 | self.axes[n].collections.remove(self.axes[n].collections[0]) | |
|
717 | self.axes[n].set_xlim(xmin, xmax) | |
|
718 | plot = self.axes[n].pcolormesh(x, y, z[n].T, | |
|
719 | vmin=self.zmin, | |
|
720 | vmax=self.zmax, | |
|
721 | cmap=plt.get_cmap(self.colormap) | |
|
722 | ) | |
|
723 | self.axes[n].set_title('{} {}'.format(self.titles[n], | |
|
724 | datetime.datetime.fromtimestamp(self.max_time).strftime('%y/%m/%d %H:%M:%S')), | |
|
725 | size=8) | |
|
726 | ||
|
727 | self.saveTime = self.min_time | |
|
548 | 728 | |
|
549 | 729 | |
|
550 | 730 | class PlotCOHData(PlotRTIData): |
@@ -557,6 +737,7 class PlotCOHData(PlotRTIData): | |||
|
557 | 737 | self.nrows = self.dataOut.nPairs |
|
558 | 738 | self.width = 10 |
|
559 | 739 | self.height = 2.2*self.nrows if self.nrows<6 else 12 |
|
740 | self.ind_plt_ch = False #just for coherence and phase | |
|
560 | 741 | if self.nrows==1: |
|
561 | 742 | self.height += 1 |
|
562 | 743 | self.ylabel = 'Range [Km]' |
@@ -1,1 +1,1 | |||
|
1 | <Project description="JASMET Meteor Detection" id="002" name="script02"><ReadUnit datatype="VoltageReader" id="21" inputId="0" name="VoltageReader"><Operation id="211" name="run" priority="1" type="self"><Parameter format="str" id="2111" name="datatype" value="VoltageReader" /><Parameter format="str" id="2112" name="path" value="/home/nanosat/data/jasmet" /><Parameter format="date" id="2113" name="startDate" value="2010/08/29" /><Parameter format="date" id="2114" name="endDate" value="2017/09/11" /><Parameter format="time" id="2115" name="startTime" value="00:00:00" /><Parameter format="time" id="2116" name="endTime" value="23:59:59" /><Parameter format="int" id="2118" name="delay" value="30" /><Parameter format="int" id="2119" name="blocktime" value="100" /><Parameter format="int" id="2120" name="getblock" value="1" /><Parameter format="int" id="2121" name="walk" value="1" /><Parameter format="int" id="2122" name="online" value="0" /></Operation><Operation id="212" name="printNumberOfBlock" priority="2" type="self" /></ReadUnit><ProcUnit datatype="VoltageProc" id="22" inputId="21" name="VoltageProc"><Operation id="221" name="run" priority="1" type="self" /><Operation id="222" name="selectChannels" priority="2" type="self"><Parameter format="intlist" id="2221" name="channelList" value="0,1,2,3,4" /></Operation><Operation id="223" name="setRadarFrequency" priority="3" type="self"><Parameter format="float" id="2231" name="frequency" value="30.e6" /></Operation><Operation id="224" name="interpolateHeights" priority="4" type="self"><Parameter format="int" id="2241" name="topLim" value="73" /><Parameter format="int" id="2242" name="botLim" value="71" /></Operation><Operation id="225" name="Decoder" priority="5" type="other" /><Operation id="226" name="CohInt" priority="6" type="other"><Parameter format="int" id="2261" name="n" value="2" /></Operation></ProcUnit><ProcUnit datatype="ParametersProc" id="23" inputId="22" name="ParametersProc"><Operation id="231" name="run" priority="1" type="self" /><Operation id="232" name="SMDetection" priority="2" type="other"><Parameter format="float" id="2321" name="azimuth" value="45" /><Parameter format="float" id="2322" name="hmin" value="60" /><Parameter format="float" id="2323" name="hmax" value="120" /></Operation><Operation id="233" name="ParamWriter" priority="3" type="other"><Parameter format="str" id="2331" name="path" value="/home/nanosat/Pictures/JASMET30/201608/meteor" /><Parameter format="int" id="2332" name="blocksPerFile" value="1000" /><Parameter format="list" id="2333" name="metadataList" value="type,heightList,paramInterval,timeZone" /><Parameter format="list" id="2334" name="dataList" value="data_param,utctime" /><Parameter format="int" id="2335" name="mode" value="2" /></Operation></ProcUnit></Project> No newline at end of file | |
|
1 | <Project description="Claire" id="002" name="script02"><ReadUnit datatype="VoltageReader" id="21" inputId="0" name="VoltageReader"><Operation id="211" name="run" priority="1" type="self"><Parameter format="str" id="2111" name="datatype" value="VoltageReader" /><Parameter format="str" id="2112" name="path" value="/media/nanosat/0BDE10E00BDE10E0/CLAIRE" /><Parameter format="date" id="2113" name="startDate" value="2017/07/26" /><Parameter format="date" id="2114" name="endDate" value="2017/07/26" /><Parameter format="time" id="2115" name="startTime" value="9:30:0" /><Parameter format="time" id="2116" name="endTime" value="23:59:59" /><Parameter format="int" id="2118" name="online" value="0" /><Parameter format="int" id="2119" name="walk" value="1" /></Operation><Operation id="212" name="printNumberOfBlock" priority="2" type="self" /></ReadUnit><ProcUnit datatype="VoltageProc" id="22" inputId="21" name="VoltageProc"><Operation id="221" name="run" priority="1" type="self" /></ProcUnit><ProcUnit datatype="SpectraProc" id="23" inputId="22" name="SpectraProc"><Operation id="231" name="run" priority="1" type="self"><Parameter format="int" id="2311" name="nFFTPoints" value="128" /><Parameter format="int" id="2312" name="nProfiles" value="128" /><Parameter format="pairslist" id="2313" name="pairsList" value="(0,1),(0,2),(1,2)" /></Operation><Operation id="232" name="setRadarFrequency" priority="2" type="self"><Parameter format="float" id="2321" name="frequency" value="445000000.0" /></Operation><Operation id="233" name="IncohInt" priority="3" type="other"><Parameter format="float" id="2331" name="timeInterval" value="2" /></Operation><Operation id="234" name="removeDC" priority="4" type="self"><Parameter format="int" id="2341" name="mode" value="2" /></Operation><Operation id="235" name="PublishData" priority="5" type="other"><Parameter format="int" id="2351" name="zeromq" value="1" /><Parameter format="bool" id="2352" name="verbose" value="0" /></Operation></ProcUnit></Project> No newline at end of file |
@@ -5,7 +5,7 Created on Jul 16, 2014 | |||
|
5 | 5 | @author: Miguel Urco |
|
6 | 6 | """ |
|
7 | 7 | |
|
8 | from schainpy import __version__ | |
|
8 | import numpy | |
|
9 | 9 | from setuptools import setup, Extension |
|
10 | 10 | import numpy |
|
11 | 11 | |
@@ -51,8 +51,7 setup(name="schainpy", | |||
|
51 | 51 | "scipy >= 0.14.0", |
|
52 | 52 | "h5py >= 2.2.1", |
|
53 | 53 | "matplotlib >= 1.4.2", |
|
54 | "pyfits >= 3.4", | |
|
55 | "numpy >= 1.11.2", | |
|
54 | "pyfits >= 3.4", | |
|
56 | 55 | "paramiko >= 2.1.2", |
|
57 | 56 | "paho-mqtt >= 1.2", |
|
58 | 57 | "zmq", |
General Comments 0
You need to be logged in to leave comments.
Login now