##// END OF EJS Templates
Cambio en la lectura de datos debido a la modificacion del formato, ahora en el archivo hdf5 se encuentra el hipoc
Alexander Valdez -
r557:e1a77c13dce6
parent child
Show More
@@ -1,815 +1,815
1 1 '''
2 2 Created on Jul 3, 2014
3 3
4 4 @author: roj-com0419
5 5 '''
6 6
7 7 import os,sys
8 8 import time,datetime
9 9 import h5py
10 10 import numpy
11 11 import fnmatch
12 12 import re
13 13 import stuffr
14 14
15 15 from model.data.jroheaderIO import RadarControllerHeader, SystemHeader
16 16 from model.data.jrodata import Voltage
17 17 from model.proc.jroproc_base import ProcessingUnit, Operation
18 18
19 19
20 20 def isNumber(str):
21 21 """
22 22 Chequea si el conjunto de caracteres que componen un string puede ser convertidos a un numero.
23 23
24 24 Excepciones:
25 25 Si un determinado string no puede ser convertido a numero
26 26 Input:
27 27 str, string al cual se le analiza para determinar si convertible a un numero o no
28 28
29 29 Return:
30 30 True : si el string es uno numerico
31 31 False : no es un string numerico
32 32 """
33 33 try:
34 34 float( str )
35 35 return True
36 36 except:
37 37 return False
38 38
39 39 def getFileFromSet(path, ext, set):
40 40 validFilelist = []
41 41 fileList = os.listdir(path)
42 42
43 43 # 0 1234 567 89A BCDE
44 44 # H YYYY DDD SSS .ext
45 45
46 46 for thisFile in fileList:
47 47 try:
48 number= int(thisFile[4:10])
48 number= int(thisFile[6:16])
49 49
50 50 # year = int(thisFile[1:5])
51 51 # doy = int(thisFile[5:8])
52 52 except:
53 53 continue
54 54
55 55 if (os.path.splitext(thisFile)[-1].lower() != ext.lower()):
56 56 continue
57 57
58 58 validFilelist.append(thisFile)
59 myfile = fnmatch.filter(validFilelist,'*%6.6d*'%(set))
59 myfile = fnmatch.filter(validFilelist,'*%10.10d*'%(set))
60 60 #myfile = fnmatch.filter(validFilelist,'*%4.4d%3.3d%3.3d*'%(year,doy,set))
61 61
62 62 if len(myfile)!= 0:
63 63 return myfile[0]
64 64 else:
65 filename = '*%6.6d%s'%(set,ext.lower())
65 filename = '*%10.10d%s'%(set,ext.lower())
66 66 print 'the filename %s does not exist'%filename
67 67 print '...going to the last file: '
68 68
69 69 if validFilelist:
70 70 validFilelist = sorted( validFilelist, key=str.lower )
71 71 return validFilelist[-1]
72 72
73 73 return None
74 74
75 75 def getlastFileFromPath(path, ext):
76 76 """
77 77 Depura el fileList dejando solo los que cumplan el formato de "res-xxxxxx.ext"
78 78 al final de la depuracion devuelve el ultimo file de la lista que quedo.
79 79
80 80 Input:
81 81 fileList : lista conteniendo todos los files (sin path) que componen una determinada carpeta
82 82 ext : extension de los files contenidos en una carpeta
83 83
84 84 Return:
85 85 El ultimo file de una determinada carpeta, no se considera el path.
86 86 """
87 87 validFilelist = []
88 88 fileList = os.listdir(path)
89 89
90 90 # 0 1234 567 89A BCDE
91 91 # H YYYY DDD SSS .ext
92 92
93 93 for thisFile in fileList:
94 94
95 95 try:
96 number= int(thisFile[4:10])
96 number= int(thisFile[6:16])
97 97 except:
98 98 print "There is a file or folder with different format"
99 99 if not isNumber(number):
100 100 continue
101 101
102 102 # year = thisFile[1:5]
103 103 # if not isNumber(year):
104 104 # continue
105 105
106 106 # doy = thisFile[5:8]
107 107 # if not isNumber(doy):
108 108 # continue
109 109
110 110 number= int(number)
111 111 # year = int(year)
112 112 # doy = int(doy)
113 113
114 114 if (os.path.splitext(thisFile)[-1].lower() != ext.lower()):
115 115 continue
116 116
117 117
118 118 validFilelist.append(thisFile)
119 119
120 120
121 121 if validFilelist:
122 122 validFilelist = sorted( validFilelist, key=str.lower )
123 123 return validFilelist[-1]
124 124
125 125 return None
126 126
127 127
128 128
129 129 class HFReader(ProcessingUnit):
130 130 '''
131 131 classdocs
132 132 '''
133 133 path = None
134 134 startDate= None
135 135 endDate = None
136 136 startTime= None
137 137 endTime = None
138 138 walk = None
139 139 isConfig = False
140 140 dataOut=None
141 141 nTries = 3
142 142 ext = ".hdf5"
143 143
144 144 def __init__(self):
145 145 '''
146 146 Constructor
147 147 '''
148 148 ProcessingUnit.__init__(self)
149 149
150 150 self.isConfig =False
151 151
152 152 self.datablock = None
153 153
154 154 self.filename_current=None
155 155
156 156 self.utc = 0
157 157
158 158 self.ext='.hdf5'
159 159
160 160 self.flagIsNewFile = 1
161 161
162 162 #-------------------------------------------------
163 163 self.fileIndex=None
164 164
165 165 self.profileIndex_offset=None
166 166
167 167 self.filenameList=[]
168 168
169 169 self.hfFilePointer= None
170 170
171 171 self.filename_online = None
172 172
173 173 self.status=True
174 174
175 175 self.flagNoMoreFiles= False
176 176
177 177 self.__waitForNewFile = 1
178 178
179 179
180 180 #--------------------------------------------------
181 181
182 182 self.dataOut = self.createObjByDefault()
183 183
184 184
185 185 def createObjByDefault(self):
186 186
187 187 dataObj = Voltage()
188 188
189 189 return dataObj
190 190
191 191 def setObjProperties(self):
192 192
193 193 pass
194 194
195 195 def getBlockDimension(self):
196 196 """
197 197 Obtiene la cantidad de puntos a leer por cada bloque de datos
198 198
199 199 Affected:
200 200 self.blocksize
201 201
202 202 Return:
203 203 None
204 204 """
205 205 pts2read =self.nChannels*self.nHeights*self.nProfiles
206 206 self.blocksize = pts2read
207 207
208 208 def __readHeader(self):
209 209
210 210 self.nProfiles = 100
211 211 self.nHeights = 1000
212 212 self.nChannels = 2
213 213 self.__firstHeigth=0
214 214 self.__nSamples=1000
215 215 self.__deltaHeigth=1.5
216 216 self.__sample_rate=1e5
217 217 #self.__frequency=2.72e6
218 218 #self.__frequency=3.64e6
219 219 self.__frequency=None
220 220 self.__online = False
221 221 self.filename_next_set=None
222 222
223 223 #print "Frequency of Operation:", self.__frequency
224 224
225 225
226 226 def __setParameters(self,path='', startDate='',endDate='',startTime='', endTime='', walk=''):
227 227 self.path = path
228 228 self.startDate = startDate
229 229 self.endDate = endDate
230 230 self.startTime = startTime
231 231 self.endTime = endTime
232 232 self.walk = walk
233 233
234 234 def __checkPath(self):
235 235 if os.path.exists(self.path):
236 236 self.status=1
237 237 else:
238 238 self.status=0
239 239 print 'Path %s does not exits'%self.path
240 240 return
241 241 return
242 242
243 243 def __selDates(self, hf_dirname_format):
244 244 try:
245 245 dir_hf_filename= self.path+"/"+hf_dirname_format
246 246 fp= h5py.File(dir_hf_filename,'r')
247 247 hipoc=fp['t'].value
248 248 fp.close()
249 249 date_time=stuffr.unix2datestr(hipoc)
250 250 year =int(date_time[0:4])
251 251 month=int(date_time[5:7])
252 252 dom =int(date_time[8:10])
253 253 thisDate= datetime.date(year,month,dom)
254 254 if (thisDate>=self.startDate and thisDate <= self.endDate):
255 255 return hf_dirname_format
256 256 except:
257 257 return None
258 258
259 259 def __findDataForDates(self,online=False):
260 260 if not(self.status):
261 261 return None
262 262
263 263 pat = '\d+.\d+'
264 264 dirnameList = [re.search(pat,x) for x in os.listdir(self.path)]
265 265 dirnameList = filter(lambda x:x!=None,dirnameList)
266 266 dirnameList = [x.string for x in dirnameList]
267 267 if not(online):
268 268
269 269 dirnameList = [self.__selDates(x) for x in dirnameList]
270 270 dirnameList = filter(lambda x:x!=None,dirnameList)
271 271
272 272 if len(dirnameList)>0:
273 273 self.status = 1
274 274 self.dirnameList = dirnameList
275 275 self.dirnameList.sort()
276 276
277 277 else:
278 278 self.status = 0
279 279 return None
280 280
281 281 def __getTimeFromData(self):
282 282 startDateTime_Reader = datetime.datetime.combine(self.startDate,self.startTime)
283 283 endDateTime_Reader = datetime.datetime.combine(self.endDate,self.endTime)
284 284 print 'Filtering Files from %s to %s'%(startDateTime_Reader, endDateTime_Reader)
285 285 print '........................................'
286 286 filter_filenameList=[]
287 287 self.filenameList.sort()
288 288 for i in range(len(self.filenameList)-1):
289 289 filename=self.filenameList[i]
290 290 dir_hf_filename= filename
291 291 fp= h5py.File(dir_hf_filename,'r')
292 292 hipoc=fp['t'].value
293 293 hipoc=hipoc+self.timezone
294 294 date_time=stuffr.unix2datestr(hipoc)
295 295 fp.close()
296 296 year =int(date_time[0:4])
297 297 month=int(date_time[5:7])
298 298 dom =int(date_time[8:10])
299 299 hour =int(date_time[11:13])
300 300 min =int(date_time[14:16])
301 301 sec =int(date_time[17:19])
302 302 this_time=datetime.datetime(year,month,dom,hour,min,sec)
303 303 if (this_time>=startDateTime_Reader and this_time <= endDateTime_Reader):
304 304 filter_filenameList.append(filename)
305 305 filter_filenameList.sort()
306 306 self.filenameList = filter_filenameList
307 307 return 1
308 308
309 309 def __getFilenameList(self):
310 310 #print "hola"
311 311 #print self.dirnameList
312 312 dirList = [os.path.join(self.path,x) for x in self.dirnameList]
313 313 self.filenameList= dirList
314 314 #print self.filenameList
315 315 #print "pase",len(self.filenameList)
316 316
317 317 def __selectDataForTimes(self, online=False):
318 318
319 319 if not(self.status):
320 320 return None
321 321 #----------------
322 322 self.__getFilenameList()
323 323 #----------------
324 324 if not(online):
325 325 if not(self.all):
326 326 self.__getTimeFromData()
327 327 if len(self.filenameList)>0:
328 328 self.status=1
329 329 self.filenameList.sort()
330 330 else:
331 331 self.status=0
332 332 return None
333 333 else:
334 334 if self.set== None:
335 335 filename =getlastFileFromPath(self.path,self.ext)
336 336
337 337 if self.flag_nextfile==True:
338 338 self.dirnameList=[filename]
339 339 fullfilename=self.path+"/"+filename
340 340 self.filenameList=[self.filenameList[-1]]
341 self.filename_next_set=int(filename[4:10])+1
341 self.filename_next_set=int(filename[6:16])+10
342 342
343 343 self.flag_nextfile=False
344 344 else:
345 if self.filename_next_set== int(filename[4:10]):
345 if self.filename_next_set== int(filename[6:16]):
346 346 self.dirnameList=[filename]
347 347 fullfilename=self.path+"/"+filename
348 348 self.filenameList=[self.filenameList[-1]]
349 self.filename_next_set=int(filename[4:10])+1
349 self.filename_next_set=int(filename[6:16])+10
350 350
351 351 else:
352 352 set=self.filename_next_set
353 353 filename=getFileFromSet(self.path,self.ext,set=set)
354 self.filename_next_set=int(filename[4:10])+1
354 self.filename_next_set=int(filename[6:16])+10
355 355 if filename==None:
356 356 filename =getlastFileFromPath(self.path,self.ext)
357 self.filename_next_set=int(filename[4:10])
357 self.filename_next_set=int(filename[6:16])
358 358 self.dirnameList=[filename]
359 359 fullfilename=self.path+"/"+filename
360 360 self.filenameList=[self.filenameList[-1]]
361 361
362 362 else:
363 363 try:
364 364 filename=getFileFromSet(self.path,self.ext,self.set)
365 365 self.dirnameList=[filename]
366 366 fullfilename=self.path+"/"+filename
367 367 self.filenameList=[fullfilename]
368 368 except:
369 369 self.filenameList=[self.filenameList[-1]]
370 370
371 371
372 372 def __searchFilesOffline(self,
373 373 path,
374 374 startDate,
375 375 endDate,
376 376 ext,
377 377 startTime=datetime.time(0,0,0),
378 378 endTime=datetime.time(23,59,59),
379 379 walk=True):
380 380
381 381 self.__setParameters(path, startDate, endDate, startTime, endTime, walk)
382 382
383 383 self.__checkPath()
384 384
385 385 self.__findDataForDates()
386 386 #print self.dirnameList
387 387
388 388 self.__selectDataForTimes()
389 389
390 390 for i in range(len(self.filenameList)):
391 391 print "%s"% (self.filenameList[i])
392 392
393 393 return
394 394
395 395 def __searchFilesOnline(self,
396 396 path,
397 397 expLabel= "",
398 398 ext=None,
399 399 startDate=None,
400 400 endDate=None,
401 401 walk=True,
402 402 set=None):
403 403
404 404
405 405 startDate = datetime.datetime.utcnow().date()
406 406 endDate = datetime.datetime.utcnow().date()
407 407
408 408 self.__setParameters(path=path,startDate=startDate,endDate=endDate,walk=walk)
409 409
410 410 self.__checkPath()
411 411
412 412 fullpath=path
413 413 print "%s folder was found: " %(fullpath )
414 414
415 415 if set == None:
416 416 self.set=None
417 417 filename =getlastFileFromPath(fullpath,ext)
418 418 startDate= datetime.datetime.utcnow().date
419 419 endDate= datetime.datetime.utcnow().date()
420 420 #
421 421 else:
422 422 filename= getFileFromSet(fullpath,ext,set)
423 423 startDate=None
424 424 endDate=None
425 425 #
426 426 if not (filename):
427 427 return None,None,None,None,None
428 428 #print "%s file was found" %(filename)
429 429
430 430 #
431 431 # dir_hf_filename= self.path+"/"+filename
432 432 # fp= h5py.File(dir_hf_filename,'r')
433 433 # hipoc=fp['t'].value
434 434 # fp.close()
435 435 # date_time=stuffr.unix2datestr(hipoc)
436 436 #
437 437 # year =int(date_time[0:4])
438 438 # month=int(date_time[5:7])
439 439 # dom =int(date_time[8:10])
440 440 # set= int(filename[4:10])
441 441 # self.set=set-1
442 442 #self.dirnameList=[filename]
443 443 filenameList= fullpath+"/"+filename
444 444 self.dirnameList=[filename]
445 445 self.filenameList=[filenameList]
446 446 self.flag_nextfile=True
447 447
448 448 #self.__findDataForDates(online=True)
449 449 #self.dirnameList=[self.dirnameList[-1]]
450 450 #print self.dirnameList
451 451 #self.__selectDataForTimes(online=True)
452 452 #return fullpath,filename,year,month,dom,set
453 453 return
454 454
455 455 def __setNextFile(self,online=False):
456 456 """
457 457 """
458 458 if not(online):
459 459 newFile = self.__setNextFileOffline()
460 460 else:
461 461 newFile = self.__setNextFileOnline()
462 462
463 463 if not(newFile):
464 464 return 0
465 465 return 1
466 466
467 467 def __setNextFileOffline(self):
468 468 """
469 469 """
470 470 idFile= self.fileIndex
471 471 while(True):
472 472 idFile += 1
473 473 if not (idFile < len(self.filenameList)):
474 474 self.flagNoMoreFiles = 1
475 475 print "No more Files"
476 476 return 0
477 477 filename = self.filenameList[idFile]
478 478 hfFilePointer =h5py.File(filename,'r')
479 479
480 480 epoc=hfFilePointer['t'].value
481 481 #this_time=datetime.datetime(year,month,dom,hour,min,sec)
482 482 break
483 483
484 484 self.flagIsNewFile = 1
485 485 self.fileIndex = idFile
486 486 self.filename = filename
487 487
488 488 self.hfFilePointer = hfFilePointer
489 489 hfFilePointer.close()
490 490 self.__t0=epoc
491 491 print "Setting the file: %s"%self.filename
492 492
493 493 return 1
494 494
495 495 def __setNextFileOnline(self):
496 496 """
497 497 """
498 498 if self.set==None:
499 499 pass
500 500 else:
501 self.set +=1
501 self.set +=10
502 502
503 503 filename = self.filenameList[0]#fullfilename
504 504 if self.filename_online != None:
505 505 self.__selectDataForTimes(online=True)
506 506 filename = self.filenameList[0]
507 507 while self.filename_online == filename:
508 508 print 'waiting %d seconds to get a new file...'%(self.__waitForNewFile)
509 509 time.sleep(self.__waitForNewFile)
510 510 #self.__findDataForDates(online=True)
511 511 self.__selectDataForTimes(online=True)
512 512 filename = self.filenameList[0]
513 513 sizeoffile=os.path.getsize(filename)
514 514
515 515 #print filename
516 516 sizeoffile=os.path.getsize(filename)
517 if sizeoffile<1650240:
517 if sizeoffile<1670240:
518 518 print "%s is not the rigth size"%filename
519 519 delay=2
520 520 print 'waiting %d seconds for delay...'%(delay)
521 521 time.sleep(delay)
522 522 sizeoffile=os.path.getsize(filename)
523 if sizeoffile<1650240:
523 if sizeoffile<1670240:
524 524 delay
525 525 print 'waiting %d more seconds for delay...'%(delay)
526 526 time.sleep(delay)
527 527
528 528
529 529
530 530 try:
531 531 hfFilePointer=h5py.File(filename,'r')
532 532
533 533 except:
534 534 print "Error reading file %s"%filename
535 535
536 536 self.filename_online=filename
537 537 epoc=hfFilePointer['t'].value
538 538
539 539 self.hfFilePointer=hfFilePointer
540 540 hfFilePointer.close()
541 541 self.__t0=epoc
542 542
543 543
544 544 self.flagIsNewFile = 1
545 545 self.filename = filename
546 546
547 547 print "Setting the file: %s"%self.filename
548 548 return 1
549 549
550 550 def __getExpParameters(self):
551 551 if not(self.status):
552 552 return None
553 553
554 554 def setup(self,
555 555 path = None,
556 556 startDate = None,
557 557 endDate = None,
558 558 startTime = datetime.time(0,0,0),
559 559 endTime = datetime.time(23,59,59),
560 560 set = None,
561 561 expLabel = "",
562 562 ext = None,
563 563 all=0,
564 564 timezone=0,
565 565 online = False,
566 566 delay = 60,
567 567 walk = True):
568 568 '''
569 569 In this method we should set all initial parameters.
570 570
571 571 '''
572 572 if path==None:
573 573 raise ValueError,"The path is not valid"
574 574
575 575 if ext==None:
576 576 ext = self.ext
577 577
578 578 self.timezone= timezone
579 579 self.online= online
580 580 self.all=all
581 581 #if set==None:
582 582
583 583 #print set
584 584 if not(online):
585 585 print "Searching files in offline mode..."
586 586
587 587 self.__searchFilesOffline(path, startDate, endDate, ext, startTime, endTime, walk)
588 588 else:
589 589 print "Searching files in online mode..."
590 590 self.__searchFilesOnline(path, walk,ext,set=set)
591 591 if set==None:
592 592 pass
593 593 else:
594 self.set=set-1
594 self.set=set-10
595 595
596 596 # for nTries in range(self.nTries):
597 597 #
598 598 # fullpath,file,year,month,day,set = self.__searchFilesOnline(path=path,expLabel=expLabel,ext=ext, walk=walk,set=set)
599 599 #
600 600 # if fullpath:
601 601 # break
602 602 # print '\tWaiting %0.2f sec for an valid file in %s: try %02d ...' % (self.delay, path, nTries+1)
603 603 # time.sleep(self.delay)
604 604 # if not(fullpath):
605 605 # print "There ins't valid files in %s" % path
606 606 # return None
607 607
608 608
609 609 if not(self.filenameList):
610 610 print "There is no files into the folder: %s"%(path)
611 611 sys.exit(-1)
612 612
613 613 self.__getExpParameters()
614 614
615 615
616 616 self.fileIndex = -1
617 617
618 618 self.__setNextFile(online)
619 619
620 620 self.__readMetadata()
621 621
622 622 self.__setLocalVariables()
623 623
624 624 self.__setHeaderDO()
625 625 #self.profileIndex_offset= 0
626 626
627 627 #self.profileIndex = self.profileIndex_offset
628 628
629 629 self.isConfig = True
630 630
631 631 def __readMetadata(self):
632 632 self.__readHeader()
633 633
634 634
635 635 def __setLocalVariables(self):
636 636
637 637 self.datablock = numpy.zeros((self.nChannels, self.nHeights,self.nProfiles), dtype = numpy.complex)
638 638 #
639 639
640 640
641 641
642 642 self.profileIndex = 9999
643 643
644 644
645 645 def __setHeaderDO(self):
646 646
647 647
648 648 self.dataOut.radarControllerHeaderObj = RadarControllerHeader()
649 649
650 650 self.dataOut.systemHeaderObj = SystemHeader()
651 651
652 652
653 653 #---------------------------------------------------------
654 654 self.dataOut.systemHeaderObj.nProfiles=100
655 655 self.dataOut.systemHeaderObj.nSamples=1000
656 656
657 657
658 658 SAMPLING_STRUCTURE=[('h0', '<f4'), ('dh', '<f4'), ('nsa', '<u4')]
659 659 self.dataOut.radarControllerHeaderObj.samplingWindow=numpy.zeros((1,),SAMPLING_STRUCTURE)
660 660 self.dataOut.radarControllerHeaderObj.samplingWindow['h0']=0
661 661 self.dataOut.radarControllerHeaderObj.samplingWindow['dh']=1.5
662 662 self.dataOut.radarControllerHeaderObj.samplingWindow['nsa']=1000
663 663 self.dataOut.radarControllerHeaderObj.nHeights=int(self.dataOut.radarControllerHeaderObj.samplingWindow['nsa'])
664 664 self.dataOut.radarControllerHeaderObj.firstHeight = self.dataOut.radarControllerHeaderObj.samplingWindow['h0']
665 665 self.dataOut.radarControllerHeaderObj.deltaHeight = self.dataOut.radarControllerHeaderObj.samplingWindow['dh']
666 666 self.dataOut.radarControllerHeaderObj.samplesWin = self.dataOut.radarControllerHeaderObj.samplingWindow['nsa']
667 667
668 668 self.dataOut.radarControllerHeaderObj.nWindows=1
669 669 self.dataOut.radarControllerHeaderObj.codetype=0
670 670 self.dataOut.radarControllerHeaderObj.numTaus=0
671 671 #self.dataOut.radarControllerHeaderObj.Taus = numpy.zeros((1,),'<f4')
672 672
673 673
674 674 #self.dataOut.radarControllerHeaderObj.nCode=numpy.zeros((1,), '<u4')
675 675 #self.dataOut.radarControllerHeaderObj.nBaud=numpy.zeros((1,), '<u4')
676 676 #self.dataOut.radarControllerHeaderObj.code=numpy.zeros(0)
677 677
678 678 self.dataOut.radarControllerHeaderObj.code_size=0
679 679 self.dataOut.nBaud=0
680 680 self.dataOut.nCode=0
681 681 self.dataOut.nPairs=0
682 682
683 683
684 684 #---------------------------------------------------------
685 685
686 686 self.dataOut.type = "Voltage"
687 687
688 688 self.dataOut.data = None
689 689
690 690 self.dataOut.dtype = numpy.dtype([('real','<f4'),('imag','<f4')])
691 691
692 692 self.dataOut.nProfiles = 1
693 693
694 694 self.dataOut.heightList = self.__firstHeigth + numpy.arange(self.__nSamples, dtype = numpy.float)*self.__deltaHeigth
695 695
696 696 self.dataOut.channelList = range(self.nChannels)
697 697
698 698 #self.dataOut.channelIndexList = None
699 699
700 700 self.dataOut.flagNoData = True
701 701
702 702 #Set to TRUE if the data is discontinuous
703 703 self.dataOut.flagDiscontinuousBlock = False
704 704
705 705 self.dataOut.utctime = None
706 706
707 707 self.dataOut.timeZone = 0
708 708
709 709 self.dataOut.dstFlag = 0
710 710
711 711 self.dataOut.errorCount = 0
712 712
713 713 self.dataOut.nCohInt = 1
714 714
715 715 self.dataOut.blocksize = self.dataOut.getNChannels() * self.dataOut.getNHeights()
716 716
717 717 self.dataOut.flagDecodeData = False #asumo que la data esta decodificada
718 718
719 719 self.dataOut.flagDeflipData = False #asumo que la data esta sin flip
720 720
721 721 self.dataOut.flagShiftFFT = False
722 722
723 723 self.dataOut.ippSeconds = 1.0*self.__nSamples/self.__sample_rate
724 724
725 725 #Time interval between profiles
726 726 #self.dataOut.timeInterval =self.dataOut.ippSeconds * self.dataOut.nCohInt
727 727
728 728
729 729 self.dataOut.frequency = self.__frequency
730 730
731 731 self.dataOut.realtime = self.__online
732 732
733 733 def __hasNotDataInBuffer(self):
734 734
735 735 if self.profileIndex >= self.nProfiles:
736 736 return 1
737 737
738 738 return 0
739 739
740 740 def readNextBlock(self):
741 741 if not(self.__setNewBlock()):
742 742 return 0
743 743
744 744 if not(self.readBlock()):
745 745 return 0
746 746
747 747 return 1
748 748
749 749 def __setNewBlock(self):
750 750
751 751 if self.hfFilePointer==None:
752 752 return 0
753 753
754 754 if self.flagIsNewFile:
755 755 return 1
756 756
757 757 if self.profileIndex < self.nProfiles:
758 758 return 1
759 759
760 760 self.__setNextFile(self.online)
761 761
762 762 return 1
763 763
764 764
765 765
766 766 def readBlock(self):
767 767 fp=h5py.File(self.filename,'r')
768 768 #Puntero que apunta al archivo hdf5
769 769 ch0=(fp['ch0']).value #Primer canal (100,1000)--(perfiles,alturas)
770 770 ch1=(fp['ch1']).value #Segundo canal (100,1000)--(perfiles,alturas)
771 771 fp.close()
772 772 ch0= ch0.swapaxes(0,1) #Primer canal (100,1000)--(alturas,perfiles)
773 773 ch1= ch1.swapaxes(0,1) #Segundo canal (100,1000)--(alturas,perfiles)
774 774 self.datablock = numpy.array([ch0,ch1])
775 775 self.flagIsNewFile=0
776 776
777 777 self.profileIndex=0
778 778
779 779 return 1
780 780
781 781 def getData(self):
782 782 if self.flagNoMoreFiles:
783 783 self.dataOut.flagNoData = True
784 784 print 'Process finished'
785 785 return 0
786 786
787 787 if self.__hasNotDataInBuffer():
788 788 if not(self.readNextBlock()):
789 789 self.dataOut.flagNodata=True
790 790 return 0
791 791
792 792 ##############################
793 793 ##############################
794 794 self.dataOut.data = self.datablock[:,:,self.profileIndex]
795 795 self.dataOut.utctime= self.__t0 + self.dataOut.ippSeconds*self.profileIndex+self.timezone
796 796 self.dataOut.profileIndex= self.profileIndex
797 797 self.dataOut.flagNoData=False
798 798 self.profileIndex +=1
799 799
800 800 return self.dataOut.data
801 801
802 802
803 803 def run(self, **kwargs):
804 804 '''
805 805 This method will be called many times so here you should put all your code
806 806 '''
807 807
808 808 if not self.isConfig:
809 809 self.setup(**kwargs)
810 810 self.isConfig = True
811 811 self.getData()
812 812
813 813
814 814
815 815 No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now