##// END OF EJS Templates
Add SkyMapPlotData, operation can access parent kwargs, fix server plot for multiple ReceiverData
Add SkyMapPlotData, operation can access parent kwargs, fix server plot for multiple ReceiverData

File last commit:

r928:e38e14e54937
r937:6cdcc42f2694
Show More
jroIO_param.py
1090 lines | 32.2 KiB | text/x-python | PythonLexer
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 import numpy
import time
import os
import h5py
import re
import datetime
from schainpy.model.data.jrodata import *
from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation
# from jroIO_base import *
from schainpy.model.io.jroIO_base import *
import schainpy
class ParamReader(ProcessingUnit):
'''
Reads HDF5 format files
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 path
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 startDate
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 endDate
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 startTime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 endTime
'''
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 ext = ".hdf5"
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 optchar = "D"
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 timezone = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 startTime = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 endTime = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fileIndex = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 utcList = None #To select data in the utctime list
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 blockList = None #List to blocks to be read from the file
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
blocksPerFile = None #Number of blocks to be read
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 blockIndex = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 path = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #List of Files
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 filenameList = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 datetimeList = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #Hdf5 File
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 listMetaname = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 listMeta = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 listDataname = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 listData = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 listShapes = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fp = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #dataOut reconstruction
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dataOut = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
def __init__(self, **kwargs):
ProcessingUnit.__init__(self, **kwargs)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.dataOut = Parameters()
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
def setup(self, **kwargs):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 path = kwargs['path']
startDate = kwargs['startDate']
endDate = kwargs['endDate']
startTime = kwargs['startTime']
endTime = kwargs['endTime']
walk = kwargs['walk']
if kwargs.has_key('ext'):
ext = kwargs['ext']
else:
ext = '.hdf5'
if kwargs.has_key('timezone'):
self.timezone = kwargs['timezone']
else:
self.timezone = 'lt'
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 print "[Reading] Searching files in offline mode ..."
pathList, filenameList = self.__searchFilesOffLine(path, startDate=startDate, endDate=endDate,
startTime=startTime, endTime=endTime,
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 ext=ext, walk=walk)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not(filenameList):
print "There is no files into the folder: %s"%(path)
sys.exit(-1)
self.fileIndex = -1
self.startTime = startTime
self.endTime = endTime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.__readMetadata()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.__setNextFileOffline()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def __searchFilesOffLine(self,
path,
startDate=None,
endDate=None,
startTime=datetime.time(0,0,0),
endTime=datetime.time(23,59,59),
ext='.hdf5',
walk=True):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 expLabel = ''
self.filenameList = []
self.datetimeList = []
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 pathList = []
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 JRODataObj = JRODataReader()
dateList, pathList = JRODataObj.findDatafiles(path, startDate, endDate, expLabel, ext, walk, include_path=True)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if dateList == []:
print "[Reading] No *%s files in %s from %s to %s)"%(ext, path,
datetime.datetime.combine(startDate,startTime).ctime(),
datetime.datetime.combine(endDate,endTime).ctime())
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return None, None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if len(dateList) > 1:
print "[Reading] %d days were found in date range: %s - %s" %(len(dateList), startDate, endDate)
else:
print "[Reading] data was found for the date %s" %(dateList[0])
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 filenameList = []
datetimeList = []
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #----------------------------------------------------------------------------------
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for thisPath in pathList:
# thisPath = pathList[pathDict[file]]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fileList = glob.glob1(thisPath, "*%s" %ext)
fileList.sort()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for file in fileList:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 filename = os.path.join(thisPath,file)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not isFileInDateRange(filename, startDate, endDate):
continue
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 thisDatetime = self.__isFileInTimeRange(filename, startDate, endDate, startTime, endTime)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not(thisDatetime):
continue
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 filenameList.append(filename)
datetimeList.append(thisDatetime)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not(filenameList):
print "[Reading] Any file was found int time range %s - %s" %(datetime.datetime.combine(startDate,startTime).ctime(), datetime.datetime.combine(endDate,endTime).ctime())
return None, None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 print "[Reading] %d file(s) was(were) found in time range: %s - %s" %(len(filenameList), startTime, endTime)
print
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for i in range(len(filenameList)):
print "[Reading] %s -> [%s]" %(filenameList[i], datetimeList[i].ctime())
self.filenameList = filenameList
self.datetimeList = datetimeList
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return pathList, filenameList
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def __isFileInTimeRange(self,filename, startDate, endDate, startTime, endTime):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 """
Retorna 1 si el archivo de datos se encuentra dentro del rango de horas especificado.
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 Inputs:
filename : nombre completo del archivo de datos en formato Jicamarca (.r)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 startDate : fecha inicial del rango seleccionado en formato datetime.date
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 endDate : fecha final del rango seleccionado en formato datetime.date
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 startTime : tiempo inicial del rango seleccionado en formato datetime.time
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 endTime : tiempo final del rango seleccionado en formato datetime.time
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 Return:
Boolean : Retorna True si el archivo de datos contiene datos en el rango de
fecha especificado, de lo contrario retorna False.
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 Excepciones:
Si el archivo no existe o no puede ser abierto
Si la cabecera no puede ser leida.
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 """
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 try:
fp = h5py.File(filename,'r')
grp1 = fp['Data']
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 except IOError:
traceback.print_exc()
raise IOError, "The file %s can't be opened" %(filename)
#chino rata
#In case has utctime attribute
grp2 = grp1['utctime']
# thisUtcTime = grp2.value[0] - 5*3600 #To convert to local time
thisUtcTime = grp2.value[0]
fp.close()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if self.timezone == 'lt':
thisUtcTime -= 5*3600
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 thisDatetime = datetime.datetime.fromtimestamp(thisUtcTime[0] + 5*3600)
# thisDatetime = datetime.datetime.fromtimestamp(thisUtcTime[0])
thisDate = thisDatetime.date()
thisTime = thisDatetime.time()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 startUtcTime = (datetime.datetime.combine(thisDate,startTime)- datetime.datetime(1970, 1, 1)).total_seconds()
endUtcTime = (datetime.datetime.combine(thisDate,endTime)- datetime.datetime(1970, 1, 1)).total_seconds()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #General case
# o>>>>>>>>>>>>>><<<<<<<<<<<<<<o
#-----------o----------------------------o-----------
# startTime endTime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if endTime >= startTime:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 thisUtcLog = numpy.logical_and(thisUtcTime > startUtcTime, thisUtcTime < endUtcTime)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if numpy.any(thisUtcLog): #If there is one block between the hours mentioned
return thisDatetime
return None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
#If endTime < startTime then endTime belongs to the next day
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #<<<<<<<<<<<o o>>>>>>>>>>>
#-----------o----------------------------o-----------
# endTime startTime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if (thisDate == startDate) and numpy.all(thisUtcTime < startUtcTime):
return None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if (thisDate == endDate) and numpy.all(thisUtcTime > endUtcTime):
return None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if numpy.all(thisUtcTime < startUtcTime) and numpy.all(thisUtcTime > endUtcTime):
return None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return thisDatetime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def __setNextFileOffline(self):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.fileIndex += 1
idFile = self.fileIndex
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not(idFile < len(self.filenameList)):
print "No more Files"
return 0
filename = self.filenameList[idFile]
filePointer = h5py.File(filename,'r')
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.filename = filename
self.fp = filePointer
print "Setting the file: %s"%self.filename
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # self.__readMetadata()
self.__setBlockList()
self.__readData()
# self.nRecords = self.fp['Data'].attrs['blocksPerFile']
# self.nRecords = self.fp['Data'].attrs['nRecords']
self.blockIndex = 0
return 1
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def __setBlockList(self):
'''
Selects the data within the times defined
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.fp
self.startTime
self.endTime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.blockList
self.blocksPerFile
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 '''
fp = self.fp
startTime = self.startTime
endTime = self.endTime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 grp = fp['Data']
thisUtcTime = grp['utctime'].value.astype(numpy.float)[0]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #ERROOOOR
if self.timezone == 'lt':
thisUtcTime -= 5*3600
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 thisDatetime = datetime.datetime.fromtimestamp(thisUtcTime[0] + 5*3600)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 thisDate = thisDatetime.date()
thisTime = thisDatetime.time()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 startUtcTime = (datetime.datetime.combine(thisDate,startTime) - datetime.datetime(1970, 1, 1)).total_seconds()
endUtcTime = (datetime.datetime.combine(thisDate,endTime) - datetime.datetime(1970, 1, 1)).total_seconds()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 ind = numpy.where(numpy.logical_and(thisUtcTime >= startUtcTime, thisUtcTime < endUtcTime))[0]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.blockList = ind
self.blocksPerFile = len(ind)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def __readMetadata(self):
'''
Reads Metadata
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
self.pathMeta
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.listShapes
self.listMetaname
self.listMeta
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 '''
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # grp = self.fp['Data']
# pathMeta = os.path.join(self.path, grp.attrs['metadata'])
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 #
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # if pathMeta == self.pathMeta:
# return
# else:
# self.pathMeta = pathMeta
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 #
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # filePointer = h5py.File(self.pathMeta,'r')
# groupPointer = filePointer['Metadata']
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 filename = self.filenameList[0]
fp = h5py.File(filename,'r')
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 gp = fp['Metadata']
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 listMetaname = []
listMetadata = []
for item in gp.items():
name = item[0]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if name=='array dimensions':
table = gp[name][:]
listShapes = {}
for shapes in table:
listShapes[shapes[0]] = numpy.array([shapes[1],shapes[2],shapes[3],shapes[4],shapes[5]])
else:
data = gp[name].value
listMetaname.append(name)
listMetadata.append(data)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # if name=='type':
# self.__initDataOut(data)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.listShapes = listShapes
self.listMetaname = listMetaname
self.listMeta = listMetadata
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fp.close()
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def __readData(self):
grp = self.fp['Data']
listdataname = []
listdata = []
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for item in grp.items():
name = item[0]
listdataname.append(name)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 array = self.__setDataArray(grp[name],self.listShapes[name])
listdata.append(array)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.listDataname = listdataname
self.listData = listdata
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 def __setDataArray(self, dataset, shapes):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
nDims = shapes[0]
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 nDim2 = shapes[1] #Dimension 0
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 nDim1 = shapes[2] #Dimension 1, number of Points or Parameters
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 nDim0 = shapes[3] #Dimension 2, number of samples or ranges
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 mode = shapes[4] #Mode of storing
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 blockList = self.blockList
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 blocksPerFile = self.blocksPerFile
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 #Depending on what mode the data was stored
if mode == 0: #Divided in channels
arrayData = dataset.value.astype(numpy.float)[0][blockList]
if mode == 1: #Divided in parameter
strds = 'table'
nDatas = nDim1
newShapes = (blocksPerFile,nDim2,nDim0)
elif mode==2: #Concatenated in a table
strds = 'table0'
arrayData = dataset[strds].value
#Selecting part of the dataset
utctime = arrayData[:,0]
u, indices = numpy.unique(utctime, return_index=True)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 if blockList.size != indices.size:
indMin = indices[blockList[0]]
if blockList[1] + 1 >= indices.size:
arrayData = arrayData[indMin:,:]
else:
indMax = indices[blockList[1] + 1]
arrayData = arrayData[indMin:indMax,:]
return arrayData
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
# One dimension
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 if nDims == 0:
arrayData = dataset.value.astype(numpy.float)[0][blockList]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
# Two dimensions
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 elif nDims == 2:
arrayData = numpy.zeros((blocksPerFile,nDim1,nDim0))
newShapes = (blocksPerFile,nDim0)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 nDatas = nDim1
for i in range(nDatas):
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 data = dataset[strds + str(i)].value
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 arrayData[:,i,:] = data[blockList,:]
# Three dimensions
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 else:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 arrayData = numpy.zeros((blocksPerFile,nDim2,nDim1,nDim0))
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 for i in range(nDatas):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 data = dataset[strds + str(i)].value
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Valdez
Restore method __setDataArray in ParamReader
r872 for b in range(blockList.size):
arrayData[b,:,i,:] = data[:,:,blockList[b]]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
return arrayData
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def __setDataOut(self):
listMeta = self.listMeta
listMetaname = self.listMetaname
listDataname = self.listDataname
listData = self.listData
listShapes = self.listShapes
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 blockIndex = self.blockIndex
# blockList = self.blockList
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for i in range(len(listMeta)):
setattr(self.dataOut,listMetaname[i],listMeta[i])
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for j in range(len(listData)):
nShapes = listShapes[listDataname[j]][0]
mode = listShapes[listDataname[j]][4]
if nShapes == 1:
setattr(self.dataOut,listDataname[j],listData[j][blockIndex])
elif nShapes > 1:
setattr(self.dataOut,listDataname[j],listData[j][blockIndex,:])
elif mode==0:
setattr(self.dataOut,listDataname[j],listData[j][blockIndex])
#Mode Meteors
elif mode ==2:
selectedData = self.__selectDataMode2(listData[j], blockIndex)
setattr(self.dataOut, listDataname[j], selectedData)
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def __selectDataMode2(self, data, blockIndex):
utctime = data[:,0]
aux, indices = numpy.unique(utctime, return_inverse=True)
selInd = numpy.where(indices == blockIndex)[0]
selData = data[selInd,:]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return selData
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def getData(self):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # if self.flagNoMoreFiles:
# self.dataOut.flagNoData = True
# print 'Process finished'
# return 0
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 #
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if self.blockIndex==self.blocksPerFile:
if not( self.__setNextFileOffline() ):
self.dataOut.flagNoData = True
return 0
# if self.datablock == None: # setear esta condicion cuando no hayan datos por leers
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 # self.dataOut.flagNoData = True
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # return 0
# self.__readData()
self.__setDataOut()
self.dataOut.flagNoData = False
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.blockIndex += 1
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def run(self, **kwargs):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not(self.isConfig):
self.setup(**kwargs)
# self.setObjProperties()
self.isConfig = True
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.getData()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return
class ParamWriter(Operation):
'''
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 HDF5 Writer, stores parameters data in HDF5 format files
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 path: path where the files will be stored
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 blocksPerFile: number of blocks that will be saved in per HDF5 format file
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 mode: selects the data stacking mode: '0' channels, '1' parameters, '3' table (for meteors)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 metadataList: list of attributes that will be stored as metadata
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dataList: list of attributes that will be stores as data
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 '''
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 ext = ".hdf5"
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 optchar = "D"
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 metaoptchar = "M"
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 metaFile = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 filename = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 path = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 setFile = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fp = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 grp = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 ds = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 firsttime = True
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #Configurations
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 blocksPerFile = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 blockIndex = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dataOut = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #Data Arrays
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dataList = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 metadataList = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # arrayDim = None
dsList = None #List of dictionaries with dataset properties
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 tableDim = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # dtype = [('arrayName', 'S20'),('nChannels', 'i'), ('nPoints', 'i'), ('nSamples', 'i'),('mode', 'b')]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dtype = [('arrayName', 'S20'),('nDimensions', 'i'), ('dim2', 'i'), ('dim1', 'i'),('dim0', 'i'),('mode', 'b')]
currentDay = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Modifications in Param Writer, files now split in two when there is a big difference in time between contiguous data
r853 lastTime = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
def __init__(self, **kwargs):
Operation.__init__(self, **kwargs)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.isConfig = False
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def setup(self, dataOut, **kwargs):
self.path = kwargs['path']
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
if kwargs.has_key('blocksPerFile'):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.blocksPerFile = kwargs['blocksPerFile']
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 else:
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.blocksPerFile = 10
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.metadataList = kwargs['metadataList']
self.dataList = kwargs['dataList']
self.dataOut = dataOut
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if kwargs.has_key('mode'):
mode = kwargs['mode']
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if type(mode) == int:
mode = numpy.zeros(len(self.dataList)) + mode
else:
mode = numpy.ones(len(self.dataList))
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.mode = mode
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 arrayDim = numpy.zeros((len(self.dataList),5))
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
#Table dimensions
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dtype0 = self.dtype
tableList = []
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #Dictionary and list of tables
dsList = []
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for i in range(len(self.dataList)):
dsDict = {}
dataAux = getattr(self.dataOut, self.dataList[i])
dsDict['variable'] = self.dataList[i]
#--------------------- Conditionals ------------------------
#There is no data
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 if dataAux is None:
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return 0
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #Not array, just a number
#Mode 0
if type(dataAux)==float or type(dataAux)==int:
dsDict['mode'] = 0
dsDict['nDim'] = 0
arrayDim[i,0] = 0
dsList.append(dsDict)
#Mode 2: meteors
elif mode[i] == 2:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 # dsDict['nDim'] = 0
dsDict['dsName'] = 'table0'
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dsDict['mode'] = 2 # Mode meteors
dsDict['shape'] = dataAux.shape[-1]
dsDict['nDim'] = 0
dsDict['dsNumber'] = 1
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 arrayDim[i,3] = dataAux.shape[-1]
arrayDim[i,4] = mode[i] #Mode the data was stored
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dsList.append(dsDict)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #Mode 1
else:
arrayDim0 = dataAux.shape #Data dimensions
arrayDim[i,0] = len(arrayDim0) #Number of array dimensions
arrayDim[i,4] = mode[i] #Mode the data was stored
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 strtable = 'table'
dsDict['mode'] = 1 # Mode parameters
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # Three-dimension arrays
if len(arrayDim0) == 3:
arrayDim[i,1:-1] = numpy.array(arrayDim0)
nTables = int(arrayDim[i,2])
dsDict['dsNumber'] = nTables
dsDict['shape'] = arrayDim[i,2:4]
dsDict['nDim'] = 3
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for j in range(nTables):
dsDict = dsDict.copy()
dsDict['dsName'] = strtable + str(j)
dsList.append(dsDict)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # Two-dimension arrays
elif len(arrayDim0) == 2:
arrayDim[i,2:-1] = numpy.array(arrayDim0)
nTables = int(arrayDim[i,2])
dsDict['dsNumber'] = nTables
dsDict['shape'] = arrayDim[i,3]
dsDict['nDim'] = 2
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for j in range(nTables):
dsDict = dsDict.copy()
dsDict['dsName'] = strtable + str(j)
dsList.append(dsDict)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # One-dimension arrays
elif len(arrayDim0) == 1:
arrayDim[i,3] = arrayDim0[0]
dsDict['shape'] = arrayDim0[0]
dsDict['dsNumber'] = 1
dsDict['dsName'] = strtable + str(0)
dsDict['nDim'] = 1
dsList.append(dsDict)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 table = numpy.array((self.dataList[i],) + tuple(arrayDim[i,:]),dtype = dtype0)
tableList.append(table)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # self.arrayDim = arrayDim
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.dsList = dsList
self.tableDim = numpy.array(tableList, dtype = dtype0)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.blockIndex = 0
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 timeTuple = time.localtime(dataOut.utctime)
self.currentDay = timeTuple.tm_yday
return 1
def putMetadata(self):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fp = self.createMetadataFile()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.writeMetadata(fp)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fp.close()
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def createMetadataFile(self):
ext = self.ext
path = self.path
setFile = self.setFile
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 timeTuple = time.localtime(self.dataOut.utctime)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
subfolder = ''
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fullpath = os.path.join( path, subfolder )
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not( os.path.exists(fullpath) ):
os.mkdir(fullpath)
setFile = -1 #inicializo mi contador de seteo
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
subfolder = 'd%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fullpath = os.path.join( path, subfolder )
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not( os.path.exists(fullpath) ):
os.mkdir(fullpath)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 setFile = -1 #inicializo mi contador de seteo
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848
else:
filesList = os.listdir( fullpath )
filesList = sorted( filesList, key=str.lower )
if len( filesList ) > 0:
filesList = [k for k in filesList if 'M' in k]
filen = filesList[-1]
# el filename debera tener el siguiente formato
# 0 1234 567 89A BCDE (hex)
# x YYYY DDD SSS .ext
if isNumber( filen[8:11] ):
setFile = int( filen[8:11] ) #inicializo mi contador de seteo al seteo del ultimo file
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 else:
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 setFile = -1
else:
setFile = -1 #inicializo mi contador de seteo
setFile += 1
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 file = '%s%4.4d%3.3d%3.3d%s' % (self.metaoptchar,
timeTuple.tm_year,
timeTuple.tm_yday,
setFile,
ext )
filename = os.path.join( path, subfolder, file )
self.metaFile = file
#Setting HDF5 File
fp = h5py.File(filename,'w')
return fp
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
def writeMetadata(self, fp):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 grp = fp.create_group("Metadata")
grp.create_dataset('array dimensions', data = self.tableDim, dtype = self.dtype)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for i in range(len(self.metadataList)):
grp.create_dataset(self.metadataList[i], data=getattr(self.dataOut, self.metadataList[i]))
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Modifications in Param Writer, files now split in two when there is a big difference in time between contiguous data
r853 def timeFlag(self):
currentTime = self.dataOut.utctime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Modifications in Param Writer, files now split in two when there is a big difference in time between contiguous data
r853 if self.lastTime is None:
self.lastTime = currentTime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Modifications in Param Writer, files now split in two when there is a big difference in time between contiguous data
r853 #Day
timeTuple = time.localtime(currentTime)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dataDay = timeTuple.tm_yday
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Modifications in Param Writer, files now split in two when there is a big difference in time between contiguous data
r853 #Time
timeDiff = currentTime - self.lastTime
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Modifications in Param Writer, files now split in two when there is a big difference in time between contiguous data
r853 #Si el dia es diferente o si la diferencia entre un dato y otro supera la hora
if dataDay != self.currentDay:
self.currentDay = dataDay
return True
elif timeDiff > 3*60*60:
self.lastTime = currentTime
return True
else:
self.lastTime = currentTime
return False
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848
def setNextFile(self):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 ext = self.ext
path = self.path
setFile = self.setFile
mode = self.mode
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 timeTuple = time.localtime(self.dataOut.utctime)
subfolder = 'd%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
fullpath = os.path.join( path, subfolder )
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if os.path.exists(fullpath):
filesList = os.listdir( fullpath )
filesList = [k for k in filesList if 'D' in k]
if len( filesList ) > 0:
filesList = sorted( filesList, key=str.lower )
filen = filesList[-1]
# el filename debera tener el siguiente formato
# 0 1234 567 89A BCDE (hex)
# x YYYY DDD SSS .ext
if isNumber( filen[8:11] ):
setFile = int( filen[8:11] ) #inicializo mi contador de seteo al seteo del ultimo file
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 else:
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 setFile = -1
else:
setFile = -1 #inicializo mi contador de seteo
else:
Juan C. Espinoza
Fix timeInterval for Parameters
r928 os.makedirs(fullpath)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 setFile = -1 #inicializo mi contador de seteo
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 setFile += 1
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 file = '%s%4.4d%3.3d%3.3d%s' % (self.optchar,
timeTuple.tm_year,
timeTuple.tm_yday,
setFile,
ext )
filename = os.path.join( path, subfolder, file )
#Setting HDF5 File
fp = h5py.File(filename,'w')
#write metadata
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.writeMetadata(fp)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #Write data
grp = fp.create_group("Data")
# grp.attrs['metadata'] = self.metaFile
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # grp.attrs['blocksPerFile'] = 0
ds = []
data = []
dsList = self.dsList
i = 0
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 while i < len(dsList):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dsInfo = dsList[i]
#One-dimension data
if dsInfo['mode'] == 0:
# ds0 = grp.create_dataset(self.dataList[i], (1,1), maxshape=(1,self.blocksPerFile) , chunks = True, dtype='S20')
ds0 = grp.create_dataset(dsInfo['variable'], (1,1), maxshape=(1,self.blocksPerFile) , chunks = True, dtype=numpy.float64)
ds.append(ds0)
data.append([])
i += 1
continue
# nDimsForDs.append(nDims[i])
elif dsInfo['mode'] == 2:
grp0 = grp.create_group(dsInfo['variable'])
ds0 = grp0.create_dataset(dsInfo['dsName'], (1,dsInfo['shape']), data = numpy.zeros((1,dsInfo['shape'])) , maxshape=(None,dsInfo['shape']), chunks=True)
ds.append(ds0)
data.append([])
i += 1
continue
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 elif dsInfo['mode'] == 1:
grp0 = grp.create_group(dsInfo['variable'])
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for j in range(dsInfo['dsNumber']):
dsInfo = dsList[i]
tableName = dsInfo['dsName']
Juan C. Valdez
fix floats slices
r881 shape = int(dsInfo['shape'])
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
if dsInfo['nDim'] == 3:
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 ds0 = grp0.create_dataset(tableName, (shape[0],shape[1],1) , data = numpy.zeros((shape[0],shape[1],1)), maxshape = (None,shape[1],None), chunks=True)
else:
ds0 = grp0.create_dataset(tableName, (1,shape), data = numpy.zeros((1,shape)) , maxshape=(None,shape), chunks=True)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 ds.append(ds0)
data.append([])
i += 1
# nDimsForDs.append(nDims[i])
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 fp.flush()
fp.close()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # self.nDatas = nDatas
# self.nDims = nDims
# self.nDimsForDs = nDimsForDs
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 #Saving variables
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 print 'Writing the file: %s'%filename
self.filename = filename
# self.fp = fp
# self.grp = grp
# self.grp.attrs.modify('nRecords', 1)
self.ds = ds
self.data = data
# self.setFile = setFile
self.firsttime = True
self.blockIndex = 0
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def putData(self):
Julio Valdez
Modifications in Param Writer, files now split in two when there is a big difference in time between contiguous data
r853 if self.blockIndex == self.blocksPerFile or self.timeFlag():
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.setNextFile()
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # if not self.firsttime:
self.readBlock()
self.setBlock() #Prepare data to be written
self.writeBlock() #Write data
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def readBlock(self):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 '''
data Array configured
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.data
'''
dsList = self.dsList
ds = self.ds
#Setting HDF5 File
fp = h5py.File(self.filename,'r+')
grp = fp["Data"]
ind = 0
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # grp.attrs['blocksPerFile'] = 0
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 while ind < len(dsList):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dsInfo = dsList[ind]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if dsInfo['mode'] == 0:
ds0 = grp[dsInfo['variable']]
ds[ind] = ds0
ind += 1
else:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 grp0 = grp[dsInfo['variable']]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for j in range(dsInfo['dsNumber']):
dsInfo = dsList[ind]
ds0 = grp0[dsInfo['dsName']]
ds[ind] = ds0
ind += 1
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.fp = fp
self.grp = grp
self.ds = ds
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return
def setBlock(self):
'''
data Array configured
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.data
'''
#Creating Arrays
dsList = self.dsList
data = self.data
ind = 0
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
while ind < len(dsList):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dsInfo = dsList[ind]
dataAux = getattr(self.dataOut, dsInfo['variable'])
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 mode = dsInfo['mode']
nDim = dsInfo['nDim']
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if mode == 0 or mode == 2 or nDim == 1:
data[ind] = dataAux
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 ind += 1
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # elif nDim == 1:
# data[ind] = numpy.reshape(dataAux,(numpy.size(dataAux),1))
# ind += 1
elif nDim == 2:
for j in range(dsInfo['dsNumber']):
data[ind] = dataAux[j,:]
ind += 1
elif nDim == 3:
for j in range(dsInfo['dsNumber']):
data[ind] = dataAux[:,j,:]
ind += 1
self.data = data
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def writeBlock(self):
'''
Saves the block in the HDF5 file
'''
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 dsList = self.dsList
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 for i in range(len(self.ds)):
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 dsInfo = dsList[i]
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 nDim = dsInfo['nDim']
mode = dsInfo['mode']
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # First time
if self.firsttime:
# self.ds[i].resize(self.data[i].shape)
# self.ds[i][self.blockIndex,:] = self.data[i]
if type(self.data[i]) == numpy.ndarray:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if nDim == 3:
self.data[i] = self.data[i].reshape((self.data[i].shape[0],self.data[i].shape[1],1))
self.ds[i].resize(self.data[i].shape)
if mode == 2:
self.ds[i].resize(self.data[i].shape)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.ds[i][:] = self.data[i]
else:
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # From second time
# Meteors!
if mode == 2:
dataShape = self.data[i].shape
dsShape = self.ds[i].shape
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.ds[i].resize((self.ds[i].shape[0] + dataShape[0],self.ds[i].shape[1]))
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.ds[i][dsShape[0]:,:] = self.data[i]
# No dimension
elif mode == 0:
self.ds[i].resize((self.ds[i].shape[0], self.ds[i].shape[1] + 1))
self.ds[i][0,-1] = self.data[i]
# One dimension
elif nDim == 1:
self.ds[i].resize((self.ds[i].shape[0] + 1, self.ds[i].shape[1]))
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.ds[i][-1,:] = self.data[i]
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 # Two dimension
elif nDim == 2:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.ds[i].resize((self.ds[i].shape[0] + 1,self.ds[i].shape[1]))
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.ds[i][self.blockIndex,:] = self.data[i]
# Three dimensions
elif nDim == 3:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 self.ds[i].resize((self.ds[i].shape[0],self.ds[i].shape[1],self.ds[i].shape[2]+1))
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.ds[i][:,:,-1] = self.data[i]
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
self.firsttime = False
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.blockIndex += 1
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #Close to save changes
self.fp.flush()
self.fp.close()
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 def run(self, dataOut, **kwargs):
if not(self.isConfig):
flagdata = self.setup(dataOut, **kwargs)
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not(flagdata):
return
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.isConfig = True
# self.putMetadata()
self.setNextFile()
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.putData()
return