@@ -220,6 +220,158 class SpectraPlot(Figure): | |||||
220 | wr_period=wr_period, |
|
220 | wr_period=wr_period, | |
221 | thisDatetime=thisDatetime) |
|
221 | thisDatetime=thisDatetime) | |
222 |
|
222 | |||
|
223 | class ACFPlot(Figure): | |||
|
224 | ||||
|
225 | isConfig = None | |||
|
226 | __nsubplots = None | |||
|
227 | ||||
|
228 | WIDTHPROF = None | |||
|
229 | HEIGHTPROF = None | |||
|
230 | PREFIX = 'acf' | |||
|
231 | ||||
|
232 | def __init__(self, **kwargs): | |||
|
233 | Figure.__init__(self, **kwargs) | |||
|
234 | self.isConfig = False | |||
|
235 | self.__nsubplots = 1 | |||
|
236 | ||||
|
237 | self.PLOT_CODE = POWER_CODE | |||
|
238 | ||||
|
239 | self.WIDTH = 700 | |||
|
240 | self.HEIGHT = 500 | |||
|
241 | self.counter_imagwr = 0 | |||
|
242 | ||||
|
243 | def getSubplots(self): | |||
|
244 | ncol = 1 | |||
|
245 | nrow = 1 | |||
|
246 | ||||
|
247 | return nrow, ncol | |||
|
248 | ||||
|
249 | def setup(self, id, nplots, wintitle, show): | |||
|
250 | ||||
|
251 | self.nplots = nplots | |||
|
252 | ||||
|
253 | ncolspan = 1 | |||
|
254 | colspan = 1 | |||
|
255 | ||||
|
256 | self.createFigure(id = id, | |||
|
257 | wintitle = wintitle, | |||
|
258 | widthplot = self.WIDTH, | |||
|
259 | heightplot = self.HEIGHT, | |||
|
260 | show=show) | |||
|
261 | ||||
|
262 | nrow, ncol = self.getSubplots() | |||
|
263 | ||||
|
264 | counter = 0 | |||
|
265 | for y in range(nrow): | |||
|
266 | for x in range(ncol): | |||
|
267 | self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1) | |||
|
268 | ||||
|
269 | def run(self, dataOut, id, wintitle="", channelList=None, | |||
|
270 | xmin=None, xmax=None, ymin=None, ymax=None, | |||
|
271 | save=False, figpath='./', figfile=None, show=True, | |||
|
272 | ftp=False, wr_period=1, server=None, | |||
|
273 | folder=None, username=None, password=None, | |||
|
274 | xaxis="frequency"): | |||
|
275 | ||||
|
276 | ||||
|
277 | if channelList == None: | |||
|
278 | channelIndexList = dataOut.channelIndexList | |||
|
279 | channelList = dataOut.channelList | |||
|
280 | else: | |||
|
281 | channelIndexList = [] | |||
|
282 | for channel in channelList: | |||
|
283 | if channel not in dataOut.channelList: | |||
|
284 | raise ValueError, "Channel %d is not in dataOut.channelList" | |||
|
285 | channelIndexList.append(dataOut.channelList.index(channel)) | |||
|
286 | ||||
|
287 | factor = dataOut.normFactor | |||
|
288 | ||||
|
289 | y = dataOut.getHeiRange() | |||
|
290 | ||||
|
291 | #z = dataOut.data_spc/factor | |||
|
292 | deltaHeight = dataOut.heightList[1] - dataOut.heightList[0] | |||
|
293 | print deltaHeight | |||
|
294 | z = dataOut.data_spc | |||
|
295 | ||||
|
296 | #z = numpy.where(numpy.isfinite(z), z, numpy.NAN) | |||
|
297 | shape = dataOut.data_spc.shape | |||
|
298 | for i in range(shape[0]): | |||
|
299 | for j in range(shape[2]): | |||
|
300 | z[i,:,j]= (z[i,:,j]+1.0)*deltaHeight*5/2.0 + j*deltaHeight | |||
|
301 | #z[i,:,j]= (z[i,:,j]+1.0)*deltaHeight*dataOut.step/2.0 + j*deltaHeight*dataOut.step | |||
|
302 | ||||
|
303 | hei_index = numpy.arange(shape[2]) | |||
|
304 | #print hei_index.shape | |||
|
305 | #b = [] | |||
|
306 | #for i in range(hei_index.shape[0]): | |||
|
307 | # if hei_index[i]%30 == 0: | |||
|
308 | # b.append(hei_index[i]) | |||
|
309 | ||||
|
310 | #hei_index= numpy.array(b) | |||
|
311 | hei_index = hei_index[300:320] | |||
|
312 | #hei_index = numpy.arange(20)*30+80 | |||
|
313 | hei_index= numpy.arange(20)*5 | |||
|
314 | if xaxis == "frequency": | |||
|
315 | x = dataOut.getFreqRange()/1000. | |||
|
316 | zdB = 10*numpy.log10(z[0,:,hei_index]) | |||
|
317 | xlabel = "Frequency (kHz)" | |||
|
318 | ylabel = "Power (dB)" | |||
|
319 | ||||
|
320 | elif xaxis == "time": | |||
|
321 | x = dataOut.getAcfRange() | |||
|
322 | zdB = z[0,:,hei_index] | |||
|
323 | xlabel = "Time (ms)" | |||
|
324 | ylabel = "ACF" | |||
|
325 | ||||
|
326 | else: | |||
|
327 | x = dataOut.getVelRange() | |||
|
328 | zdB = 10*numpy.log10(z[0,:,hei_index]) | |||
|
329 | xlabel = "Velocity (m/s)" | |||
|
330 | ylabel = "Power (dB)" | |||
|
331 | ||||
|
332 | thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0]) | |||
|
333 | title = wintitle + " ACF Plot %s" %(thisDatetime.strftime("%d-%b-%Y")) | |||
|
334 | ||||
|
335 | if not self.isConfig: | |||
|
336 | ||||
|
337 | nplots = 1 | |||
|
338 | ||||
|
339 | self.setup(id=id, | |||
|
340 | nplots=nplots, | |||
|
341 | wintitle=wintitle, | |||
|
342 | show=show) | |||
|
343 | ||||
|
344 | if xmin == None: xmin = numpy.nanmin(x)*0.9 | |||
|
345 | if xmax == None: xmax = numpy.nanmax(x)*1.1 | |||
|
346 | if ymin == None: ymin = numpy.nanmin(zdB) | |||
|
347 | if ymax == None: ymax = numpy.nanmax(zdB) | |||
|
348 | ||||
|
349 | self.isConfig = True | |||
|
350 | ||||
|
351 | self.setWinTitle(title) | |||
|
352 | ||||
|
353 | title = "Spectra Cuts: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S")) | |||
|
354 | axes = self.axesList[0] | |||
|
355 | ||||
|
356 | legendlabels = ["Range = %dKm" %y[i] for i in hei_index] | |||
|
357 | ||||
|
358 | axes.pmultilineyaxis( x, zdB, | |||
|
359 | xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, | |||
|
360 | xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, | |||
|
361 | ytick_visible=True, nxticks=5, | |||
|
362 | grid='x') | |||
|
363 | ||||
|
364 | self.draw() | |||
|
365 | ||||
|
366 | self.save(figpath=figpath, | |||
|
367 | figfile=figfile, | |||
|
368 | save=save, | |||
|
369 | ftp=ftp, | |||
|
370 | wr_period=wr_period, | |||
|
371 | thisDatetime=thisDatetime) | |||
|
372 | ||||
|
373 | ||||
|
374 | ||||
223 | class CrossSpectraPlot(Figure): |
|
375 | class CrossSpectraPlot(Figure): | |
224 |
|
376 | |||
225 | isConfig = None |
|
377 | isConfig = None |
@@ -12,6 +12,7 TOTAL_CODE = 6 #Total Power. | |||||
12 | DRIFT_CODE = 7 #Drifts graphics. |
|
12 | DRIFT_CODE = 7 #Drifts graphics. | |
13 | HEIGHT_CODE = 8 #Height profile. |
|
13 | HEIGHT_CODE = 8 #Height profile. | |
14 | PHASE_CODE = 9 #Signal Phase. |
|
14 | PHASE_CODE = 9 #Signal Phase. | |
|
15 | AFC_CODE = 10 #Autocorrelation function. | |||
15 |
|
16 | |||
16 | POWER_CODE = 16 |
|
17 | POWER_CODE = 16 | |
17 | NOISE_CODE = 17 |
|
18 | NOISE_CODE = 17 |
@@ -65,6 +65,8 class SpectraProc(ProcessingUnit): | |||||
65 | self.dataOut.beam.azimuthList = self.dataIn.beam.azimuthList |
|
65 | self.dataOut.beam.azimuthList = self.dataIn.beam.azimuthList | |
66 | self.dataOut.beam.zenithList = self.dataIn.beam.zenithList |
|
66 | self.dataOut.beam.zenithList = self.dataIn.beam.zenithList | |
67 |
|
67 | |||
|
68 | self.dataOut.step = self.dataIn.step | |||
|
69 | ||||
68 | def __getFft(self): |
|
70 | def __getFft(self): | |
69 | """ |
|
71 | """ | |
70 | Convierte valores de Voltaje a Spectra |
|
72 | Convierte valores de Voltaje a Spectra |
@@ -149,11 +149,18 class SpectraAFCProc(ProcessingUnit): | |||||
149 | data = numpy.fft.ifft(spc, axis=1) |
|
149 | data = numpy.fft.ifft(spc, axis=1) | |
150 | data = numpy.fft.fftshift(data, axes=(1,)) |
|
150 | data = numpy.fft.fftshift(data, axes=(1,)) | |
151 | spc = data.real |
|
151 | spc = data.real | |
152 | spc = spc[0,:,0] / numpy.max(numpy.abs(spc[0,:,0])) |
|
152 | shape = spc.shape #nchannels, nprofiles, nsamples | |
153 | print spc |
|
153 | ||
154 | import matplotlib.pyplot as plt |
|
154 | #print spc.shape | |
155 | #plt.plot(spc[10:]) |
|
155 | for i in range(shape[0]): | |
156 | plt.show() |
|
156 | for j in range(shape[2]): | |
|
157 | spc[i,:,j]= spc[i,:,j] / numpy.max(numpy.abs(spc[i,:,j])) | |||
|
158 | #spc = spc[0,:,250] / numpy.max(numpy.abs(spc[0,:,250])) | |||
|
159 | #print spc.shape | |||
|
160 | #import matplotlib.pyplot as plt | |||
|
161 | #print spc[0:10] | |||
|
162 | #plt.plot(spc[0,:,350]) | |||
|
163 | #plt.show() | |||
157 |
|
164 | |||
158 |
|
165 | |||
159 | self.dataOut.data_spc = spc |
|
166 | self.dataOut.data_spc = spc |
@@ -1209,7 +1209,7 class SSheightProfiles(Operation): | |||||
1209 | self.__nProfiles = dataOut.nProfiles |
|
1209 | self.__nProfiles = dataOut.nProfiles | |
1210 | self.__nHeis = dataOut.nHeights |
|
1210 | self.__nHeis = dataOut.nHeights | |
1211 | shape = dataOut.data.shape #nchannels, nprofiles, nsamples |
|
1211 | shape = dataOut.data.shape #nchannels, nprofiles, nsamples | |
1212 | print "shape",shape |
|
1212 | #print "shape",shape | |
1213 | #last test |
|
1213 | #last test | |
1214 | residue = (shape[1] - self.nsamples) % self.step |
|
1214 | residue = (shape[1] - self.nsamples) % self.step | |
1215 | if residue != 0: |
|
1215 | if residue != 0: | |
@@ -1248,6 +1248,8 class SSheightProfiles(Operation): | |||||
1248 | deltaHeight = dataOut.heightList[1] - dataOut.heightList[0] |
|
1248 | deltaHeight = dataOut.heightList[1] - dataOut.heightList[0] | |
1249 | ippSeconds = (deltaHeight*1.0e-6)/(0.15) |
|
1249 | ippSeconds = (deltaHeight*1.0e-6)/(0.15) | |
1250 |
|
1250 | |||
|
1251 | ||||
|
1252 | ||||
1251 | dataOut.data = self.sshProfiles |
|
1253 | dataOut.data = self.sshProfiles | |
1252 | dataOut.flagNoData = False |
|
1254 | dataOut.flagNoData = False | |
1253 | dataOut.heightList = numpy.arange(self.buffer.shape[1]) *self.step*deltaHeight + dataOut.heightList[0] |
|
1255 | dataOut.heightList = numpy.arange(self.buffer.shape[1]) *self.step*deltaHeight + dataOut.heightList[0] | |
@@ -1255,7 +1257,7 class SSheightProfiles(Operation): | |||||
1255 | dataOut.profileIndex = profileIndex |
|
1257 | dataOut.profileIndex = profileIndex | |
1256 | dataOut.flagDataAsBlock = True |
|
1258 | dataOut.flagDataAsBlock = True | |
1257 | dataOut.ippSeconds = ippSeconds |
|
1259 | dataOut.ippSeconds = ippSeconds | |
1258 |
|
1260 | dataOut.step = self.step | ||
1259 |
|
1261 | |||
1260 |
|
1262 | |||
1261 | # import collections |
|
1263 | # import collections |
General Comments 0
You need to be logged in to leave comments.
Login now