##// END OF EJS Templates
25/04/18
25/04/18

File last commit:

r1146:dc5534725adf
r1156:b9e1884ee58d
Show More
jroIO_param.py
1091 lines | 32.3 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
ebocanegra
15/08/2017
r1001 # for i in range(len(filenameList)):
# print "[Reading] %s -> [%s]" %(filenameList[i], datetimeList[i].ctime())
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848
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)):
ebocanegra
Claire, Erick Bocanegra 21-02-18
r1146 print '#####',self.metadataList[i], getattr(self.dataOut, self.metadataList[i])
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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