##// END OF EJS Templates
VOTAJEIO.py:...
Victor Sarmiento -
r46:f6891cff9cbe
parent child
Show More
@@ -21,6 +21,39 from IO.DataIO import DataWriter
21 from Model.Voltage import Voltage
21 from Model.Voltage import Voltage
22
22
23
23
24 def isFileOK(filename):
25 """
26 Determina si la cabecera de un archivo es valido o no, si lo es entonces seria un archivo que podria contener data,
27 si no seria un archivo invalido
28
29 Return:
30 True : si es un archivo valido
31 False : si no es un archivo valido
32
33 Exceptions:
34 Si al leer la cabecera esta no coincide con el tipo de las variables que la contienen entonces se dispara
35 una exception
36 """
37 m_BasicHeader = BasicHeader()
38 m_ProcessingHeader = ProcessingHeader()
39 m_RadarControllerHeader = RadarControllerHeader()
40 m_SystemHeader = SystemHeader()
41 fp = None
42
43 try:
44 fp = open( filename,'rb' ) #lectura binaria
45 m_BasicHeader.read(fp)
46 m_SystemHeader.read(fp)
47 m_RadarControllerHeader.read(fp)
48 m_ProcessingHeader.read(fp)
49 fp.close()
50 except:
51 if fp != None: fp.close()
52 return False
53
54 return True
55
56
24 def getlastFileFromPath( pathList, ext ):
57 def getlastFileFromPath(pathList,ext):
25 """
58 """
26 Depura el pathList dejando solo los que cumplan el formato de "PYYYYDDDSSS.ext"
59 Depura el pathList dejando solo los que cumplan el formato de "PYYYYDDDSSS.ext"
@@ -60,7 +93,7 def getlastFileFromPath( pathList, ext ):
60
93
61 def checkForRealPath( path, year, doy, set, ext ):
94 def checkForRealPath(path,year,doy,set,ext):
62 """
95 """
63 Por ser Linux Case Sensitive entonces checkForRealPath encuentra el nombre correcto de un path,
96 Por ser Linux Case Sensitive la funcion checkForRealPath encuentra el nombre correcto de un path,
64 Prueba por varias combinaciones de nombres entre mayusculas y minusculas para determinar
97 Prueba por varias combinaciones de nombres entre mayusculas y minusculas para determinar
65 el path exacto de un determinado file.
98 el path exacto de un determinado file.
66
99
@@ -68,14 +101,14 def checkForRealPath( path, year, doy, set, ext ):
68 nombre correcto del file es ../RAWDATA/D2009307/P2009307367
101 nombre correcto del file es ../RAWDATA/D2009307/P2009307367
69
102
70 Entonces la funcion prueba con las siguientes combinaciones
103 Entonces la funcion prueba con las siguientes combinaciones
71 ../RAWDATA/d2009307/p2009307367
104 ../.../d2009307/d2009307367
72 ../RAWDATA/d2009307/P2009307367
105 ../.../d2009307/D2009307367
73 ../RAWDATA/D2009307/p2009307367
106 ../.../D2009307/d2009307367
74 ../RAWDATA/D2009307/P2009307367
107 ../.../D2009307/D2009307367
75 siendo para este caso, la ultima combinacion de letras, identica al file buscado
108 siendo para este caso, la ultima combinacion de letras, identica al file buscado
76
109
77 Return:
110 Return:
78 Si encuentra la cobinacion adecuada devuelve el path completo y el nombre del file
111 Si encuentra la combinacion adecuada devuelve el path completo y el nombre del file
79 caso contrario devuelve None como path y el la ultima combinacion de nombre en mayusculas
112 caso contrario devuelve None como path y el la ultima combinacion de nombre en mayusculas
80 para el filename
113 para el filename
81 """
114 """
@@ -159,6 +192,7 def isThisFileinRange(filename, startUTSeconds, endUTSeconds):
159
192
160 return 1
193 return 1
161
194
195
162 class VoltageReader(DataReader):
196 class VoltageReader(DataReader):
163 """
197 """
164 Esta clase permite leer datos de voltage desde archivos en formato rawdata (.r). La lectura
198 Esta clase permite leer datos de voltage desde archivos en formato rawdata (.r). La lectura
@@ -201,6 +235,7 class VoltageReader(DataReader):
201 #speed of light
235 #speed of light
202 __c = 3E8
236 __c = 3E8
203
237
238
204 def __init__(self, m_Voltage = None):
239 def __init__(self,m_Voltage=None):
205 """
240 """
206 Inicializador de la clase VoltageReader para la lectura de datos de voltage.
241 Inicializador de la clase VoltageReader para la lectura de datos de voltage.
@@ -299,6 +334,9 class VoltageReader(DataReader):
299 self.__path = None
334 self.__path = None
300 self.__pts2read = 0
335 self.__pts2read = 0
301 self.__blocksize = 0
336 self.__blocksize = 0
337 self.__utc = 0
338 self.nBlocks = 0
339
302
340
303 def __rdSystemHeader(self,fp=None):
341 def __rdSystemHeader(self,fp=None):
304 if fp == None:
342 if fp == None:
@@ -306,18 +344,21 class VoltageReader(DataReader):
306
344
307 self.m_SystemHeader.read(fp)
345 self.m_SystemHeader.read(fp)
308
346
347
309 def __rdRadarControllerHeader(self,fp=None):
348 def __rdRadarControllerHeader(self,fp=None):
310 if fp == None:
349 if fp == None:
311 fp = self.__fp
350 fp = self.__fp
312
351
313 self.m_RadarControllerHeader.read(fp)
352 self.m_RadarControllerHeader.read(fp)
314
353
354
315 def __rdProcessingHeader(self,fp=None):
355 def __rdProcessingHeader(self,fp=None):
316 if fp == None:
356 if fp == None:
317 fp = self.__fp
357 fp = self.__fp
318
358
319 self.m_ProcessingHeader.read(fp)
359 self.m_ProcessingHeader.read(fp)
320
360
361
321 def __rdBasicHeader(self, fp=None):
362 def __rdBasicHeader(self,fp=None):
322
363
323 if fp == None:
364 if fp == None:
@@ -325,8 +366,26 class VoltageReader(DataReader):
325
366
326 self.m_BasicHeader.read(fp)
367 self.m_BasicHeader.read(fp)
327
368
369
328 def __readFirstHeader(self):
370 def __readFirstHeader(self):
371 """
372 Lectura del First Header, es decir el Basic Header y el Long Header
373
374 Affected:
375 self.m_BasicHeader
376 self.m_SystemHeader
377 self.m_RadarControllerHeader
378 self.m_ProcessingHeader
379 self.firstHeaderSize
380 self.__heights
381 self.__dataType
382 self.__fileSizeByHeader
383 self.__ippSeconds
384 self.__blocksize
385 self.__pts2read
329
386
387 Return: None
388 """
330 self.__rdBasicHeader()
389 self.__rdBasicHeader()
331 self.__rdSystemHeader()
390 self.__rdSystemHeader()
332 self.__rdRadarControllerHeader()
391 self.__rdRadarControllerHeader()
@@ -392,12 +451,9 class VoltageReader(DataReader):
392 countFiles = 0
451 countFiles = 0
393 countTries = 0
452 countTries = 0
394
453
395 fileStatus = 0
396 notFirstTime_flag = False
454 notFirstTime_flag = False
397 bChangeDir = False
455 fileOk_flag = False
398
456 changeDir_flag = False
399 fileSize = 0
400 fp = None
401
457
402 self.__flagIsNewFile = 0
458 self.__flagIsNewFile = 0
403
459
@@ -413,80 +469,73 class VoltageReader(DataReader):
413 if countFiles > self.__nFiles: #si no encuentro el file buscado cambio de carpeta y busco en la siguiente carpeta
469 if countFiles > self.__nFiles: #si no encuentro el file buscado cambio de carpeta y busco en la siguiente carpeta
414 self.__set = 0
470 self.__set = 0
415 self.__doy += 1
471 self.__doy += 1
416 bChangeDir = True
472 changeDir_flag = True
417
473
418 file = None
474 file = None
419 filename = None
475 filename = None
476 fileOk_flag = False
420
477
421 countTries = 0
478 #busca el 1er file disponible
422
479 file, filename = checkForRealPath( self.__path, self.__year, self.__doy, self.__set, self.__ext )
423 #espero hasta encontrar el 1er file disponible
424 while( True ):
425
480
426 countTries += 1
481 if file == None:
427 if( countTries >= self.__nTries ): #checkeo que no haya ido mas alla de la cantidad de intentos
482 if notFirstTime_flag: #si no es la primera vez que busca el file entonces no espera y busca for el siguiente file
428 break
483 print "\tsearching next \"%s\" file ..." % ( filename )
484 continue
485 else: #si es la primera vez que busca el file entonces espera self.__nTries veces hasta encontrarlo o no
486 for nTries in range( self.__nTries ):
487 print "\twaiting new \"%s\" file, try %03d ..." % ( filename, nTries+1 )
488 time.sleep( self.__delay )
429
489
430 file, filename = checkForRealPath( self.__path, self.__year, self.__doy, self.__set, self.__ext )
490 file, filename = checkForRealPath( self.__path, self.__year, self.__doy, self.__set, self.__ext )
431 if file != None:
491 if file != None:
492 fileOk_flag = True
432 break
493 break
433
494
434 if notFirstTime_flag: #este flag me sirve solo para esperar por el 1er file, en lo siguientes no espera solo checkea si existe o no
495 if not( fileOk_flag ): #no encontro ningun file valido a leer despues de haber esperado alguno
435 countTries = self.__nTries
436 print "\tsearching next \"%s\" file ..." % filename
437 break
438
439 print "\twaiting new \"%s\" file ..." % filename
440 time.sleep( self.__delay )
441
442 if countTries >= self.__nTries: #se realizaron n intentos y no hubo un file nuevo
443 notFirstTime_flag = True
496 notFirstTime_flag = True
444 continue #vuelvo al inico del while principal
497 continue
445
498
446 countTries = 0
499 #una vez que se obtuvo el 1er file valido se procede a checkear si si tamanho es suficiente para empezar a leerlo
500 currentSize = os.path.getsize( file )
501 neededSize = self.m_ProcessingHeader.blockSize + self.firstHeaderSize
447
502
448 #una vez que se obtuvo el 1er file valido se procede a checkear su contenido, y se espera una cierta cantidad
503 #si el tamanho es suficiente entonces deja de buscar
449 #de tiempo por una cierta cantidad de veces hasta que el contenido del file sea un contenido valido
504 if currentSize > neededSize:# and (neededSize != 0):
450 while( True ):
505 fileOk_flag = True
451 countTries += 1
452 if countTries > self.__nTries:
453 break
506 break
454
507
455 try:
508 fileOk_flag = False
456 fp = open(file)
509 #si el file no tiene el tamanho necesario se espera una cierta cantidad de tiempo
457 except:
510 #por una cierta cantidad de veces hasta que el contenido del file sea valido
458 print "The file \"%s\" can't be opened" % file
511 if changeDir_flag: #si al buscar un file cambie de directorio ya no espero y sigo con el siguiente file
459 break
512 print "\tsearching next \"%s\" file ..." % filename
513 changeDir_flag = False
514 continue
460
515
461 fileSize = os.path.getsize( file )
516 for nTries in range( self.__nTries ):
462 currentSize = fileSize - fp.tell()
517 print "\twaiting for the First Header block of \"%s\" file, try %03d ..." % ( filename, nTries+1 )
518 time.sleep( self.__delay )
519
520 currentSize = os.path.getsize( file )
463 neededSize = self.m_ProcessingHeader.blockSize + self.firstHeaderSize
521 neededSize = self.m_ProcessingHeader.blockSize + self.firstHeaderSize
464
522
465 if currentSize > neededSize:
523 if currentSize > neededSize:
466 fileStatus = 1
524 fileOk_flag = True
467 break
468
469 fp.close()
470
471 if bChangeDir: #si al buscar un file cambie de directorio ya no espero y salgo del bucle while
472 print "\tsearching next \"%s\" file ..." % filename
473 break
525 break
474
526
475 print "\twaiting for block of \"%s\" file ..." % filename
527 if fileOk_flag: #si encontro un file valido sale del bucle y deja de buscar
476 time.sleep( self.__delay )
477
478 if fileStatus == 1:
479 break
528 break
480
529
481 print "Skipping the file \"%s\" due to this files is empty" % filename
530 print "Skipping the file \"%s\" due to this files is empty" % filename
482 countFiles = 0
531 countFiles = 0
483
532
484
533 if fileOk_flag:
485 if fileStatus == 1:
534 self.fileSize = os.path.getsize( file ) #fileSize
486 self.fileSize = fileSize
487 self.filename = file
535 self.filename = file
488 self.__flagIsNewFile = 1
536 self.__flagIsNewFile = 1
489 self.__fp = fp
537 if self.__fp != None: self.__fp.close()
538 self.__fp = open(file)
490 self.noMoreFiles = 0
539 self.noMoreFiles = 0
491 print 'Setting the file: %s' % file
540 print 'Setting the file: %s' % file
492 else:
541 else:
@@ -496,7 +545,7 class VoltageReader(DataReader):
496 self.noMoreFiles = 1
545 self.noMoreFiles = 1
497 print 'No more Files'
546 print 'No more Files'
498
547
499 return fileStatus
548 return fileOk_flag
500
549
501
550
502 def __setNextFileOffline(self):
551 def __setNextFileOffline(self):
@@ -508,6 +557,7 class VoltageReader(DataReader):
508
557
509 if not(idFile < len(self.filenameList)):
558 if not(idFile < len(self.filenameList)):
510 self.noMoreFiles = 1
559 self.noMoreFiles = 1
560 print 'No more Files'
511 return 0
561 return 0
512
562
513 filename = self.filenameList[idFile]
563 filename = self.filenameList[idFile]
@@ -537,6 +587,7 class VoltageReader(DataReader):
537
587
538 return 1
588 return 1
539
589
590
540 def __setNextFile( self ):
591 def __setNextFile(self):
541 """
592 """
542 Determina el siguiente file a leer y si hay uno disponible lee el First Header
593 Determina el siguiente file a leer y si hay uno disponible lee el First Header
@@ -560,11 +611,14 class VoltageReader(DataReader):
560 else:
611 else:
561 newFile = self.__setNextFileOffline()
612 newFile = self.__setNextFileOffline()
562
613
614 if self.noMoreFiles:
615 sys.exit(0)
616
563 if not(newFile):
617 if not(newFile):
564 return 0
618 return 0
565
619
566 self.__readFirstHeader()
620 self.__readFirstHeader()
567
621 self.nBlocks = 0
568 return 1
622 return 1
569
623
570
624
@@ -594,15 +648,22 class VoltageReader(DataReader):
594 if ( currentSize >= neededSize ):
648 if ( currentSize >= neededSize ):
595 self.__rdBasicHeader()
649 self.__rdBasicHeader()
596 return 1
650 return 1
597 elif self.online:
651
598 nTries = 0
652 #si es OnLine y ademas aun no se han leido un bloque completo entonces se espera por uno valido
599 while( nTries < self.__nTries ):
653 elif (self.nBlocks != self.m_ProcessingHeader.dataBlocksPerFile) and self.online:
600 nTries += 1
654 for nTries in range( self.__nTries ):
601 print "Waiting for the next block, try %03d ..." % nTries
655
656 fpointer = self.__fp.tell()
657 self.__fp.close()
658
659 print "\tWaiting for the next block, try %03d ..." % (nTries+1)
602 time.sleep( self.__delay )
660 time.sleep( self.__delay )
603
661
604 fileSize = os.path.getsize(self.filename)
662 self.__fp = open( self.filename, 'rb' )
605 currentSize = fileSize - self.__fp.tell()
663 self.__fp.seek( fpointer )
664
665 self.fileSize = os.path.getsize( self.filename )
666 currentSize = self.fileSize - self.__fp.tell()
606 neededSize = self.m_ProcessingHeader.blockSize + self.basicHeaderSize
667 neededSize = self.m_ProcessingHeader.blockSize + self.basicHeaderSize
607
668
608 if ( currentSize >= neededSize ):
669 if ( currentSize >= neededSize ):
@@ -619,10 +680,11 class VoltageReader(DataReader):
619
680
620 if deltaTime > self.__maxTimeStep:
681 if deltaTime > self.__maxTimeStep:
621 self.flagResetProcessing = 1
682 self.flagResetProcessing = 1
622 self.nReadBlocks = 0
683 #self.nReadBlocks = 0
623
684
624 return 1
685 return 1
625
686
687
626 def __readBlock(self):
688 def __readBlock(self):
627 """
689 """
628 __readBlock lee el bloque de datos desde la posicion actual del puntero del archivo
690 __readBlock lee el bloque de datos desde la posicion actual del puntero del archivo
@@ -630,71 +692,66 class VoltageReader(DataReader):
630 (metadata + data). La data leida es almacenada en el buffer y el contador del buffer
692 (metadata + data). La data leida es almacenada en el buffer y el contador del buffer
631 es seteado a 0
693 es seteado a 0
632
694
633
634 Inputs:
695 Inputs:
635 None
696 None
636
697
637 Return:
698 Return:
638 None
699 None
639
700
640 Variables afectadas:
701 Affected:
641
642 self.__datablockIndex
702 self.__datablockIndex
643
644 self.datablock
703 self.datablock
645
646 self.__flagIsNewFile
704 self.__flagIsNewFile
647
648 self.idProfile
705 self.idProfile
649
650 self.flagIsNewBlock
706 self.flagIsNewBlock
651
652 self.nReadBlocks
707 self.nReadBlocks
653
708
709 Exceptions:
710 Si un bloque leido no es un bloque valido
654 """
711 """
655
712 blockOk_flag = False
656 #pts2read = self.m_ProcessingHeader.profilesPerBlock*self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels
657
658 fpointer = self.__fp.tell()
713 fpointer = self.__fp.tell()
659
714
660 junk = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read )
715 junk = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read )
661
716
662 if self.online:
717 if self.online:
663 if junk.size != self.__blocksize:
718 if junk.size != self.__blocksize:
664 nTries = 0
719 for nTries in range( self.__nTries ):
665 while( nTries < self.__nTries ):
720 print "\tWaiting for the next block, try %03d ..." % (nTries+1)
666 nTries += 1
667 print "Waiting for the next block, try %03d ..." % nTries
668 time.sleep( self.__delay )
721 time.sleep( self.__delay )
669 self.__fp.seek( fpointer )
722 self.__fp.seek( fpointer )
670 fpointer = self.__fp.tell()
723 fpointer = self.__fp.tell()
671 junk = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read )
724 junk = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read )
672 if junk.size == self.__blocksize:
725 if junk.size == self.__blocksize:
673 nTries = 0
726 blockOk_flag = True
674 break
727 break
675 if nTries > 0:
676 return
677
728
729 if not( blockOk_flag ):
730 return 0
731
732 try:
678 junk = junk.reshape( (self.m_ProcessingHeader.profilesPerBlock, self.m_ProcessingHeader.numHeights, self.m_SystemHeader.numChannels) )
733 junk = junk.reshape( (self.m_ProcessingHeader.profilesPerBlock, self.m_ProcessingHeader.numHeights, self.m_SystemHeader.numChannels) )
734 except:
735 print "Data file %s is invalid" % self.filename
736 return 0
679
737
680 data = junk['real'] + junk['imag']*1j
738 #data = junk['real'] + junk['imag']*1j
739 self.datablock = junk['real'] + junk['imag']*1j
681
740
682 self.__datablockIndex = 0
741 self.__datablockIndex = 0
683
684 self.datablock = data
685
686 self.__flagIsNewFile = 0
742 self.__flagIsNewFile = 0
687
688 self.idProfile = 0
743 self.idProfile = 0
689
690 self.flagIsNewBlock = 1
744 self.flagIsNewBlock = 1
691
745
692 self.nReadBlocks += 1
746 self.nReadBlocks += 1
747 self.nBlocks += 1
748
749 return 1
750
693
751
694 def __hasNotDataInBuffer(self):
752 def __hasNotDataInBuffer(self):
695 if self.__datablockIndex >= self.m_ProcessingHeader.profilesPerBlock:
753 if self.__datablockIndex >= self.m_ProcessingHeader.profilesPerBlock:
696 return 1
754 return 1
697
698 return 0
755 return 0
699
756
700
757
@@ -715,7 +772,6 class VoltageReader(DataReader):
715 filename : el ultimo file de una determinada carpeta
772 filename : el ultimo file de una determinada carpeta
716 directory : eL directorio donde esta el file encontrado
773 directory : eL directorio donde esta el file encontrado
717 """
774 """
718
719 print "Searching files ..."
775 print "Searching files ..."
720
776
721 dirList = []
777 dirList = []
@@ -728,7 +784,7 class VoltageReader(DataReader):
728
784
729 dirList = sorted( dirList, key=str.lower ) #para que quede ordenado al margen de si el nombre esta en mayusculas o minusculas, utilizo la funcion sorted
785 dirList = sorted( dirList, key=str.lower ) #para que quede ordenado al margen de si el nombre esta en mayusculas o minusculas, utilizo la funcion sorted
730 if len(dirList) > 0 :
786 if len(dirList) > 0 :
731 directory = dirList[-1]
787 directory = dirList[-1] #me quedo con el ultimo directorio de una carpeta
732 else:
788 else:
733 year = startDateTime.timetuple().tm_year
789 year = startDateTime.timetuple().tm_year
734 doy = startDateTime.timetuple().tm_yday
790 doy = startDateTime.timetuple().tm_yday
@@ -804,7 +860,6 class VoltageReader(DataReader):
804 Excepciones:
860 Excepciones:
805
861
806 """
862 """
807
808 print "Searching files ..."
863 print "Searching files ..."
809
864
810 dirList = []
865 dirList = []
@@ -863,13 +918,7 class VoltageReader(DataReader):
863
918
864 file = os.path.join( path, dirfilename, filename )
919 file = os.path.join( path, dirfilename, filename )
865
920
866 nTries = 0
921 for nTries in range( self.__nTries+1 ):
867 while(True):
868
869 nTries += 1
870 if nTries > self.__nTries:
871 break
872
873 try:
922 try:
874 fp = open( file,'rb' ) #lectura binaria
923 fp = open( file,'rb' ) #lectura binaria
875 except:
924 except:
@@ -881,11 +930,15 class VoltageReader(DataReader):
881 print "The file %s is empty" % filename
930 print "The file %s is empty" % filename
882
931
883 fp.close()
932 fp.close()
933 fp = None
884
934
885 if m_BasicHeader.size > 24:
935 if m_BasicHeader.size > 24:
886 break
936 break
887
937
888 print 'waiting for new block: try %02d' % ( nTries )
938 if nTries >= self.__nTries: #si ya espero la cantidad de veces necesarias entonces ya no vuelve a esperar
939 break
940
941 print '\twaiting for new block: try %02d' % ( nTries )
889 time.sleep( self.__delay)
942 time.sleep( self.__delay )
890
943
891 if m_BasicHeader.size <= 24:
944 if m_BasicHeader.size <= 24:
@@ -938,24 +991,30 class VoltageReader(DataReader):
938 self.online
991 self.online
939 """
992 """
940 if online:
993 if online:
941 nTries = 0
994 fileOK_flag = False
942 while( nTries < self.__nTries ):
943 nTries += 1
944 subfolder = "D%04d%03d" % ( startDateTime.timetuple().tm_year, startDateTime.timetuple().tm_yday )
995 subfolder = "D%04d%03d" % ( startDateTime.timetuple().tm_year, startDateTime.timetuple().tm_yday )
945 year, doy, set, filename, dirfilename = self.__searchFilesOnLine( path, startDateTime, ext )
946 if filename == None:
947 file = os.path.join( path, subfolder )
996 file = os.path.join( path, subfolder )
948 print "Searching first file in \"%s\", try %03d ..." % ( file, nTries )
997
949 time.sleep( self.__delay )
998 for nTries in range( self.__nTries+1 ): #espera por el 1er file
950 else:
999 year, doy, set, filename, dirfilename = self.__searchFilesOnLine( path, startDateTime, ext )
1000
1001 if filename != None:
1002 if isFileOK( os.path.join( path,dirfilename,filename ) ):
1003 fileOK_flag = True
951 break
1004 break
952
1005
953 if filename == None:
1006 if nTries >= self.__nTries: #si ya espero la cantidad de veces necesarias entonces ya no vuelve a esperar
954 print "No files On Line"
1007 break
1008
1009 print "Searching first file in \"%s\", try %03d ..." % ( file, nTries+1 )
1010 time.sleep( self.__delay )
1011
1012 if not( fileOK_flag ): #filename == None:
1013 print "No files on line or invalid first file"
955 return 0
1014 return 0
956
1015
957 if self.__initFilesOnline( path, dirfilename, filename ) == 0:
1016 if self.__initFilesOnline( path, dirfilename, filename ) == 0:
958 print "The file %s hasn't enough data"
1017 print "The file %s hasn't enough data" % filename
959 return 0
1018 return 0
960
1019
961 self.__year = year
1020 self.__year = year
@@ -1014,7 +1073,8 class VoltageReader(DataReader):
1014 if not(self.__setNewBlock()):
1073 if not(self.__setNewBlock()):
1015 return 0
1074 return 0
1016
1075
1017 self.__readBlock()
1076 if not( self.__readBlock() ):
1077 return 0
1018
1078
1019 self.__lastUTTime = self.m_BasicHeader.utc
1079 self.__lastUTTime = self.m_BasicHeader.utc
1020
1080
@@ -1045,12 +1105,16 class VoltageReader(DataReader):
1045 self.flagIsNewBlock
1105 self.flagIsNewBlock
1046 self.idProfile
1106 self.idProfile
1047 """
1107 """
1108 if self.noMoreFiles: return 0
1109
1048 self.flagResetProcessing = 0
1110 self.flagResetProcessing = 0
1049 self.flagIsNewBlock = 0
1111 self.flagIsNewBlock = 0
1050
1112
1051 if self.__hasNotDataInBuffer():
1113 if self.__hasNotDataInBuffer():
1052
1114
1053 self.readNextBlock()
1115 if not( self.readNextBlock() ):
1116 self.__setNextFile()
1117 return 0
1054
1118
1055 self.m_Voltage.m_BasicHeader = self.m_BasicHeader.copy()
1119 self.m_Voltage.m_BasicHeader = self.m_BasicHeader.copy()
1056 self.m_Voltage.m_ProcessingHeader = self.m_ProcessingHeader.copy()
1120 self.m_Voltage.m_ProcessingHeader = self.m_ProcessingHeader.copy()
@@ -1061,12 +1125,17 class VoltageReader(DataReader):
1061
1125
1062 if self.noMoreFiles == 1:
1126 if self.noMoreFiles == 1:
1063 print 'Process finished'
1127 print 'Process finished'
1064 return None
1128 return 0
1065
1129
1066 #data es un numpy array de 3 dmensiones (perfiles, alturas y canales)
1130 #data es un numpy array de 3 dmensiones (perfiles, alturas y canales)
1067
1131
1132 if self.datablock == None:
1133 self.m_Voltage.flagNoData = True
1134 return 0
1135
1068 time = self.m_BasicHeader.utc + self.__datablockIndex * self.__ippSeconds
1136 time = self.m_BasicHeader.utc + self.__datablockIndex * self.__ippSeconds
1069 self.m_Voltage.m_BasicHeader.utc = time
1137 self.__utc = time
1138 #self.m_Voltage.m_BasicHeader.utc = time
1070
1139
1071 self.m_Voltage.flagNoData = False
1140 self.m_Voltage.flagNoData = False
1072 self.m_Voltage.flagResetProcessing = self.flagResetProcessing
1141 self.m_Voltage.flagResetProcessing = self.flagResetProcessing
@@ -1079,7 +1148,7 class VoltageReader(DataReader):
1079
1148
1080 #call setData - to Data Object
1149 #call setData - to Data Object
1081
1150
1082 return self.m_Voltage.data
1151 return 1 #self.m_Voltage.data
1083
1152
1084
1153
1085 class VoltageWriter( DataWriter ):
1154 class VoltageWriter(DataWriter):
@@ -1214,6 +1283,7 class VoltageWriter( DataWriter ):
1214
1283
1215 self.m_ProcessingHeader.write(fp)
1284 self.m_ProcessingHeader.write(fp)
1216
1285
1286
1217 def __setNextFile( self ):
1287 def __setNextFile(self):
1218 """
1288 """
1219 Determina el siguiente file que sera escrito
1289 Determina el siguiente file que sera escrito
@@ -1247,7 +1317,12 class VoltageWriter( DataWriter ):
1247 os.mkdir(tmp)
1317 os.mkdir(tmp)
1248 """
1318 """
1249 ##################################
1319 ##################################
1250 if self.m_BasicHeader.size <= 24: return 0 #no existe la suficiente data para ser escrita
1320 """
1321 if self.m_BasicHeader.size <= 24:
1322 self.__fp.close()
1323 self.__fp = None
1324 return 0 #no existe la suficiente data para ser escrita
1325 """
1251
1326
1252 timeTuple = time.localtime( self.m_Voltage.m_BasicHeader.utc ) # utc from m_Voltage
1327 timeTuple = time.localtime( self.m_Voltage.m_BasicHeader.utc ) # utc from m_Voltage
1253 subfolder = 'D%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
1328 subfolder = 'D%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
@@ -1319,6 +1394,7 class VoltageWriter( DataWriter ):
1319
1394
1320 return 1
1395 return 1
1321
1396
1397
1322 def __writeBlock( self ):
1398 def __writeBlock(self):
1323 """
1399 """
1324 Escribe el buffer en el file designado
1400 Escribe el buffer en el file designado
@@ -1342,15 +1418,10 class VoltageWriter( DataWriter ):
1342 data.tofile( self.__fp )
1418 data.tofile( self.__fp )
1343
1419
1344 self.datablock.fill(0)
1420 self.datablock.fill(0)
1345
1346 self.__datablockIndex = 0
1421 self.__datablockIndex = 0
1347
1348 self.__flagIsNewFile = 0
1422 self.__flagIsNewFile = 0
1349
1350 self.flagIsNewBlock = 1
1423 self.flagIsNewBlock = 1
1351
1352 self.nWriteBlocks += 1
1424 self.nWriteBlocks += 1
1353
1354 self.__blocksCounter += 1
1425 self.__blocksCounter += 1
1355
1426
1356
1427
@@ -1366,14 +1437,12 class VoltageWriter( DataWriter ):
1366 return 0
1437 return 0
1367
1438
1368 self.__writeBlock()
1439 self.__writeBlock()
1369
1370 return 1
1440 return 1
1371
1441
1372
1442
1373 def __hasAllDataInBuffer( self ):
1443 def __hasAllDataInBuffer(self):
1374 if self.__datablockIndex >= self.m_ProcessingHeader.profilesPerBlock:
1444 if self.__datablockIndex >= self.m_ProcessingHeader.profilesPerBlock:
1375 return 1
1445 return 1
1376
1377 return 0
1446 return 0
1378
1447
1379
1448
@@ -1397,7 +1466,6 class VoltageWriter( DataWriter ):
1397 if self.m_Voltage.flagResetProcessing:
1466 if self.m_Voltage.flagResetProcessing:
1398
1467
1399 self.datablock.fill(0)
1468 self.datablock.fill(0)
1400
1401 self.__datablockIndex = 0
1469 self.__datablockIndex = 0
1402 self.__setNextFile()
1470 self.__setNextFile()
1403
1471
@@ -1406,7 +1474,6 class VoltageWriter( DataWriter ):
1406 self.__datablockIndex += 1
1474 self.__datablockIndex += 1
1407
1475
1408 if self.__hasAllDataInBuffer():
1476 if self.__hasAllDataInBuffer():
1409
1410 self.__getHeader()
1477 self.__getHeader()
1411 self.writeNextBlock()
1478 self.writeNextBlock()
1412
1479
@@ -1556,8 +1623,9 class VoltageWriter( DataWriter ):
1556
1623
1557 self.datablock = numpy.zeros(self.__shapeBuffer, numpy.dtype('complex'))
1624 self.datablock = numpy.zeros(self.__shapeBuffer, numpy.dtype('complex'))
1558
1625
1559 # if not(self.__setNextFile()):
1626 if not( self.__setNextFile() ):
1560 # return 0
1627 return 0
1628
1561 return 1
1629 return 1
1562
1630
1563
1631
General Comments 0
You need to be logged in to leave comments. Login now