##// END OF EJS Templates
SpectraIO.py:...
Victor Sarmiento -
r35:ae02281034a2
parent child
Show More
@@ -21,6 +21,86 from DataIO import DataWriter
21
21
22 from Model.Spectra import Spectra
22 from Model.Spectra import Spectra
23
23
24
25 def getlastFileFromPath( pathList, ext ):
26 """
27 Depura el pathList dejando solo los que cumplan el formato de "PYYYYDDDSSS.ext"
28 al final de la depuracion devuelve el ultimo file de la lista que quedo.
29
30 Input:
31 pathList : lista conteniendo todos los filename completos que componen una determinada carpeta
32 ext : extension de los files contenidos en una carpeta
33
34 Return:
35 El ultimo file de una determinada carpeta
36 """
37
38 filesList = []
39 filename = None
40
41 # 0 1234 567 89A BCDE
42 # P YYYY DDD SSS .ext
43
44 for filename in pathList:
45 year = filename[1:5]
46 doy = filename[5:8]
47 leng = len( ext )
48
49 if ( filename[-leng:].upper() != ext.upper() ) : continue
50 if not( isNumber( year ) ) : continue
51 if not( isNumber( doy ) ) : continue
52
53 filesList.append(filename)
54
55 if len( filesList ) > 0:
56 #filesList.sort()
57 filesList = sorted( filesList, key=str.lower )
58 filename = filesList[-1]
59
60 return filename
61
62
63 def checkForRealPath( path, year, doy, set, ext ):
64 """
65 Por ser Linux Case Sensitive entonces checkForRealPath encuentra el nombre correcto de un path,
66 Prueba por varias combinaciones de nombres entre mayusculas y minusculas para determinar
67 el path exacto de un determinado file.
68
69 Example :
70 nombre correcto del file es ../RAWDATA/D2009307/P2009307367
71
72 Entonces la funcion prueba con las siguientes combinaciones
73 ../RAWDATA/d2009307/p2009307367
74 ../RAWDATA/d2009307/P2009307367
75 ../RAWDATA/D2009307/p2009307367
76 ../RAWDATA/D2009307/P2009307367
77 siendo para este caso, la ultima combinacion de letras, identica al file buscado
78
79 Return:
80 Si encuentra la cobinacion adecuada devuelve el path completo y el nombre del file
81 caso contrario devuelve None como path y el la ultima combinacion de nombre en mayusculas
82 para el filename
83 """
84 filepath = None
85 find_flag = False
86 filename = None
87
88 for dir in "dD": #barrido por las dos combinaciones posibles de "D"
89 for fil in "pP": #barrido por las dos combinaciones posibles de "D"
90 doypath = "%s%04d%03d" % ( dir, year, doy ) #formo el nombre del directorio xYYYYDDD (x=d o x=D)
91 filename = "%s%04d%03d%03d%s" % ( fil, year, doy, set, ext ) #formo el nombre del file xYYYYDDDSSS.ext (p=d o p=D)
92 filepath = os.path.join( path, doypath, filename ) #formo el path completo
93 if os.path.exists( filepath ): #verifico que exista
94 find_flag = True
95 break
96 if find_flag:
97 break
98
99 if not(find_flag):
100 return None, filename
101
102 return filepath, filename
103
24 def isNumber( str ):
104 def isNumber( str ):
25 """
105 """
26 Chequea si el conjunto de caracteres que componen un string puede ser convertidos a un numero.
106 Chequea si el conjunto de caracteres que componen un string puede ser convertidos a un numero.
@@ -379,46 +459,6 class SpectraReader( DataReader ):
379 self.m_Spectra.nPairs = self.nPairs
459 self.m_Spectra.nPairs = self.nPairs
380
460
381
461
382 def __checkForRealPath( self ):
383 """
384 Prueba por varias combinaciones de nombres entre mayusculas y minusculas para determinar
385 el path exacto de un determinado file.
386
387 Example :
388 nombre correcto del file es ../RAWDATA/D2009307/P2009307367
389
390 Entonces la funcion prueba con las siguientes combinaciones
391 ../RAWDATA/d2009307/p2009307367
392 ../RAWDATA/d2009307/P2009307367
393 ../RAWDATA/D2009307/p2009307367
394 ../RAWDATA/D2009307/P2009307367
395 siendo para este caso, la ultima combinacion de letras, identica al file buscado
396
397 Return:
398 Si encuentra la cobinacion adecuada devuelve el path completo y el nombre del file
399 caso contrario devuelve None
400 """
401 filepath = None
402 find_flag = False
403 filename = None
404
405 for dir in "dD": #barrido por las dos combinaciones posibles de "D"
406 for fil in "pP": #barrido por las dos combinaciones posibles de "D"
407 doypath = "%s%04d%03d" % ( dir, self.__year, self.__doy ) #formo el nombre del directorio xYYYYDDD (x=d o x=D)
408 filename = "%s%04d%03d%03d%s" % ( fil, self.__year, self.__doy, self.__set, self.__ext ) #formo el nombre del file xYYYYDDDSSS.ext (p=d o p=D)
409 filepath = os.path.join( self.__path, doypath, filename ) #formo el path completo
410 if os.path.exists( filepath ): #verifico que exista
411 find_flag = True
412 break
413 if find_flag:
414 break
415
416 if not(find_flag):
417 return None, filename
418
419 return filepath, filename
420
421
422 def __setNextFileOnline( self ):
462 def __setNextFileOnline( self ):
423 """
463 """
424 Busca el siguiente file que tenga suficiente data para ser leida, dentro de un folder especifico, si
464 Busca el siguiente file que tenga suficiente data para ser leida, dentro de un folder especifico, si
@@ -479,7 +519,7 class SpectraReader( DataReader ):
479 if( countTries >= self.__nTries ): #checkeo que no haya ido mas alla de la cantidad de intentos
519 if( countTries >= self.__nTries ): #checkeo que no haya ido mas alla de la cantidad de intentos
480 break
520 break
481
521
482 file, filename = self.__checkForRealPath()
522 file, filename = checkForRealPath( self.__path, self.__year, self.__doy, self.__set, self.__ext )
483 if file != None:
523 if file != None:
484 break
524 break
485
525
@@ -722,6 +762,7 class SpectraReader( DataReader ):
722 cspc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_CrossSpectra )
762 cspc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_CrossSpectra )
723 dc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) )
763 dc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) )
724
764
765 if self.online:
725 if (spc.size + cspc.size + dc.size) != self.__blocksize:
766 if (spc.size + cspc.size + dc.size) != self.__blocksize:
726 nTries = 0
767 nTries = 0
727 while( nTries < self.__nTries ):
768 while( nTries < self.__nTries ):
@@ -770,44 +811,6 class SpectraReader( DataReader ):
770 return 1
811 return 1
771
812
772
813
773 def __getlastFileFromPath( self, pathList, ext ):
774 """
775 Depura el pathList dejando solo los que cumplan el formato de "PYYYYDDDSSS.ext"
776 al final de la depuracion devuelve el ultimo file de la lista que quedo.
777
778 Input:
779 pathList : lista conteniendo todos los filename completos que componen una determinada carpeta
780 ext : extension de los files contenidos en una carpeta
781
782 Return:
783 El ultimo file de una determinada carpeta
784 """
785
786 filesList = []
787 filename = None
788
789 # 0123456789ABCDE
790 # PYYYYDDDSSS.ext
791
792 for filename in pathList:
793 year = filename[1:5]
794 doy = filename[5:8]
795 leng = len( ext )
796
797 if ( filename[-leng:].upper() != ext.upper() ) : continue
798 if not( isNumber( year ) ) : continue
799 if not( isNumber( doy ) ) : continue
800
801 filesList.append(filename)
802
803 if len( filesList ) > 0:
804 #filesList.sort()
805 filesList = sorted( filesList, key=str.lower )
806 filename = filesList[-1]
807
808 return filename
809
810
811 def __searchFilesOnLine( self, path, startDateTime=None, ext = ".pdata" ):
814 def __searchFilesOnLine( self, path, startDateTime=None, ext = ".pdata" ):
812 """
815 """
813 Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y
816 Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y
@@ -854,7 +857,7 class SpectraReader( DataReader ):
854 if directory == None:
857 if directory == None:
855 return 0, 0, 0, None, None
858 return 0, 0, 0, None, None
856
859
857 filename = self.__getlastFileFromPath( os.listdir( os.path.join(path,directory) ), ext )
860 filename = getlastFileFromPath( os.listdir( os.path.join(path,directory) ), ext )
858
861
859 if filename == None:
862 if filename == None:
860 return 0, 0, 0, None, None
863 return 0, 0, 0, None, None
@@ -1500,7 +1503,7 class SpectraWriter( DataWriter ):
1500 self.__data_dc = self.m_Spectra.data_dc
1503 self.__data_dc = self.m_Spectra.data_dc
1501
1504
1502 if True:
1505 if True:
1503 time.sleep( 3 )
1506 #time.sleep( 3 )
1504 self.__getHeader()
1507 self.__getHeader()
1505 self.writeNextBlock()
1508 self.writeNextBlock()
1506
1509
General Comments 0
You need to be logged in to leave comments. Login now