##// END OF EJS Templates
fix range
avaldezp -
r1521:620883e0ec4d
parent child
Show More
@@ -1,220 +1,218
1 1 #!/usr/bin/env python
2 2 # Ing. AVP
3 3 # 22/06/2022
4 4 # ARCHIVO DE LECTURA y PLOT
5 5 import matplotlib.pyplot as pl
6 6 import matplotlib
7 7 import wradlib
8 8 import numpy
9 9 import warnings
10 10 import argparse
11 11 from wradlib.io import read_generic_hdf5
12 12 from wradlib.util import get_wradlib_data_file
13 13 from plotting_codes import sophy_cb_tables
14 14 import os,time
15 15
16 16 for name, cb_table in sophy_cb_tables:
17 17 ncmap = matplotlib.colors.ListedColormap(cb_table, name=name)
18 18 matplotlib.pyplot.register_cmap(cmap=ncmap)
19 19 #LINUX bash: export WRADLIB_DATA=/path/to/wradlib-data
20 20 warnings.filterwarnings('ignore')
21 21 PARAM = {
22 22 'S': {'var': 'power','vmin': -45, 'vmax': -15, 'cmap': 'jet', 'label': 'Power','unit': 'dBm'},
23 23 'V': {'var': 'velocity', 'vmin': -10, 'vmax': 10 , 'cmap': 'sophy_v', 'label': 'Velocity','unit': 'm/s'},
24 24 'Z': {'var': 'reflectivity','vmin': -30, 'vmax': 80 , 'cmap': 'sophy_r','label': 'Reflectivity','unit': 'dBZ'},
25 25 'W': {'var': 'spectral_width', 'vmin': 0 , 'vmax': 12 , 'cmap': 'sophy_w','label': 'Spectral Width','unit': 'hz'}
26 26 }
27 27 class Readsophy():
28 28 def __init__(self):
29 29 self.list_file = None
30 30 self.grado = None
31 31 self.variable = None
32 32 self.save = None
33 33 self.range = None
34 34
35 35 def read_files(self,path_file,grado=None, variable=None):
36 36 filter= "_E"+str(grado)+".0_"+variable
37 37 validFilelist = []
38 38 fileList= os.listdir(path_file)
39 39 for thisFile in fileList:
40 40 if (os.path.splitext(thisFile)[0][-7:] != filter):
41 41 #print("s_:",os.path.splitext(thisFile)[0][-7:])
42 42 continue
43 43 validFilelist.append(thisFile)
44 44 validFilelist.sort()
45 45 return validFilelist
46 46
47 47 def setup(self, path_file,grado,range,variable,save):
48 48 self.path_file = path_file
49 49 self.range = range
50 50 self.grado = grado
51 51 self.variable = variable
52 52 self.save = save
53 53 self.list_file = self.read_files(path_file=self.path_file,grado=self.grado, variable=self.variable)
54 54
55 55 def selectHeights(self,heightList,minHei,maxHei):
56 56
57 57 if minHei and maxHei:
58 58 if (minHei < heightList[0]):
59 59 minHei = heightList[0]
60 60 if (maxHei > heightList[-1]):
61 61 maxHei = heightList[-1]
62 62 minIndex = 0
63 63 maxIndex = 0
64 64 heights = heightList
65 65
66 66 inda = numpy.where(heights >= minHei)
67 67 indb = numpy.where(heights <= maxHei)
68 68
69 69 try:
70 70 minIndex = inda[0][0]
71 71 except:
72 72 minIndex = 0
73 73
74 74 try:
75 75 maxIndex = indb[0][-1]
76 76 except:
77 77 maxIndex = len(heights)
78 78
79 79 new_heightList= self.selectHeightsByIndex(heightList=heightList,minIndex=minIndex, maxIndex=maxIndex)
80 80
81 81 return new_heightList, minIndex,maxIndex
82 82
83 83 def selectHeightsByIndex(self,heightList,minIndex, maxIndex):
84 84
85 85 if (minIndex < 0) or (minIndex > maxIndex):
86 86 raise ValueError("Height index range (%d,%d) is not valid" % (minIndex, maxIndex))
87 87
88 88 if (maxIndex >= len(heightList)):
89 89 maxIndex = len(heightList)
90 90
91 91 new_h = heightList[minIndex:maxIndex]
92 92 return new_h
93 93
94 94 def run(self):
95 95 count= 0
96 96 len_files = len(self.list_file)
97 97
98 98 for thisFile in self.list_file:
99 99 count = count +1
100 100 fullpathfile = self.path_file + thisFile
101 101 filename = get_wradlib_data_file(fullpathfile)
102 102 test_hdf5 = read_generic_hdf5(filename)
103 103
104 104 var = PARAM[self.variable]['var']
105 105 unit = PARAM[self.variable]['unit']
106 106 cmap = PARAM[self.variable]['cmap']
107 107 vmin = PARAM[self.variable]['vmin']
108 108 vmax = PARAM[self.variable]['vmax']
109 109 label = PARAM[self.variable]['label']
110 110 var_ = 'Data/'+var+'/H'
111 111 data_arr = numpy.array(test_hdf5[var_]['data']) # data
112 112 utc_time = numpy.array(test_hdf5['Data/time']['data'])
113 113 data_azi = numpy.array(test_hdf5['Metadata/azimuth']['data']) # th
114 114 data_ele = numpy.array(test_hdf5["Metadata/elevation"]['data'])
115 115 heightList = numpy.array(test_hdf5["Metadata/range"]['data']) # r
116 116
117 117 if self.range==0:
118 118 self.range == heightList[-1]
119 else:
120 print(self.range)
121 119 new_heightList,minIndex,maxIndex = self.selectHeights(heightList,0.06,self.range)
122 120
123 121
124 122 my_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(utc_time[0]))
125 123 time_save = time.strftime('%Y%m%d_%H%M%S',time.localtime(utc_time[0]))
126 124
127 125 # PLOT DATA WITH ANNOTATION
128 126 if count ==1:
129 127 fig = pl.figure(figsize=(10,8))
130 128 cgax, pm = wradlib.vis.plot_ppi(data_arr[:,minIndex:maxIndex],r=new_heightList,az=data_azi,rf=1,fig=fig, ax=111,proj='cg',cmap=cmap,vmin=vmin, vmax=vmax)
131 129 caax = cgax.parasites[0]
132 title = 'Simple PPI'+"-"+ my_time
130 title = 'Simple PPI'+"-"+ my_time+" E."+self.grado
133 131 t = pl.title(title, fontsize=12,y=1.05)
134 132 cbar = pl.gcf().colorbar(pm, pad=0.075)
135 133 pl.text(1.0, 1.05, 'azimuth', transform=caax.transAxes, va='bottom',ha='right')
136 134 cbar.set_label(label+'[' + unit + ']')
137 135 gh = cgax.get_grid_helper()
138 136 else:
139 137 cgax, pm = wradlib.vis.plot_ppi(data_arr[:,minIndex:maxIndex],r=new_heightList,az=data_azi,rf=1,fig=fig, ax=111,proj='cg',cmap=cmap,vmin=vmin, vmax=vmax)
140 138 caax = cgax.parasites[0]
141 title = 'Simple PPI'+"-"+my_time
139 title = 'Simple PPI'+"-"+my_time+" E."+self.grado
142 140 t = pl.title(title, fontsize=12,y=1.05)
143 141 cbar = pl.gcf().colorbar(pm, pad=0.075)
144 142 pl.text(1.0, 1.05, 'azimuth', transform=caax.transAxes, va='bottom',ha='right')
145 143 cbar.set_label(label+'[' + unit + ']')
146 144 gh = cgax.get_grid_helper()
147 145 if self.save == 1:
148 146 if count ==1:
149 147 filename = "SOPHY"+"_"+time_save+"_"+"E."+self.grado+"_"+self.variable+".png"
150 148 dir =self.variable+"_"+"E."+self.grado+"CH0/"
151 149 filesavepath = os.path.join(self.path_file,dir)
152 150 try:
153 151 os.mkdir(filesavepath)
154 152 except:
155 153 pass
156 154 else:
157 155 filename = "SOPHY"+"_"+time_save+"_"+"E."+self.grado+"_"+self.variable+".png"
158 156 pl.savefig(filesavepath+filename)
159 157
160 158 pl.pause(1)
161 159 pl.clf()
162 160 if count==len_files:
163 161 pl.close()
164 162 pl.show()
165 163
166 164 PATH = "/home/soporte/Documents/EVENTO/HYO_PM@2022-06-09T15-05-12/paramC0N36.0/2022-06-09T18-00-00/"
167 PATH = "/home/soporte/Documents/EVENTO/HYO_PM@2022-06-09T15-05-12/paramC0N36.0/2022-06-09T19-00-00/"
165 #PATH = "/home/soporte/Documents/EVENTO/HYO_PM@2022-06-09T15-05-12/paramC0N36.0/2022-06-09T19-00-00/"
168 166
169 167 #PATH = "/home/soporte/Documents/EVENTO/HYO_PM@2022-05-31T12-00-17/paramC0N36.0/2022-05-31T16-00-00/"
170 168
171 169 def main(args):
172 170 grado = args.grado
173 171 parameters = args.parameters
174 172 save = args.save
175 173 range = args.range
176 174 obj = Readsophy()
177 175 for param in parameters:
178 176 obj.setup(path_file = PATH,grado = grado,range=range, variable=param,save=int(save))
179 177 obj.run()
180 178
181 179 if __name__ == '__main__':
182 180
183 181 parser = argparse.ArgumentParser(description='Script to process SOPHy data.')
184 182 parser.add_argument('--parameters', nargs='*', default=['S'],
185 183 help='Variables to process: P, Z, V ,W')
186 184 parser.add_argument('--grado', default=2,
187 185 help='Angle in Elev to plot')
188 186 parser.add_argument('--save', default=0,
189 187 help='Save plot')
190 188 parser.add_argument('--range', default=0, type=float,
191 189 help='Max range to plot')
192 190 args = parser.parse_args()
193 191
194 192 main(args)
195 193
196 194 #python sophy_proc_rev006.py --parameters Z --grado 8 --save 1 --range 28
197 195 '''
198 196 def read_and_overview(filename):
199 197 """Read HDF5 using read_generic_hdf5 and print upper level dictionary keys
200 198 """
201 199 test = read_generic_hdf5(filename)
202 200 print("\nPrint keys for file %s" % os.path.basename(filename))
203 201 for key in test.keys():
204 202 print("\t%s" % key)
205 203 return test
206 204
207 205 file__ = "/home/soporte/Documents/EVENTO/HYO_PM@2022-06-09T15-05-12/paramC0_FD_PL_R15.0km/2022-06-09T18-00-00/SOPHY_20220609_180229_E2.0_Z.hdf5"
208 206
209 207
210 208 filename = get_wradlib_data_file(file__)
211 209
212 210 print("filename:\n",filename )
213 211
214 212 test= read_and_overview(filename)
215 213 # ANADIR INFORMACION
216 214 # informacion de los pulsos de TX
217 215 # informacion de los ruidos
218 216 # informacion de los SNR ¿?
219 217 # Aumentar la amplitud de la USRP
220 218 '''
General Comments 0
You need to be logged in to leave comments. Login now