##// END OF EJS Templates
update
avaldezp -
r1429:96f17ea26f9f
parent child
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,900 +1,960
1 import os
1 import os
2 import datetime
2 import datetime
3 import numpy
3 import numpy
4
4
5 from schainpy.model.graphics.jroplot_base import Plot, plt
5 from schainpy.model.graphics.jroplot_base import Plot, plt
6 from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot
6 from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot
7 from schainpy.utils import log
7 from schainpy.utils import log
8 # libreria wradlib
8 # libreria wradlib
9 import wradlib as wrl
9 import wradlib as wrl
10
10
11 EARTH_RADIUS = 6.3710e3
11 EARTH_RADIUS = 6.3710e3
12
12
13
13
14 def ll2xy(lat1, lon1, lat2, lon2):
14 def ll2xy(lat1, lon1, lat2, lon2):
15
15
16 p = 0.017453292519943295
16 p = 0.017453292519943295
17 a = 0.5 - numpy.cos((lat2 - lat1) * p)/2 + numpy.cos(lat1 * p) * \
17 a = 0.5 - numpy.cos((lat2 - lat1) * p)/2 + numpy.cos(lat1 * p) * \
18 numpy.cos(lat2 * p) * (1 - numpy.cos((lon2 - lon1) * p)) / 2
18 numpy.cos(lat2 * p) * (1 - numpy.cos((lon2 - lon1) * p)) / 2
19 r = 12742 * numpy.arcsin(numpy.sqrt(a))
19 r = 12742 * numpy.arcsin(numpy.sqrt(a))
20 theta = numpy.arctan2(numpy.sin((lon2-lon1)*p)*numpy.cos(lat2*p), numpy.cos(lat1*p)
20 theta = numpy.arctan2(numpy.sin((lon2-lon1)*p)*numpy.cos(lat2*p), numpy.cos(lat1*p)
21 * numpy.sin(lat2*p)-numpy.sin(lat1*p)*numpy.cos(lat2*p)*numpy.cos((lon2-lon1)*p))
21 * numpy.sin(lat2*p)-numpy.sin(lat1*p)*numpy.cos(lat2*p)*numpy.cos((lon2-lon1)*p))
22 theta = -theta + numpy.pi/2
22 theta = -theta + numpy.pi/2
23 return r*numpy.cos(theta), r*numpy.sin(theta)
23 return r*numpy.cos(theta), r*numpy.sin(theta)
24
24
25
25
26 def km2deg(km):
26 def km2deg(km):
27 '''
27 '''
28 Convert distance in km to degrees
28 Convert distance in km to degrees
29 '''
29 '''
30
30
31 return numpy.rad2deg(km/EARTH_RADIUS)
31 return numpy.rad2deg(km/EARTH_RADIUS)
32
32
33
33
34
34
35 class SpectralMomentsPlot(SpectraPlot):
35 class SpectralMomentsPlot(SpectraPlot):
36 '''
36 '''
37 Plot for Spectral Moments
37 Plot for Spectral Moments
38 '''
38 '''
39 CODE = 'spc_moments'
39 CODE = 'spc_moments'
40 # colormap = 'jet'
40 # colormap = 'jet'
41 # plot_type = 'pcolor'
41 # plot_type = 'pcolor'
42
42
43 class DobleGaussianPlot(SpectraPlot):
43 class DobleGaussianPlot(SpectraPlot):
44 '''
44 '''
45 Plot for Double Gaussian Plot
45 Plot for Double Gaussian Plot
46 '''
46 '''
47 CODE = 'gaussian_fit'
47 CODE = 'gaussian_fit'
48 # colormap = 'jet'
48 # colormap = 'jet'
49 # plot_type = 'pcolor'
49 # plot_type = 'pcolor'
50
50
51 class DoubleGaussianSpectraCutPlot(SpectraCutPlot):
51 class DoubleGaussianSpectraCutPlot(SpectraCutPlot):
52 '''
52 '''
53 Plot SpectraCut with Double Gaussian Fit
53 Plot SpectraCut with Double Gaussian Fit
54 '''
54 '''
55 CODE = 'cut_gaussian_fit'
55 CODE = 'cut_gaussian_fit'
56
56
57 class SnrPlot(RTIPlot):
57 class SnrPlot(RTIPlot):
58 '''
58 '''
59 Plot for SNR Data
59 Plot for SNR Data
60 '''
60 '''
61
61
62 CODE = 'snr'
62 CODE = 'snr'
63 colormap = 'jet'
63 colormap = 'jet'
64
64
65 def update(self, dataOut):
65 def update(self, dataOut):
66
66
67 data = {
67 data = {
68 'snr': 10*numpy.log10(dataOut.data_snr)
68 'snr': 10*numpy.log10(dataOut.data_snr)
69 }
69 }
70
70
71 return data, {}
71 return data, {}
72
72
73 class DopplerPlot(RTIPlot):
73 class DopplerPlot(RTIPlot):
74 '''
74 '''
75 Plot for DOPPLER Data (1st moment)
75 Plot for DOPPLER Data (1st moment)
76 '''
76 '''
77
77
78 CODE = 'dop'
78 CODE = 'dop'
79 colormap = 'jet'
79 colormap = 'jet'
80
80
81 def update(self, dataOut):
81 def update(self, dataOut):
82
82
83 data = {
83 data = {
84 'dop': 10*numpy.log10(dataOut.data_dop)
84 'dop': 10*numpy.log10(dataOut.data_dop)
85 }
85 }
86
86
87 return data, {}
87 return data, {}
88
88
89 class PowerPlot(RTIPlot):
89 class PowerPlot(RTIPlot):
90 '''
90 '''
91 Plot for Power Data (0 moment)
91 Plot for Power Data (0 moment)
92 '''
92 '''
93
93
94 CODE = 'pow'
94 CODE = 'pow'
95 colormap = 'jet'
95 colormap = 'jet'
96
96
97 def update(self, dataOut):
97 def update(self, dataOut):
98 data = {
98 data = {
99 'pow': 10*numpy.log10(dataOut.data_pow/dataOut.normFactor)
99 'pow': 10*numpy.log10(dataOut.data_pow/dataOut.normFactor)
100 }
100 }
101 return data, {}
101 return data, {}
102
102
103 class SpectralWidthPlot(RTIPlot):
103 class SpectralWidthPlot(RTIPlot):
104 '''
104 '''
105 Plot for Spectral Width Data (2nd moment)
105 Plot for Spectral Width Data (2nd moment)
106 '''
106 '''
107
107
108 CODE = 'width'
108 CODE = 'width'
109 colormap = 'jet'
109 colormap = 'jet'
110
110
111 def update(self, dataOut):
111 def update(self, dataOut):
112
112
113 data = {
113 data = {
114 'width': dataOut.data_width
114 'width': dataOut.data_width
115 }
115 }
116
116
117 return data, {}
117 return data, {}
118
118
119 class SkyMapPlot(Plot):
119 class SkyMapPlot(Plot):
120 '''
120 '''
121 Plot for meteors detection data
121 Plot for meteors detection data
122 '''
122 '''
123
123
124 CODE = 'param'
124 CODE = 'param'
125
125
126 def setup(self):
126 def setup(self):
127
127
128 self.ncols = 1
128 self.ncols = 1
129 self.nrows = 1
129 self.nrows = 1
130 self.width = 7.2
130 self.width = 7.2
131 self.height = 7.2
131 self.height = 7.2
132 self.nplots = 1
132 self.nplots = 1
133 self.xlabel = 'Zonal Zenith Angle (deg)'
133 self.xlabel = 'Zonal Zenith Angle (deg)'
134 self.ylabel = 'Meridional Zenith Angle (deg)'
134 self.ylabel = 'Meridional Zenith Angle (deg)'
135 self.polar = True
135 self.polar = True
136 self.ymin = -180
136 self.ymin = -180
137 self.ymax = 180
137 self.ymax = 180
138 self.colorbar = False
138 self.colorbar = False
139
139
140 def plot(self):
140 def plot(self):
141
141
142 arrayParameters = numpy.concatenate(self.data['param'])
142 arrayParameters = numpy.concatenate(self.data['param'])
143 error = arrayParameters[:, -1]
143 error = arrayParameters[:, -1]
144 indValid = numpy.where(error == 0)[0]
144 indValid = numpy.where(error == 0)[0]
145 finalMeteor = arrayParameters[indValid, :]
145 finalMeteor = arrayParameters[indValid, :]
146 finalAzimuth = finalMeteor[:, 3]
146 finalAzimuth = finalMeteor[:, 3]
147 finalZenith = finalMeteor[:, 4]
147 finalZenith = finalMeteor[:, 4]
148
148
149 x = finalAzimuth * numpy.pi / 180
149 x = finalAzimuth * numpy.pi / 180
150 y = finalZenith
150 y = finalZenith
151
151
152 ax = self.axes[0]
152 ax = self.axes[0]
153
153
154 if ax.firsttime:
154 if ax.firsttime:
155 ax.plot = ax.plot(x, y, 'bo', markersize=5)[0]
155 ax.plot = ax.plot(x, y, 'bo', markersize=5)[0]
156 else:
156 else:
157 ax.plot.set_data(x, y)
157 ax.plot.set_data(x, y)
158
158
159 dt1 = self.getDateTime(self.data.min_time).strftime('%y/%m/%d %H:%M:%S')
159 dt1 = self.getDateTime(self.data.min_time).strftime('%y/%m/%d %H:%M:%S')
160 dt2 = self.getDateTime(self.data.max_time).strftime('%y/%m/%d %H:%M:%S')
160 dt2 = self.getDateTime(self.data.max_time).strftime('%y/%m/%d %H:%M:%S')
161 title = 'Meteor Detection Sky Map\n %s - %s \n Number of events: %5.0f\n' % (dt1,
161 title = 'Meteor Detection Sky Map\n %s - %s \n Number of events: %5.0f\n' % (dt1,
162 dt2,
162 dt2,
163 len(x))
163 len(x))
164 self.titles[0] = title
164 self.titles[0] = title
165
165
166
166
167 class GenericRTIPlot(Plot):
167 class GenericRTIPlot(Plot):
168 '''
168 '''
169 Plot for data_xxxx object
169 Plot for data_xxxx object
170 '''
170 '''
171
171
172 CODE = 'param'
172 CODE = 'param'
173 colormap = 'viridis'
173 colormap = 'viridis'
174 plot_type = 'pcolorbuffer'
174 plot_type = 'pcolorbuffer'
175
175
176 def setup(self):
176 def setup(self):
177 self.xaxis = 'time'
177 self.xaxis = 'time'
178 self.ncols = 1
178 self.ncols = 1
179 self.nrows = self.data.shape('param')[0]
179 self.nrows = self.data.shape('param')[0]
180 self.nplots = self.nrows
180 self.nplots = self.nrows
181 self.plots_adjust.update({'hspace':0.8, 'left': 0.1, 'bottom': 0.08, 'right':0.95, 'top': 0.95})
181 self.plots_adjust.update({'hspace':0.8, 'left': 0.1, 'bottom': 0.08, 'right':0.95, 'top': 0.95})
182
182
183 if not self.xlabel:
183 if not self.xlabel:
184 self.xlabel = 'Time'
184 self.xlabel = 'Time'
185
185
186 self.ylabel = 'Range [km]'
186 self.ylabel = 'Range [km]'
187 if not self.titles:
187 if not self.titles:
188 self.titles = ['Param {}'.format(x) for x in range(self.nrows)]
188 self.titles = ['Param {}'.format(x) for x in range(self.nrows)]
189
189
190 def update(self, dataOut):
190 def update(self, dataOut):
191
191
192 data = {
192 data = {
193 'param' : numpy.concatenate([getattr(dataOut, attr) for attr in self.attr_data], axis=0)
193 'param' : numpy.concatenate([getattr(dataOut, attr) for attr in self.attr_data], axis=0)
194 }
194 }
195
195
196 meta = {}
196 meta = {}
197
197
198 return data, meta
198 return data, meta
199
199
200 def plot(self):
200 def plot(self):
201 # self.data.normalize_heights()
201 # self.data.normalize_heights()
202 self.x = self.data.times
202 self.x = self.data.times
203 self.y = self.data.yrange
203 self.y = self.data.yrange
204 self.z = self.data['param']
204 self.z = self.data['param']
205 self.z = 10*numpy.log10(self.z)
205 self.z = 10*numpy.log10(self.z)
206 self.z = numpy.ma.masked_invalid(self.z)
206 self.z = numpy.ma.masked_invalid(self.z)
207
207
208 if self.decimation is None:
208 if self.decimation is None:
209 x, y, z = self.fill_gaps(self.x, self.y, self.z)
209 x, y, z = self.fill_gaps(self.x, self.y, self.z)
210 else:
210 else:
211 x, y, z = self.fill_gaps(*self.decimate())
211 x, y, z = self.fill_gaps(*self.decimate())
212
212
213 for n, ax in enumerate(self.axes):
213 for n, ax in enumerate(self.axes):
214
214
215 self.zmax = self.zmax if self.zmax is not None else numpy.max(
215 self.zmax = self.zmax if self.zmax is not None else numpy.max(
216 self.z[n])
216 self.z[n])
217 self.zmin = self.zmin if self.zmin is not None else numpy.min(
217 self.zmin = self.zmin if self.zmin is not None else numpy.min(
218 self.z[n])
218 self.z[n])
219
219
220 if ax.firsttime:
220 if ax.firsttime:
221 if self.zlimits is not None:
221 if self.zlimits is not None:
222 self.zmin, self.zmax = self.zlimits[n]
222 self.zmin, self.zmax = self.zlimits[n]
223
223
224 ax.plt = ax.pcolormesh(x, y, z[n].T * self.factors[n],
224 ax.plt = ax.pcolormesh(x, y, z[n].T * self.factors[n],
225 vmin=self.zmin,
225 vmin=self.zmin,
226 vmax=self.zmax,
226 vmax=self.zmax,
227 cmap=self.cmaps[n]
227 cmap=self.cmaps[n]
228 )
228 )
229 else:
229 else:
230 if self.zlimits is not None:
230 if self.zlimits is not None:
231 self.zmin, self.zmax = self.zlimits[n]
231 self.zmin, self.zmax = self.zlimits[n]
232 ax.collections.remove(ax.collections[0])
232 ax.collections.remove(ax.collections[0])
233 ax.plt = ax.pcolormesh(x, y, z[n].T * self.factors[n],
233 ax.plt = ax.pcolormesh(x, y, z[n].T * self.factors[n],
234 vmin=self.zmin,
234 vmin=self.zmin,
235 vmax=self.zmax,
235 vmax=self.zmax,
236 cmap=self.cmaps[n]
236 cmap=self.cmaps[n]
237 )
237 )
238
238
239
239
240 class PolarMapPlot(Plot):
240 class PolarMapPlot(Plot):
241 '''
241 '''
242 Plot for weather radar
242 Plot for weather radar
243 '''
243 '''
244
244
245 CODE = 'param'
245 CODE = 'param'
246 colormap = 'seismic'
246 colormap = 'seismic'
247
247
248 def setup(self):
248 def setup(self):
249 self.ncols = 1
249 self.ncols = 1
250 self.nrows = 1
250 self.nrows = 1
251 self.width = 9
251 self.width = 9
252 self.height = 8
252 self.height = 8
253 self.mode = self.data.meta['mode']
253 self.mode = self.data.meta['mode']
254 if self.channels is not None:
254 if self.channels is not None:
255 self.nplots = len(self.channels)
255 self.nplots = len(self.channels)
256 self.nrows = len(self.channels)
256 self.nrows = len(self.channels)
257 else:
257 else:
258 self.nplots = self.data.shape(self.CODE)[0]
258 self.nplots = self.data.shape(self.CODE)[0]
259 self.nrows = self.nplots
259 self.nrows = self.nplots
260 self.channels = list(range(self.nplots))
260 self.channels = list(range(self.nplots))
261 if self.mode == 'E':
261 if self.mode == 'E':
262 self.xlabel = 'Longitude'
262 self.xlabel = 'Longitude'
263 self.ylabel = 'Latitude'
263 self.ylabel = 'Latitude'
264 else:
264 else:
265 self.xlabel = 'Range (km)'
265 self.xlabel = 'Range (km)'
266 self.ylabel = 'Height (km)'
266 self.ylabel = 'Height (km)'
267 self.bgcolor = 'white'
267 self.bgcolor = 'white'
268 self.cb_labels = self.data.meta['units']
268 self.cb_labels = self.data.meta['units']
269 self.lat = self.data.meta['latitude']
269 self.lat = self.data.meta['latitude']
270 self.lon = self.data.meta['longitude']
270 self.lon = self.data.meta['longitude']
271 self.xmin, self.xmax = float(
271 self.xmin, self.xmax = float(
272 km2deg(self.xmin) + self.lon), float(km2deg(self.xmax) + self.lon)
272 km2deg(self.xmin) + self.lon), float(km2deg(self.xmax) + self.lon)
273 self.ymin, self.ymax = float(
273 self.ymin, self.ymax = float(
274 km2deg(self.ymin) + self.lat), float(km2deg(self.ymax) + self.lat)
274 km2deg(self.ymin) + self.lat), float(km2deg(self.ymax) + self.lat)
275 # self.polar = True
275 # self.polar = True
276
276
277 def plot(self):
277 def plot(self):
278
278
279 for n, ax in enumerate(self.axes):
279 for n, ax in enumerate(self.axes):
280 data = self.data['param'][self.channels[n]]
280 data = self.data['param'][self.channels[n]]
281
281
282 zeniths = numpy.linspace(
282 zeniths = numpy.linspace(
283 0, self.data.meta['max_range'], data.shape[1])
283 0, self.data.meta['max_range'], data.shape[1])
284 if self.mode == 'E':
284 if self.mode == 'E':
285 azimuths = -numpy.radians(self.data.yrange)+numpy.pi/2
285 azimuths = -numpy.radians(self.data.yrange)+numpy.pi/2
286 r, theta = numpy.meshgrid(zeniths, azimuths)
286 r, theta = numpy.meshgrid(zeniths, azimuths)
287 x, y = r*numpy.cos(theta)*numpy.cos(numpy.radians(self.data.meta['elevation'])), r*numpy.sin(
287 x, y = r*numpy.cos(theta)*numpy.cos(numpy.radians(self.data.meta['elevation'])), r*numpy.sin(
288 theta)*numpy.cos(numpy.radians(self.data.meta['elevation']))
288 theta)*numpy.cos(numpy.radians(self.data.meta['elevation']))
289 x = km2deg(x) + self.lon
289 x = km2deg(x) + self.lon
290 y = km2deg(y) + self.lat
290 y = km2deg(y) + self.lat
291 else:
291 else:
292 azimuths = numpy.radians(self.data.yrange)
292 azimuths = numpy.radians(self.data.yrange)
293 r, theta = numpy.meshgrid(zeniths, azimuths)
293 r, theta = numpy.meshgrid(zeniths, azimuths)
294 x, y = r*numpy.cos(theta), r*numpy.sin(theta)
294 x, y = r*numpy.cos(theta), r*numpy.sin(theta)
295 self.y = zeniths
295 self.y = zeniths
296
296
297 if ax.firsttime:
297 if ax.firsttime:
298 if self.zlimits is not None:
298 if self.zlimits is not None:
299 self.zmin, self.zmax = self.zlimits[n]
299 self.zmin, self.zmax = self.zlimits[n]
300 ax.plt = ax.pcolormesh( # r, theta, numpy.ma.array(data, mask=numpy.isnan(data)),
300 ax.plt = ax.pcolormesh( # r, theta, numpy.ma.array(data, mask=numpy.isnan(data)),
301 x, y, numpy.ma.array(data, mask=numpy.isnan(data)),
301 x, y, numpy.ma.array(data, mask=numpy.isnan(data)),
302 vmin=self.zmin,
302 vmin=self.zmin,
303 vmax=self.zmax,
303 vmax=self.zmax,
304 cmap=self.cmaps[n])
304 cmap=self.cmaps[n])
305 else:
305 else:
306 if self.zlimits is not None:
306 if self.zlimits is not None:
307 self.zmin, self.zmax = self.zlimits[n]
307 self.zmin, self.zmax = self.zlimits[n]
308 ax.collections.remove(ax.collections[0])
308 ax.collections.remove(ax.collections[0])
309 ax.plt = ax.pcolormesh( # r, theta, numpy.ma.array(data, mask=numpy.isnan(data)),
309 ax.plt = ax.pcolormesh( # r, theta, numpy.ma.array(data, mask=numpy.isnan(data)),
310 x, y, numpy.ma.array(data, mask=numpy.isnan(data)),
310 x, y, numpy.ma.array(data, mask=numpy.isnan(data)),
311 vmin=self.zmin,
311 vmin=self.zmin,
312 vmax=self.zmax,
312 vmax=self.zmax,
313 cmap=self.cmaps[n])
313 cmap=self.cmaps[n])
314
314
315 if self.mode == 'A':
315 if self.mode == 'A':
316 continue
316 continue
317
317
318 # plot district names
318 # plot district names
319 f = open('/data/workspace/schain_scripts/distrito.csv')
319 f = open('/data/workspace/schain_scripts/distrito.csv')
320 for line in f:
320 for line in f:
321 label, lon, lat = [s.strip() for s in line.split(',') if s]
321 label, lon, lat = [s.strip() for s in line.split(',') if s]
322 lat = float(lat)
322 lat = float(lat)
323 lon = float(lon)
323 lon = float(lon)
324 # ax.plot(lon, lat, '.b', ms=2)
324 # ax.plot(lon, lat, '.b', ms=2)
325 ax.text(lon, lat, label.decode('utf8'), ha='center',
325 ax.text(lon, lat, label.decode('utf8'), ha='center',
326 va='bottom', size='8', color='black')
326 va='bottom', size='8', color='black')
327
327
328 # plot limites
328 # plot limites
329 limites = []
329 limites = []
330 tmp = []
330 tmp = []
331 for line in open('/data/workspace/schain_scripts/lima.csv'):
331 for line in open('/data/workspace/schain_scripts/lima.csv'):
332 if '#' in line:
332 if '#' in line:
333 if tmp:
333 if tmp:
334 limites.append(tmp)
334 limites.append(tmp)
335 tmp = []
335 tmp = []
336 continue
336 continue
337 values = line.strip().split(',')
337 values = line.strip().split(',')
338 tmp.append((float(values[0]), float(values[1])))
338 tmp.append((float(values[0]), float(values[1])))
339 for points in limites:
339 for points in limites:
340 ax.add_patch(
340 ax.add_patch(
341 Polygon(points, ec='k', fc='none', ls='--', lw=0.5))
341 Polygon(points, ec='k', fc='none', ls='--', lw=0.5))
342
342
343 # plot Cuencas
343 # plot Cuencas
344 for cuenca in ('rimac', 'lurin', 'mala', 'chillon', 'chilca', 'chancay-huaral'):
344 for cuenca in ('rimac', 'lurin', 'mala', 'chillon', 'chilca', 'chancay-huaral'):
345 f = open('/data/workspace/schain_scripts/{}.csv'.format(cuenca))
345 f = open('/data/workspace/schain_scripts/{}.csv'.format(cuenca))
346 values = [line.strip().split(',') for line in f]
346 values = [line.strip().split(',') for line in f]
347 points = [(float(s[0]), float(s[1])) for s in values]
347 points = [(float(s[0]), float(s[1])) for s in values]
348 ax.add_patch(Polygon(points, ec='b', fc='none'))
348 ax.add_patch(Polygon(points, ec='b', fc='none'))
349
349
350 # plot grid
350 # plot grid
351 for r in (15, 30, 45, 60):
351 for r in (15, 30, 45, 60):
352 ax.add_artist(plt.Circle((self.lon, self.lat),
352 ax.add_artist(plt.Circle((self.lon, self.lat),
353 km2deg(r), color='0.6', fill=False, lw=0.2))
353 km2deg(r), color='0.6', fill=False, lw=0.2))
354 ax.text(
354 ax.text(
355 self.lon + (km2deg(r))*numpy.cos(60*numpy.pi/180),
355 self.lon + (km2deg(r))*numpy.cos(60*numpy.pi/180),
356 self.lat + (km2deg(r))*numpy.sin(60*numpy.pi/180),
356 self.lat + (km2deg(r))*numpy.sin(60*numpy.pi/180),
357 '{}km'.format(r),
357 '{}km'.format(r),
358 ha='center', va='bottom', size='8', color='0.6', weight='heavy')
358 ha='center', va='bottom', size='8', color='0.6', weight='heavy')
359
359
360 if self.mode == 'E':
360 if self.mode == 'E':
361 title = 'El={}$^\circ$'.format(self.data.meta['elevation'])
361 title = 'El={}$^\circ$'.format(self.data.meta['elevation'])
362 label = 'E{:02d}'.format(int(self.data.meta['elevation']))
362 label = 'E{:02d}'.format(int(self.data.meta['elevation']))
363 else:
363 else:
364 title = 'Az={}$^\circ$'.format(self.data.meta['azimuth'])
364 title = 'Az={}$^\circ$'.format(self.data.meta['azimuth'])
365 label = 'A{:02d}'.format(int(self.data.meta['azimuth']))
365 label = 'A{:02d}'.format(int(self.data.meta['azimuth']))
366
366
367 self.save_labels = ['{}-{}'.format(lbl, label) for lbl in self.labels]
367 self.save_labels = ['{}-{}'.format(lbl, label) for lbl in self.labels]
368 self.titles = ['{} {}'.format(
368 self.titles = ['{} {}'.format(
369 self.data.parameters[x], title) for x in self.channels]
369 self.data.parameters[x], title) for x in self.channels]
370
370
371 class WeatherPlot(Plot):
371 class WeatherPlot(Plot):
372 CODE = 'weather'
372 CODE = 'weather'
373 plot_name = 'weather'
373 plot_name = 'weather'
374 plot_type = 'ppistyle'
374 plot_type = 'ppistyle'
375 buffering = False
375 buffering = False
376
376
377 def setup(self):
377 def setup(self):
378 self.ncols = 1
378 self.ncols = 1
379 self.nrows = 1
379 self.nrows = 1
380 self.nplots= 1
380 self.nplots= 1
381 self.ylabel= 'Range [Km]'
381 self.ylabel= 'Range [Km]'
382 self.titles= ['Weather']
382 self.titles= ['Weather']
383 self.colorbar=False
383 self.colorbar=False
384 self.width =8
384 self.width =8
385 self.height =8
385 self.height =8
386 self.ini =0
386 self.ini =0
387 self.len_azi =0
387 self.len_azi =0
388 self.buffer_ini = None
388 self.buffer_ini = None
389 self.buffer_azi = None
389 self.buffer_azi = None
390 self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08})
390 self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08})
391 self.flag =0
391 self.flag =0
392 self.indicador= 0
392 self.indicador= 0
393 self.last_data_azi = None
393 self.last_data_azi = None
394 self.val_mean = None
394 self.val_mean = None
395
395
396 def update(self, dataOut):
396 def update(self, dataOut):
397
397
398 data = {}
398 data = {}
399 meta = {}
399 meta = {}
400 if hasattr(dataOut, 'dataPP_POWER'):
400 if hasattr(dataOut, 'dataPP_POWER'):
401 factor = 1
401 factor = 1
402 if hasattr(dataOut, 'nFFTPoints'):
402 if hasattr(dataOut, 'nFFTPoints'):
403 factor = dataOut.normFactor
403 factor = dataOut.normFactor
404 print("DIME EL SHAPE PORFAVOR",dataOut.data_360.shape)
404 print("DIME EL SHAPE PORFAVOR",dataOut.data_360.shape)
405 data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor))
405 data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor))
406 data['azi'] = dataOut.data_azi
406 data['azi'] = dataOut.data_azi
407 data['ele'] = dataOut.data_ele
407 data['ele'] = dataOut.data_ele
408 return data, meta
408 return data, meta
409
409
410 def get2List(self,angulos):
410 def get2List(self,angulos):
411 list1=[]
411 list1=[]
412 list2=[]
412 list2=[]
413 for i in reversed(range(len(angulos))):
413 for i in reversed(range(len(angulos))):
414 diff_ = angulos[i]-angulos[i-1]
414 diff_ = angulos[i]-angulos[i-1]
415 if diff_ >1.5:
415 if diff_ >1.5:
416 list1.append(i-1)
416 list1.append(i-1)
417 list2.append(diff_)
417 list2.append(diff_)
418 return list(reversed(list1)),list(reversed(list2))
418 return list(reversed(list1)),list(reversed(list2))
419
419
420 def fixData360(self,list_,ang_):
420 def fixData360(self,list_,ang_):
421 if list_[0]==-1:
421 if list_[0]==-1:
422 vec = numpy.where(ang_<ang_[0])
422 vec = numpy.where(ang_<ang_[0])
423 ang_[vec] = ang_[vec]+360
423 ang_[vec] = ang_[vec]+360
424 return ang_
424 return ang_
425 return ang_
425 return ang_
426
426
427 def fixData360HL(self,angulos):
427 def fixData360HL(self,angulos):
428 vec = numpy.where(angulos>=360)
428 vec = numpy.where(angulos>=360)
429 angulos[vec]=angulos[vec]-360
429 angulos[vec]=angulos[vec]-360
430 return angulos
430 return angulos
431
431
432 def search_pos(self,pos,list_):
432 def search_pos(self,pos,list_):
433 for i in range(len(list_)):
433 for i in range(len(list_)):
434 if pos == list_[i]:
434 if pos == list_[i]:
435 return True,i
435 return True,i
436 i=None
436 i=None
437 return False,i
437 return False,i
438
438
439 def fixDataComp(self,ang_,list1_,list2_):
439 def fixDataComp(self,ang_,list1_,list2_):
440 size = len(ang_)
440 size = len(ang_)
441 size2 = 0
441 size2 = 0
442 for i in range(len(list2_)):
442 for i in range(len(list2_)):
443 size2=size2+round(list2_[i])-1
443 size2=size2+round(list2_[i])-1
444 new_size= size+size2
444 new_size= size+size2
445 ang_new = numpy.zeros(new_size)
445 ang_new = numpy.zeros(new_size)
446 ang_new2 = numpy.zeros(new_size)
446 ang_new2 = numpy.zeros(new_size)
447
447
448 tmp = 0
448 tmp = 0
449 c = 0
449 c = 0
450 for i in range(len(ang_)):
450 for i in range(len(ang_)):
451 ang_new[tmp +c] = ang_[i]
451 ang_new[tmp +c] = ang_[i]
452 ang_new2[tmp+c] = ang_[i]
452 ang_new2[tmp+c] = ang_[i]
453 condition , value = self.search_pos(i,list1_)
453 condition , value = self.search_pos(i,list1_)
454 if condition:
454 if condition:
455 pos = tmp + c + 1
455 pos = tmp + c + 1
456 for k in range(round(list2_[value])-1):
456 for k in range(round(list2_[value])-1):
457 ang_new[pos+k] = ang_new[pos+k-1]+1
457 ang_new[pos+k] = ang_new[pos+k-1]+1
458 ang_new2[pos+k] = numpy.nan
458 ang_new2[pos+k] = numpy.nan
459 tmp = pos +k
459 tmp = pos +k
460 c = 0
460 c = 0
461 c=c+1
461 c=c+1
462 return ang_new,ang_new2
462 return ang_new,ang_new2
463
463
464 def globalCheckPED(self,angulos):
464 def globalCheckPED(self,angulos):
465 l1,l2 = self.get2List(angulos)
465 l1,l2 = self.get2List(angulos)
466 if len(l1)>0:
466 if len(l1)>0:
467 angulos2 = self.fixData360(list_=l1,ang_=angulos)
467 angulos2 = self.fixData360(list_=l1,ang_=angulos)
468 l1,l2 = self.get2List(angulos2)
468 l1,l2 = self.get2List(angulos2)
469
469
470 ang1_,ang2_ = self.fixDataComp(ang_=angulos2,list1_=l1,list2_=l2)
470 ang1_,ang2_ = self.fixDataComp(ang_=angulos2,list1_=l1,list2_=l2)
471 ang1_ = self.fixData360HL(ang1_)
471 ang1_ = self.fixData360HL(ang1_)
472 ang2_ = self.fixData360HL(ang2_)
472 ang2_ = self.fixData360HL(ang2_)
473 else:
473 else:
474 ang1_= angulos
474 ang1_= angulos
475 ang2_= angulos
475 ang2_= angulos
476 return ang1_,ang2_
476 return ang1_,ang2_
477
477
478 def analizeDATA(self,data_azi):
478 def analizeDATA(self,data_azi):
479 list1 = []
479 list1 = []
480 list2 = []
480 list2 = []
481 dat = data_azi
481 dat = data_azi
482 for i in reversed(range(1,len(dat))):
482 for i in reversed(range(1,len(dat))):
483 if dat[i]>dat[i-1]:
483 if dat[i]>dat[i-1]:
484 diff = int(dat[i])-int(dat[i-1])
484 diff = int(dat[i])-int(dat[i-1])
485 else:
485 else:
486 diff = 360+int(dat[i])-int(dat[i-1])
486 diff = 360+int(dat[i])-int(dat[i-1])
487 if diff > 1:
487 if diff > 1:
488 list1.append(i-1)
488 list1.append(i-1)
489 list2.append(diff-1)
489 list2.append(diff-1)
490 return list1,list2
490 return list1,list2
491
491
492 def fixDATANEW(self,data_azi,data_weather):
492 def fixDATANEW(self,data_azi,data_weather):
493 list1,list2 = self.analizeDATA(data_azi)
493 list1,list2 = self.analizeDATA(data_azi)
494 if len(list1)== 0:
494 if len(list1)== 0:
495 return data_azi,data_weather
495 return data_azi,data_weather
496 else:
496 else:
497 resize = 0
497 resize = 0
498 for i in range(len(list2)):
498 for i in range(len(list2)):
499 resize= resize + list2[i]
499 resize= resize + list2[i]
500 new_data_azi = numpy.resize(data_azi,resize)
500 new_data_azi = numpy.resize(data_azi,resize)
501 new_data_weather= numpy.resize(date_weather,resize)
501 new_data_weather= numpy.resize(date_weather,resize)
502
502
503 for i in range(len(list2)):
503 for i in range(len(list2)):
504 j=0
504 j=0
505 position=list1[i]+1
505 position=list1[i]+1
506 for j in range(list2[i]):
506 for j in range(list2[i]):
507 new_data_azi[position+j]=new_data_azi[position+j-1]+1
507 new_data_azi[position+j]=new_data_azi[position+j-1]+1
508 return new_data_azi
508 return new_data_azi
509
509
510 def fixDATA(self,data_azi):
510 def fixDATA(self,data_azi):
511 data=data_azi
511 data=data_azi
512 for i in range(len(data)):
512 for i in range(len(data)):
513 if numpy.isnan(data[i]):
513 if numpy.isnan(data[i]):
514 data[i]=data[i-1]+1
514 data[i]=data[i-1]+1
515 return data
515 return data
516
516
517 def replaceNAN(self,data_weather,data_azi,val):
517 def replaceNAN(self,data_weather,data_azi,val):
518 data= data_azi
518 data= data_azi
519 data_T= data_weather
519 data_T= data_weather
520 if data.shape[0]> data_T.shape[0]:
520 if data.shape[0]> data_T.shape[0]:
521 data_N = numpy.ones( [data.shape[0],data_T.shape[1]])
521 data_N = numpy.ones( [data.shape[0],data_T.shape[1]])
522 c = 0
522 c = 0
523 for i in range(len(data)):
523 for i in range(len(data)):
524 if numpy.isnan(data[i]):
524 if numpy.isnan(data[i]):
525 data_N[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
525 data_N[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
526 else:
526 else:
527 data_N[i,:]=data_T[c,:]
527 data_N[i,:]=data_T[c,:]
528 sc=c+1
528 sc=c+1
529 else:
529 else:
530 for i in range(len(data)):
530 for i in range(len(data)):
531 if numpy.isnan(data[i]):
531 if numpy.isnan(data[i]):
532 data_T[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
532 data_T[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
533 return data_T
533 return data_T
534
534
535 def const_ploteo(self,data_weather,data_azi,step,res):
535 def const_ploteo(self,data_weather,data_azi,step,res):
536 if self.ini==0:
536 if self.ini==0:
537 #-------
537 #-------
538 n = (360/res)-len(data_azi)
538 n = (360/res)-len(data_azi)
539 #--------------------- new -------------------------
539 #--------------------- new -------------------------
540 data_azi_new ,data_azi_old= self.globalCheckPED(data_azi)
540 data_azi_new ,data_azi_old= self.globalCheckPED(data_azi)
541 #------------------------
541 #------------------------
542 start = data_azi_new[-1] + res
542 start = data_azi_new[-1] + res
543 end = data_azi_new[0] - res
543 end = data_azi_new[0] - res
544 #------ new
544 #------ new
545 self.last_data_azi = end
545 self.last_data_azi = end
546 if start>end:
546 if start>end:
547 end = end + 360
547 end = end + 360
548 azi_vacia = numpy.linspace(start,end,int(n))
548 azi_vacia = numpy.linspace(start,end,int(n))
549 azi_vacia = numpy.where(azi_vacia>360,azi_vacia-360,azi_vacia)
549 azi_vacia = numpy.where(azi_vacia>360,azi_vacia-360,azi_vacia)
550 data_azi = numpy.hstack((data_azi_new,azi_vacia))
550 data_azi = numpy.hstack((data_azi_new,azi_vacia))
551 # RADAR
551 # RADAR
552 val_mean = numpy.mean(data_weather[:,-1])
552 val_mean = numpy.mean(data_weather[:,-1])
553 self.val_mean = val_mean
553 self.val_mean = val_mean
554 data_weather_cmp = numpy.ones([(360-data_weather.shape[0]),data_weather.shape[1]])*val_mean
554 data_weather_cmp = numpy.ones([(360-data_weather.shape[0]),data_weather.shape[1]])*val_mean
555 data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean)
555 data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean)
556 data_weather = numpy.vstack((data_weather,data_weather_cmp))
556 data_weather = numpy.vstack((data_weather,data_weather_cmp))
557 else:
557 else:
558 # azimuth
558 # azimuth
559 flag=0
559 flag=0
560 start_azi = self.res_azi[0]
560 start_azi = self.res_azi[0]
561 #-----------new------------
561 #-----------new------------
562 data_azi ,data_azi_old= self.globalCheckPED(data_azi)
562 data_azi ,data_azi_old= self.globalCheckPED(data_azi)
563 data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean)
563 data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean)
564 #--------------------------
564 #--------------------------
565 start = data_azi[0]
565 start = data_azi[0]
566 end = data_azi[-1]
566 end = data_azi[-1]
567 self.last_data_azi= end
567 self.last_data_azi= end
568 if start< start_azi:
568 if start< start_azi:
569 start = start +360
569 start = start +360
570 if end <start_azi:
570 if end <start_azi:
571 end = end +360
571 end = end +360
572
572
573 pos_ini = int((start-start_azi)/res)
573 pos_ini = int((start-start_azi)/res)
574 len_azi = len(data_azi)
574 len_azi = len(data_azi)
575 if (360-pos_ini)<len_azi:
575 if (360-pos_ini)<len_azi:
576 if pos_ini+1==360:
576 if pos_ini+1==360:
577 pos_ini=0
577 pos_ini=0
578 else:
578 else:
579 flag=1
579 flag=1
580 dif= 360-pos_ini
580 dif= 360-pos_ini
581 comp= len_azi-dif
581 comp= len_azi-dif
582 #-----------------
582 #-----------------
583 if flag==0:
583 if flag==0:
584 # AZIMUTH
584 # AZIMUTH
585 self.res_azi[pos_ini:pos_ini+len_azi] = data_azi
585 self.res_azi[pos_ini:pos_ini+len_azi] = data_azi
586 # RADAR
586 # RADAR
587 self.res_weather[pos_ini:pos_ini+len_azi,:] = data_weather
587 self.res_weather[pos_ini:pos_ini+len_azi,:] = data_weather
588 else:
588 else:
589 # AZIMUTH
589 # AZIMUTH
590 self.res_azi[pos_ini:pos_ini+dif] = data_azi[0:dif]
590 self.res_azi[pos_ini:pos_ini+dif] = data_azi[0:dif]
591 self.res_azi[0:comp] = data_azi[dif:]
591 self.res_azi[0:comp] = data_azi[dif:]
592 # RADAR
592 # RADAR
593 self.res_weather[pos_ini:pos_ini+dif,:] = data_weather[0:dif,:]
593 self.res_weather[pos_ini:pos_ini+dif,:] = data_weather[0:dif,:]
594 self.res_weather[0:comp,:] = data_weather[dif:,:]
594 self.res_weather[0:comp,:] = data_weather[dif:,:]
595 flag=0
595 flag=0
596 data_azi = self.res_azi
596 data_azi = self.res_azi
597 data_weather = self.res_weather
597 data_weather = self.res_weather
598
598
599 return data_weather,data_azi
599 return data_weather,data_azi
600
600
601 def plot(self):
601 def plot(self):
602 thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S')
602 thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S')
603 data = self.data[-1]
603 data = self.data[-1]
604 r = self.data.yrange
604 r = self.data.yrange
605 delta_height = r[1]-r[0]
605 delta_height = r[1]-r[0]
606 r_mask = numpy.where(r>=0)[0]
606 r_mask = numpy.where(r>=0)[0]
607 r = numpy.arange(len(r_mask))*delta_height
607 r = numpy.arange(len(r_mask))*delta_height
608 self.y = 2*r
608 self.y = 2*r
609 # RADAR
609 # RADAR
610 #data_weather = data['weather']
610 #data_weather = data['weather']
611 # PEDESTAL
611 # PEDESTAL
612 #data_azi = data['azi']
612 #data_azi = data['azi']
613 res = 1
613 res = 1
614 # STEP
614 # STEP
615 step = (360/(res*data['weather'].shape[0]))
615 step = (360/(res*data['weather'].shape[0]))
616
616
617 self.res_weather, self.res_azi = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_azi=data['azi'],step=step,res=res)
617 self.res_weather, self.res_azi = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_azi=data['azi'],step=step,res=res)
618 self.res_ele = numpy.mean(data['ele'])
618 self.res_ele = numpy.mean(data['ele'])
619 ################# PLOTEO ###################
619 ################# PLOTEO ###################
620 print("self.axes",self.axes)
620 print("self.axes",self.axes)
621 for i,ax in enumerate(self.axes):
621 for i,ax in enumerate(self.axes):
622 print("INDICE: ",i)
622 print("INDICE: ",i)
623 if ax.firsttime:
623 if ax.firsttime:
624 plt.clf()
624 plt.clf()
625 cgax, pm = wrl.vis.plot_ppi(self.res_weather,r=r,az=self.res_azi,fig=self.figures[0], proj='cg', vmin=20, vmax=80)
625 cgax, pm = wrl.vis.plot_ppi(self.res_weather,r=r,az=self.res_azi,fig=self.figures[0], proj='cg', vmin=20, vmax=80)
626 else:
626 else:
627 plt.clf()
627 plt.clf()
628 cgax, pm = wrl.vis.plot_ppi(self.res_weather,r=r,az=self.res_azi,fig=self.figures[0], proj='cg', vmin=20, vmax=80)
628 cgax, pm = wrl.vis.plot_ppi(self.res_weather,r=r,az=self.res_azi,fig=self.figures[0], proj='cg', vmin=20, vmax=80)
629 caax = cgax.parasites[0]
629 caax = cgax.parasites[0]
630 paax = cgax.parasites[1]
630 paax = cgax.parasites[1]
631 cbar = plt.gcf().colorbar(pm, pad=0.075)
631 cbar = plt.gcf().colorbar(pm, pad=0.075)
632 caax.set_xlabel('x_range [km]')
632 caax.set_xlabel('x_range [km]')
633 caax.set_ylabel('y_range [km]')
633 caax.set_ylabel('y_range [km]')
634 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')
634 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')
635
635
636 self.ini= self.ini+1
636 self.ini= self.ini+1
637
637
638
638
639 class WeatherRHIPlot(Plot):
639 class WeatherRHIPlot(Plot):
640 CODE = 'weather'
640 CODE = 'weather'
641 plot_name = 'weather'
641 plot_name = 'weather'
642 plot_type = 'rhistyle'
642 plot_type = 'rhistyle'
643 buffering = False
643 buffering = False
644
644
645 def setup(self):
645 def setup(self):
646 self.ncols = 1
646 self.ncols = 1
647 self.nrows = 1
647 self.nrows = 1
648 self.nplots= 1
648 self.nplots= 1
649 self.ylabel= 'Range [Km]'
649 self.ylabel= 'Range [Km]'
650 self.titles= ['Weather']
650 self.titles= ['Weather']
651 self.colorbar=False
651 self.colorbar=False
652 self.width =8
652 self.width =8
653 self.height =8
653 self.height =8
654 self.ini =0
654 self.ini =0
655 self.len_azi =0
655 self.len_azi =0
656 self.buffer_ini = None
656 self.buffer_ini = None
657 self.buffer_ele = None
657 self.buffer_ele = None
658 self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08})
658 self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08})
659 self.flag =0
659 self.flag =0
660 self.indicador= 0
660 self.indicador= 0
661 self.last_data_ele = None
661 self.last_data_ele = None
662 self.val_mean = None
662 self.val_mean = None
663
663
664 def update(self, dataOut):
664 def update(self, dataOut):
665
665
666 data = {}
666 data = {}
667 meta = {}
667 meta = {}
668 if hasattr(dataOut, 'dataPP_POWER'):
668 if hasattr(dataOut, 'dataPP_POWER'):
669 factor = 1
669 factor = 1
670 if hasattr(dataOut, 'nFFTPoints'):
670 if hasattr(dataOut, 'nFFTPoints'):
671 factor = dataOut.normFactor
671 factor = dataOut.normFactor
672 data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor))
672 data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor))
673 data['azi'] = dataOut.data_azi
673 data['azi'] = dataOut.data_azi
674 data['ele'] = dataOut.data_ele
674 data['ele'] = dataOut.data_ele
675 return data, meta
675 return data, meta
676
676
677 def get2List(self,angulos):
677 def get2List(self,angulos):
678 list1=[]
678 list1=[]
679 list2=[]
679 list2=[]
680 for i in reversed(range(len(angulos))):
680 for i in reversed(range(len(angulos))):
681 diff_ = angulos[i]-angulos[i-1]
681 if not i==0:#el caso de i=0 evalula el primero de la lista con el ultimo y no es relevante
682 if diff_ >1.5:
682 diff_ = angulos[i]-angulos[i-1]
683 list1.append(i-1)
683 if abs(diff_) >1.5:
684 list2.append(diff_)
684 list1.append(i-1)
685 list2.append(diff_)
685 return list(reversed(list1)),list(reversed(list2))
686 return list(reversed(list1)),list(reversed(list2))
686
687
687 def fixData180(self,list_,ang_):
688 def fixData90(self,list_,ang_):
688 if list_[0]==-1:
689 if list_[0]==-1:
689 vec = numpy.where(ang_<ang_[0])
690 vec = numpy.where(ang_<ang_[0])
690 ang_[vec] = ang_[vec]+180
691 ang_[vec] = ang_[vec]+90
691 return ang_
692 return ang_
692 return ang_
693 return ang_
693
694
694 def fixData180HL(self,angulos):
695 def fixData90HL(self,angulos):
695 vec = numpy.where(angulos>=180)
696 vec = numpy.where(angulos>=90)
696 angulos[vec]=angulos[vec]-180
697 angulos[vec]=angulos[vec]-90
697 return angulos
698 return angulos
698
699
699
700
700 def search_pos(self,pos,list_):
701 def search_pos(self,pos,list_):
701 for i in range(len(list_)):
702 for i in range(len(list_)):
702 if pos == list_[i]:
703 if pos == list_[i]:
703 return True,i
704 return True,i
704 i=None
705 i=None
705 return False,i
706 return False,i
706
707
707 def fixDataComp(self,ang_,list1_,list2_):
708 def fixDataComp(self,ang_,list1_,list2_,tipo_case):
708 size = len(ang_)
709 size = len(ang_)
709 size2 = 0
710 size2 = 0
710 for i in range(len(list2_)):
711 for i in range(len(list2_)):
711 size2=size2+round(list2_[i])-1
712 size2=size2+round(abs(list2_[i]))-1
712 new_size= size+size2
713 new_size= size+size2
713 ang_new = numpy.zeros(new_size)
714 ang_new = numpy.zeros(new_size)
714 ang_new2 = numpy.zeros(new_size)
715 ang_new2 = numpy.zeros(new_size)
715
716
716 tmp = 0
717 tmp = 0
717 c = 0
718 c = 0
718 for i in range(len(ang_)):
719 for i in range(len(ang_)):
719 ang_new[tmp +c] = ang_[i]
720 ang_new[tmp +c] = ang_[i]
720 ang_new2[tmp+c] = ang_[i]
721 ang_new2[tmp+c] = ang_[i]
721 condition , value = self.search_pos(i,list1_)
722 condition , value = self.search_pos(i,list1_)
722 if condition:
723 if condition:
723 pos = tmp + c + 1
724 pos = tmp + c + 1
724 for k in range(round(list2_[value])-1):
725 for k in range(round(abs(list2_[value]))-1):
725 ang_new[pos+k] = ang_new[pos+k-1]+1
726 if tipo_case==0 or tipo_case==3:#subida
726 ang_new2[pos+k] = numpy.nan
727 ang_new[pos+k] = ang_new[pos+k-1]+1
728 ang_new2[pos+k] = numpy.nan
729 elif tipo_case==1 or tipo_case==2:#bajada
730 ang_new[pos+k] = ang_new[pos+k-1]-1
731 ang_new2[pos+k] = numpy.nan
732
727 tmp = pos +k
733 tmp = pos +k
728 c = 0
734 c = 0
729 c=c+1
735 c=c+1
730 return ang_new,ang_new2
736 return ang_new,ang_new2
731
737
732 def globalCheckPED(self,angulos):
738 def globalCheckPED(self,angulos,tipo_case):
733 l1,l2 = self.get2List(angulos)
739 l1,l2 = self.get2List(angulos)
740 print("l1",l1)
741 print("l2",l2)
734 if len(l1)>0:
742 if len(l1)>0:
735 angulos2 = self.fixData180(list_=l1,ang_=angulos)
743 #angulos2 = self.fixData90(list_=l1,ang_=angulos)
736 l1,l2 = self.get2List(angulos2)
744 #l1,l2 = self.get2List(angulos2)
737
745 ang1_,ang2_ = self.fixDataComp(ang_=angulos,list1_=l1,list2_=l2,tipo_case=tipo_case)
738 ang1_,ang2_ = self.fixDataComp(ang_=angulos2,list1_=l1,list2_=l2)
746 #ang1_ = self.fixData90HL(ang1_)
739 ang1_ = self.fixData180HL(ang1_)
747 #ang2_ = self.fixData90HL(ang2_)
740 ang2_ = self.fixData180HL(ang2_)
741 else:
748 else:
742 ang1_= angulos
749 ang1_= angulos
743 ang2_= angulos
750 ang2_= angulos
744 return ang1_,ang2_
751 return ang1_,ang2_
745
752
746
753
747 def replaceNAN(self,data_weather,data_ele,val):
754 def replaceNAN(self,data_weather,data_ele,val):
748 data= data_ele
755 data= data_ele
749 data_T= data_weather
756 data_T= data_weather
750 if data.shape[0]> data_T.shape[0]:
757 if data.shape[0]> data_T.shape[0]:
751 data_N = numpy.ones( [data.shape[0],data_T.shape[1]])
758 data_N = numpy.ones( [data.shape[0],data_T.shape[1]])
752 c = 0
759 c = 0
753 for i in range(len(data)):
760 for i in range(len(data)):
754 if numpy.isnan(data[i]):
761 if numpy.isnan(data[i]):
755 data_N[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
762 data_N[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
756 else:
763 else:
757 data_N[i,:]=data_T[c,:]
764 data_N[i,:]=data_T[c,:]
758 sc=c+1
765 sc=c+1
759 else:
766 else:
760 for i in range(len(data)):
767 for i in range(len(data)):
761 if numpy.isnan(data[i]):
768 if numpy.isnan(data[i]):
762 data_T[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
769 data_T[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
763 return data_T
770 return data_T
764
771
765 def const_ploteo(self,data_weather,data_ele,step,res):
772 def check_case(self,data_ele,ang_max,ang_min):
773 start = data_ele[0]
774 end = data_ele[-1]
775 number = (end-start)
776 len_ang=len(data_ele)
777
778 if start<end and round(abs(number)+1)>=len_ang:#caso subida
779 return 0
780 elif start>end and round(abs(number)+1)>=len_ang:#caso bajada
781 return 1
782 elif round(abs(number)+1)<len_ang and data_ele[-2]>data_ele[-1]:# caso BAJADA CAMBIO ANG MAX
783 return 2
784 elif round(abs(number)+1)<len_ang and data_ele[-2]<data_ele[-1]:# caso SUBIDA CAMBIO ANG MIN
785 return 3
786
787
788 def const_ploteo(self,data_weather,data_ele,step,res,ang_max,ang_min):
789 ang_max= ang_max
790 ang_min= ang_min
766 if self.ini==0:
791 if self.ini==0:
767 #-------
792 print("**********************************************")
768 n = (180/res)-len(data_ele)
793 print("**********************************************")
794 print("***************ini**************")
795 print("**********************************************")
796 print("**********************************************")
797 print("data_ele",data_ele)
798 #----------------------------------------------------------
799 tipo_case = self.check_case(data_ele,ang_max,ang_min)
800 print("TIPO DE DATA",tipo_case)
769 #--------------------- new -------------------------
801 #--------------------- new -------------------------
770 data_ele_new ,data_ele_old= self.globalCheckPED(data_ele)
802 data_ele_new ,data_ele_old= self.globalCheckPED(data_ele,tipo_case)
771 #------------------------
803 print("data_ele_new",data_ele_new)
772 start = data_ele_new[-1] + res
804 print("data_ele_old",data_ele_old)
773 end = data_ele_new[0] - res
805 #-------------------------CAMBIOS RHI---------------------------------
806 start= ang_min
807 end = ang_min
808 n= (ang_max-ang_min)/res
774 #------ new
809 #------ new
775 self.last_data_ele = end
810 self.start_data_ele = data_ele_new[0]
776 if start>end:
811 self.end_data_ele = data_ele_new[-1]
777 end = end + 180
812 if tipo_case==0 or tipo_case==3:
813 n1= round(self.start_data_ele)- start
814 n2= end - round(self.end_data_ele)
815 if n1>0:
816 ele1= numpy.linspace(ang_min+1,self.start_data_ele-1,n1)
817 ele1_nan= numpy.ones(n1)*numpy.nan
818 data_ele = numpy.hstack((ele1,data_ele_new))
819 data_ele_old = numpy.hstack((ele1_nan,data_ele_old))
820 if n2>0:
821 ele2= numpy.linspace(self.end_data_ele+1,end,n2)
822 ele2_nan= numpy.ones(n2)*numpy.nan
823 data_ele = numpy.hstack((data_ele,ele2))
824 data_ele_old = numpy.hstack((data_ele_old,ele2_nan))
825 # RADAR
826 val_mean = numpy.mean(data_weather[:,-1])
827 self.val_mean = val_mean
828 data_weather = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
829 '''
778 ele_vacia = numpy.linspace(start,end,int(n))
830 ele_vacia = numpy.linspace(start,end,int(n))
779 ele_vacia = numpy.where(ele_vacia>180,ele_vacia-180,ele_vacia)
831
832
833 ele_vacia = numpy.where(ele_vacia>ang_max,ele_vacia-ang_max,ele_vacia)
780 data_ele = numpy.hstack((data_ele_new,ele_vacia))
834 data_ele = numpy.hstack((data_ele_new,ele_vacia))
781 # RADAR
835 # RADAR
782 val_mean = numpy.mean(data_weather[:,-1])
836 val_mean = numpy.mean(data_weather[:,-1])
783 self.val_mean = val_mean
837 self.val_mean = val_mean
784 data_weather_cmp = numpy.ones([(180-data_weather.shape[0]),data_weather.shape[1]])*val_mean
838 data_weather_cmp = numpy.ones([(ang_max-data_weather.shape[0]),data_weather.shape[1]])*val_mean
785 data_weather = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
839 data_weather = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
786 data_weather = numpy.vstack((data_weather,data_weather_cmp))
840 data_weather = numpy.vstack((data_weather,data_weather_cmp))
841 '''
787 else:
842 else:
788 # azimuth
843 print("**********************************************")
844 print("**********************************************")
845 print("****************VARIABLE**********************")
846 print("**********************************************")
847 print("**********************************************")
848 #-------------------------CAMBIOS RHI---------------------------------
849 #---------------------------------------------------------------------
850 print("INPUT data_ele",data_ele)
789 flag=0
851 flag=0
790 start_ele = self.res_ele[0]
852 start_ele = self.res_ele[0]
853 tipo_case = self.check_case(data_ele,ang_max,ang_min)
854 print("TIPO DE DATA",tipo_case)
791 #-----------new------------
855 #-----------new------------
792 data_ele ,data_ele_old= self.globalCheckPED(data_ele)
856 data_ele ,data_ele_old= self.globalCheckPED(data_ele,tipo_case)
857 print("data_ele_new",data_ele)
858 print("data_ele_old",data_ele_old)
793 data_weather = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
859 data_weather = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
860 '''
794 #--------------------------
861 #--------------------------
795 start = data_ele[0]
862 start = data_ele[0]
796 end = data_ele[-1]
863 end = data_ele[-1]
797 self.last_data_ele= end
864 self.last_data_ele= end
798 if start< start_ele:
865 if start< start_ele:
799 start = start +180
866 start = start +ang_max
800 if end <start_ele:
867 if end <start_ele:
801 end = end +180
868 end = end +ang_max
802
869
803 pos_ini = int((start-start_ele)/res)
870 pos_ini = int((start-start_ele)/res)
804 len_ele = len(data_ele)
871 len_ele = len(data_ele)
805 if (180-pos_ini)<len_ele:
872 if (ang_max-pos_ini)<len_ele:
806 if pos_ini+1==180:
873 if pos_ini+1==ang_max:
807 pos_ini=0
874 pos_ini=0
808 else:
875 else:
809 flag=1
876 flag=1
810 dif= 180-pos_ini
877 dif= ang_max-pos_ini
811 comp= len_ele-dif
878 comp= len_ele-dif
812 #-----------------
879 #-----------------
813 if flag==0:
880 if flag==0:
814 # elevacion
881 # elevacion
815 self.res_ele[pos_ini:pos_ini+len_ele] = data_ele
882 self.res_ele[pos_ini:pos_ini+len_ele] = data_ele
816 # RADAR
883 # RADAR
817 self.res_weather[pos_ini:pos_ini+len_ele,:] = data_weather
884 self.res_weather[pos_ini:pos_ini+len_ele,:] = data_weather
818 else:
885 else:
819 # elevacion
886 # elevacion
820 self.res_ele[pos_ini:pos_ini+dif] = data_ele[0:dif]
887 self.res_ele[pos_ini:pos_ini+dif] = data_ele[0:dif]
821 self.res_ele[0:comp] = data_ele[dif:]
888 self.res_ele[0:comp] = data_ele[dif:]
822 # RADAR
889 # RADAR
823 self.res_weather[pos_ini:pos_ini+dif,:] = data_weather[0:dif,:]
890 self.res_weather[pos_ini:pos_ini+dif,:] = data_weather[0:dif,:]
824 self.res_weather[0:comp,:] = data_weather[dif:,:]
891 self.res_weather[0:comp,:] = data_weather[dif:,:]
825 flag=0
892 flag=0
826 data_ele = self.res_ele
893 data_ele = self.res_ele
827 data_weather = self.res_weather
894 data_weather = self.res_weather
895 '''
896 print("OUPUT data_ele",data_ele)
828
897
829 return data_weather,data_ele
898 return data_weather,data_ele
830
899
831
900
832 def plot(self):
901 def plot(self):
833 thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S')
902 thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S')
834 data = self.data[-1]
903 data = self.data[-1]
835 r = self.data.yrange
904 r = self.data.yrange
836 delta_height = r[1]-r[0]
905 delta_height = r[1]-r[0]
837 r_mask = numpy.where(r>=0)[0]
906 r_mask = numpy.where(r>=0)[0]
838 r = numpy.arange(len(r_mask))*delta_height
907 r = numpy.arange(len(r_mask))*delta_height
839 self.y = 2*r
908 self.y = 2*r
909 res = 1
910 print("data['weather'].shape[0]",data['weather'].shape[0])
911 ang_max = 80
912 ang_min = 0
913 var_ang =ang_max - ang_min
914 step = (int(var_ang)/(res*data['weather'].shape[0]))
915 print("step",step)
840 '''
916 '''
841 #-------------------------------------------------------------
917 #-------------------------------------------------------------
842 # RADAR
918 # RADAR
843 #data_weather = data['weather']
919 #data_weather = data['weather']
844 # PEDESTAL
920 # PEDESTAL
845 #data_azi = data['azi']
921 #data_azi = data['azi']
846 res = 1
922 res = 1
847 # STEP
923 # STEP
848 step = (180/(res*data['weather'].shape[0]))
924 step = (180/(res*data['weather'].shape[0]))
849
850
851 self.res_weather, self.res_ele = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_ele=data['ele'],step=step,res=res)
925 self.res_weather, self.res_ele = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_ele=data['ele'],step=step,res=res)
852 self.res_azi = numpy.mean(data['azi'])
926 self.res_azi = numpy.mean(data['azi'])
853 print("self.res_ele------------------------------:",self.res_ele)
927 print("self.res_ele------------------------------:",self.res_ele)
854 ################# PLOTEO ###################
855
856 for i,ax in enumerate(self.axes):
857 if ax.firsttime:
858 plt.clf()
859 cgax, pm = wrl.vis.plot_rhi(self.res_weather,r=r,th=self.res_ele,fig=self.figures[0], proj='cg', vmin=8, vmax=35)
860 else:
861 plt.clf()
862 cgax, pm = wrl.vis.plot_rhi(self.res_weather,r=r,th=self.res_ele,fig=self.figures[0], proj='cg', vmin=8, vmax=35)
863 caax = cgax.parasites[0]
864 paax = cgax.parasites[1]
865 cbar = plt.gcf().colorbar(pm, pad=0.075)
866 caax.set_xlabel('x_range [km]')
867 caax.set_ylabel('y_range [km]')
868 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')
869
870 self.ini= self.ini+1
871
872
873 '''
928 '''
874 #--------------------------------------------------------
929 #--------------------------------------------------------
930 print('weather',data['weather'].shape)
931 print('ele',data['ele'].shape)
875
932
876 ###self.res_weather, self.res_ele = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_azi=data['ele'],step=step,res=res)
933 self.res_weather, self.res_ele = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_ele=data['ele'],step=step,res=res,ang_max=ang_max,ang_min=ang_min)
877 ###self.res_azi = numpy.mean(data['azi'])
934 self.res_azi = numpy.mean(data['azi'])
935 print("self.res_ele",self.res_ele)
878 #-------------
936 #-------------
879 # 90 angulos en el axis 0
937 # 90 angulos en el axis 0
880 # 1000 step en el axis 1
938 # 1000 step en el axis 1
881 self.res_weather = numpy.ones([120,1000])
939 ###self.res_weather = numpy.ones([120,1000])
882 r = numpy.linspace(0,1999,1000)
940 ###r = numpy.linspace(0,1999,1000)
883 self.res_ele = numpy.arange(0,120)
941 ###self.res_ele = numpy.arange(0,120)
884 self.res_azi = 240
942 ###self.res_azi = 240
885 #-------------
943 #-------------
944 '''
886 for i,ax in enumerate(self.axes):
945 for i,ax in enumerate(self.axes):
887 if ax.firsttime:
946 if ax.firsttime:
888 plt.clf()
947 plt.clf()
889 cgax, pm = wrl.vis.plot_rhi(self.res_weather,r=r,th=self.res_ele,fig=self.figures[0], proj='cg')
948 cgax, pm = wrl.vis.plot_rhi(self.res_weather,r=r,th=self.res_ele,fig=self.figures[0], proj='cg')
890 else:
949 else:
891 plt.clf()
950 plt.clf()
892 cgax, pm = wrl.vis.plot_rhi(self.res_weather,r=r,th=self.res_ele,fig=self.figures[0], proj='cg')
951 cgax, pm = wrl.vis.plot_rhi(self.res_weather,r=r,th=self.res_ele,fig=self.figures[0], proj='cg')
893 caax = cgax.parasites[0]
952 caax = cgax.parasites[0]
894 paax = cgax.parasites[1]
953 paax = cgax.parasites[1]
895 cbar = plt.gcf().colorbar(pm, pad=0.075)
954 cbar = plt.gcf().colorbar(pm, pad=0.075)
896 caax.set_xlabel('x_range [km]')
955 caax.set_xlabel('x_range [km]')
897 caax.set_ylabel('y_range [km]')
956 caax.set_ylabel('y_range [km]')
898 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')
957 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')
899
958 '''
959 print("""""""""""""self.ini""""""""""""",self.ini)
900 self.ini= self.ini+1
960 self.ini= self.ini+1
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,262 +1,262
1 #!python
1 #!python
2 '''
2 '''
3 '''
3 '''
4
4
5 import os, sys
5 import os, sys
6 import datetime
6 import datetime
7 import time
7 import time
8
8
9 #path = os.path.dirname(os.getcwd())
9 #path = os.path.dirname(os.getcwd())
10 #path = os.path.dirname(path)
10 #path = os.path.dirname(path)
11 #sys.path.insert(0, path)
11 #sys.path.insert(0, path)
12
12
13 from schainpy.controller import Project
13 from schainpy.controller import Project
14
14
15 desc = "USRP_test"
15 desc = "USRP_test"
16 filename = "USRP_processing.xml"
16 filename = "USRP_processing.xml"
17 controllerObj = Project()
17 controllerObj = Project()
18 controllerObj.setup(id = '191', name='Test_USRP', description=desc)
18 controllerObj.setup(id = '191', name='Test_USRP', description=desc)
19
19
20 ############## USED TO PLOT IQ VOLTAGE, POWER AND SPECTRA #############
20 ############## USED TO PLOT IQ VOLTAGE, POWER AND SPECTRA #############
21
21
22 #######################################################################
22 #######################################################################
23 ######PATH DE LECTURA, ESCRITURA, GRAFICOS Y ENVIO WEB#################
23 ######PATH DE LECTURA, ESCRITURA, GRAFICOS Y ENVIO WEB#################
24 #######################################################################
24 #######################################################################
25 #path = '/media/data/data/vientos/57.2063km/echoes/NCO_Woodman'
25 #path = '/media/data/data/vientos/57.2063km/echoes/NCO_Woodman'
26 #path = '/DATA_RM/TEST_INTEGRACION'
26 #path = '/DATA_RM/TEST_INTEGRACION'
27 #path = '/DATA_RM/TEST_ONLINE'
27 #path = '/DATA_RM/TEST_ONLINE'
28 #path ="/DATA_RM/TEST_LU_21_10M/NOISE_LNA_ON_TX_OFF"
28 #path ="/DATA_RM/TEST_LU_21_10M/NOISE_LNA_ON_TX_OFF"
29 #path ="/DATA_RM/TEST_LU_21_10M/NOISE_LNA_OFF_TX_OFF"
29 #path ="/DATA_RM/TEST_LU_21_10M/NOISE_LNA_OFF_TX_OFF"
30 path = "/DATA_RM/TEST_MARTES_22_4M_1us"
30 path = "/DATA_RM/TEST_MARTES_22_4M_1us"
31 figpath = '/home/soporte/Pictures/TEST_MAR_22_4M_1us'
31 figpath = '/home/soporte/Pictures/TEST_MAR_22_4M_1us'
32 #path = "/DATA_RM/TEST_MARTES_22_2M_1us"
32 #path = "/DATA_RM/TEST_MARTES_22_2M_1us"
33 #figpath = '/home/soporte/Pictures/TEST_MAR_22_2M_1us'
33 #figpath = '/home/soporte/Pictures/TEST_MAR_22_2M_1us'
34
34
35 #path = "/DATA_RM/TEST_MARTES_22_1M_1us"
35 #path = "/DATA_RM/TEST_MARTES_22_1M_1us"
36 #figpath = '/home/soporte/Pictures/TEST_MAR_22_1M_1us'
36 #figpath = '/home/soporte/Pictures/TEST_MAR_22_1M_1us'
37 #remotefolder = "/home/wmaster/graficos"
37 #remotefolder = "/home/wmaster/graficos"
38 #######################################################################
38 #######################################################################
39 ################# RANGO DE PLOTEO######################################
39 ################# RANGO DE PLOTEO######################################
40 #######################################################################
40 #######################################################################
41 dBmin = '20'
41 dBmin = '20'
42 dBmax = '80'
42 dBmax = '80'
43 xmin = '16'
43 xmin = '16'
44 xmax ='18'
44 xmax ='18'
45 ymin = '0'
45 ymin = '0'
46 ymax = '600'
46 ymax = '600'
47 #######################################################################
47 #######################################################################
48 ########################FECHA##########################################
48 ########################FECHA##########################################
49 #######################################################################
49 #######################################################################
50 str = datetime.date.today()
50 str = datetime.date.today()
51 today = str.strftime("%Y/%m/%d")
51 today = str.strftime("%Y/%m/%d")
52 str2 = str - datetime.timedelta(days=1)
52 str2 = str - datetime.timedelta(days=1)
53 yesterday = str2.strftime("%Y/%m/%d")
53 yesterday = str2.strftime("%Y/%m/%d")
54 #######################################################################
54 #######################################################################
55 ######################## UNIDAD DE LECTURA#############################
55 ######################## UNIDAD DE LECTURA#############################
56 #######################################################################
56 #######################################################################
57 readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader',
57 readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader',
58 path=path,
58 path=path,
59 startDate="2022/03/22",#today,
59 startDate="2022/03/22",#today,
60 endDate="2022/03/22",#today,
60 endDate="2022/03/22",#today,
61 startTime='00:00:00',
61 startTime='00:00:00',
62 endTime='23:59:59',
62 endTime='23:59:59',
63 delay=0,
63 delay=0,
64 #set=0,
64 #set=0,
65 online=0,
65 online=0,
66 walk=1,
66 walk=1,
67 ippKm = 60)
67 ippKm = 60)
68
68
69 opObj11 = readUnitConfObj.addOperation(name='printInfo')
69 opObj11 = readUnitConfObj.addOperation(name='printInfo')
70 #opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock')
70 #opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock')
71 #######################################################################
71 #######################################################################
72 ################ OPERACIONES DOMINIO DEL TIEMPO########################
72 ################ OPERACIONES DOMINIO DEL TIEMPO########################
73 #######################################################################
73 #######################################################################
74
74
75 procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId())
75 procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId())
76 #
76 #
77 # codigo64='1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,'+\
77 # codigo64='1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,'+\
78 # '1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1'
78 # '1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1'
79
79
80 #opObj11 = procUnitConfObjA.addOperation(name='setRadarFrequency')
80 #opObj11 = procUnitConfObjA.addOperation(name='setRadarFrequency')
81 #opObj11.addParameter(name='frequency', value='70312500')
81 #opObj11.addParameter(name='frequency', value='70312500')
82 opObj11 = procUnitConfObjA.addOperation(name='selectHeights')
82 opObj11 = procUnitConfObjA.addOperation(name='selectHeights')
83 opObj11.addParameter(name='minIndex', value='1', format='int')
83 opObj11.addParameter(name='minIndex', value='1', format='int')
84 # opObj11.addParameter(name='maxIndex', value='10000', format='int')
84 # opObj11.addParameter(name='maxIndex', value='10000', format='int')
85 opObj11.addParameter(name='maxIndex', value='200', format='int')
85 opObj11.addParameter(name='maxIndex', value='200', format='int')
86
86
87
87
88
88
89 '''
89 '''
90 opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other')
90 opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other')
91 opObj11.addParameter(name='n', value='625', format='int')#10
91 opObj11.addParameter(name='n', value='625', format='int')#10
92 opObj11.addParameter(name='removeDC', value=1, format='int')
92 opObj11.addParameter(name='removeDC', value=1, format='int')
93 '''
93 '''
94
94
95 # Ploteo TEST
95 # Ploteo TEST
96 '''
96 '''
97 opObj11 = procUnitConfObjA.addOperation(name='PulsepairPowerPlot', optype='other')
97 opObj11 = procUnitConfObjA.addOperation(name='PulsepairPowerPlot', optype='other')
98 opObj11 = procUnitConfObjA.addOperation(name='PulsepairSignalPlot', optype='other')
98 opObj11 = procUnitConfObjA.addOperation(name='PulsepairSignalPlot', optype='other')
99 opObj11 = procUnitConfObjA.addOperation(name='PulsepairVelocityPlot', optype='other')
99 opObj11 = procUnitConfObjA.addOperation(name='PulsepairVelocityPlot', optype='other')
100 #opObj11.addParameter(name='xmax', value=8)
100 #opObj11.addParameter(name='xmax', value=8)
101 opObj11 = procUnitConfObjA.addOperation(name='PulsepairSpecwidthPlot', optype='other')
101 opObj11 = procUnitConfObjA.addOperation(name='PulsepairSpecwidthPlot', optype='other')
102 '''
102 '''
103 # OJO SCOPE
103 # OJO SCOPE
104 #opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external')
104 #opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external')
105 #opObj10.addParameter(name='id', value='10', format='int')
105 #opObj10.addParameter(name='id', value='10', format='int')
106 ##opObj10.addParameter(name='xmin', value='0', format='int')
106 ##opObj10.addParameter(name='xmin', value='0', format='int')
107 ##opObj10.addParameter(name='xmax', value='50', format='int')
107 ##opObj10.addParameter(name='xmax', value='50', format='int')
108 #opObj10.addParameter(name='type', value='iq')
108 #opObj10.addParameter(name='type', value='iq')
109 ##opObj10.addParameter(name='ymin', value='-5000', format='int')
109 ##opObj10.addParameter(name='ymin', value='-5000', format='int')
110 ##opObj10.addParameter(name='ymax', value='8500', format='int')
110 ##opObj10.addParameter(name='ymax', value='8500', format='int')
111 #opObj11.addParameter(name='save', value=figpath, format='str')
111 #opObj11.addParameter(name='save', value=figpath, format='str')
112 #opObj11.addParameter(name='save_period', value=10, format='int')
112 #opObj11.addParameter(name='save_period', value=10, format='int')
113
113
114 #opObj10 = procUnitConfObjA.addOperation(name='setH0')
114 #opObj10 = procUnitConfObjA.addOperation(name='setH0')
115 #opObj10.addParameter(name='h0', value='-5000', format='float')
115 #opObj10.addParameter(name='h0', value='-5000', format='float')
116
116
117 #opObj11 = procUnitConfObjA.addOperation(name='filterByHeights')
117 #opObj11 = procUnitConfObjA.addOperation(name='filterByHeights')
118 #opObj11.addParameter(name='window', value='1', format='int')
118 #opObj11.addParameter(name='window', value='1', format='int')
119
119
120 #codigo='1,1,-1,1,1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1'
120 #codigo='1,1,-1,1,1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1'
121 #opObj11 = procUnitConfObjSousy.addOperation(name='Decoder', optype='other')
121 #opObj11 = procUnitConfObjSousy.addOperation(name='Decoder', optype='other')
122 #opObj11.addParameter(name='code', value=codigo, format='floatlist')
122 #opObj11.addParameter(name='code', value=codigo, format='floatlist')
123 #opObj11.addParameter(name='nCode', value='1', format='int')
123 #opObj11.addParameter(name='nCode', value='1', format='int')
124 #opObj11.addParameter(name='nBaud', value='28', format='int')
124 #opObj11.addParameter(name='nBaud', value='28', format='int')
125
125
126 #opObj11 = procUnitConfObjA.addOperation(name='CohInt', optype='other')
126 #opObj11 = procUnitConfObjA.addOperation(name='CohInt', optype='other')
127 #opObj11.addParameter(name='n', value='100', format='int')
127 #opObj11.addParameter(name='n', value='100', format='int')
128
128
129 #######################################################################
129 #######################################################################
130 ########## OPERACIONES ParametersProc########################
130 ########## OPERACIONES ParametersProc########################
131 #######################################################################
131 #######################################################################
132 ###procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId())
132 ###procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId())
133 '''
133 '''
134
134
135 opObj11 = procUnitConfObjA.addOperation(name='PedestalInformation')
135 opObj11 = procUnitConfObjA.addOperation(name='PedestalInformation')
136 opObj11.addParameter(name='path_ped', value=path_ped)
136 opObj11.addParameter(name='path_ped', value=path_ped)
137 opObj11.addParameter(name='path_adq', value=path_adq)
137 opObj11.addParameter(name='path_adq', value=path_adq)
138 opObj11.addParameter(name='t_Interval_p', value='0.01', format='float')
138 opObj11.addParameter(name='t_Interval_p', value='0.01', format='float')
139 opObj11.addParameter(name='n_Muestras_p', value='100', format='float')
139 opObj11.addParameter(name='n_Muestras_p', value='100', format='float')
140 opObj11.addParameter(name='blocksPerfile', value='100', format='int')
140 opObj11.addParameter(name='blocksPerfile', value='100', format='int')
141 opObj11.addParameter(name='f_a_p', value='25', format='int')
141 opObj11.addParameter(name='f_a_p', value='25', format='int')
142 opObj11.addParameter(name='online', value='0', format='int')
142 opObj11.addParameter(name='online', value='0', format='int')
143
143
144 opObj11 = procUnitConfObjA.addOperation(name='Block360')
144 opObj11 = procUnitConfObjA.addOperation(name='Block360')
145 opObj11.addParameter(name='n', value='40', format='int')
145 opObj11.addParameter(name='n', value='40', format='int')
146
146
147 opObj11= procUnitConfObjA.addOperation(name='WeatherPlot',optype='other')
147 opObj11= procUnitConfObjA.addOperation(name='WeatherPlot',optype='other')
148 opObj11.addParameter(name='save', value=figpath)
148 opObj11.addParameter(name='save', value=figpath)
149 opObj11.addParameter(name='save_period', value=1)
149 opObj11.addParameter(name='save_period', value=1)
150
150
151
151
152 '''
152 '''
153
153
154 #######################################################################
154 #######################################################################
155 ########## OPERACIONES DOMINIO DE LA FRECUENCIA########################
155 ########## OPERACIONES DOMINIO DE LA FRECUENCIA########################
156 #######################################################################
156 #######################################################################
157
157
158 procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId())
158 procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId())
159 procUnitConfObjB.addParameter(name='nFFTPoints', value='250', format='int')
159 procUnitConfObjB.addParameter(name='nFFTPoints', value='0', format='int')
160 procUnitConfObjB.addParameter(name='nProfiles', value='250', format='int')
160 procUnitConfObjB.addParameter(name='nProfiles', value='250', format='int')
161
161
162 #procUnitConfObjC = controllerObj.addProcUnit(datatype='SpectraHeisProc', inputId=procUnitConfObjA.getId())
162 #procUnitConfObjC = controllerObj.addProcUnit(datatype='SpectraHeisProc', inputId=procUnitConfObjA.getId())
163 #procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int')
163 #procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int')
164 #procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int')
164 #procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int')
165 #opObj11 = procUnitConfObjC.addOperation(name='IncohInt4SpectraHeis', optype='other')
165 #opObj11 = procUnitConfObjC.addOperation(name='IncohInt4SpectraHeis', optype='other')
166 #opObj11.addParameter(name='timeInterval', value='8', format='int')
166 #opObj11.addParameter(name='timeInterval', value='8', format='int')
167
167
168
168
169 #procUnitConfObjB.addParameter(name='pairsList', value='(0,0),(1,1),(0,1)', format='pairsList')
169 #procUnitConfObjB.addParameter(name='pairsList', value='(0,0),(1,1),(0,1)', format='pairsList')
170
170
171 #opObj13 = procUnitConfObjB.addOperation(name='removeDC')
171 #opObj13 = procUnitConfObjB.addOperation(name='removeDC')
172 #opObj13.addParameter(name='mode', value='2', format='int')
172 #opObj13.addParameter(name='mode', value='2', format='int')
173
173
174 #opObj11 = procUnitConfObjB.addOperation(name='IncohInt', optype='other')
174 #opObj11 = procUnitConfObjB.addOperation(name='IncohInt', optype='other')
175 #opObj11.addParameter(name='n', value='8', format='float')
175 #opObj11.addParameter(name='n', value='8', format='float')
176 #######################################################################
176 #######################################################################
177 ########## PLOTEO DOMINIO DE LA FRECUENCIA#############################
177 ########## PLOTEO DOMINIO DE LA FRECUENCIA#############################
178 #######################################################################
178 #######################################################################
179 #----
179 #----
180 """
180 """
181 opObj11 = procUnitConfObjC.addOperation(name='SpectraHeisPlot')
181 opObj11 = procUnitConfObjC.addOperation(name='SpectraHeisPlot')
182 opObj11.addParameter(name='id', value='10', format='int')
182 opObj11.addParameter(name='id', value='10', format='int')
183 opObj11.addParameter(name='wintitle', value='Spectra_Alturas', format='str')
183 opObj11.addParameter(name='wintitle', value='Spectra_Alturas', format='str')
184 #opObj11.addParameter(name='xmin', value=-100000, format='float')
184 #opObj11.addParameter(name='xmin', value=-100000, format='float')
185 #opObj11.addParameter(name='xmax', value=100000, format='float')
185 #opObj11.addParameter(name='xmax', value=100000, format='float')
186 #opObj11.addParameter(name='zmin', value=dBmin, format='int')
186 #opObj11.addParameter(name='zmin', value=dBmin, format='int')
187 #opObj11.addParameter(name='zmax', value=dBmax, format='int')
187 #opObj11.addParameter(name='zmax', value=dBmax, format='int')
188 opObj11.addParameter(name='ymin', value=-20, format='int')
188 opObj11.addParameter(name='ymin', value=-20, format='int')
189 opObj11.addParameter(name='ymax', value=50, format='int')
189 opObj11.addParameter(name='ymax', value=50, format='int')
190 opObj11.addParameter(name='showprofile', value='1', format='int')
190 opObj11.addParameter(name='showprofile', value='1', format='int')
191 opObj11.addParameter(name='save', value=figpath, format='str')
191 opObj11.addParameter(name='save', value=figpath, format='str')
192 opObj11.addParameter(name='save_period', value=10, format='int')
192 opObj11.addParameter(name='save_period', value=10, format='int')
193 """
193 """
194
194
195 #SpectraPlot
195 #SpectraPlot
196
196
197 opObj11 = procUnitConfObjB.addOperation(name='SpectraPlot', optype='external')
197 opObj11 = procUnitConfObjB.addOperation(name='SpectraPlot', optype='external')
198 opObj11.addParameter(name='id', value='1', format='int')
198 opObj11.addParameter(name='id', value='1', format='int')
199 opObj11.addParameter(name='wintitle', value='Spectra', format='str')
199 opObj11.addParameter(name='wintitle', value='Spectra', format='str')
200 #opObj11.addParameter(name='xmin', value=-0.01, format='float')
200 #opObj11.addParameter(name='xmin', value=-0.01, format='float')
201 #opObj11.addParameter(name='xmax', value=0.01, format='float')
201 #opObj11.addParameter(name='xmax', value=0.01, format='float')
202 opObj11.addParameter(name='zmin', value=dBmin, format='int')
202 opObj11.addParameter(name='zmin', value=dBmin, format='int')
203 opObj11.addParameter(name='zmax', value=dBmax, format='int')
203 opObj11.addParameter(name='zmax', value=dBmax, format='int')
204 #opObj11.addParameter(name='ymin', value=ymin, format='int')
204 #opObj11.addParameter(name='ymin', value=ymin, format='int')
205 #opObj11.addParameter(name='ymax', value=ymax, format='int')
205 #opObj11.addParameter(name='ymax', value=ymax, format='int')
206 opObj11.addParameter(name='showprofile', value='1', format='int')
206 opObj11.addParameter(name='showprofile', value='1', format='int')
207 opObj11.addParameter(name='save', value=figpath, format='str')
207 opObj11.addParameter(name='save', value=figpath, format='str')
208 opObj11.addParameter(name='save_period', value=10, format='int')
208 opObj11.addParameter(name='save_period', value=10, format='int')
209
209
210 #RTIPLOT
210 #RTIPLOT
211
211
212 opObj11 = procUnitConfObjB.addOperation(name='RTIPlot', optype='external')
212 opObj11 = procUnitConfObjB.addOperation(name='RTIPlot', optype='external')
213 opObj11.addParameter(name='id', value='2', format='int')
213 opObj11.addParameter(name='id', value='2', format='int')
214 opObj11.addParameter(name='wintitle', value='RTIPlot', format='str')
214 opObj11.addParameter(name='wintitle', value='RTIPlot', format='str')
215 opObj11.addParameter(name='zmin', value=dBmin, format='int')
215 opObj11.addParameter(name='zmin', value=dBmin, format='int')
216 opObj11.addParameter(name='zmax', value=dBmax, format='int')
216 opObj11.addParameter(name='zmax', value=dBmax, format='int')
217 #opObj11.addParameter(name='ymin', value=ymin, format='int')
217 #opObj11.addParameter(name='ymin', value=ymin, format='int')
218 #opObj11.addParameter(name='ymax', value=ymax, format='int')
218 #opObj11.addParameter(name='ymax', value=ymax, format='int')
219 opObj11.addParameter(name='xmin', value=xmin, format='int')
219 opObj11.addParameter(name='xmin', value=xmin, format='int')
220 opObj11.addParameter(name='xmax', value=xmax, format='int')
220 opObj11.addParameter(name='xmax', value=xmax, format='int')
221
221
222 opObj11.addParameter(name='showprofile', value='1', format='int')
222 opObj11.addParameter(name='showprofile', value='1', format='int')
223 opObj11.addParameter(name='save', value=figpath, format='str')
223 opObj11.addParameter(name='save', value=figpath, format='str')
224 opObj11.addParameter(name='save_period', value=10, format='int')
224 opObj11.addParameter(name='save_period', value=10, format='int')
225
225
226
226
227 # opObj11 = procUnitConfObjB.addOperation(name='CrossSpectraPlot', optype='other')
227 # opObj11 = procUnitConfObjB.addOperation(name='CrossSpectraPlot', optype='other')
228 # opObj11.addParameter(name='id', value='3', format='int')
228 # opObj11.addParameter(name='id', value='3', format='int')
229 # opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str')
229 # opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str')
230 # opObj11.addParameter(name='ymin', value=ymin, format='int')
230 # opObj11.addParameter(name='ymin', value=ymin, format='int')
231 # opObj11.addParameter(name='ymax', value=ymax, format='int')
231 # opObj11.addParameter(name='ymax', value=ymax, format='int')
232 # opObj11.addParameter(name='phase_cmap', value='jet', format='str')
232 # opObj11.addParameter(name='phase_cmap', value='jet', format='str')
233 # opObj11.addParameter(name='zmin', value=dBmin, format='int')
233 # opObj11.addParameter(name='zmin', value=dBmin, format='int')
234 # opObj11.addParameter(name='zmax', value=dBmax, format='int')
234 # opObj11.addParameter(name='zmax', value=dBmax, format='int')
235 # opObj11.addParameter(name='figpath', value=figures_path, format='str')
235 # opObj11.addParameter(name='figpath', value=figures_path, format='str')
236 # opObj11.addParameter(name='save', value=0, format='bool')
236 # opObj11.addParameter(name='save', value=0, format='bool')
237 # opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList')
237 # opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList')
238 # #
238 # #
239 # opObj11 = procUnitConfObjB.addOperation(name='CoherenceMap', optype='other')
239 # opObj11 = procUnitConfObjB.addOperation(name='CoherenceMap', optype='other')
240 # opObj11.addParameter(name='id', value='4', format='int')
240 # opObj11.addParameter(name='id', value='4', format='int')
241 # opObj11.addParameter(name='wintitle', value='Coherence', format='str')
241 # opObj11.addParameter(name='wintitle', value='Coherence', format='str')
242 # opObj11.addParameter(name='phase_cmap', value='jet', format='str')
242 # opObj11.addParameter(name='phase_cmap', value='jet', format='str')
243 # opObj11.addParameter(name='xmin', value=xmin, format='float')
243 # opObj11.addParameter(name='xmin', value=xmin, format='float')
244 # opObj11.addParameter(name='xmax', value=xmax, format='float')
244 # opObj11.addParameter(name='xmax', value=xmax, format='float')
245 # opObj11.addParameter(name='figpath', value=figures_path, format='str')
245 # opObj11.addParameter(name='figpath', value=figures_path, format='str')
246 # opObj11.addParameter(name='save', value=0, format='bool')
246 # opObj11.addParameter(name='save', value=0, format='bool')
247 # opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList')
247 # opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList')
248 #
248 #
249
249
250 '''
250 '''
251 #######################################################################
251 #######################################################################
252 ############### UNIDAD DE ESCRITURA ###################################
252 ############### UNIDAD DE ESCRITURA ###################################
253 #######################################################################
253 #######################################################################
254 #opObj11 = procUnitConfObjB.addOperation(name='SpectraWriter', optype='other')
254 #opObj11 = procUnitConfObjB.addOperation(name='SpectraWriter', optype='other')
255 #opObj11.addParameter(name='path', value=wr_path)
255 #opObj11.addParameter(name='path', value=wr_path)
256 #opObj11.addParameter(name='blocksPerFile', value='50', format='int')
256 #opObj11.addParameter(name='blocksPerFile', value='50', format='int')
257 print ("Escribiendo el archivo XML")
257 print ("Escribiendo el archivo XML")
258 print ("Leyendo el archivo XML")
258 print ("Leyendo el archivo XML")
259 '''
259 '''
260
260
261
261
262 controllerObj.start()
262 controllerObj.start()
@@ -1,132 +1,133
1 # Ing-AlexanderValdez
1 # Ing-AlexanderValdez
2 # Monitoreo de Pedestal
2 # Monitoreo de Pedestal
3
3
4 ############## IMPORTA LIBRERIAS ###################
4 ############## IMPORTA LIBRERIAS ###################
5 import os,numpy,h5py
5 import os,numpy,h5py
6 import sys,time
6 import sys,time
7 import matplotlib.pyplot as plt
7 import matplotlib.pyplot as plt
8 ####################################################
8 ####################################################
9 #################################################################
9 #################################################################
10 # LA FECHA 21-10-20 CORRESPONDE A LAS PRUEBAS DEL DIA MIERCOLES
10 # LA FECHA 21-10-20 CORRESPONDE A LAS PRUEBAS DEL DIA MIERCOLES
11 # 1:15:51 pm hasta 3:49:32 pm
11 # 1:15:51 pm hasta 3:49:32 pm
12 #################################################################
12 #################################################################
13
13
14 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211012-082745'
14 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211012-082745'
15 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211020-131248'
15 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211020-131248'
16 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211110-171003'
16 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211110-171003'
17 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211111-173856'
17 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211111-173856'
18 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211123-143826'
18 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211123-143826'
19 #path_ped = "/DATA_RM/TEST_PEDESTAL/P20220217-172216"
19 #path_ped = "/DATA_RM/TEST_PEDESTAL/P20220217-172216"
20 #path_ped = "/DATA_RM/TEST_PEDESTAL/P20220322-163824"
20 #path_ped = "/DATA_RM/TEST_PEDESTAL/P20220322-163824"
21 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211111-173409'
21 #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211111-173409'
22
22
23
23
24 #--------------------------------
24 #--------------------------------
25
25
26 path_ped= "/DATA_RM/TEST_PEDESTAL/P20220401-172744"
26 path_ped= "/DATA_RM/TEST_PEDESTAL/P20220401-172744"
27
27 # Metodo para verificar numero
28 # Metodo para verificar numero
28 def isNumber(str):
29 def isNumber(str):
29 try:
30 try:
30 float(str)
31 float(str)
31 return True
32 return True
32 except:
33 except:
33 return False
34 return False
34 # Metodo para extraer el arreglo
35 # Metodo para extraer el arreglo
35 def getDatavaluefromDirFilename(path,file,value):
36 def getDatavaluefromDirFilename(path,file,value):
36 dir_file= path+"/"+file
37 dir_file= path+"/"+file
37 fp = h5py.File(dir_file,'r')
38 fp = h5py.File(dir_file,'r')
38 array = fp['Data'].get(value)[()]
39 array = fp['Data'].get(value)[()]
39 fp.close()
40 fp.close()
40 return array
41 return array
41
42
42 # LISTA COMPLETA DE ARCHIVOS HDF5 Pedestal
43 # LISTA COMPLETA DE ARCHIVOS HDF5 Pedestal
43 LIST= sorted(os.listdir(path_ped))
44 LIST= sorted(os.listdir(path_ped))
44 m=len(LIST)
45 m=len(LIST)
45 print("TOTAL DE ARCHIVOS DE PEDESTAL:",m)
46 print("TOTAL DE ARCHIVOS DE PEDESTAL:",m)
46 # Contadores temporales
47 # Contadores temporales
47 k= 0
48 k= 0
48 l= 0
49 l= 0
49 t= 0
50 t= 0
50 # Marca de tiempo temporal
51 # Marca de tiempo temporal
51 time_ = numpy.zeros([m])
52 time_ = numpy.zeros([m])
52 # creacion de
53 # creacion de
53 for i in range(m):
54 for i in range(m):
54 print("order:",i)
55 print("order:",i)
55 tmp_azi_pos = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="azi_pos")
56 tmp_azi_pos = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="azi_pos")
56 tmp_ele_pos = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="ele_pos")
57 tmp_ele_pos = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="ele_pos")
57 tmp_azi_vel = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="azi_vel")
58 tmp_azi_vel = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="azi_vel")
58 tmp_ele_vel = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="ele_vel")# nuevo :D
59 tmp_ele_vel = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="ele_vel")# nuevo :D
59
60
60 time_[i] = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="utc")
61 time_[i] = getDatavaluefromDirFilename(path=path_ped,file=LIST[i],value="utc")
61
62
62 k=k +tmp_azi_pos.shape[0]
63 k=k +tmp_azi_pos.shape[0]
63 l=l +tmp_ele_pos.shape[0]
64 l=l +tmp_ele_pos.shape[0]
64 t=t +tmp_azi_vel.shape[0]
65 t=t +tmp_azi_vel.shape[0]
65
66
66 print("TOTAL DE MUESTRAS, ARCHIVOS X100:",k)
67 print("TOTAL DE MUESTRAS, ARCHIVOS X100:",k)
67 time.sleep(5)
68 time.sleep(5)
68 ######CREACION DE ARREGLOS CANTIDAD DE VALORES POR MUESTRA#################
69 ######CREACION DE ARREGLOS CANTIDAD DE VALORES POR MUESTRA#################
69 azi_pos = numpy.zeros([k])
70 azi_pos = numpy.zeros([k])
70 ele_pos = numpy.zeros([l])
71 ele_pos = numpy.zeros([l])
71 time_azi_pos= numpy.zeros([k])
72 time_azi_pos= numpy.zeros([k])
72 # Contadores temporales
73 # Contadores temporales
73 p=0
74 p=0
74 r=0
75 r=0
75 z=0
76 z=0
76 # VARIABLES TMP para almacenar azimuth, elevacion y tiempo
77 # VARIABLES TMP para almacenar azimuth, elevacion y tiempo
77
78
78 #for filename in sorted(os.listdir(path_ped)):
79 #for filename in sorted(os.listdir(path_ped)):
79 # CONDICION POR LEER EN TIEMPO REAL NO OFFLINE
80 # CONDICION POR LEER EN TIEMPO REAL NO OFFLINE
80
81
81 for filename in LIST:
82 for filename in LIST:
82 tmp_azi_pos = getDatavaluefromDirFilename(path=path_ped,file=filename,value="azi_pos")
83 #tmp_azi_pos = getDatavaluefromDirFilename(path=path_ped,file=filename,value="azi_pos")
83 tmp_ele_pos = getDatavaluefromDirFilename(path=path_ped,file=filename,value="ele_pos")
84 tmp_ele_pos = getDatavaluefromDirFilename(path=path_ped,file=filename,value="ele_pos")
84 #tmp_azi_pos = getDatavaluefromDirFilename(path=path_ped,file=filename,value="ele_vel")
85 tmp_azi_pos = getDatavaluefromDirFilename(path=path_ped,file=filename,value="ele_vel")
85 #tmp_ele_pos = getDatavaluefromDirFilename(path=path_ped,file=filename,value="azi_vel")
86 #tmp_ele_pos = getDatavaluefromDirFilename(path=path_ped,file=filename,value="azi_vel")
86 # CONDICION POR LEER EN TIEMPO REAL NO OFFLINE
87 # CONDICION POR LEER EN TIEMPO REAL NO OFFLINE
87
88
88 if z==(m-1):
89 if z==(m-1):
89 tmp_azi_time=numpy.arange(time_[z],time_[z]+1,1/(tmp_azi_pos.shape[0]))
90 tmp_azi_time=numpy.arange(time_[z],time_[z]+1,1/(tmp_azi_pos.shape[0]))
90 else:
91 else:
91 tmp_azi_time=numpy.arange(time_[z],time_[z+1],(time_[z+1]-time_[z])/(tmp_azi_pos.shape[0]))
92 tmp_azi_time=numpy.arange(time_[z],time_[z+1],(time_[z+1]-time_[z])/(tmp_azi_pos.shape[0]))
92
93
93 print(filename,time_[z])
94 print(filename,time_[z])
94 print(z,tmp_azi_pos.shape[0])
95 print(z,tmp_azi_pos.shape[0])
95
96
96 i=0
97 i=0
97 for i in range(tmp_azi_pos.shape[0]):
98 for i in range(tmp_azi_pos.shape[0]):
98 index=p+i
99 index=p+i
99 azi_pos[index]=tmp_azi_pos[i]
100 azi_pos[index]=tmp_azi_pos[i]
100 time_azi_pos[index]=tmp_azi_time[i]
101 time_azi_pos[index]=tmp_azi_time[i]
101 p=p+tmp_azi_pos.shape[0]
102 p=p+tmp_azi_pos.shape[0]
102 i=0
103 i=0
103 for i in range(tmp_ele_pos.shape[0]):
104 for i in range(tmp_ele_pos.shape[0]):
104 index=r+i
105 index=r+i
105 ele_pos[index]=tmp_ele_pos[i]
106 ele_pos[index]=tmp_ele_pos[i]
106 r=r+tmp_ele_pos.shape[0]
107 r=r+tmp_ele_pos.shape[0]
107
108
108
109
109 z+=1
110 z+=1
110
111
111
112
112 ######## GRAFIQUEMOS Y VEAMOS LOS DATOS DEL Pedestal
113 ######## GRAFIQUEMOS Y VEAMOS LOS DATOS DEL Pedestal
113 fig, ax = plt.subplots(figsize=(16,8))
114 fig, ax = plt.subplots(figsize=(16,8))
114 print(time_azi_pos.shape)
115 print(time_azi_pos.shape)
115 print(azi_pos.shape)
116 print(azi_pos.shape)
116 t=numpy.arange(time_azi_pos.shape[0])*0.01/(60.0)
117 t=numpy.arange(time_azi_pos.shape[0])*0.01/(60.0)
117 plt.plot(t,azi_pos,label='AZIMUTH_POS',color='blue')
118 plt.plot(t,azi_pos,label='AZIMUTH_POS',color='blue')
118
119
119 # AQUI ESTOY ADICIONANDO LA POSICION EN elevaciont=numpy.arange(len(ele_pos))*0.01/60.0
120 # AQUI ESTOY ADICIONANDO LA POSICION EN elevaciont=numpy.arange(len(ele_pos))*0.01/60.0
120 t=numpy.arange(len(ele_pos))*0.01/60.0
121 t=numpy.arange(len(ele_pos))*0.01/60.0
121 plt.plot(t,ele_pos,label='ELEVATION_POS',color='red')#*10
122 plt.plot(t,ele_pos,label='ELEVATION_POS',color='red')#*10
122
123
123 ax.set_xlim(0, 4)
124 ax.set_xlim(0, 4)
124 ax.set_ylim(-5, 360)
125 ax.set_ylim(-5, 360)
125 plt.ylabel("Azimuth Position")
126 plt.ylabel("Azimuth Position")
126 plt.xlabel("Muestra")
127 plt.xlabel("Muestra")
127 plt.title('Azimuth Position vs Muestra ', fontsize=20)
128 plt.title('Azimuth Position vs Muestra ', fontsize=20)
128 axes = plt.gca()
129 axes = plt.gca()
129 axes.yaxis.grid()
130 axes.yaxis.grid()
130 plt.xticks(fontsize=16)
131 plt.xticks(fontsize=16)
131 plt.yticks(fontsize=16)
132 plt.yticks(fontsize=16)
132 plt.show()
133 plt.show()
@@ -1,58 +1,72
1 import numpy as np
1 import numpy as np
2 import matplotlib.pyplot as plt
2 import matplotlib.pyplot as plt
3 import wradlib as wrl
3 import wradlib as wrl
4 import warnings
4 import warnings
5 # libreia nueva
5 # libreia nueva
6 #export WRADLIB_DATA="/home/soporte/Downloads/2014-06-09--185000.rhi.mvol"
6 #export WRADLIB_DATA="/home/soporte/Downloads/2014-06-09--185000.rhi.mvol"
7 from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter
7 from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter
8 warnings.filterwarnings('ignore')
8 warnings.filterwarnings('ignore')
9 # lectura de gaMIC hdf5 file
9 # lectura de gaMIC hdf5 file
10 filename = wrl.util.get_wradlib_data_file("/home/soporte/Downloads/2014-06-09--185000.rhi.mvol")
10 filename = wrl.util.get_wradlib_data_file("/home/soporte/Downloads/2014-06-09--185000.rhi.mvol")
11 #filename = wrl.util.get_wradlib_data_file("2014-06-09--185000.rhi.mvol")
12
11 data1, metadata = wrl.io.read_gamic_hdf5(filename)
13 data1, metadata = wrl.io.read_gamic_hdf5(filename)
12 print(data1)
14 print(data1)
13 data1 = data1['SCAN0']['ZH']['data']
15 data1 = data1['SCAN0']['ZH']['data']
14 print(data1)
16 print(data1)
15 print("SHAPE Data",np.array(data1).shape)
17 print("SHAPE Data",np.array(data1).shape)
16 r = metadata['SCAN0']['r']
18 r = metadata['SCAN0']['r']
17 print("r",r)
19 print("r",r)
18 print("longitud r",len(r))
20 print("longitud r",len(r))
19 th = metadata['SCAN0']['el']
21 th = metadata['SCAN0']['el']
20 print("th",th)
22 print("th",th)
21 print("longitud th",len(th))
23 print("longitud th",len(th))
22 az = metadata['SCAN0']['az']
24 az = metadata['SCAN0']['az']
23 print("az",az)
25 print("az",az)
24 site = (metadata['VOL']['Longitude'], metadata['VOL']['Latitude'],
26 site = (metadata['VOL']['Longitude'], metadata['VOL']['Latitude'],
25 metadata['VOL']['Height'])
27 metadata['VOL']['Height'])
26
28
27 print("Longitud,Latitud,Altura",site)
29 print("Longitud,Latitud,Altura",site)
28 ma1 = np.array(data1)
30 ma1 = np.array(data1)
31 for i in range(3):
32 print("dark",ma1[i])
29 '''
33 '''
30 mask_ind = np.where(data1 <= np.nanmin(data1))
34 mask_ind = np.where(data1 <= np.nanmin(data1))
31 data1[mask_ind] = np.nan
35 data1[mask_ind] = np.nan
32 ma1 = np.ma.array(data1, mask=np.isnan(data1))
36 ma1 = np.ma.array(data1, mask=np.isnan(data1))
33 '''
37 '''
38 ####################### test ####################s
39 th=(np.arange(450)/10.0)+5
40 #th= np.roll(th,-2)
41 #th=np.where(a<7,np.nan,a)
42 ma1=np.roll(ma1,-2,axis=0)
43 for i in range(3):
44 print("green",ma1[i])
45 print("a",th)
46 #th = [i for i in reversed(a)]
47 ######################### test
34 #cgax, pm = wrl.vis.plot_rhi(ma1,r=r,th=th,rf=1e3)
48 #cgax, pm = wrl.vis.plot_rhi(ma1,r=r,th=th,rf=1e3)
35 fig = plt.figure(figsize=(10,8))
49 fig = plt.figure(figsize=(10,8))
36 cgax, pm = wrl.vis.plot_rhi(ma1,r=r,th=th,rf=1e3,fig=fig, ax=111,proj='cg')
50 cgax, pm = wrl.vis.plot_rhi(ma1,r=r,th=th,rf=1e3,fig=fig, ax=111,proj='cg')
37 caax = cgax.parasites[0]
51 caax = cgax.parasites[0]
38 paax = cgax.parasites[1]
52 paax = cgax.parasites[1]
39 cgax.set_ylim(0, 14)
53 cgax.set_ylim(0, 14)
40 #caax = cgax.parasites[0]
54 #caax = cgax.parasites[0]
41 #paax = cgax.parasites[1]
55 #paax = cgax.parasites[1]
42 #cgax, pm = wrl.vis.plot_rhi(ma1, r=r, th=th, rf=1e3, fig=fig, ax=111, proj='cg')
56 #cgax, pm = wrl.vis.plot_rhi(ma1, r=r, th=th, rf=1e3, fig=fig, ax=111, proj='cg')
43 txt = plt.title('Simple RHI',y=1.05)
57 txt = plt.title('Simple RHI',y=1.05)
44 #cbar = plt.gcf().colorbar(pm, pad=0.05, ax=paax)
58 #cbar = plt.gcf().colorbar(pm, pad=0.05, ax=paax)
45 cbar = plt.gcf().colorbar(pm, pad=0.05)
59 cbar = plt.gcf().colorbar(pm, pad=0.05)
46 cbar.set_label('reflectivity [dBZ]')
60 cbar.set_label('reflectivity [dBZ]')
47 caax.set_xlabel('x_range [km]')
61 caax.set_xlabel('x_range [km]')
48 caax.set_ylabel('y_range [km]')
62 caax.set_ylabel('y_range [km]')
49 plt.text(1.0, 1.05, 'azimuth', transform=caax.transAxes, va='bottom',ha='right')
63 plt.text(1.0, 1.05, 'azimuth', transform=caax.transAxes, va='bottom',ha='right')
50 gh = cgax.get_grid_helper()
64 gh = cgax.get_grid_helper()
51
65
52 # set theta to some nice values
66 # set theta to some nice values
53 locs = [0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14.,
67 locs = [0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14.,
54 15., 16., 17., 18., 20., 22., 25., 30., 35., 40., 50., 60., 70., 80., 90.]
68 15., 16., 17., 18., 20., 22., 25., 30., 35., 40., 50., 60., 70., 80., 90.]
55 gh.grid_finder.grid_locator1 = FixedLocator(locs)
69 gh.grid_finder.grid_locator1 = FixedLocator(locs)
56 gh.grid_finder.tick_formatter1 = DictFormatter(dict([(i, r"${0:.0f}^\circ$".format(i)) for i in locs]))
70 gh.grid_finder.tick_formatter1 = DictFormatter(dict([(i, r"${0:.0f}^\circ$".format(i)) for i in locs]))
57
71
58 plt.show()
72 plt.show()
@@ -1,226 +1,242
1 # Ing. AVP
1 # Ing. AVP
2 # 06/10/2021
2 # 06/10/2021
3 # ARCHIVO DE LECTURA
3 # ARCHIVO DE LECTURA
4 import os, sys
4 import os, sys
5 import datetime
5 import datetime
6 import time
6 import time
7 from schainpy.controller import Project
7 from schainpy.controller import Project
8 #### NOTA###########################################
8 #### NOTA###########################################
9 # INPUT :
9 # INPUT :
10 # VELOCIDAD PARAMETRO : V = 2Β°/seg
10 # VELOCIDAD PARAMETRO : V = 2Β°/seg
11 # MODO PULSE PAIR O MOMENTOS: 0 : Pulse Pair ,1 : Momentos
11 # MODO PULSE PAIR O MOMENTOS: 0 : Pulse Pair ,1 : Momentos
12 ######################################################
12 ######################################################
13 ##### PROCESAMIENTO ##################################
13 ##### PROCESAMIENTO ##################################
14 ##### OJO TENER EN CUENTA EL n= para el Pulse Pair ##
14 ##### OJO TENER EN CUENTA EL n= para el Pulse Pair ##
15 ##### O EL n= nFFTPoints ###
15 ##### O EL n= nFFTPoints ###
16 ######################################################
16 ######################################################
17 ######## BUSCAMOS EL numero de IPP equivalente 1Β°#####
17 ######## BUSCAMOS EL numero de IPP equivalente 1Β°#####
18 ######## Sea V la velocidad del Pedestal en Β°/seg#####
18 ######## Sea V la velocidad del Pedestal en Β°/seg#####
19 ######## 1Β° sera Recorrido en un tiempo de 1/V ######
19 ######## 1Β° sera Recorrido en un tiempo de 1/V ######
20 ######## IPP del Radar 400 useg --> 60 Km ############
20 ######## IPP del Radar 400 useg --> 60 Km ############
21 ######## n = 1/(V(Β°/seg)*IPP(Km)) , NUMERO DE IPP ##
21 ######## n = 1/(V(Β°/seg)*IPP(Km)) , NUMERO DE IPP ##
22 ######## n = 1/(V*IPP) #############################
22 ######## n = 1/(V*IPP) #############################
23
23
24 #-------------------------VELOCIDAD DEL PEDESTAL Y MODO ------------------------
24 #-------------------------VELOCIDAD DEL PEDESTAL Y MODO ------------------------
25 print("SETUP- RADAR METEOROLOGICO")
25 print("SETUP- RADAR METEOROLOGICO")
26 IPP = 400*1e-6
26 IPP = 400*1e-6
27 V = 6
27 V = 6
28 samp_rate = 10# VERIFICAR
28 samp_rate = 10# VERIFICAR
29 MODE_TABLE = 1 # PUEDE SER 1 O 0
29 MODE_TABLE = 1 # PUEDE SER 1 O 0
30 AXIS = [1,1,1,1] # AZIMUTH 1 ELEVACION 0
30 AXIS = [1,1,1,1] # AZIMUTH 1 ELEVACION 0
31 SPEED_AXIS = [10,10,10,10] # VELOCIDAD
31 SPEED_AXIS = [10,10,10,10] # VELOCIDAD
32 ANGLE_AXIS = [20,25,30,15] # ANGULOS
32 ANGLE_AXIS = [20,25,30,15] # ANGULOS
33 mode_proc = 0
33 mode_proc = 0
34 #-----------------------------PATH ADQ Y PEDESTAL-------------------------------
34 #-----------------------------PATH ADQ Y PEDESTAL-------------------------------
35 #ath = "/DATA_RM/TEST_MARTES_22_1M_1us"
35 #ath = "/DATA_RM/TEST_MARTES_22_1M_1us"
36 #path_ped = "/DATA_RM/TEST_PEDESTAL/P20220322-171722"
36 #path_ped = "/DATA_RM/TEST_PEDESTAL/P20220322-171722"
37 #path = "/DATA_RM/DRONE01ABRIL"
37 #path = "/DATA_RM/DRONE01ABRIL"
38 #path = "/DATA_RM/DRONE01ABRIL1429"
38 #path = "/DATA_RM/DRONE01ABRIL1429"
39 #path_ped = "/DATA_RM/TEST_PEDESTAL/P20220322-171722"
39 #path_ped = "/DATA_RM/TEST_PEDESTAL/P20220322-171722"
40 #path = "/DATA_RM/DRONE01ABRIL1701"
40 #path = "/DATA_RM/DRONE01ABRIL1701"
41 path = "/DATA_RM/DATA/Torre_con_bola_1649092242/rawdata"
41 path = "/DATA_RM/DATA/Torre_con_bola_1649092242/rawdata"
42
42 path="/DATA_RM/DRONE01ABRIL1727"
43 path_ped = "/DATA_RM/DRONE01ABRIL1450"
43 #path_ped = "/DATA_RM/DRONE01ABRIL1450"
44 path_ped="/DATA_RM/TEST_PEDESTAL/P20220401-172744"
45 #path_ped = "/DATA_RM/DATA/Torre_con_bola_1649092242/position/2022-04-04T17-00-00"
44 #-------------------------------------------------------------------------------
46 #-------------------------------------------------------------------------------
45 figpath_pp = "/home/soporte/Pictures/Torre_con_bola_1649092242"
47 figpath_pp = "/home/soporte/Pictures/Torre_con_bola_1649092242"
46 #figpath_pp = "/home/soporte/Pictures/MARTES_22_PP_1M_1us"
48 #figpath_pp = "/home/soporte/Pictures/MARTES_22_PP_1M_1us"
47 figpath_spec = "/home/soporte/Pictures/MARTES_22_1M_1us"
49 figpath_spec = "/home/soporte/Pictures/MARTES_22_1M_1us"
48 figpath_pp_ppi = "/home/soporte/Pictures/MARTES_22_1M_1us_PPI"
50 figpath_pp_ppi = "/home/soporte/Pictures/MARTES_22_1M_1us_PPI"
51
52
53 figpath_pp_rhi = "/DATA_RM/LUNES04ABRIL_1200_RHI"
49 #--------------------------OPCIONES---------------------------------------------
54 #--------------------------OPCIONES---------------------------------------------
50 plot = 1
51 plot_ppi = 0
55 plot_ppi = 0
52 integration = 0
56 plot = 0
57 plot_rhi = 1
58 integration = 1
53 save = 0
59 save = 0
54 plot_spec = 0
60 plot_spec = 0
55 #---------------------------SAVE HDF5 PROCESADO/--------------------------------
61 #---------------------------SAVE HDF5 PROCESADO/--------------------------------
56 if save == 1:
62 if save == 1:
57 if mode_proc==0:
63 if mode_proc==0:
58 path_save = '/DATA_RM/TEST_HDF5_PP_MAR22/6v'
64 path_save = '/DATA_RM/TEST_HDF5_PP_MAR22/6v'
59 else:
65 else:
60 path_save = '/DATA_RM/TEST_HDF5_SPEC_MAR22/6v'
66 path_save = '/DATA_RM/TEST_HDF5_SPEC_MAR22/6v'
61 print("[SETUP]-RADAR METEOROLOGICO-")
67 print("[SETUP]-RADAR METEOROLOGICO-")
62 print("* PATH data ADQ :", path)
68 print("* PATH data ADQ :", path)
63 print("* PATH data PED :", path_ped)
69 print("* PATH data PED :", path_ped)
64 print("* SAMPLE RATE ADQ Mhz :", samp_rate)
70 print("* SAMPLE RATE ADQ Mhz :", samp_rate)
65 print("* Velocidad Pedestal :",V,"Β°/seg")
71 print("* Velocidad Pedestal :",V,"Β°/seg")
66 print("* Configuracion del Pedestal *")
72 print("* Configuracion del Pedestal *")
67
73
68 print("*** AXIS :",AXIS)
74 print("*** AXIS :",AXIS)
69 print("*** SPEED_AXIS:",SPEED_AXIS)
75 print("*** SPEED_AXIS:",SPEED_AXIS)
70 print("*** ANGLE_AXIS:",ANGLE_AXIS)
76 print("*** ANGLE_AXIS:",ANGLE_AXIS)
71 num_alturas = int(samp_rate*IPP*1e6)
77 num_alturas = int(samp_rate*IPP*1e6)
72 print("* Nro de Altura :",num_alturas)
78 print("* Nro de Altura :",num_alturas)
73
79
74 ############################ NRO Perfiles PROCESAMIENTO ###################
80 ############################ NRO Perfiles PROCESAMIENTO ###################
75 V=V
81 V=V
76 n= int(1/(V*IPP))
82 n= int(1/(V*IPP))
77 print("* n - NRO Perfiles Proc:", n )
83 print("* n - NRO Perfiles Proc:", n )
78 ################################## MODE ###################################
84 ################################## MODE ###################################
79 print("* Modo de Operacion :",mode_proc)
85 print("* Modo de Operacion :",mode_proc)
80 if mode_proc ==0:
86 if mode_proc ==0:
81 print("* Met. Seleccionado : Pulse Pair")
87 print("* Met. Seleccionado : Pulse Pair")
82 else:
88 else:
83 print("* Met. Momentos : Momentos")
89 print("* Met. Momentos : Momentos")
84 ################################## MODE ###################################
90 ################################## MODE ###################################
85 print("* Grabado de datos :",save)
91 print("* Grabado de datos :",save)
86 if save ==1:
92 if save ==1:
87 if mode_proc==0:
93 if mode_proc==0:
88 print("[ ON ] MODE PULSEPAIR")
94 print("[ ON ] MODE PULSEPAIR")
89
95
90 else:
96 else:
91 print("[ ON ] MODE FREQUENCY")
97 print("[ ON ] MODE FREQUENCY")
92
98
93 print("* Integracion de datos :",integration)
99 print("* Integracion de datos :",integration)
94
100
95 print("* Ploteo de datos Parameters:", plot)
101 print("* Ploteo de datos Parameters:", plot)
96 if plot==1:
102 if plot==1:
97 print("* Path PP plot :", figpath_pp )
103 print("* Path PP plot :", figpath_pp )
98
104
99 if plot_ppi==1:
105 if plot_ppi==1:
100 print("* Path PPI plot :", figpath_pp_ppi )
106 print("* Path PPI plot :", figpath_pp_ppi )
101
107
102 time.sleep(4)
108 time.sleep(4)
103 #remotefolder = "/home/wmaster/graficos"
109 #remotefolder = "/home/wmaster/graficos"
104 ################# RANGO DE PLOTEO######################################
110 ################# RANGO DE PLOTEO######################################
105 dBmin = '20'
111 dBmin = '20'
106 dBmax = '60'
112 dBmax = '60'
107 xmin = '12.0' #17.1,17.5
113 xmin = '12.0' #17.1,17.5
108 xmax = '12.4' #17.2,17.8
114 xmax = '12.4' #17.2,17.8
109 ymin = '0' #### PONER A 0
115 ymin = '0' #### PONER A 0
110 ymax = '1.0' #### PONER A 8
116 ymax = '1.0' #### PONER A 8
111 ########################FECHA##########################################
117 ########################FECHA##########################################
112 str1 = datetime.date.today()
118 str1 = datetime.date.today()
113 today = str1.strftime("%Y/%m/%d")
119 today = str1.strftime("%Y/%m/%d")
114 str2 = str1 - datetime.timedelta(days=1)
120 str2 = str1 - datetime.timedelta(days=1)
115 yesterday = str2.strftime("%Y/%m/%d")
121 yesterday = str2.strftime("%Y/%m/%d")
116
122
117 #------------------------SIGNAL CHAIN-------------------------------------------
123 #------------------------SIGNAL CHAIN-------------------------------------------
118 desc = "USRP_test"
124 desc = "USRP_test"
119 filename = "USRP_processing.xml"
125 filename = "USRP_processing.xml"
120 controllerObj = Project()
126 controllerObj = Project()
121 controllerObj.setup(id = '191', name='Test_USRP', description=desc)
127 controllerObj.setup(id = '191', name='Test_USRP', description=desc)
122 #------------------------ UNIDAD DE LECTURA-------------------------------------
128 #------------------------ UNIDAD DE LECTURA-------------------------------------
123 readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader',
129 readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader',
124 path=path,
130 path=path,
125 startDate="2022/04/04",#today,
131 startDate="2022/04/01",#today,
126 endDate="2022/04/04",#today,
132 endDate="2022/04/01",#today,
127 startTime='12:11:05',#'17:39:25',
133 startTime='00:10:05',#'17:39:25',
128 endTime='23:59:59',#23:59:59',
134 endTime='23:59:59',#23:59:59',
129 delay=0,
135 delay=0,
130 #set=0,
136 #set=0,
131 online=0,
137 online=0,
132 walk=1,
138 walk=1,
133 ippKm = 60)
139 ippKm = 60)
134
140
135 opObj11 = readUnitConfObj.addOperation(name='printInfo')
141 opObj11 = readUnitConfObj.addOperation(name='printInfo')
136
142
137 procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId())
143 procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId())
138 '''
144 '''
139 opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external')
145 opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external')
140 opObj10.addParameter(name='id', value='10', format='int')
146 opObj10.addParameter(name='id', value='10', format='int')
141 opObj10.addParameter(name='zmin', value='0', format='int')
147 opObj10.addParameter(name='zmin', value='0', format='int')
142 opObj10.addParameter(name='zmax', value='3', format='int')
148 opObj10.addParameter(name='zmax', value='3', format='int')
143 opObj10.addParameter(name='type', value='iq')
149 opObj10.addParameter(name='type', value='iq')
144 opObj10.addParameter(name='ymin', value='-1200', format='int')
150 opObj10.addParameter(name='ymin', value='-1200', format='int')
145 opObj10.addParameter(name='ymax', value='1200', format='int')
151 opObj10.addParameter(name='ymax', value='1200', format='int')
146 #opObj10.addParameter(name='save', value=figpath, format='str')
152 #opObj10.addParameter(name='save', value=figpath, format='str')
147 opObj10.addParameter(name='save_period', value=10, format='int')
153 opObj10.addParameter(name='save_period', value=10, format='int')
148 '''
154 '''
149 opObj11 = procUnitConfObjA.addOperation(name='setH0')
155 opObj11 = procUnitConfObjA.addOperation(name='setH0')
150 opObj11.addParameter(name='h0', value='-1.2', format='float')
156 opObj11.addParameter(name='h0', value='-1.2', format='float')
151
157
152 opObj11 = procUnitConfObjA.addOperation(name='selectHeights')
158 opObj11 = procUnitConfObjA.addOperation(name='selectHeights')
153 opObj11.addParameter(name='minIndex', value='1', format='int')
159 opObj11.addParameter(name='minIndex', value='1', format='int')
154 #opObj11.addParameter(name='maxIndex', value='1000', format='int')
160 #opObj11.addParameter(name='maxIndex', value='1000', format='int')
155 #opObj11.addParameter(name='maxIndex', value=str(int(num_alturas/4.0)), format='int')
161 #opObj11.addParameter(name='maxIndex', value=str(int(num_alturas/4.0)), format='int')
156 # CUARTA PARTE de 60 Km POR ESO ENTRE 4 - 15 Km
162 # CUARTA PARTE de 60 Km POR ESO ENTRE 4 - 15 Km
157 opObj11.addParameter(name='maxIndex', value=str(int(num_alturas/20.0)), format='int')
163 opObj11.addParameter(name='maxIndex', value=str(int(num_alturas/20.0)), format='int')
158 # CUARTA PARTE de 60 Km POR ESO ENTRE 10 - 6 Km
164 # CUARTA PARTE de 60 Km POR ESO ENTRE 10 - 6 Km
159 # CUARTA PARTE de 60 Km POR ESO ENTRE 20 - 3 Km
165 # CUARTA PARTE de 60 Km POR ESO ENTRE 20 - 3 Km
160
166
161
167
162
168 '''
163 procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId())
169 procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId())
164 procUnitConfObjB.addParameter(name='nFFTPoints', value='32', format='int')
170 procUnitConfObjB.addParameter(name='nFFTPoints', value='32', format='int')
165 procUnitConfObjB.addParameter(name='nProfiles', value='32', format='int')
171 procUnitConfObjB.addParameter(name='nProfiles', value='32', format='int')
166
172
167
173
168 #SpectraPlot
174 #SpectraPlot
169
175
170 opObj11 = procUnitConfObjB.addOperation(name='SpectraPlot', optype='external')
176 opObj11 = procUnitConfObjB.addOperation(name='SpectraPlot', optype='external')
171 opObj11.addParameter(name='id', value='1', format='int')
177 opObj11.addParameter(name='id', value='1', format='int')
172 opObj11.addParameter(name='wintitle', value='Spectra', format='str')
178 opObj11.addParameter(name='wintitle', value='Spectra', format='str')
173 #opObj11.addParameter(name='xmin', value=-0.01, format='float')
179 #opObj11.addParameter(name='xmin', value=-0.01, format='float')
174 #opObj11.addParameter(name='xmax', value=0.01, format='float')
180 #opObj11.addParameter(name='xmax', value=0.01, format='float')
175 opObj11.addParameter(name='zmin', value=dBmin, format='int')
181 opObj11.addParameter(name='zmin', value=dBmin, format='int')
176 opObj11.addParameter(name='zmax', value=dBmax, format='int')
182 opObj11.addParameter(name='zmax', value=dBmax, format='int')
177 opObj11.addParameter(name='ymin', value=ymin, format='int')
183 opObj11.addParameter(name='ymin', value=ymin, format='int')
178 opObj11.addParameter(name='ymax', value=ymax, format='int')
184 opObj11.addParameter(name='ymax', value=ymax, format='int')
179 opObj11.addParameter(name='showprofile', value='1', format='int')
185 opObj11.addParameter(name='showprofile', value='1', format='int')
180 #opObj11.addParameter(name='save', value=figpath, format='str')
186 #opObj11.addParameter(name='save', value=figpath, format='str')
181 opObj11.addParameter(name='save_period', value=10, format='int')
187 opObj11.addParameter(name='save_period', value=10, format='int')
182
188 '''
183
189
184 if mode_proc ==0:
190 if mode_proc ==0:
185 ####################### METODO PULSE PAIR ######################################################################
191 ####################### METODO PULSE PAIR ######################################################################
186 opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other')
192 opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other')
187 opObj11.addParameter(name='n', value=int(n), format='int')#10 VOY A USAR 250 DADO QUE LA VELOCIDAD ES 10 GRADOS
193 opObj11.addParameter(name='n', value=int(n), format='int')#10 VOY A USAR 250 DADO QUE LA VELOCIDAD ES 10 GRADOS
188 #opObj11.addParameter(name='removeDC', value=1, format='int')
194 #opObj11.addParameter(name='removeDC', value=1, format='int')
189 ####################### METODO Parametros ######################################################################
195 ####################### METODO Parametros ######################################################################
190 procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId())
196 procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId())
191 if plot==1:
197 if plot==1:
192 opObj11 = procUnitConfObjB.addOperation(name='GenericRTIPlot',optype='external')
198 opObj11 = procUnitConfObjB.addOperation(name='GenericRTIPlot',optype='external')
193 opObj11.addParameter(name='attr_data', value='dataPP_POWER')
199 opObj11.addParameter(name='attr_data', value='dataPP_POWER')
194 opObj11.addParameter(name='colormap', value='jet')
200 opObj11.addParameter(name='colormap', value='jet')
195 opObj11.addParameter(name='xmin', value=xmin)
201 opObj11.addParameter(name='xmin', value=xmin)
196 opObj11.addParameter(name='xmax', value=xmax)
202 opObj11.addParameter(name='xmax', value=xmax)
197 opObj11.addParameter(name='ymin', value=ymin)
203 opObj11.addParameter(name='ymin', value=ymin)
198 opObj11.addParameter(name='ymax', value=ymax)
204 opObj11.addParameter(name='ymax', value=ymax)
199 opObj11.addParameter(name='zmin', value=dBmin)
205 opObj11.addParameter(name='zmin', value=dBmin)
200 opObj11.addParameter(name='zmax', value=dBmax)
206 opObj11.addParameter(name='zmax', value=dBmax)
201 opObj11.addParameter(name='save', value=figpath_pp)
207 opObj11.addParameter(name='save', value=figpath_pp)
202 opObj11.addParameter(name='showprofile', value=0)
208 opObj11.addParameter(name='showprofile', value=0)
203 opObj11.addParameter(name='save_period', value=10)
209 opObj11.addParameter(name='save_period', value=10)
204 ####################### METODO ESCRITURA #######################################################################
210 ####################### METODO ESCRITURA #######################################################################
205 if save==1:
211 if save==1:
206 opObj10 = procUnitConfObjB.addOperation(name='HDFWriter')
212 opObj10 = procUnitConfObjB.addOperation(name='HDFWriter')
207 opObj10.addParameter(name='path',value=path_save)
213 opObj10.addParameter(name='path',value=path_save)
208 #opObj10.addParameter(name='mode',value=0)
214 #opObj10.addParameter(name='mode',value=0)
209 opObj10.addParameter(name='blocksPerFile',value='100',format='int')
215 opObj10.addParameter(name='blocksPerFile',value='100',format='int')
210 opObj10.addParameter(name='metadataList',value='utctimeInit,timeZone,paramInterval,profileIndex,channelList,heightList,flagDataAsBlock',format='list')
216 opObj10.addParameter(name='metadataList',value='utctimeInit,timeZone,paramInterval,profileIndex,channelList,heightList,flagDataAsBlock',format='list')
211 opObj10.addParhirameter(name='dataList',value='dataPP_POWER,dataPP_DOP,utctime',format='list')#,format='list'
217 opObj10.addParhirameter(name='dataList',value='dataPP_POWER,dataPP_DOP,utctime',format='list')#,format='list'
212 if integration==1:
218 if integration==1:
213 opObj11 = procUnitConfObjB.addOperation(name='PedestalInformation')
219 opObj11 = procUnitConfObjB.addOperation(name='PedestalInformation')
214 opObj11.addParameter(name='path_ped', value=path_ped)
220 opObj11.addParameter(name='path_ped', value=path_ped)
215 opObj11.addParameter(name='t_Interval_p', value='0.01', format='float')
221 opObj11.addParameter(name='t_Interval_p', value='0.01', format='float')
216 opObj11.addParameter(name='wr_exp', value='PPI')
222 #opObj11.addParameter(name='wr_exp', value='PPI')
223 opObj11.addParameter(name='wr_exp', value='RHI')
224
217 if plot_ppi==1:
225 if plot_ppi==1:
218 opObj11 = procUnitConfObjB.addOperation(name='Block360')
226 opObj11 = procUnitConfObjB.addOperation(name='Block360')
219 opObj11.addParameter(name='n', value='10', format='int')
227 opObj11.addParameter(name='n', value='10', format='int')
220 opObj11.addParameter(name='mode', value=mode_proc, format='int')
228 opObj11.addParameter(name='mode', value=mode_proc, format='int')
221 # este bloque funciona bien con divisores de 360 no olvidar 0 10 20 30 40 60 90 120 180
229 # este bloque funciona bien con divisores de 360 no olvidar 0 10 20 30 40 60 90 120 180
222 opObj11= procUnitConfObjB.addOperation(name='WeatherPlot',optype='other')
230 opObj11= procUnitConfObjB.addOperation(name='WeatherPlot',optype='other')
223 opObj11.addParameter(name='save', value=figpath_pp_ppi)
231 opObj11.addParameter(name='save', value=figpath_pp_ppi)
224 opObj11.addParameter(name='save_period', value=1)
232 opObj11.addParameter(name='save_period', value=1)
233 if plot_rhi==1:
234 opObj11 = procUnitConfObjB.addOperation(name='Block360')
235 opObj11.addParameter(name='n', value='10', format='int')
236 opObj11.addParameter(name='mode', value=mode_proc, format='int')
237 # este bloque funciona bien con divisores de 360 no olvidar 0 10 20 30 40 60 90 120 180
238 opObj11= procUnitConfObjB.addOperation(name='WeatherRHIPlot',optype='other')
239 opObj11.addParameter(name='save', value=figpath_pp_rhi)
240 opObj11.addParameter(name='save_period', value=1)
225
241
226 controllerObj.start()
242 controllerObj.start()
General Comments 0
You need to be logged in to leave comments. Login now