##// END OF EJS Templates
update VOLT ACF PLOT
avaldez -
r1262:d63ca7e1ab2f
parent child
Show More
@@ -446,6 +446,8 class Voltage(JROData):
446
446
447 self.flagDataAsBlock = False # Asumo que la data es leida perfil a perfil
447 self.flagDataAsBlock = False # Asumo que la data es leida perfil a perfil
448
448
449 self.ippFactor = 1
450
449 self.profileIndex = 0
451 self.profileIndex = 0
450
452
451 def getNoisebyHildebrand(self, channel=None):
453 def getNoisebyHildebrand(self, channel=None):
@@ -501,6 +503,21 class Voltage(JROData):
501
503
502 return timeInterval
504 return timeInterval
503
505
506 def getAcfRange(self, extrapoints=0):
507 #print "GET ACF RANGE"
508 #print "NFFTPoints",self.nFFTPoints
509 #print "IPPFactor", self.ippFactor
510 #deltafreq = 10. / ( self.getFmax() / (self.nFFTPoints * self.ippFactor) )
511 deltatime = 1./(self.getFmax()/ self.ippFactor)
512 #print "getFmax",self.getFmax()
513 #import time
514 #time.sleep(30)
515 timerange = deltatime * \
516 (numpy.arange(self.nProfiles + extrapoints))#- self.nProfiles / 2.)
517 #- deltafreq / 2
518 #print "timerange",timerange
519 return timerange
520
504 noise = property(getNoise, "I'm the 'nHeights' property.")
521 noise = property(getNoise, "I'm the 'nHeights' property.")
505 timeInterval = property(getTimeInterval, "I'm the 'timeInterval' property")
522 timeInterval = property(getTimeInterval, "I'm the 'timeInterval' property")
506
523
@@ -8,6 +8,7 import datetime
8 import numpy
8 import numpy
9
9
10 from figure import Figure
10 from figure import Figure
11 from plotting_codes import *
11
12
12 class Scope(Figure):
13 class Scope(Figure):
13
14
@@ -223,3 +224,203 class Scope(Figure):
223 ftp=ftp,
224 ftp=ftp,
224 wr_period=wr_period,
225 wr_period=wr_period,
225 thisDatetime=thisDatetime)
226 thisDatetime=thisDatetime)
227
228
229 class VoltACFPLot(Figure):
230
231 isConfig = None
232 __nsubplots = None
233 PREFIX = 'voltacf'
234
235 def __init__(self, **kwargs):
236 Figure.__init__(self,**kwargs)
237 self.isConfig = False
238 self.__nsubplots = 1
239 self.PLOT_CODE = VOLT_ACF_CODE
240 self.WIDTH = 900
241 self.HEIGHT = 700
242 self.counter_imagwr= 0
243 self.FTP_WEI = None
244 self.EXP_CODE = None
245 self.SUB_EXP_CODE = None
246 self.PLOT_POS = None
247
248 def getSubplots(self) :
249 ncol = 1
250 nrow = 1
251 return nrow, ncol
252
253 def setup(self,id, nplots,wintitle,show):
254 self.nplots = nplots
255 ncolspan = 1
256 colspan = 1
257 self.createFigure(id=id,
258 wintitle = wintitle,
259 widthplot = self.WIDTH,
260 heightplot = self.HEIGHT,
261 show = show)
262 nrow, ncol = self.getSubplots()
263 counter = 0
264 for y in range(nrow):
265 for x in range(ncol):
266 self.addAxes(nrow, ncol*ncolspan,y, x*ncolspan, colspan, 1)
267
268 def run(self,dataOut, id, wintitle="",channelList = None , channel =None, nSamples = None,
269 nSampleList= None, resolutionFactor=None, xmin= None, xmax = None, ymin=None, ymax=None,
270 save= False, figpath='./', figfile= None,show= True, ftp= False, wr_period=1, server= None,
271 folder= None, username =None, password= None, ftp_wei=0 , exp_code=0,sub_exp_code=0,plot_pos=0,
272 xaxis="time"):
273
274 channel0 = channel
275 nSamples = nSamples
276 resFactor = resolutionFactor
277
278 if nSamples == None:
279 nSamples = 20
280
281 if resFactor == None:
282 resFactor = 5
283
284 if channel0 == None:
285 channel0 = 0
286 else:
287 if channel0 not in dataOut.channelList:
288 raise ValueError, "Channel %d is not in %s dataOut.channelList"%(channel0, dataOut.channelList)
289
290 if channelList == None:
291 channelIndexList = dataOut.channelIndexList
292 channelList = dataOut.channelList
293
294 else:
295 channelIndexList = []
296 for channel in channelList:
297 if channel not in dataOut.channelList:
298 raise ValueError, "Channel %d is not in dataOut.channelList"
299 channelIndexList.append(dataOut.channelList.index(channel))
300
301
302 #factor = dataOut.normFactor
303 y = dataOut.getHeiRange()
304 #print y, dataOut.heightList[0]
305 #print "pause"
306 #import time
307 #time.sleep(10)
308 deltaHeight = dataOut.heightList[1]-dataOut.heightList[0]
309 z = dataOut.data
310
311 shape = dataOut.data.shape
312 hei_index = numpy.arange(shape[2])
313 hei_plot = numpy.arange(nSamples)*resFactor
314
315 if nSampleList is not None:
316 for nsample in nSampleList:
317 if nsample not in dataOut.heightList/deltaHeight:
318 print "Lista available : %s "%(dataOut.heightList/deltaHeight)
319 raise ValueError, "nsample %d is not in %s dataOut.heightList"%(nsample,dataOut.heightList)
320
321 if nSampleList is not None:
322 hei_plot = numpy.array(nSampleList)*resFactor
323
324 if hei_plot[-1] >= hei_index[-1]:
325 print ("La cantidad de puntos en altura es %d y la resolucion es %f Km"%(hei_plot.shape[0],deltaHeight*resFactor ))
326 raise ValueError, "resFactor %d multiplicado por el valor de %d nSamples es mayor a %d cantidad total de puntos"%(resFactor,nSamples,hei_index[-1])
327
328 #escalamiento -1 a 1 a resolucion (factor de resolucion en altura)* deltaHeight
329 #min = numpy.min(z[0,:,0])
330 #max =numpy.max(z[0,:,0])
331 for i in range(shape[0]):
332 for j in range(shape[2]):
333 min = numpy.min(z[i,:,j])
334 max = numpy.max(z[i,:,j])
335 z[i,:,j]= (((z[i,:,j]-min)/(max-min))*deltaHeight*resFactor + j*deltaHeight+dataOut.heightList[0])
336
337
338 if xaxis == "time":
339 x = dataOut.getAcfRange()*1000
340 zdB = z[channel0,:,hei_plot]
341 xlabel = "Time (ms)"
342 ylabel = "VOLT_ACF"
343
344
345 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
346 title = wintitle + "VOLT ACF Plot Ch %s %s" %(channel0,thisDatetime.strftime("%d-%b-%Y"))
347
348 if not self.isConfig:
349
350 nplots = 1
351
352 self.setup(id=id,
353 nplots=nplots,
354 wintitle=wintitle,
355 show=show)
356
357 if xmin == None: xmin = numpy.nanmin(x)#*0.9
358 if xmax == None: xmax = numpy.nanmax(x)#*1.1
359 if ymin == None: ymin = numpy.nanmin(zdB)
360 if ymax == None: ymax = numpy.nanmax(zdB)
361
362 print ("El parametro resFactor es %d y la resolucion en altura es %f"%(resFactor,deltaHeight ))
363 print ("La cantidad de puntos en altura es %d y la nueva resolucion es %f Km"%(hei_plot.shape[0],deltaHeight*resFactor ))
364 print ("La altura maxima es %d Km"%(hei_plot[-1]*deltaHeight ))
365
366 self.FTP_WEI = ftp_wei
367 self.EXP_CODE = exp_code
368 self.SUB_EXP_CODE = sub_exp_code
369 self.PLOT_POS = plot_pos
370
371 self.isConfig = True
372
373 self.setWinTitle(title)
374
375 title = "VOLT ACF Plot: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
376 axes = self.axesList[0]
377
378 legendlabels = ["Range = %dKm" %y[i] for i in hei_plot]
379
380 axes.pmultilineyaxis( x, zdB,
381 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
382 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels,
383 ytick_visible=True, nxticks=5,
384 grid='x')
385
386 self.draw()
387
388 if figfile == None:
389 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
390 name = str_datetime
391 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
392 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
393 figfile = self.getFilename(name)
394
395 self.save(figpath=figpath,
396 figfile=figfile,
397 save=save,
398 ftp=ftp,
399 wr_period=wr_period,
400 thisDatetime=thisDatetime)
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
@@ -1,6 +1,9
1 '''
1 '''
2 @author: roj-idl71
2 @author: roj-idl71
3 '''
3 '''
4 #USED IN jroplot_voltage.py
5 VOLT_ACF_CODE =11 # Volt Autocorrelation function
6
4 #USED IN jroplot_spectra.py
7 #USED IN jroplot_spectra.py
5 RTI_CODE = 0 #Range time intensity (RTI).
8 RTI_CODE = 0 #Range time intensity (RTI).
6 SPEC_CODE = 1 #Spectra (and Cross-spectra) information.
9 SPEC_CODE = 1 #Spectra (and Cross-spectra) information.
@@ -14,6 +17,7 HEIGHT_CODE = 8 #Height profile.
14 PHASE_CODE = 9 #Signal Phase.
17 PHASE_CODE = 9 #Signal Phase.
15 ACF_CODE = 10 #Autocorrelation function.
18 ACF_CODE = 10 #Autocorrelation function.
16
19
20
17 POWER_CODE = 16
21 POWER_CODE = 16
18 NOISE_CODE = 17
22 NOISE_CODE = 17
19 BEACON_CODE = 18
23 BEACON_CODE = 18
@@ -1462,6 +1462,7 class voltACFLags(Operation):
1462 dataOut.data = self.tmp
1462 dataOut.data = self.tmp
1463 dataOut.mode = self.mode
1463 dataOut.mode = self.mode
1464 dataOut.nLags = len(self.lags)
1464 dataOut.nLags = len(self.lags)
1465 dataOut.nProfiles = len(self.lags)
1465 dataOut.pairsList = pairsList
1466 dataOut.pairsList = pairsList
1466 dataOut.nPairs = len(pairsList)
1467 dataOut.nPairs = len(pairsList)
1467 dataOut.lagRange = numpy.array(self.lags)*delta
1468 dataOut.lagRange = numpy.array(self.lags)*delta
@@ -16,7 +16,7 if __name__ == '__main__':
16
16
17 desc = "High altitude experiment SHORT "
17 desc = "High altitude experiment SHORT "
18 filename = "schain.xml"
18 filename = "schain.xml"
19 dpath = '/home/soporte/test_avp'
19 dpath = '/media/soporte/APOLLO/hybrid'#'/home/soporte/test_avp'
20 figpath = "/home/soporte/pics"
20 figpath = "/home/soporte/pics"
21 remotefolder = "/home/wmaster/graficos"
21 remotefolder = "/home/wmaster/graficos"
22 t=['0','24']
22 t=['0','24']
@@ -31,11 +31,11 if __name__ == '__main__':
31
31
32 readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage',
32 readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage',
33 path=dpath,
33 path=dpath,
34 startDate='2019/10/14',
34 startDate='2019/10/16',
35 # startDate='2018/06/18',
35 # startDate='2018/06/18',
36 endDate='2019/10/14',
36 endDate='2019/10/16',
37 # endDate='2018/06/18',
37 # endDate='2018/06/18',
38 startTime='14:00:00',
38 startTime='00:00:00',
39 endTime='23:59:59',
39 endTime='23:59:59',
40 online=0,
40 online=0,
41 walk=0,
41 walk=0,
General Comments 0
You need to be logged in to leave comments. Login now