##// END OF EJS Templates
DATAIO.py:...
Victor Sarmiento -
r58:d07c26af67ec
parent child
Show More
@@ -3,7 +3,9 Created on 23/01/2012
3 3
4 4 @author $Author$
5 5 @version $Id$
6 @version $Id$
6 7 '''
8
7 9 import os, sys
8 10 import glob
9 11 import time
@@ -43,16 +45,16 def checkForRealPath(path, year, doy, set, ext):
43 45 filename = None
44 46
45 47 if ext.lower() == ".r": #voltage
46 str1 = "dD"
47 str2 = "dD"
48 header1 = "dD"
49 header2 = "dD"
48 50 elif ext.lower() == ".pdata": #spectra
49 str1 = "dD"
50 str2 = "pP"
51 header1 = "dD"
52 header2 = "pP"
51 53 else:
52 54 return None, filename
53 55
54 for dir in str1: #barrido por las dos combinaciones posibles de "D"
55 for fil in str2: #barrido por las dos combinaciones posibles de "D"
56 for dir in header1: #barrido por las dos combinaciones posibles de "D"
57 for fil in header2: #barrido por las dos combinaciones posibles de "D"
56 58 doypath = "%s%04d%03d" % ( dir, year, doy ) #formo el nombre del directorio xYYYYDDD (x=d o x=D)
57 59 filename = "%s%04d%03d%03d%s" % ( fil, year, doy, set, ext ) #formo el nombre del file xYYYYDDDSSS.ext
58 60 filepath = os.path.join( path, doypath, filename ) #formo el path completo
@@ -123,7 +125,7 def isThisFileinRange(filename, startUTSeconds, endUTSeconds):
123 125 print "Skipping the file %s because it has not a valid header" %(filename)
124 126 return 0
125 127
126 if not ((startUTSeconds <= m_BasicHeader.utc) and (endUTSeconds >= m_BasicHeader.utc)):
128 if not ((startUTSeconds <= m_BasicHeader.utc) and (endUTSeconds > m_BasicHeader.utc)):
127 129 return 0
128 130
129 131 return 1
@@ -146,20 +148,20 def getlastFileFromPath(path, ext):
146 148 fileList = os.listdir(path)
147 149
148 150 # 0 1234 567 89A BCDE
149 # D YYYY DDD SSS .ext
151 # H YYYY DDD SSS .ext
150 152
151 153 for file in fileList:
152 154 try:
153 155 year = int(file[1:5])
154 156 doy = int(file[5:8])
157
158 if (os.path.splitext(file)[-1].upper() != ext.upper()) : continue
155 159 except:
156 160 continue
157
158 if (os.path.splitext(file)[-1].upper() != ext.upper()) : continue
159 161
160 162 validFilelist.append(file)
161 163
162 if len(validFilelist) > 0:
164 if validFilelist:
163 165 validFilelist = sorted( validFilelist, key=str.lower )
164 166 return validFilelist[-1]
165 167
@@ -185,14 +187,19 class JRODataReader(DataReader):
185 187 contiene todos lo metodos necesarios para leer datos desde archivos en formato
186 188 jicamarca o pdata (.r o .pdata). La lectura de los datos siempre se realiza por bloques. Los datos
187 189 leidos son array de 3 dimensiones:
188 perfiles*alturas*canales
190
191 Voltajes - perfiles * alturas * canales
192
193 Spectra - pares * alturas * perfiles (Self Spectra)
194 canales * alturas * perfiles (Cross Spectra)
195 canales * alturas (DC Channels)
189 196
190 y son almacenados en la variable "datablock".
197 y son almacenados en su buffer respectivo.
191 198
192 199 Esta clase contiene instancias (objetos) de las clases BasicHeader, SystemHeader,
193 200 RadarControllerHeader y DataObj. Los tres primeros se usan para almacenar informacion de la
194 201 cabecera de datos (metadata), y el cuarto (DataObj) para obtener y almacenar los datos desde
195 el "datablock" cada vez que se ejecute el metodo "getData".
202 el buffer cada vez que se ejecute el metodo "getData".
196 203 """
197 204
198 205 m_BasicHeader = BasicHeader()
@@ -203,24 +210,14 class JRODataReader(DataReader):
203 210
204 211 m_ProcessingHeader = ProcessingHeader()
205 212
206 m_DataObj = None
207
208 213 online = 0
209 214
210 startDateTime = None
211
212 endDateTime = None
213
214 215 fp = None
215 216
216 217 fileSizeByHeader = None
217 218
218 pathList = []
219
220 219 filenameList = []
221 220
222 fileIndex = None
223
224 221 filename = None
225 222
226 223 fileSize = None
@@ -231,18 +228,9 class JRODataReader(DataReader):
231 228
232 229 dataType = None
233 230
234 blocksize = 0
231 maxTimeStep = 30
235 232
236 datablock = None
237
238 datablockIndex = None
239
240 pts2read = 0
241
242 #Parametros para el procesamiento en linea
243 year = 0
244
245 doy = 0
233 flagNoMoreFiles = 0
246 234
247 235 set = 0
248 236
@@ -250,50 +238,31 class JRODataReader(DataReader):
250 238
251 239 path = None
252 240
253 optchar = None
254
255 241 delay = 7 #seconds
256 242
257 243 nTries = 3 #quantity tries
258 244
259 245 nFiles = 3 #number of files for searching
260 246
261 pts2read = 0
262
263 blocksize = 0
264
265 utc = 0
266
267 247 nBlocks = 0
268 248
249 flagIsNewFile = 1
250
251 ippSeconds = 0
252
253 flagResetProcessing = 0
254
255 flagIsNewBlock = 0
256
257 nReadBlocks = 0
258
259 blocksize = 0
260
261 datablockIndex = 9999
262
269 263 #speed of light
270 264 c = 3E8
271 265
272 def __init__(self, m_DataObj=None):
273 """
274 Inicializador de la clase JRODataReader para la lectura de datos.
275
276 Input:
277 m_DataObj : Objeto de la clase JROData. Este objeto sera utilizado para
278 almacenar un perfil de datos cada vez que se haga un requerimiento
279 (getData). El perfil sera obtenido a partir del buffer de datos,
280 si el buffer esta vacio se hara un nuevo proceso de lectura de un
281 bloque de datos.
282 Si este parametro no es pasado se creara uno internamente.
283
284 Variables afectadas:
285 self.m_DataObj
286 self.m_BasicHeader
287 self.m_SystemHeader
288 self.m_RadarControllerHeader
289 self.m_ProcessingHeader
290
291 Return:
292 None
293 """
294
295 raise ValueError, "This class can't be instanced"
296
297 266
298 267 def __rdSystemHeader(self, fp=None):
299 268
@@ -324,6 +293,7 class JRODataReader(DataReader):
324 293
325 294 self.m_BasicHeader.read(fp)
326 295
296
327 297 def __readFirstHeader(self):
328 298 """
329 299 Lectura del First Header, es decir el Basic Header y el Long Header
@@ -338,10 +308,6 class JRODataReader(DataReader):
338 308 self.dataType
339 309 self.fileSizeByHeader
340 310 self.ippSeconds
341 self.nChannels
342 self.nPairs
343 self.pts2read_SelfSpectra
344 self.pts2read_CrossSpectra
345 311
346 312 Return:
347 313 None
@@ -385,6 +351,7 class JRODataReader(DataReader):
385 351
386 352 self.getBlockDimension()
387 353
354
388 355 def __setNextFileOnline(self):
389 356 """
390 357 Busca el siguiente file que tenga suficiente data para ser leida, dentro de un folder especifico, si
@@ -411,7 +378,6 class JRODataReader(DataReader):
411 378
412 379 notFirstTime_flag = False
413 380 fileOk_flag = False
414 changeDir_flag = False
415 381 self.flagIsNewFile = 0
416 382
417 383 while( True ): #este loop permite llevar la cuenta de intentos, de files y carpetas,
@@ -426,64 +392,39 class JRODataReader(DataReader):
426 392 if countFiles > self.nFiles: #si no encuentro el file buscado cambio de carpeta y busco en la siguiente carpeta
427 393 self.set = 0
428 394 self.doy += 1
429 changeDir_flag = True
430
395
431 396 file = None
432 397 filename = None
433 398 fileOk_flag = False
434 399
435 400 #busca el 1er file disponible
436 401 file, filename = checkForRealPath( self.path, self.year, self.doy, self.set, self.ext )
402 if file:
403 if self.__verifyFile(file, False):
404 fileOk_flag = True
437 405
438 if file == None:
406 if not(fileOk_flag):
439 407 if notFirstTime_flag: #si no es la primera vez que busca el file entonces no espera y busca for el siguiente file
440 print "\tsearching next \"%s\" file ..." % ( filename )
408 print "\tSearching next \"%s\" file ..." % ( filename )
441 409 continue
442 410 else: #si es la primera vez que busca el file entonces espera self.nTries veces hasta encontrarlo o no
443 411 for nTries in range( self.nTries ):
444 print "\twaiting new \"%s\" file, try %03d ..." % ( filename, nTries+1 )
412 print "\tWaiting %0.2f sec for new \"%s\" file, try %03d ..." % ( self.delay, filename, nTries+1 )
445 413 time.sleep( self.delay )
446 414
447 415 file, filename = checkForRealPath( self.path, self.year, self.doy, self.set, self.ext )
448 if file != None:
449 fileOk_flag = True
450 break
416 if file:
417 if self.__verifyFile(file):
418 fileOk_flag = True
419 break
451 420
452 421 if not( fileOk_flag ): #no encontro ningun file valido a leer despues de haber esperado alguno
453 422 notFirstTime_flag = True
454 423 continue
455 424
456 #una vez que se obtuvo el 1er file valido se procede a checkear si si tamanho es suficiente para empezar a leerlo
457 currentSize = os.path.getsize( file )
458 neededSize = self.m_ProcessingHeader.blockSize + self.firstHeaderSize
459
460 #si el tamanho es suficiente entonces deja de buscar
461 if currentSize > neededSize:
462 fileOk_flag = True
425 if fileOk_flag:
463 426 break
464
465 fileOk_flag = False
466 #si el file no tiene el tamanho necesario se espera una cierta cantidad de tiempo
467 #por una cierta cantidad de veces hasta que el contenido del file sea valido
468 if changeDir_flag: #si al buscar un file cambie de directorio ya no espero y sigo con el siguiente file
469 print "\tsearching next \"%s\" file ..." % filename
470 changeDir_flag = False
471 continue
472
473 for nTries in range( self.nTries ):
474 print "\twaiting for the First Header block of \"%s\" file, try %03d ..." % ( filename, nTries+1 )
475 time.sleep( self.delay )
476 427
477 currentSize = os.path.getsize( file )
478 neededSize = self.m_ProcessingHeader.blockSize + self.firstHeaderSize
479
480 if currentSize > neededSize:
481 fileOk_flag = True
482 break
483
484 if fileOk_flag: #si encontro un file valido sale del bucle y deja de buscar
485 break
486
487 428 print "Skipping the file \"%s\" due to this files is empty" % filename
488 429 countFiles = 0
489 430
@@ -493,13 +434,13 class JRODataReader(DataReader):
493 434 self.flagIsNewFile = 1
494 435 if self.fp != None: self.fp.close()
495 436 self.fp = open(file)
496 self.noMoreFiles = 0
437 self.flagNoMoreFiles = 0
497 438 print 'Setting the file: %s' % file
498 439 else:
499 440 self.fileSize = 0
500 441 self.filename = None
501 442 self.fp = None
502 self.noMoreFiles = 1
443 self.flagNoMoreFiles = 1
503 444 print 'No more Files'
504 445
505 446 return fileOk_flag
@@ -561,7 +502,7 class JRODataReader(DataReader):
561 502 return 1
562 503
563 504
564 def __setNextFile( self ):
505 def setNextFile(self):
565 506 """
566 507 Determina el siguiente file a leer y si hay uno disponible lee el First Header
567 508
@@ -584,7 +525,7 class JRODataReader(DataReader):
584 525 else:
585 526 newFile = self.__setNextFileOffline()
586 527
587 if self.noMoreFiles:
528 if self.flagNoMoreFiles:
588 529 sys.exit(0)
589 530
590 531 if not(newFile):
@@ -629,7 +570,7 class JRODataReader(DataReader):
629 570 fpointer = self.fp.tell()
630 571 self.fp.close()
631 572
632 print "\tWaiting for the next block, try %03d ..." % (nTries+1)
573 print "\tWaiting %0.2f sec for the next block, try %03d ..." % (self.delay, nTries+1)
633 574 time.sleep( self.delay )
634 575
635 576 self.fp = open( self.filename, 'rb' )
@@ -640,11 +581,11 class JRODataReader(DataReader):
640 581 neededSize = self.m_ProcessingHeader.blockSize + self.basicHeaderSize
641 582
642 583 if ( currentSize >= neededSize ):
643 self.rdBasicHeader()
584 self.__rdBasicHeader()
644 585 return 1
645 586
646 587 #Setting new file
647 if not( self.__setNextFile() ):
588 if not( self.setNextFile() ):
648 589 return 0
649 590
650 591 deltaTime = self.m_BasicHeader.utc - self.lastUTTime # check this
@@ -656,17 +597,9 class JRODataReader(DataReader):
656 597 #self.nReadBlocks = 0
657 598
658 599 return 1
659
660 def getBlockDimension(self):
661
662 raise ValueError, "No implemented"
663
664 def hasNotDataInBuffer(self):
665
666 raise ValueError, "Not implemented"
667
668 600
669 def __searchFilesOnLine( self, path, startDateTime=None, endDateTime=None, expLabel = "", ext = ".pdata" ):
601
602 def __searchFilesOnLine(self, path, startDateTime=None, endDateTime=None, expLabel = "", ext = None):
670 603 """
671 604 Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y
672 605 devuelve el archivo encontrado ademas de otros datos.
@@ -684,13 +617,19 class JRODataReader(DataReader):
684 617 directory : eL directorio donde esta el file encontrado
685 618 """
686 619
687 print "Searching files ..."
688
620 pathList = os.listdir(path)
621
622 if not(pathList):
623 return None, None, None, None, None
624
689 625 dirList = []
690 626 for thisPath in os.listdir(path):
691 627 if os.path.isdir(os.path.join(path,thisPath)):
692 628 dirList.append(thisPath)
693 629
630 if not(dirList):
631 return None, None, None, None, None
632
694 633 pathList = dirList
695 634
696 635 if startDateTime != None:
@@ -709,34 +648,20 class JRODataReader(DataReader):
709 648
710 649 pathList.append(os.path.join(path,match[0], expLabel))
711 650 thisDateTime += datetime.timedelta(1)
712
713 651
652 if not(pathList):
653 return None, None, None, None, None
654
714 655 directory = pathList[-1]
715 656
716 if directory == None:
717 return 0, 0, 0, None, None
718
719
720 nTries = 0
721 while True:
722 if nTries >= self.nTries:
723 break
724 filename = getlastFileFromPath(directory, ext )
725
726 if filename != None:
727 break
728
729 print "Waiting %d seconds for the first file with extension (%s) on %s..." %(self.delay, ext, directory)
730 time.sleep(self.delay)
731 nTries += 1
732
733 if filename == None:
657 filename = getlastFileFromPath(directory, ext)
658
659 if not(filename):
734 660 return None, None, None, None, None
735 661
736 662 if not(self.__verifyFile(os.path.join(directory, filename))):
737 print "The file %s hasn't enough data" % filename
738 663 return None, None, None, None, None
739
664
740 665 year = int( filename[1:5] )
741 666 doy = int( filename[5:8] )
742 667 set = int( filename[8:11] )
@@ -799,6 +724,9 class JRODataReader(DataReader):
799 724 if os.path.isdir(os.path.join(path,thisPath)):
800 725 dirList.append(thisPath)
801 726
727 if not(dirList):
728 return None, None
729
802 730 pathList = []
803 731
804 732 thisDateTime = startDateTime
@@ -827,50 +755,49 class JRODataReader(DataReader):
827 755 if isThisFileinRange(filename, startUtSeconds, endUtSeconds):
828 756 filenameList.append(filename)
829 757
758 if not(filenameList):
759 return None, None
760
830 761 self.filenameList = filenameList
831 762
832 763 return pathList, filenameList
833 764
834 765
835 def __verifyFile( self, filename ):
766 def __verifyFile(self, filename, msgFlag=True):
836 767 """
837 Verifica que el filename tenga data valida, para ello leo el 1er bloque
838 del file, si no es un file valido espera una cierta cantidad de tiempo a que
839 lo sea, si transcurrido el tiempo no logra validar el file entonces el metodo
840 devuelve 0 caso contrario devuelve 1
768 Verifica que el filename tenga data valida, para ello leo el FirstHeader del file
841 769
842 Affected:
843 m_BasicHeader
844
845 770 Return:
846 771 0 : file no valido para ser leido
847 772 1 : file valido para ser leido
848 773 """
849 774 m_BasicHeader = BasicHeader()
775 m_SystemHeader = SystemHeader()
776 m_RadarControllerHeader = RadarControllerHeader()
777 m_ProcessingHeader = ProcessingHeader()
778 flagFileOK = False
850 779
851 for nTries in range( self.nTries+1 ):
852 try:
853 fp = open( filename,'rb' ) #lectura binaria
854 except:
855 raise IOError, "The file %s can't be opened" % (filename)
856
857 try:
858 m_BasicHeader.read(fp)
859 except:
860 print "The file %s is empty" % filename
861
862 fp.close()
863
864 if m_BasicHeader.size > 24:
865 break
866
867 if nTries >= self.nTries: #si ya espero la cantidad de veces necesarias entonces ya no vuelve a esperar
868 break
869
870 print '\twaiting for new block of file %s: try %02d' % ( filename, nTries )
871 time.sleep( self.delay )
872
873 if m_BasicHeader.size <= 24:
780 try:
781 fp = open( filename,'rb' ) #lectura binaria
782 except:
783 if msgFlag:
784 print "The file %s can't be opened" % (filename)
785
786 try:
787 m_BasicHeader.read(fp)
788 m_SystemHeader.read(fp)
789 m_RadarControllerHeader.read(fp)
790 m_ProcessingHeader.read(fp)
791 data_type = int(numpy.log2((m_ProcessingHeader.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR))
792 if m_BasicHeader.size > self.basicHeaderSize:
793 flagFileOK = True
794 except:
795 if msgFlag:
796 print "The file %s is empty or it hasn't enough data" % filename
797
798 fp.close()
799
800 if not(flagFileOK):
874 801 return 0
875 802
876 803 return 1
@@ -878,7 +805,7 class JRODataReader(DataReader):
878 805
879 806 def setup(self, path, startDateTime, endDateTime=None, set=0, expLabel = "", ext = None, online = 0):
880 807 """
881 setup configura los parametros de lectura de la clase VoltageReader.
808 setup configura los parametros de lectura de la clase DataReader.
882 809
883 810 Si el modo de lectura es offline, primero se realiza una busqueda de todos los archivos
884 811 que coincidan con los parametros especificados; esta lista de archivos son almacenados en
@@ -924,10 +851,19 class JRODataReader(DataReader):
924 851 ext = self.ext
925 852
926 853 if online:
927
854 print "Searching files ..."
928 855 doypath, file, year, doy, set = self.__searchFilesOnLine(path, startDateTime, endDateTime, expLabel, ext)
856
857 if not(doypath):
858 for nTries in range( self.nTries ):
859 print '\twaiting %0.2f sec for valid file in %s: try %02d ...' % (self.delay, path, nTries+1)
860 time.sleep( self.delay )
861 doypath, file, year, doy, set = self.__searchFilesOnLine(path, startDateTime, endDateTime, expLabel, ext)
862 if doypath:
863 break
929 864
930 if doypath == None:
865 if not(doypath):
866 print "There 'isn't valied files in %s" % path
931 867 return 0
932 868
933 869 self.year = year
@@ -935,8 +871,12 class JRODataReader(DataReader):
935 871 self.set = set - 1
936 872 self.path = path
937 873
938 else:
874 else: # offline
939 875 pathList, filenameList = self.__searchFilesOffLine(path, startDateTime, endDateTime, set, expLabel, ext)
876 if not(pathList):
877 print "No files in range: %s - %s" %(startDateTime.ctime(), endDateTime.ctime())
878 return 0
879
940 880 self.fileIndex = -1
941 881 self.pathList = pathList
942 882 self.filenameList = filenameList
@@ -946,7 +886,7 class JRODataReader(DataReader):
946 886
947 887 ext = ext.lower()
948 888
949 if not( self.__setNextFile() ):
889 if not( self.setNextFile() ):
950 890 if (startDateTime != None) and (endDateTime != None):
951 891 print "No files in range: %s - %s" %(startDateTime.ctime(), endDateTime.ctime())
952 892 elif startDateTime != None:
@@ -975,7 +915,7 class JRODataReader(DataReader):
975 915 return 1
976 916
977 917
978 def readNextBlock( self ):
918 def readNextBlock(self):
979 919 """
980 920 Establece un nuevo bloque de datos a leer y los lee, si es que no existiese
981 921 mas bloques disponibles en el archivo actual salta al siguiente.
@@ -988,117 +928,34 class JRODataReader(DataReader):
988 928 if not(self.__setNewBlock()):
989 929 return 0
990 930
991 self.readBlock()
931 if not(self.readBlock()):
932 return 0
992 933
993 934 self.lastUTTime = self.m_BasicHeader.utc
994 935
995 936 return 1
996 937
997 def readBlock(self):
998
999 raise ValueError, "This method has not been implemented"
1000
1001 def getData( self ):
1002 """
1003 getData obtiene una unidad de datos del buffer de lectura y la copia a la clase "Voltage"
1004 con todos los parametros asociados a este (metadata). cuando no hay datos en el buffer de
1005 lectura es necesario hacer una nueva lectura de los bloques de datos usando "readNextBlock"
1006
1007 Ademas incrementa el contador del buffer en 1.
1008
1009 Return:
1010 data : retorna un perfil de voltages (alturas * canales) copiados desde el
1011 buffer. Si no hay mas archivos a leer retorna None.
1012
1013 Variables afectadas:
1014 self.m_DataObj
1015 self.datablockIndex
1016
1017 Affected:
1018 self.m_DataObj
1019 self.datablockIndex
1020 self.flagNoContinuousBlock
1021 self.flagNewBlock
1022 """
1023
1024 raise ValueError, "This method has not been implemented"
1025
1026 938
1027 939 class JRODataWriter(DataWriter):
940
1028 941 """
1029 942 Esta clase permite escribir datos a archivos procesados (.r o ,pdata). La escritura
1030 943 de los datos siempre se realiza por bloques.
1031 944 """
1032
1033 def __init__(self):
1034 """
1035 Inicializador de la clase VoltageWriter para la escritura de datos de espectros.
1036
1037 Affected:
1038 self.m_DataObj
1039 self.m_BasicHeader
1040 self.m_SystemHeader
1041 self.m_RadarControllerHeader
1042 self.m_ProcessingHeader
1043 945
1044 Return: None
1045 """
1046 if m_Voltage == None:
1047 m_Voltage = Voltage()
1048
1049 self.m_DataObj = m_Voltage
1050
1051 self.path = None
1052
1053 self.fp = None
1054
1055 self.format = None
946 fp = None
1056 947
1057 self.blocksCounter = 0
1058
1059 self.setFile = None
1060
1061 self.flagIsNewFile = 1
1062
1063 self.dataType = None
1064
1065 self.datablock = None
1066
1067 self.datablockIndex = 0
1068
1069 self.ext = None
1070
1071 self.shapeBuffer = None
1072
1073 self.shape_spc_Buffer = None
1074
1075 self.shape_cspc_Buffer = None
1076
1077 self.shape_dc_Buffer = None
1078
1079 self.nWriteBlocks = 0
1080
1081 self.flagIsNewBlock = 0
1082
1083 self.noMoreFiles = 0
1084
1085 self.filename = None
1086
1087 self.m_BasicHeader= BasicHeader()
948 blocksCounter = 0
1088 949
1089 self.m_SystemHeader = SystemHeader()
950 flagIsNewFile = 1
1090 951
1091 self.m_RadarControllerHeader = RadarControllerHeader()
952 nWriteBlocks = 0
1092 953
1093 self.m_ProcessingHeader = ProcessingHeader()
1094
1095 self.data_spc = None
1096
1097 self.data_cspc = None
1098
1099 self.data_dc = None
1100
954 flagIsNewBlock = 0
955
956 flagNoMoreFiles = 0
1101 957
958
1102 959 def __writeFirstHeader(self):
1103 960 """
1104 961 Escribe el primer header del file es decir el Basic header y el Long header (SystemHeader, RadarControllerHeader, ProcessingHeader)
@@ -1126,7 +983,7 class JRODataWriter(DataWriter):
1126 983 if fp == None:
1127 984 fp = self.fp
1128 985
1129 self.m_BasicHeader.write(fp)
986 self.m_DataObj.m_BasicHeader.write(fp)
1130 987
1131 988
1132 989 def __wrSystemHeader(self, fp=None):
@@ -1139,7 +996,7 class JRODataWriter(DataWriter):
1139 996 if fp == None:
1140 997 fp = self.fp
1141 998
1142 self.m_SystemHeader.write(fp)
999 self.m_DataObj.m_SystemHeader.write(fp)
1143 1000
1144 1001
1145 1002 def __wrRadarControllerHeader(self, fp=None):
@@ -1152,7 +1009,7 class JRODataWriter(DataWriter):
1152 1009 if fp == None:
1153 1010 fp = self.fp
1154 1011
1155 self.m_RadarControllerHeader.write(fp)
1012 self.m_DataObj.m_RadarControllerHeader.write(fp)
1156 1013
1157 1014
1158 1015 def __wrProcessingHeader(self, fp=None):
@@ -1165,10 +1022,10 class JRODataWriter(DataWriter):
1165 1022 if fp == None:
1166 1023 fp = self.fp
1167 1024
1168 self.m_ProcessingHeader.write(fp)
1025 self.m_DataObj.m_ProcessingHeader.write(fp)
1169 1026
1170 1027
1171 def __setNextFile(self):
1028 def setNextFile(self):
1172 1029 """
1173 1030 Determina el siguiente file que sera escrito
1174 1031
@@ -1189,7 +1046,7 class JRODataWriter(DataWriter):
1189 1046 if self.fp != None:
1190 1047 self.fp.close()
1191 1048
1192 timeTuple = time.localtime( self.m_DataObj.m_BasicHeader.utc ) # utc from m_Voltage
1049 timeTuple = time.localtime( self.m_DataObj.m_BasicHeader.utc )
1193 1050 subfolder = 'D%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
1194 1051
1195 1052 tmp = os.path.join( path, subfolder )
@@ -1203,7 +1060,7 class JRODataWriter(DataWriter):
1203 1060 filen = filesList[-1]
1204 1061 # el filename debera tener el siguiente formato
1205 1062 # 0 1234 567 89A BCDE (hex)
1206 # D YYYY DDD SSS .ext
1063 # x YYYY DDD SSS .ext
1207 1064 if isNumber( filen[8:11] ):
1208 1065 self.setFile = int( filen[8:11] ) #inicializo mi contador de seteo al seteo del ultimo file
1209 1066 else:
@@ -1249,7 +1106,7 class JRODataWriter(DataWriter):
1249 1106 1 : Si escribio el Basic el First Header
1250 1107 """
1251 1108 if self.fp == None:
1252 self.__setNextFile()
1109 self.setNextFile()
1253 1110
1254 1111 if self.flagIsNewFile:
1255 1112 return 1
@@ -1258,7 +1115,7 class JRODataWriter(DataWriter):
1258 1115 self.__writeBasicHeader()
1259 1116 return 1
1260 1117
1261 if not( self.__setNextFile() ):
1118 if not( self.setNextFile() ):
1262 1119 return 0
1263 1120
1264 1121 return 1
@@ -1278,6 +1135,7 class JRODataWriter(DataWriter):
1278 1135 self.writeBlock()
1279 1136
1280 1137 return 1
1138
1281 1139
1282 1140 def getHeader(self):
1283 1141 """
@@ -1299,6 +1157,7 class JRODataWriter(DataWriter):
1299 1157 self.m_ProcessingHeader = self.m_DataObj.m_ProcessingHeader.copy()
1300 1158 self.dataType = self.m_DataObj.dataType
1301 1159
1160
1302 1161 def setup(self, path, set=0, ext=None):
1303 1162 """
1304 1163 Setea el tipo de formato en la cual sera guardada la data y escribe el First Header
@@ -1321,40 +1180,13 class JRODataWriter(DataWriter):
1321 1180 self.path = path
1322 1181 self.setFile = set - 1
1323 1182 self.ext = ext
1324 self.format = format
1183 #self.format = format
1325 1184 self.getHeader()
1326 1185
1327 1186 self.setBlockDimension()
1328 1187
1329 if not( self.__setNextFile() ):
1188 if not( self.setNextFile() ):
1330 1189 print "There isn't a next file"
1331 1190 return 0
1332 1191
1333 1192 return 1
1334
1335 def hasAllDataInBuffer(self):
1336
1337 raise ValueError, "Not implemented"
1338
1339 def setBlockDimension(self):
1340
1341 raise ValueError, "Not implemented"
1342
1343 def writeBlock(self):
1344
1345 raise ValueError, "No implemented"
1346
1347 def putData(self):
1348 """
1349 Setea un bloque de datos y luego los escribe en un file
1350
1351 Affected:
1352 self.flagIsNewBlock
1353 self.datablockIndex
1354
1355 Return:
1356 0 : Si no hay data o no hay mas files que puedan escribirse
1357 1 : Si se escribio la data de un bloque en un file
1358 """
1359
1360 raise ValueError, "No implemented" No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now