From 42311705b9c859b21e4757b1e6f15ee7705e181e 2017-09-04 14:44:53 From: José Chávez Date: 2017-09-04 14:44:53 Subject: [PATCH] cambios para online offline --- diff --git a/schainpy/model/io/jroIO_base.py b/schainpy/model/io/jroIO_base.py index 718ab54..e1de52e 100644 --- a/schainpy/model/io/jroIO_base.py +++ b/schainpy/model/io/jroIO_base.py @@ -538,7 +538,7 @@ class JRODataIO: class JRODataReader(JRODataIO): - + firstTime = True online = 0 realtime = 0 @@ -575,7 +575,7 @@ class JRODataReader(JRODataIO): selBlocktime = None - + onlineWithDate = False def __init__(self): """ @@ -609,7 +609,6 @@ class JRODataReader(JRODataIO): expLabel='', ext='.r', walk=True): - self.filenameList = [] self.datetimeList = [] @@ -663,32 +662,35 @@ class JRODataReader(JRODataIO): self.filenameList = filenameList self.datetimeList = datetimeList + return pathList, filenameList - def __searchFilesOnLine(self, path, expLabel = "", ext = None, walk=True, set=None, startDate=None, endDate=None): + def __searchFilesOnLine(self, path, expLabel="", ext=None, walk=True, set=None, startDate=None, startTime=None): """ - Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y - devuelve el archivo encontrado ademas de otros datos. - - Input: - path : carpeta donde estan contenidos los files que contiene data - - expLabel : Nombre del subexperimento (subfolder) - - ext : extension de los files - - walk : Si es habilitado no realiza busquedas dentro de los subdirectorios (doypath) - - Return: - directory : eL directorio donde esta el file encontrado - filename : el ultimo file de una determinada carpeta - year : el anho - doy : el numero de dia del anho - set : el set del archivo + Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y + devuelve el archivo encontrado ademas de otros datos. + Input: + path : carpeta donde estan contenidos los files que contiene data + + expLabel : Nombre del subexperimento (subfolder) + + ext : extension de los files + + walk : Si es habilitado no realiza busquedas dentro de los subdirectorios (doypath) + + Return: + directory : eL directorio donde esta el file encontrado + filename : el ultimo file de una determinada carpeta + year : el anho + doy : el numero de dia del anho + set : el set del archivo + """ + pathList = None + filenameList = None if not os.path.isdir(path): return None, None, None, None, None, None @@ -735,7 +737,7 @@ class JRODataReader(JRODataIO): year = int( filename[1:5] ) doy = int( filename[5:8] ) set = int( filename[8:11] ) - + return fullpath, foldercounter, filename, year, doy, set def __setNextFileOffline(self): @@ -746,7 +748,7 @@ class JRODataReader(JRODataIO): idFile += 1 if not(idFile < len(self.filenameList)): self.flagNoMoreFiles = 1 - # print "[Reading] No more Files" + # print "[Reading] No more Files" return 0 filename = self.filenameList[idFile] @@ -764,31 +766,32 @@ class JRODataReader(JRODataIO): self.fileSize = fileSize self.fp = fp - # print "[Reading] Setting the file: %s"%self.filename + #print "[Reading] Setting the file: %s"%self.filename return 1 def __setNextFileOnline(self): """ - Busca el siguiente file que tenga suficiente data para ser leida, dentro de un folder especifico, si - no encuentra un file valido espera un tiempo determinado y luego busca en los posibles n files - siguientes. + Busca el siguiente file que tenga suficiente data para ser leida, dentro de un folder especifico, si + no encuentra un file valido espera un tiempo determinado y luego busca en los posibles n files + siguientes. + + Affected: + self.flagIsNewFile + self.filename + self.fileSize + self.fp + self.set + self.flagNoMoreFiles + + Return: + 0 : si luego de una busqueda del siguiente file valido este no pudo ser encontrado + 1 : si el file fue abierto con exito y esta listo a ser leido - Affected: - self.flagIsNewFile - self.filename - self.fileSize - self.fp - self.set - self.flagNoMoreFiles - - Return: - 0 : si luego de una busqueda del siguiente file valido este no pudo ser encontrado - 1 : si el file fue abierto con exito y esta listo a ser leido + Excepciones: + Si un determinado file no puede ser abierto + """ - Excepciones: - Si un determinado file no puede ser abierto - """ nFiles = 0 fileOk_flag = False firstTime_flag = True @@ -861,13 +864,34 @@ class JRODataReader(JRODataIO): def setNextFile(self): if self.fp != None: self.fp.close() - if self.online: newFile = self.__setNextFileOnline() else: newFile = self.__setNextFileOffline() - if not(newFile): + if self.onlineWithDate is True: + self.onlineWithDate=False + self.online = True + self.firstTime = False + self.setup( + path=self.path, + startDate=self.startDate, + endDate=self.endDate, + startTime=self.startTime , + endTime=self.endTime, + set=self.set, + expLabel=self.expLabel, + ext=self.ext, + online=self.online, + delay=self.delay, + walk=self.walk, + getblock=self.getblock, + nTxs=self.nTxs, + realtime=self.realtime, + blocksize=self.blocksize, + blocktime=self.blocktime + ) + return 1 print '[Reading] No more files to read' return 0 @@ -1021,12 +1045,9 @@ class JRODataReader(JRODataIO): while True: if not(self.__setNewBlock()): return 0 - if not(self.readBlock()): return 0 - self.getBasicHeader() - if not isTimeInRange(self.dataOut.datatime.time(), self.startTime, self.endTime): print "[Reading] Block No. %d/%d -> %s [Skipping]" %(self.nReadBlocks, @@ -1035,7 +1056,6 @@ class JRODataReader(JRODataIO): continue break - print "[Reading] Block No. %d/%d -> %s" %(self.nReadBlocks, self.processingHeaderObj.dataBlocksPerFile, self.dataOut.datatime.ctime()) @@ -1250,26 +1270,60 @@ class JRODataReader(JRODataIO): if path == None: raise ValueError, "[Reading] The path is not valid" + if ext == None: ext = self.ext + + self.path = path + self.startDate = startDate + self.endDate = endDate + self.startTime = startTime + self.endTime = endTime + self.set = set + self.expLabel = expLabel + self.ext = ext + self.online = online + self.delay = delay + self.walk = walk + self.getblock = getblock + self.nTxs = nTxs + self.realtime = realtime + self.blocksize = blocksize + self.blocktime = blocktime + + + if self.firstTime is True: + pathList, filenameList = self.__searchFilesOffLine(path, startDate=startDate, endDate=endDate, + startTime=startTime, endTime=endTime, + set=set, expLabel=expLabel, ext=ext, + walk=walk) + filenameList = filenameList[:-1] + + if pathList is not None and filenameList is not None and online: + self.onlineWithDate = True + online = False + self.fileIndex = -1 + self.pathList = pathList + self.filenameList = filenameList + file_name = os.path.basename(filenameList[-1]) + basename, ext = os.path.splitext(file_name) + last_set = int(basename[-3:]) if online: print "[Reading] Searching files in online mode..." - for nTries in range( self.nTries ): + for nTries in range(self.nTries): fullpath, foldercounter, file, year, doy, set = self.__searchFilesOnLine(path=path, expLabel=expLabel, ext=ext, walk=walk, startDate=startDate, - endDate=endDate, - startTime=startTime, endTime=endTime, + startTime=startTime, set=set) - + if fullpath: break - print '[Reading] Waiting %0.2f sec for an valid file in %s: try %02d ...' % (self.delay, path, nTries+1) sleep( self.delay ) @@ -1283,7 +1337,7 @@ class JRODataReader(JRODataIO): self.path = path self.foldercounter = foldercounter last_set = None - + else: print "[Reading] Searching files in offline mode ..." pathList, filenameList = self.__searchFilesOffLine(path, startDate=startDate, endDate=endDate, @@ -1309,7 +1363,8 @@ class JRODataReader(JRODataIO): file_name = os.path.basename(filenameList[-1]) basename, ext = os.path.splitext(file_name) last_set = int(basename[-3:]) - + + self.online = online self.realtime = realtime self.delay = delay @@ -1319,6 +1374,7 @@ class JRODataReader(JRODataIO): self.nTxs = nTxs self.startTime = startTime self.endTime = endTime + #Added----------------- self.selBlocksize = blocksize @@ -1339,7 +1395,7 @@ class JRODataReader(JRODataIO): return # self.getBasicHeader() - + if last_set != None: self.dataOut.last_block = last_set * self.processingHeaderObj.dataBlocksPerFile + self.basicHeaderObj.dataBlock return @@ -1360,7 +1416,7 @@ class JRODataReader(JRODataIO): self.dataOut.ippSeconds = self.radarControllerHeaderObj.ippSeconds/self.nTxs -# self.dataOut.nProfiles = self.processingHeaderObj.profilesPerBlock*self.nTxs + # self.dataOut.nProfiles = self.processingHeaderObj.profilesPerBlock*self.nTxs def getFirstHeader(self): @@ -1415,7 +1471,7 @@ class JRODataReader(JRODataIO): if not(self.isConfig): -# self.dataOut = dataOut + # self.dataOut = dataOut self.setup(**kwargs) self.isConfig = True @@ -1538,7 +1594,7 @@ class JRODataWriter(JRODataIO): None """ -# CALCULAR PARAMETROS + # CALCULAR PARAMETROS sizeLongHeader = self.systemHeaderObj.size + self.radarControllerHeaderObj.size + self.processingHeaderObj.size self.basicHeaderObj.size = self.basicHeaderSize + sizeLongHeader diff --git a/schainpy/model/io/jroIO_voltage.py b/schainpy/model/io/jroIO_voltage.py index 74e3a9d..6511b8a 100644 --- a/schainpy/model/io/jroIO_voltage.py +++ b/schainpy/model/io/jroIO_voltage.py @@ -177,13 +177,13 @@ class VoltageReader(JRODataReader, ProcessingUnit): def getBlockDimension(self): """ - Obtiene la cantidad de puntos a leer por cada bloque de datos - - Affected: - self.blocksize + Obtiene la cantidad de puntos a leer por cada bloque de datos + + Affected: + self.blocksize - Return: - None + Return: + None """ pts2read = self.processingHeaderObj.profilesPerBlock * self.processingHeaderObj.nHeights * self.systemHeaderObj.nChannels self.blocksize = pts2read @@ -191,26 +191,26 @@ class VoltageReader(JRODataReader, ProcessingUnit): def readBlock(self): """ - readBlock lee el bloque de datos desde la posicion actual del puntero del archivo - (self.fp) y actualiza todos los parametros relacionados al bloque de datos - (metadata + data). La data leida es almacenada en el buffer y el contador del buffer - es seteado a 0 - - Inputs: - None + readBlock lee el bloque de datos desde la posicion actual del puntero del archivo + (self.fp) y actualiza todos los parametros relacionados al bloque de datos + (metadata + data). La data leida es almacenada en el buffer y el contador del buffer + es seteado a 0 - Return: - None - - Affected: - self.profileIndex - self.datablock - self.flagIsNewFile - self.flagIsNewBlock - self.nTotalBlocks + Inputs: + None + + Return: + None - Exceptions: - Si un bloque leido no es un bloque valido + Affected: + self.profileIndex + self.datablock + self.flagIsNewFile + self.flagIsNewBlock + self.nTotalBlocks + + Exceptions: + Si un bloque leido no es un bloque valido """ current_pointer_location = self.fp.tell() junk = numpy.fromfile( self.fp, self.dtype, self.blocksize ) @@ -303,39 +303,39 @@ class VoltageReader(JRODataReader, ProcessingUnit): def getData(self): """ - getData obtiene una unidad de datos del buffer de lectura, un perfil, y la copia al objeto self.dataOut - del tipo "Voltage" con todos los parametros asociados a este (metadata). cuando no hay datos - en el buffer de lectura es necesario hacer una nueva lectura de los bloques de datos usando - "readNextBlock" - - Ademas incrementa el contador del buffer "self.profileIndex" en 1. - - Return: - - Si el flag self.getByBlock ha sido seteado el bloque completo es copiado a self.dataOut y el self.profileIndex - es igual al total de perfiles leidos desde el archivo. - - Si self.getByBlock == False: + getData obtiene una unidad de datos del buffer de lectura, un perfil, y la copia al objeto self.dataOut + del tipo "Voltage" con todos los parametros asociados a este (metadata). cuando no hay datos + en el buffer de lectura es necesario hacer una nueva lectura de los bloques de datos usando + "readNextBlock" - self.dataOut.data = buffer[:, thisProfile, :] - - shape = [nChannels, nHeis] - - Si self.getByBlock == True: + Ademas incrementa el contador del buffer "self.profileIndex" en 1. - self.dataOut.data = buffer[:, :, :] - - shape = [nChannels, nProfiles, nHeis] + Return: - Variables afectadas: - self.dataOut - self.profileIndex + Si el flag self.getByBlock ha sido seteado el bloque completo es copiado a self.dataOut y el self.profileIndex + es igual al total de perfiles leidos desde el archivo. - Affected: - self.dataOut - self.profileIndex - self.flagDiscontinuousBlock - self.flagIsNewBlock + Si self.getByBlock == False: + + self.dataOut.data = buffer[:, thisProfile, :] + + shape = [nChannels, nHeis] + + Si self.getByBlock == True: + + self.dataOut.data = buffer[:, :, :] + + shape = [nChannels, nProfiles, nHeis] + + Variables afectadas: + self.dataOut + self.profileIndex + + Affected: + self.dataOut + self.profileIndex + self.flagDiscontinuousBlock + self.flagIsNewBlock """ if self.flagNoMoreFiles: @@ -362,10 +362,10 @@ class VoltageReader(JRODataReader, ProcessingUnit): if not self.getByBlock: """ - Return profile by profile - - If nTxs > 1 then one profile is divided by nTxs and number of total - blocks is increased by nTxs (nProfiles *= nTxs) + Return profile by profile + + If nTxs > 1 then one profile is divided by nTxs and number of total + blocks is increased by nTxs (nProfiles *= nTxs) """ self.dataOut.flagDataAsBlock = False self.dataOut.data = self.datablock[:,self.profileIndex,:] @@ -373,26 +373,26 @@ class VoltageReader(JRODataReader, ProcessingUnit): self.profileIndex += 1 -# elif self.selBlocksize==None or self.selBlocksize==self.dataOut.nProfiles: -# """ -# Return all block -# """ -# self.dataOut.flagDataAsBlock = True -# self.dataOut.data = self.datablock -# self.dataOut.profileIndex = self.dataOut.nProfiles - 1 -# -# self.profileIndex = self.dataOut.nProfiles + # elif self.selBlocksize==None or self.selBlocksize==self.dataOut.nProfiles: + # """ + # Return all block + # """ + # self.dataOut.flagDataAsBlock = True + # self.dataOut.data = self.datablock + # self.dataOut.profileIndex = self.dataOut.nProfiles - 1 + # + # self.profileIndex = self.dataOut.nProfiles else: """ - Return a block + Return a block """ if self.selBlocksize == None: self.selBlocksize = self.dataOut.nProfiles if self.selBlocktime != None: if self.dataOut.nCohInt is not None: nCohInt = self.dataOut.nCohInt else: - nCohInt = 1 + nCohInt = 1 self.selBlocksize = int(self.dataOut.nProfiles*round(self.selBlocktime/(nCohInt*self.dataOut.ippSeconds*self.dataOut.nProfiles))) self.dataOut.data = self.datablock[:,self.profileIndex:self.profileIndex+self.selBlocksize,:] @@ -429,7 +429,7 @@ class VoltageReader(JRODataReader, ProcessingUnit): self.getBasicHeader() self.dataOut.realtime = self.online - + return self.dataOut.data class VoltageWriter(JRODataWriter, Operation): diff --git a/schainpy/model/utils/jroutils_ftp.py b/schainpy/model/utils/jroutils_ftp.py index 3e7e2aa..422edd7 100644 --- a/schainpy/model/utils/jroutils_ftp.py +++ b/schainpy/model/utils/jroutils_ftp.py @@ -168,13 +168,13 @@ class Remote(Thread): return 0 self.mutex.acquire() -# init = time.time() -# -# while(self.bussy): -# sleep(0.1) -# if time.time() - init > 2*self.period: -# return 0 - + # init = time.time() + # + # while(self.bussy): + # sleep(0.1) + # if time.time() - init > 2*self.period: + # return 0 + self.fileList = fileList self.mutex.release() return 1 @@ -198,7 +198,7 @@ class Remote(Thread): if self.stopFlag: break -# self.bussy = True + # self.bussy = True self.mutex.acquire() print "[Remote Server] Opening %s" %self.__server @@ -623,6 +623,7 @@ class SendToServer(ProcessingUnit): filenameList = glob.glob1(thisFolder, '*%s' %self.ext) if len(filenameList) < 1: + continue for thisFile in filenameList: diff --git a/schainpy/scripts/JASMET30_MetDet.py b/schainpy/scripts/JASMET30_MetDet.py index 870f1f0..0d0fd8d 100644 --- a/schainpy/scripts/JASMET30_MetDet.py +++ b/schainpy/scripts/JASMET30_MetDet.py @@ -18,7 +18,7 @@ controllerObj.setup(id = '002', name='script02', description="JASMET Meteor Dete # path = '/mnt/jars/2016_08/NOCHE' # path = '/media/joscanoa/DATA_JASMET/JASMET/2016_08/DIA' # path = '/media/joscanoa/DATA_JASMET/JASMET/2016_08/NOCHE' -path = '/media/joscanoa/DATA_JASMET/JASMET/2016_08/DIA' +path = '/home/nanosat/data/jasmet' #Path para los graficos pathfig = os.path.join(os.environ['HOME'],'Pictures/JASMET30/201608/graphics') @@ -27,8 +27,8 @@ pathfig = os.path.join(os.environ['HOME'],'Pictures/JASMET30/201608/graphics') pathfile = os.path.join(os.environ['HOME'],'Pictures/JASMET30/201608/meteor') #Fechas para busqueda de archivos -startDate = '2016/08/29' -endDate = '2016/09/11' +startDate = '2010/08/29' +endDate = '2017/09/11' #Horas para busqueda de archivos startTime = '00:00:00' endTime = '23:59:59' @@ -60,38 +60,40 @@ opObj00.addParameter(name='channelList', value='0,1,2,3,4', format='intlist') opObj01 = procUnitConfObj0.addOperation(name='setRadarFrequency') opObj01.addParameter(name='frequency', value='30.e6', format='float') -opObj01 = procUnitConfObj0.addOperation(name='interpolateHeights') -opObj01.addParameter(name='topLim', value='73', format='int') -opObj01.addParameter(name='botLim', value='71', format='int') +# opObj01 = procUnitConfObj0.addOperation(name='interpolateHeights') +# opObj01.addParameter(name='topLim', value='73', format='int') +# opObj01.addParameter(name='botLim', value='71', format='int') opObj02 = procUnitConfObj0.addOperation(name='Decoder', optype='other') opObj03 = procUnitConfObj0.addOperation(name='CohInt', optype='other') opObj03.addParameter(name='n', value='2', format='int') +procUnitConfObj1 = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObj0.getId()) +opObj11 = procUnitConfObj1.addOperation(name='RTIPlot', optype='other') +opObj11.addParameter(name='id', value='237', format='int') +opObj11.addParameter(name='xmin', value='9.0', format='float') +opObj11.addParameter(name='xmax', value='16.0', format='float') +opObj11.addParameter(name='zmin', value='15.0', format='float') +opObj11.addParameter(name='zmax', value='50.0', format='float') + #--------------------------- Parameters Processing Unit ------------------------------------ -procUnitConfObj1 = controllerObj.addProcUnit(datatype='ParametersProc', inputId=procUnitConfObj0.getId()) -# -opObj10 = procUnitConfObj1.addOperation(name='SMDetection', optype='other') -opObj10.addParameter(name='azimuth', value='45', format='float') -opObj10.addParameter(name='hmin', value='60', format='float') -opObj10.addParameter(name='hmax', value='120', format='float') - -opObj12 = procUnitConfObj1.addOperation(name='ParamWriter', optype='other') -opObj12.addParameter(name='path', value=pathfile) -opObj12.addParameter(name='blocksPerFile', value='1000', format='int') -opObj12.addParameter(name='metadataList',value='type,heightList,paramInterval,timeZone',format='list') -opObj12.addParameter(name='dataList',value='data_param,utctime',format='list') -opObj12.addParameter(name='mode',value='2',format='int') +# procUnitConfObj1 = controllerObj.addProcUnit(datatype='ParametersProc', inputId=procUnitConfObj0.getId()) +# # +# opObj10 = procUnitConfObj1.addOperation(name='SMDetection', optype='other') +# opObj10.addParameter(name='azimuth', value='45', format='float') +# opObj10.addParameter(name='hmin', value='60', format='float') +# opObj10.addParameter(name='hmax', value='120', format='float') + +# opObj12 = procUnitConfObj1.addOperation(name='ParamWriter', optype='other') +# opObj12.addParameter(name='path', value=pathfile) +# opObj12.addParameter(name='blocksPerFile', value='1000', format='int') +# opObj12.addParameter(name='metadataList',value='type,heightList,paramInterval,timeZone',format='list') +# opObj12.addParameter(name='dataList',value='data_param,utctime',format='list') +# opObj12.addParameter(name='mode',value='2',format='int') #-------------------------------------------------------------------------------------------------- - -print "Escribiendo el archivo XML" -controllerObj.writeXml("JASMET02.xml") -print "Leyendo el archivo XML" -controllerObj.readXml("JASMET02.xml") - controllerObj.createObjects() controllerObj.connectObjects() controllerObj.run() \ No newline at end of file