@@ -0,0 +1,122 | |||||
|
1 | # Ing. AVP | |||
|
2 | # 04/01/2022 | |||
|
3 | # ARCHIVO DE LECTURA | |||
|
4 | #---- DATA RHI --- 23 DE NOVIEMBRE DEL 2021 --- 23/11/2021--- | |||
|
5 | #---- PEDESTAL ---------------------------------------------- | |||
|
6 | #------- HORA 143826 /DATA_RM/TEST_PEDESTAL/P20211123-143826 14:38-15:10 | |||
|
7 | #---- RADAR ---------------------------------------------- | |||
|
8 | #------- 14:26-15:00 | |||
|
9 | #------- /DATA_RM/DRONE/2MHZ_5V_ELEVACION/ | |||
|
10 | #------- /DATA_RM/DRONE/2MHZ_5V_ELEVACION/ch0/2021-11-23T19-00-00 | |||
|
11 | ||||
|
12 | import os, sys | |||
|
13 | import datetime | |||
|
14 | import time | |||
|
15 | import numpy | |||
|
16 | from ext_met import getfirstFilefromPath,getDatavaluefromDirFilename | |||
|
17 | from schainpy.controller import Project | |||
|
18 | #----------------------------------------------------------------------------------------- | |||
|
19 | print("[SETUP]-RADAR METEOROLOGICO-") | |||
|
20 | path_ped = "/DATA_RM/TEST_PEDESTAL/P20211123-143826" | |||
|
21 | print("PATH PEDESTAL :",path_ped) | |||
|
22 | path_adq = "/DATA_RM/DRONE/2MHZ_5V_ELEVACION/" | |||
|
23 | print("PATH DATA :",path_adq) | |||
|
24 | figpath_pp_rti = "/home/soporte/Pictures/TEST_PP_RHI" | |||
|
25 | print("PATH PP RTI :",figpath_pp_rti) | |||
|
26 | figpath_pp_rhi = "/home/soporte/Pictures/TEST_PP_RHI" | |||
|
27 | print("PATH PP RHI :",figpath_pp_rhi) | |||
|
28 | path_pp_save_int = "/DATA_RM/TEST_SAVE_PP_INT_RHI" | |||
|
29 | print("PATH SAVE PP INT :",path_pp_save_int) | |||
|
30 | print(" ") | |||
|
31 | #------------------------------------------------------------------------------------------- | |||
|
32 | print("SELECCIONAR MODO: PPI (0) O RHI (1)") | |||
|
33 | mode_wr = 1 | |||
|
34 | if mode_wr==0: | |||
|
35 | print("[ ON ] MODE PPI") | |||
|
36 | list_ped = getfirstFilefromPath(path=path_ped,meta="PE",ext=".hdf5") | |||
|
37 | ff_pedestal = list_ped[2] | |||
|
38 | azi_vel = getDatavaluefromDirFilename(path=path_ped,file=ff_pedestal,value="azi_vel") | |||
|
39 | V = round(azi_vel[0]) | |||
|
40 | print("VELOCIDAD AZI :", int(numpy.mean(azi_vel)),"°/seg") | |||
|
41 | else: | |||
|
42 | print("[ ON ] MODE RHI") | |||
|
43 | list_ped = getfirstFilefromPath(path=path_ped,meta="PE",ext=".hdf5") | |||
|
44 | ff_pedestal = list_ped[2] | |||
|
45 | ele_vel = getDatavaluefromDirFilename(path=path_ped,file=ff_pedestal,value="ele_vel") | |||
|
46 | V = round(ele_vel[0]) | |||
|
47 | V = 10.0 | |||
|
48 | print("VELOCIDAD ELE :", int(numpy.mean(ele_vel)),"°/seg") | |||
|
49 | print(" ") | |||
|
50 | #--------------------------------------------------------------------------------------- | |||
|
51 | print("SELECCIONAR MODO: PULSE PAIR (0) O FREQUENCY (1)") | |||
|
52 | mode_proc = 0 | |||
|
53 | if mode_proc==0: | |||
|
54 | print("[ ON ] MODE PULSEPAIR") | |||
|
55 | else: | |||
|
56 | print("[ ON ] MODE FREQUENCY") | |||
|
57 | ipp = 60.0 | |||
|
58 | print("IPP(Km.) : %1.2f"%ipp) | |||
|
59 | ipp_sec = (ipp*1.0e3/150.0)*1.0e-6 | |||
|
60 | print("IPP(useg.) : %1.2f"%(ipp_sec*(1.0e6))) | |||
|
61 | VEL=V | |||
|
62 | n= int(1/(VEL*ipp_sec)) | |||
|
63 | print("N° Profiles : ", n) | |||
|
64 | #-------------------------------------------- | |||
|
65 | plot_rti = 0 | |||
|
66 | plot_rhi = 1 | |||
|
67 | integration = 1 | |||
|
68 | save = 0 | |||
|
69 | #---------------------------RANGO DE PLOTEO---------------------------------- | |||
|
70 | dBmin = '1' | |||
|
71 | dBmax = '85' | |||
|
72 | xmin = '17' | |||
|
73 | xmax = '17.25' | |||
|
74 | ymin = '0' | |||
|
75 | ymax = '600' | |||
|
76 | #---------------------------------------------------------------------------- | |||
|
77 | time.sleep(3) | |||
|
78 | #---------------------SIGNAL CHAIN ------------------------------------ | |||
|
79 | desc = "USRP_WEATHER_RADAR" | |||
|
80 | filename = "USRP_processing.xml" | |||
|
81 | controllerObj = Project() | |||
|
82 | controllerObj.setup(id = '191', name='Test_USRP', description=desc) | |||
|
83 | #---------------------UNIDAD DE LECTURA-------------------------------- | |||
|
84 | readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader', | |||
|
85 | path=path_adq, | |||
|
86 | startDate="2021/11/10",#today, | |||
|
87 | endDate="2021/12/30",#today, | |||
|
88 | startTime='17:10:25', | |||
|
89 | endTime='23:59:59', | |||
|
90 | delay=0, | |||
|
91 | #set=0, | |||
|
92 | online=0, | |||
|
93 | walk=1, | |||
|
94 | ippKm=ipp) | |||
|
95 | ||||
|
96 | procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc',inputId=readUnitConfObj.getId()) | |||
|
97 | ||||
|
98 | opObj11 = procUnitConfObjA.addOperation(name='selectHeights') | |||
|
99 | opObj11.addParameter(name='minIndex', value='1', format='int') | |||
|
100 | # opObj11.addParameter(name='maxIndex', value='10000', format='int') | |||
|
101 | opObj11.addParameter(name='maxIndex', value='400', format='int') | |||
|
102 | ||||
|
103 | if mode_proc==0: | |||
|
104 | opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') | |||
|
105 | opObj11.addParameter(name='n', value=int(n), format='int') | |||
|
106 | procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId()) | |||
|
107 | ||||
|
108 | if integration==1: | |||
|
109 | opObj11 = procUnitConfObjB.addOperation(name='PedestalInformation') | |||
|
110 | opObj11.addParameter(name='path_ped', value=path_ped) | |||
|
111 | opObj11.addParameter(name='t_Interval_p', value='0.01', format='float') | |||
|
112 | ||||
|
113 | if plot_rhi==1: | |||
|
114 | opObj11 = procUnitConfObjB.addOperation(name='Block360') | |||
|
115 | opObj11.addParameter(name='n', value='10', format='int') | |||
|
116 | opObj11.addParameter(name='mode', value=mode_proc, format='int') | |||
|
117 | # este bloque funciona bien con divisores de 360 no olvidar 0 10 20 30 40 60 90 120 180 | |||
|
118 | opObj11= procUnitConfObjB.addOperation(name='WeatherRHIPlot',optype='other') | |||
|
119 | opObj11.addParameter(name='save', value=figpath_pp_rhi) | |||
|
120 | opObj11.addParameter(name='save_period', value=1) | |||
|
121 | ||||
|
122 | controllerObj.start() |
@@ -0,0 +1,57 | |||||
|
1 | import numpy as np | |||
|
2 | import matplotlib.pyplot as plt | |||
|
3 | import wradlib as wrl | |||
|
4 | import warnings | |||
|
5 | # libreia nueva | |||
|
6 | from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter | |||
|
7 | warnings.filterwarnings('ignore') | |||
|
8 | # lectura de gaMIC hdf5 file | |||
|
9 | filename = wrl.util.get_wradlib_data_file("/home/soporte/Downloads/2014-06-09--185000.rhi.mvol") | |||
|
10 | data1, metadata = wrl.io.read_gamic_hdf5(filename) | |||
|
11 | print(data1) | |||
|
12 | data1 = data1['SCAN0']['ZH']['data'] | |||
|
13 | print(data1) | |||
|
14 | print("SHAPE Data",np.array(data1).shape) | |||
|
15 | r = metadata['SCAN0']['r'] | |||
|
16 | print("r",r) | |||
|
17 | print("longitud r",len(r)) | |||
|
18 | th = metadata['SCAN0']['el'] | |||
|
19 | print("th",th) | |||
|
20 | print("longitud th",len(th)) | |||
|
21 | az = metadata['SCAN0']['az'] | |||
|
22 | print("az",az) | |||
|
23 | site = (metadata['VOL']['Longitude'], metadata['VOL']['Latitude'], | |||
|
24 | metadata['VOL']['Height']) | |||
|
25 | ||||
|
26 | print("Longitud,Latitud,Altura",site) | |||
|
27 | ma1 = np.array(data1) | |||
|
28 | ''' | |||
|
29 | mask_ind = np.where(data1 <= np.nanmin(data1)) | |||
|
30 | data1[mask_ind] = np.nan | |||
|
31 | ma1 = np.ma.array(data1, mask=np.isnan(data1)) | |||
|
32 | ''' | |||
|
33 | #cgax, pm = wrl.vis.plot_rhi(ma1,r=r,th=th,rf=1e3) | |||
|
34 | fig = plt.figure(figsize=(10,8)) | |||
|
35 | cgax, pm = wrl.vis.plot_rhi(ma1,r=r,th=th,rf=1e3,fig=fig, ax=111,proj='cg') | |||
|
36 | caax = cgax.parasites[0] | |||
|
37 | paax = cgax.parasites[1] | |||
|
38 | cgax.set_ylim(0, 14) | |||
|
39 | #caax = cgax.parasites[0] | |||
|
40 | #paax = cgax.parasites[1] | |||
|
41 | #cgax, pm = wrl.vis.plot_rhi(ma1, r=r, th=th, rf=1e3, fig=fig, ax=111, proj='cg') | |||
|
42 | txt = plt.title('Simple RHI',y=1.05) | |||
|
43 | #cbar = plt.gcf().colorbar(pm, pad=0.05, ax=paax) | |||
|
44 | cbar = plt.gcf().colorbar(pm, pad=0.05) | |||
|
45 | cbar.set_label('reflectivity [dBZ]') | |||
|
46 | caax.set_xlabel('x_range [km]') | |||
|
47 | caax.set_ylabel('y_range [km]') | |||
|
48 | plt.text(1.0, 1.05, 'azimuth', transform=caax.transAxes, va='bottom',ha='right') | |||
|
49 | gh = cgax.get_grid_helper() | |||
|
50 | ||||
|
51 | # set theta to some nice values | |||
|
52 | locs = [0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., | |||
|
53 | 15., 16., 17., 18., 20., 22., 25., 30., 35., 40., 50., 60., 70., 80., 90.] | |||
|
54 | gh.grid_finder.grid_locator1 = FixedLocator(locs) | |||
|
55 | gh.grid_finder.tick_formatter1 = DictFormatter(dict([(i, r"${0:.0f}^\circ$".format(i)) for i in locs])) | |||
|
56 | ||||
|
57 | plt.show() |
@@ -399,15 +399,10 class WeatherPlot(Plot): | |||||
399 | meta = {} |
|
399 | meta = {} | |
400 | if hasattr(dataOut, 'dataPP_POWER'): |
|
400 | if hasattr(dataOut, 'dataPP_POWER'): | |
401 | factor = 1 |
|
401 | factor = 1 | |
402 |
|
||||
403 | if hasattr(dataOut, 'nFFTPoints'): |
|
402 | if hasattr(dataOut, 'nFFTPoints'): | |
404 | factor = dataOut.normFactor |
|
403 | factor = dataOut.normFactor | |
405 |
|
||||
406 | ####print("factor",factor) |
|
|||
407 | data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor)) |
|
404 | data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor)) | |
408 | ####print("weather",data['weather']) |
|
|||
409 | data['azi'] = dataOut.data_azi |
|
405 | data['azi'] = dataOut.data_azi | |
410 |
|
||||
411 | data['ele'] = dataOut.data_ele |
|
406 | data['ele'] = dataOut.data_ele | |
412 | return data, meta |
|
407 | return data, meta | |
413 |
|
408 | |||
@@ -428,7 +423,6 class WeatherPlot(Plot): | |||||
428 | return ang_ |
|
423 | return ang_ | |
429 | return ang_ |
|
424 | return ang_ | |
430 |
|
425 | |||
431 |
|
||||
432 | def fixData360HL(self,angulos): |
|
426 | def fixData360HL(self,angulos): | |
433 | vec = numpy.where(angulos>=360) |
|
427 | vec = numpy.where(angulos>=360) | |
434 | angulos[vec]=angulos[vec]-360 |
|
428 | angulos[vec]=angulos[vec]-360 | |
@@ -466,7 +460,6 class WeatherPlot(Plot): | |||||
466 | c=c+1 |
|
460 | c=c+1 | |
467 | return ang_new,ang_new2 |
|
461 | return ang_new,ang_new2 | |
468 |
|
462 | |||
469 |
|
||||
470 | def globalCheckPED(self,angulos): |
|
463 | def globalCheckPED(self,angulos): | |
471 | l1,l2 = self.get2List(angulos) |
|
464 | l1,l2 = self.get2List(angulos) | |
472 | if len(l1)>0: |
|
465 | if len(l1)>0: | |
@@ -476,7 +469,6 class WeatherPlot(Plot): | |||||
476 | ang1_,ang2_ = self.fixDataComp(ang_=angulos2,list1_=l1,list2_=l2) |
|
469 | ang1_,ang2_ = self.fixDataComp(ang_=angulos2,list1_=l1,list2_=l2) | |
477 | ang1_ = self.fixData360HL(ang1_) |
|
470 | ang1_ = self.fixData360HL(ang1_) | |
478 | ang2_ = self.fixData360HL(ang2_) |
|
471 | ang2_ = self.fixData360HL(ang2_) | |
479 |
|
||||
480 | else: |
|
472 | else: | |
481 | ang1_= angulos |
|
473 | ang1_= angulos | |
482 | ang2_= angulos |
|
474 | ang2_= angulos | |
@@ -512,7 +504,6 class WeatherPlot(Plot): | |||||
512 | position=list1[i]+1 |
|
504 | position=list1[i]+1 | |
513 | for j in range(list2[i]): |
|
505 | for j in range(list2[i]): | |
514 | new_data_azi[position+j]=new_data_azi[position+j-1]+1 |
|
506 | new_data_azi[position+j]=new_data_azi[position+j-1]+1 | |
515 |
|
||||
516 | return new_data_azi |
|
507 | return new_data_azi | |
517 |
|
508 | |||
518 | def fixDATA(self,data_azi): |
|
509 | def fixDATA(self,data_azi): | |
@@ -542,17 +533,14 class WeatherPlot(Plot): | |||||
542 |
|
533 | |||
543 | def const_ploteo(self,data_weather,data_azi,step,res): |
|
534 | def const_ploteo(self,data_weather,data_azi,step,res): | |
544 | if self.ini==0: |
|
535 | if self.ini==0: | |
545 |
#------- |
|
536 | #------- | |
546 | n = (360/res)-len(data_azi) |
|
537 | n = (360/res)-len(data_azi) | |
547 | #--------------------- new ------------------------- |
|
538 | #--------------------- new ------------------------- | |
548 | ####data_azi_old = data_azi |
|
|||
549 | data_azi_new ,data_azi_old= self.globalCheckPED(data_azi) |
|
539 | data_azi_new ,data_azi_old= self.globalCheckPED(data_azi) | |
550 | #------------------------ |
|
540 | #------------------------ | |
551 | ####data_azi_new = self.fixDATA(data_azi) |
|
|||
552 | #ata_azi_new = self.fixDATANEW(data_azi) |
|
|||
553 | start = data_azi_new[-1] + res |
|
541 | start = data_azi_new[-1] + res | |
554 | end = data_azi_new[0] - res |
|
542 | end = data_azi_new[0] - res | |
555 |
# |
|
543 | #------ new | |
556 | self.last_data_azi = end |
|
544 | self.last_data_azi = end | |
557 | if start>end: |
|
545 | if start>end: | |
558 | end = end + 360 |
|
546 | end = end + 360 | |
@@ -571,30 +559,16 class WeatherPlot(Plot): | |||||
571 | start_azi = self.res_azi[0] |
|
559 | start_azi = self.res_azi[0] | |
572 | #-----------new------------ |
|
560 | #-----------new------------ | |
573 | data_azi ,data_azi_old= self.globalCheckPED(data_azi) |
|
561 | data_azi ,data_azi_old= self.globalCheckPED(data_azi) | |
574 | print("---------------------------------------------------") |
|
|||
575 | print("data_azi",data_azi) |
|
|||
576 | print("data_azi_old",data_azi_old) |
|
|||
577 | data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean) |
|
562 | data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean) | |
578 | #-------------------------- |
|
563 | #-------------------------- | |
579 | ####data_azi_old = data_azi |
|
|||
580 | ### weather ### |
|
|||
581 | ####data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean) |
|
|||
582 |
|
||||
583 | ####if numpy.isnan(data_azi[0]): |
|
|||
584 | #### data_azi[0]=self.last_data_azi+1 |
|
|||
585 | ####data_azi = self.fixDATA(data_azi) |
|
|||
586 | start = data_azi[0] |
|
564 | start = data_azi[0] | |
587 | end = data_azi[-1] |
|
565 | end = data_azi[-1] | |
588 | self.last_data_azi= end |
|
566 | self.last_data_azi= end | |
589 | ####print("start",start) |
|
|||
590 | ####print("end",end) |
|
|||
591 | if start< start_azi: |
|
567 | if start< start_azi: | |
592 | start = start +360 |
|
568 | start = start +360 | |
593 | if end <start_azi: |
|
569 | if end <start_azi: | |
594 | end = end +360 |
|
570 | end = end +360 | |
595 | ####print("start",start) |
|
571 | ||
596 | ####print("end",end) |
|
|||
597 | #### AQUI SERA LA MAGIA |
|
|||
598 | pos_ini = int((start-start_azi)/res) |
|
572 | pos_ini = int((start-start_azi)/res) | |
599 | len_azi = len(data_azi) |
|
573 | len_azi = len(data_azi) | |
600 | if (360-pos_ini)<len_azi: |
|
574 | if (360-pos_ini)<len_azi: | |
@@ -604,11 +578,7 class WeatherPlot(Plot): | |||||
604 | flag=1 |
|
578 | flag=1 | |
605 | dif= 360-pos_ini |
|
579 | dif= 360-pos_ini | |
606 | comp= len_azi-dif |
|
580 | comp= len_azi-dif | |
607 |
|
||||
608 | #----------------- |
|
581 | #----------------- | |
609 | ####print(pos_ini) |
|
|||
610 | ####print(len_azi) |
|
|||
611 | ####print("shape",self.res_azi.shape) |
|
|||
612 | if flag==0: |
|
582 | if flag==0: | |
613 | # AZIMUTH |
|
583 | # AZIMUTH | |
614 | self.res_azi[pos_ini:pos_ini+len_azi] = data_azi |
|
584 | self.res_azi[pos_ini:pos_ini+len_azi] = data_azi | |
@@ -628,47 +598,24 class WeatherPlot(Plot): | |||||
628 | return data_weather,data_azi |
|
598 | return data_weather,data_azi | |
629 |
|
599 | |||
630 | def plot(self): |
|
600 | def plot(self): | |
631 | #print("--------------------------------------",self.ini,"-----------------------------------") |
|
|||
632 | #numpy.set_printoptions(suppress=True) |
|
|||
633 | ####print("times: ",self.data.times) |
|
|||
634 | thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S') |
|
601 | thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S') | |
635 | #print("times: ",thisDatetime) |
|
|||
636 | data = self.data[-1] |
|
602 | data = self.data[-1] | |
637 | ####ALTURA altura_tmp_h |
|
603 | r = self.data.yrange | |
638 | ###print("Y RANGES",self.data.yrange,len(self.data.yrange)) |
|
|||
639 | ###altura_h = (data['weather'].shape[1])/10.0 |
|
|||
640 | ###stoprange = float(altura_h*0.3)#stoprange = float(33*1.5) por ahora 400 |
|
|||
641 | ###rangestep = float(0.03) |
|
|||
642 | ###r = numpy.arange(0, stoprange, rangestep) |
|
|||
643 | ###print("r",r,len(r)) |
|
|||
644 | #-----------------------------update---------------------- |
|
|||
645 | r= self.data.yrange |
|
|||
646 | delta_height = r[1]-r[0] |
|
604 | delta_height = r[1]-r[0] | |
647 | #print("1",r) |
|
605 | r_mask = numpy.where(r>=0)[0] | |
648 | r_mask= numpy.where(r>=0)[0] |
|
606 | r = numpy.arange(len(r_mask))*delta_height | |
649 | r = numpy.arange(len(r_mask))*delta_height |
|
607 | self.y = 2*r | |
650 | #print("2",r) |
|
|||
651 | self.y = 2*r |
|
|||
652 | ######self.y = self.data.yrange |
|
|||
653 | # RADAR |
|
608 | # RADAR | |
654 | #data_weather = data['weather'] |
|
609 | #data_weather = data['weather'] | |
655 | # PEDESTAL |
|
610 | # PEDESTAL | |
656 | #data_azi = data['azi'] |
|
611 | #data_azi = data['azi'] | |
657 | res = 1 |
|
612 | res = 1 | |
658 | # STEP |
|
613 | # STEP | |
659 | step = (360/(res*data['weather'].shape[0])) |
|
614 | step = (360/(res*data['weather'].shape[0])) | |
660 | #print("shape wr_data", wr_data.shape) |
|
615 | ||
661 | #print("shape wr_azi",wr_azi.shape) |
|
|||
662 | #print("step",step) |
|
|||
663 | ####print("Time---->",self.data.times[-1],thisDatetime) |
|
|||
664 | #print("alturas", len(self.y))numpy.where(r>=0) |
|
|||
665 | self.res_weather, self.res_azi = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_azi=data['azi'],step=step,res=res) |
|
616 | self.res_weather, self.res_azi = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_azi=data['azi'],step=step,res=res) | |
666 | #numpy.set_printoptions(suppress=True) |
|
617 | self.res_ele = numpy.mean(data['ele']) | |
667 | #print("resultado",self.res_azi) |
|
|||
668 | self.res_ele =numpy.mean(data['ele']) |
|
|||
669 | ###########################/DATA_RM/10_tmp/ch0############################### |
|
|||
670 | ################# PLOTEO ################### |
|
618 | ################# PLOTEO ################### | |
671 | ########################################################## |
|
|||
672 |
|
619 | |||
673 | for i,ax in enumerate(self.axes): |
|
620 | for i,ax in enumerate(self.axes): | |
674 | if ax.firsttime: |
|
621 | if ax.firsttime: | |
@@ -685,3 +632,76 class WeatherPlot(Plot): | |||||
685 | plt.text(1.0, 1.05, 'Azimuth '+str(thisDatetime)+" Step "+str(self.ini)+ " Elev: "+str(round(self.res_ele,2)), transform=caax.transAxes, va='bottom',ha='right') |
|
632 | plt.text(1.0, 1.05, 'Azimuth '+str(thisDatetime)+" Step "+str(self.ini)+ " Elev: "+str(round(self.res_ele,2)), transform=caax.transAxes, va='bottom',ha='right') | |
686 |
|
633 | |||
687 | self.ini= self.ini+1 |
|
634 | self.ini= self.ini+1 | |
|
635 | ||||
|
636 | ||||
|
637 | class WeatherRHIPlot(Plot): | |||
|
638 | CODE = 'weather' | |||
|
639 | plot_name = 'weather' | |||
|
640 | plot_type = 'rhistyle' | |||
|
641 | buffering = False | |||
|
642 | ||||
|
643 | def setup(self): | |||
|
644 | self.ncols = 1 | |||
|
645 | self.nrows = 1 | |||
|
646 | self.nplots= 1 | |||
|
647 | self.ylabel= 'Range [Km]' | |||
|
648 | self.titles= ['Weather'] | |||
|
649 | self.colorbar=False | |||
|
650 | self.width =8 | |||
|
651 | self.height =8 | |||
|
652 | self.ini =0 | |||
|
653 | self.len_azi =0 | |||
|
654 | self.buffer_ini = None | |||
|
655 | self.buffer_azi = None | |||
|
656 | self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08}) | |||
|
657 | self.flag =0 | |||
|
658 | self.indicador= 0 | |||
|
659 | self.last_data_azi = None | |||
|
660 | self.val_mean = None | |||
|
661 | ||||
|
662 | def update(self, dataOut): | |||
|
663 | ||||
|
664 | data = {} | |||
|
665 | meta = {} | |||
|
666 | if hasattr(dataOut, 'dataPP_POWER'): | |||
|
667 | factor = 1 | |||
|
668 | if hasattr(dataOut, 'nFFTPoints'): | |||
|
669 | factor = dataOut.normFactor | |||
|
670 | data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor)) | |||
|
671 | data['azi'] = dataOut.data_azi | |||
|
672 | data['ele'] = dataOut.data_ele | |||
|
673 | return data, meta | |||
|
674 | ||||
|
675 | def plot(self): | |||
|
676 | thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S') | |||
|
677 | data = self.data[-1] | |||
|
678 | r = self.data.yrange | |||
|
679 | delta_height = r[1]-r[0] | |||
|
680 | r_mask = numpy.where(r>=0)[0] | |||
|
681 | r = numpy.arange(len(r_mask))*delta_height | |||
|
682 | self.y = 2*r | |||
|
683 | ###self.res_weather, self.res_ele = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_azi=data['ele'],step=step,res=res) | |||
|
684 | ###self.res_azi = numpy.mean(data['azi']) | |||
|
685 | #------------- | |||
|
686 | # 90 angulos en el axis 0 | |||
|
687 | # 1000 step en el axis 1 | |||
|
688 | self.res_weather = numpy.ones([90,1000]) | |||
|
689 | r = numpy.linspace(0,1999,1000) | |||
|
690 | self.res_ele = numpy.arange(0,90) | |||
|
691 | self.res_azi = 240 | |||
|
692 | #------------- | |||
|
693 | for i,ax in enumerate(self.axes): | |||
|
694 | if ax.firsttime: | |||
|
695 | plt.clf() | |||
|
696 | cgax, pm = wrl.vis.plot_rhi(self.res_weather,r=r,th=self.res_ele,fig=self.figures[0], proj='cg') | |||
|
697 | else: | |||
|
698 | plt.clf() | |||
|
699 | cgax, pm = wrl.vis.plot_rhi(self.res_weather,r=r,th=self.res_ele,fig=self.figures[0], proj='cg') | |||
|
700 | caax = cgax.parasites[0] | |||
|
701 | paax = cgax.parasites[1] | |||
|
702 | cbar = plt.gcf().colorbar(pm, pad=0.075) | |||
|
703 | caax.set_xlabel('x_range [km]') | |||
|
704 | caax.set_ylabel('y_range [km]') | |||
|
705 | plt.text(1.0, 1.05, 'Elevacion '+str(thisDatetime)+" Step "+str(self.ini)+ " Azi: "+str(round(self.res_azi,2)), transform=caax.transAxes, va='bottom',ha='right') | |||
|
706 | ||||
|
707 | self.ini= self.ini+1 |
@@ -3944,12 +3944,13 class WeatherRadar(Operation): | |||||
3944 |
|
3944 | |||
3945 | def setMoments(self,dataOut,i): |
|
3945 | def setMoments(self,dataOut,i): | |
3946 |
|
3946 | |||
3947 | type = dataOut.inputUnit |
|
3947 | type = dataOut.inputUnit | |
3948 | nCh = dataOut.nChannels |
|
3948 | nCh = dataOut.nChannels | |
3949 | nHeis= dataOut.nHeights |
|
3949 | nHeis = dataOut.nHeights | |
3950 | data_param = numpy.zeros((nCh,4,nHeis)) |
|
3950 | data_param = numpy.zeros((nCh,4,nHeis)) | |
3951 | if type == "Voltage": |
|
3951 | if type == "Voltage": | |
3952 | data_param[:,0,:] = dataOut.dataPP_POW/(dataOut.nCohInt**2) |
|
3952 | factor = dataOut.normFactor | |
|
3953 | data_param[:,0,:] = dataOut.dataPP_POW/(factor) | |||
3953 | data_param[:,1,:] = dataOut.dataPP_DOP |
|
3954 | data_param[:,1,:] = dataOut.dataPP_DOP | |
3954 | data_param[:,2,:] = dataOut.dataPP_WIDTH |
|
3955 | data_param[:,2,:] = dataOut.dataPP_WIDTH | |
3955 | data_param[:,3,:] = dataOut.dataPP_SNR |
|
3956 | data_param[:,3,:] = dataOut.dataPP_SNR | |
@@ -3957,7 +3958,6 class WeatherRadar(Operation): | |||||
3957 | data_param[:,0,:] = dataOut.data_POW |
|
3958 | data_param[:,0,:] = dataOut.data_POW | |
3958 | data_param[:,1,:] = dataOut.data_DOP |
|
3959 | data_param[:,1,:] = dataOut.data_DOP | |
3959 | data_param[:,2,:] = dataOut.data_WIDTH |
|
3960 | data_param[:,2,:] = dataOut.data_WIDTH | |
3960 | def setMoments(self,dataOut,i): |
|
|||
3961 | data_param[:,3,:] = dataOut.data_SNR |
|
3961 | data_param[:,3,:] = dataOut.data_SNR | |
3962 |
|
3962 | |||
3963 | return data_param[:,i,:] |
|
3963 | return data_param[:,i,:] |
@@ -95,7 +95,7 if mode_proc==0: | |||||
95 | opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') |
|
95 | opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') | |
96 | opObj11.addParameter(name='n', value=int(n), format='int') |
|
96 | opObj11.addParameter(name='n', value=int(n), format='int') | |
97 | procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId()) |
|
97 | procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId()) | |
98 |
|
98 | # REVISAR EL test_sim00013.py | ||
99 | if plot_rti==1: |
|
99 | if plot_rti==1: | |
100 | opObj11 = procUnitConfObjB.addOperation(name='GenericRTIPlot',optype='external') |
|
100 | opObj11 = procUnitConfObjB.addOperation(name='GenericRTIPlot',optype='external') | |
101 | opObj11.addParameter(name='attr_data', value='dataPP_POW') |
|
101 | opObj11.addParameter(name='attr_data', value='dataPP_POW') |
General Comments 0
You need to be logged in to leave comments.
Login now