@@ -21,6 +21,86 from DataIO import DataWriter | |||
|
21 | 21 | |
|
22 | 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 | 104 | def isNumber( str ): |
|
25 | 105 | """ |
|
26 | 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 | 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 | 462 | def __setNextFileOnline( self ): |
|
423 | 463 | """ |
|
424 | 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 | 519 | if( countTries >= self.__nTries ): #checkeo que no haya ido mas alla de la cantidad de intentos |
|
480 | 520 | break |
|
481 | 521 | |
|
482 | file, filename = self.__checkForRealPath() | |
|
522 | file, filename = checkForRealPath( self.__path, self.__year, self.__doy, self.__set, self.__ext ) | |
|
483 | 523 | if file != None: |
|
484 | 524 | break |
|
485 | 525 | |
@@ -722,22 +762,23 class SpectraReader( DataReader ): | |||
|
722 | 762 | cspc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_CrossSpectra ) |
|
723 | 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: | |
|
726 | nTries = 0 | |
|
727 |
|
|
|
728 |
nTries |
|
|
729 | print "Waiting for the next block, try %03d ..." % nTries | |
|
730 | time.sleep( self.__delay ) | |
|
731 | self.__fp.seek( fpointer ) | |
|
732 |
|
|
|
733 | spc = numpy.fromfile( self.__fp, self.__dataType[0], self.__pts2read_SelfSpectra ) | |
|
734 |
|
|
|
735 |
|
|
|
736 | if (spc.size + cspc.size + dc.size) == self.__blocksize: | |
|
737 | nTries = 0 | |
|
738 |
|
|
|
739 | if nTries > 0: | |
|
740 |
|
|
|
765 | if self.online: | |
|
766 | if (spc.size + cspc.size + dc.size) != self.__blocksize: | |
|
767 | nTries = 0 | |
|
768 | while( nTries < self.__nTries ): | |
|
769 | nTries += 1 | |
|
770 | print "Waiting for the next block, try %03d ..." % nTries | |
|
771 | time.sleep( self.__delay ) | |
|
772 | self.__fp.seek( fpointer ) | |
|
773 | fpointer = self.__fp.tell() | |
|
774 | spc = numpy.fromfile( self.__fp, self.__dataType[0], self.__pts2read_SelfSpectra ) | |
|
775 | cspc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_CrossSpectra ) | |
|
776 | dc = numpy.fromfile( self.__fp, self.__dataType, self.__pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) ) | |
|
777 | if (spc.size + cspc.size + dc.size) == self.__blocksize: | |
|
778 | nTries = 0 | |
|
779 | break | |
|
780 | if nTries > 0: | |
|
781 | return | |
|
741 | 782 | |
|
742 | 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 | 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 | 814 | def __searchFilesOnLine( self, path, startDateTime=None, ext = ".pdata" ): |
|
812 | 815 | """ |
|
813 | 816 | Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y |
@@ -854,7 +857,7 class SpectraReader( DataReader ): | |||
|
854 | 857 | if directory == None: |
|
855 | 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 | 862 | if filename == None: |
|
860 | 863 | return 0, 0, 0, None, None |
@@ -1500,7 +1503,7 class SpectraWriter( DataWriter ): | |||
|
1500 | 1503 | self.__data_dc = self.m_Spectra.data_dc |
|
1501 | 1504 | |
|
1502 | 1505 | if True: |
|
1503 | time.sleep( 3 ) | |
|
1506 | #time.sleep( 3 ) | |
|
1504 | 1507 | self.__getHeader() |
|
1505 | 1508 | self.writeNextBlock() |
|
1506 | 1509 |
General Comments 0
You need to be logged in to leave comments.
Login now