@@ -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,22 +762,23 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 | |||
725 | if (spc.size + cspc.size + dc.size) != self.__blocksize: |
|
765 | if self.online: | |
726 | nTries = 0 |
|
766 | if (spc.size + cspc.size + dc.size) != self.__blocksize: | |
727 |
|
|
767 | nTries = 0 | |
728 |
nTries |
|
768 | while( nTries < self.__nTries ): | |
729 | print "Waiting for the next block, try %03d ..." % nTries |
|
769 | nTries += 1 | |
730 | time.sleep( self.__delay ) |
|
770 | print "Waiting for the next block, try %03d ..." % nTries | |
731 | self.__fp.seek( fpointer ) |
|
771 | time.sleep( self.__delay ) | |
732 |
|
|
772 | self.__fp.seek( fpointer ) | |
733 | spc = numpy.fromfile( self.__fp, self.__dataType[0], self.__pts2read_SelfSpectra ) |
|
773 | fpointer = self.__fp.tell() | |
734 |
|
|
774 | spc = numpy.fromfile( self.__fp, self.__dataType[0], self.__pts2read_SelfSpectra ) | |
735 |
|
|
775 | cspc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_CrossSpectra ) | |
736 | if (spc.size + cspc.size + dc.size) == self.__blocksize: |
|
776 | dc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) ) | |
737 | nTries = 0 |
|
777 | if (spc.size + cspc.size + dc.size) == self.__blocksize: | |
738 |
|
|
778 | nTries = 0 | |
739 | if nTries > 0: |
|
779 | break | |
740 |
|
|
780 | if nTries > 0: | |
|
781 | return | |||
741 |
|
782 | |||
742 | spc = spc.reshape( (self.nChannels, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D |
|
783 | spc = spc.reshape( (self.nChannels, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D | |
743 |
|
784 | |||
@@ -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 = |
|
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