##// END OF EJS Templates
Update realiado para añadir informacion al header,adicionalmente se h modificado el datatype el cual es ahora f4 en real e imaginario.
Alexander Valdez -
r555:2b4ff9018d5c
parent child
Show More
@@ -1,781 +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 48 number= int(thisFile[4:10])
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 59 myfile = fnmatch.filter(validFilelist,'*%6.6d*'%(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 65 filename = '*%6.6d%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 96 number= int(thisFile[4:10])
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 341 self.filename_next_set=int(filename[4:10])+1
342 342
343 343 self.flag_nextfile=False
344 344 else:
345 345 if self.filename_next_set== int(filename[4:10]):
346 346 self.dirnameList=[filename]
347 347 fullfilename=self.path+"/"+filename
348 348 self.filenameList=[self.filenameList[-1]]
349 349 self.filename_next_set=int(filename[4:10])+1
350 350
351 351 else:
352 352 set=self.filename_next_set
353 353 filename=getFileFromSet(self.path,self.ext,set=set)
354 354 self.filename_next_set=int(filename[4:10])+1
355 355 if filename==None:
356 356 filename =getlastFileFromPath(self.path,self.ext)
357 357 self.filename_next_set=int(filename[4:10])
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 501 self.set +=1
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 517 if sizeoffile<1650240:
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 523 if sizeoffile<1650240:
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 594 self.set=set-1
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
653 #---------------------------------------------------------
654 self.dataOut.systemHeaderObj.nProfiles=100
655 self.dataOut.systemHeaderObj.nSamples=1000
656
657
658 SAMPLING_STRUCTURE=[('h0', '<f4'), ('dh', '<f4'), ('nsa', '<u4')]
659 self.dataOut.radarControllerHeaderObj.samplingWindow=numpy.zeros((1,),SAMPLING_STRUCTURE)
660 self.dataOut.radarControllerHeaderObj.samplingWindow['h0']=0
661 self.dataOut.radarControllerHeaderObj.samplingWindow['dh']=1.5
662 self.dataOut.radarControllerHeaderObj.samplingWindow['nsa']=1000
663 self.dataOut.radarControllerHeaderObj.nHeights=int(self.dataOut.radarControllerHeaderObj.samplingWindow['nsa'])
664 self.dataOut.radarControllerHeaderObj.firstHeight = self.dataOut.radarControllerHeaderObj.samplingWindow['h0']
665 self.dataOut.radarControllerHeaderObj.deltaHeight = self.dataOut.radarControllerHeaderObj.samplingWindow['dh']
666 self.dataOut.radarControllerHeaderObj.samplesWin = self.dataOut.radarControllerHeaderObj.samplingWindow['nsa']
667
668 self.dataOut.radarControllerHeaderObj.nWindows=1
669 self.dataOut.radarControllerHeaderObj.codetype=0
670 self.dataOut.radarControllerHeaderObj.numTaus=0
671 #self.dataOut.radarControllerHeaderObj.Taus = numpy.zeros((1,),'<f4')
672
673
674 #self.dataOut.radarControllerHeaderObj.nCode=numpy.zeros((1,), '<u4')
675 #self.dataOut.radarControllerHeaderObj.nBaud=numpy.zeros((1,), '<u4')
676 #self.dataOut.radarControllerHeaderObj.code=numpy.zeros(0)
677
678 self.dataOut.radarControllerHeaderObj.code_size=0
679 self.dataOut.nBaud=0
680 self.dataOut.nCode=0
681 self.dataOut.nPairs=0
682
683
684 #---------------------------------------------------------
685
652 686 self.dataOut.type = "Voltage"
653 687
654 688 self.dataOut.data = None
655 689
656 self.dataOut.dtype = numpy.dtype([('real','<i8'),('imag','<i8')])
690 self.dataOut.dtype = numpy.dtype([('real','<f4'),('imag','<f4')])
657 691
658 692 self.dataOut.nProfiles = 1
659 693
660 694 self.dataOut.heightList = self.__firstHeigth + numpy.arange(self.__nSamples, dtype = numpy.float)*self.__deltaHeigth
661 695
662 696 self.dataOut.channelList = range(self.nChannels)
663 697
664 698 #self.dataOut.channelIndexList = None
665 699
666 700 self.dataOut.flagNoData = True
667 701
668 702 #Set to TRUE if the data is discontinuous
669 703 self.dataOut.flagDiscontinuousBlock = False
670 704
671 705 self.dataOut.utctime = None
672 706
673 707 self.dataOut.timeZone = 0
674 708
675 709 self.dataOut.dstFlag = 0
676 710
677 711 self.dataOut.errorCount = 0
678 712
679 713 self.dataOut.nCohInt = 1
680 714
681 715 self.dataOut.blocksize = self.dataOut.getNChannels() * self.dataOut.getNHeights()
682 716
683 717 self.dataOut.flagDecodeData = False #asumo que la data esta decodificada
684 718
685 719 self.dataOut.flagDeflipData = False #asumo que la data esta sin flip
686 720
687 721 self.dataOut.flagShiftFFT = False
688 722
689 723 self.dataOut.ippSeconds = 1.0*self.__nSamples/self.__sample_rate
690 724
691 725 #Time interval between profiles
692 726 #self.dataOut.timeInterval =self.dataOut.ippSeconds * self.dataOut.nCohInt
693 727
694 728
695 729 self.dataOut.frequency = self.__frequency
696 730
697 731 self.dataOut.realtime = self.__online
698 732
699 733 def __hasNotDataInBuffer(self):
700 734
701 735 if self.profileIndex >= self.nProfiles:
702 736 return 1
703 737
704 738 return 0
705 739
706 740 def readNextBlock(self):
707 741 if not(self.__setNewBlock()):
708 742 return 0
709 743
710 744 if not(self.readBlock()):
711 745 return 0
712 746
713 747 return 1
714 748
715 749 def __setNewBlock(self):
716 750
717 751 if self.hfFilePointer==None:
718 752 return 0
719 753
720 754 if self.flagIsNewFile:
721 755 return 1
722 756
723 757 if self.profileIndex < self.nProfiles:
724 758 return 1
725 759
726 760 self.__setNextFile(self.online)
727 761
728 762 return 1
729 763
730 764
731 765
732 766 def readBlock(self):
733 767 fp=h5py.File(self.filename,'r')
734 768 #Puntero que apunta al archivo hdf5
735 769 ch0=(fp['ch0']).value #Primer canal (100,1000)--(perfiles,alturas)
736 770 ch1=(fp['ch1']).value #Segundo canal (100,1000)--(perfiles,alturas)
737 771 fp.close()
738 772 ch0= ch0.swapaxes(0,1) #Primer canal (100,1000)--(alturas,perfiles)
739 773 ch1= ch1.swapaxes(0,1) #Segundo canal (100,1000)--(alturas,perfiles)
740 774 self.datablock = numpy.array([ch0,ch1])
741 775 self.flagIsNewFile=0
742 776
743 777 self.profileIndex=0
744 778
745 779 return 1
746 780
747 781 def getData(self):
748 782 if self.flagNoMoreFiles:
749 783 self.dataOut.flagNoData = True
750 784 print 'Process finished'
751 785 return 0
752 786
753 787 if self.__hasNotDataInBuffer():
754 788 if not(self.readNextBlock()):
755 789 self.dataOut.flagNodata=True
756 790 return 0
757 791
758 792 ##############################
759 793 ##############################
760 794 self.dataOut.data = self.datablock[:,:,self.profileIndex]
761 795 self.dataOut.utctime= self.__t0 + self.dataOut.ippSeconds*self.profileIndex+self.timezone
762 796 self.dataOut.profileIndex= self.profileIndex
763 797 self.dataOut.flagNoData=False
764 798 self.profileIndex +=1
765 799
766 800 return self.dataOut.data
767 801
768 802
769 803 def run(self, **kwargs):
770 804 '''
771 805 This method will be called many times so here you should put all your code
772 806 '''
773 807
774 808 if not self.isConfig:
775 809 self.setup(**kwargs)
776 810 self.isConfig = True
777 811 self.getData()
778 812
779 813
780 814
781 815 No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now