##// END OF EJS Templates
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()

File last commit:

r1279:c53fe2a4a291
r1279:c53fe2a4a291
Show More
jroIO_param.py
1435 lines | 45.5 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
Errors handling and gracefully terminate main process
r1241 import schainpy.admin
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 from schainpy.model.data.jrodata import *
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation, MPDecorator
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 from schainpy.model.io.jroIO_base import *
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 from schainpy.utils import log
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 @MPDecorator
class ParamReader(JRODataReader,ProcessingUnit):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 '''
Reads HDF5 format files
path
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 ext = ".hdf5"
optchar = "D"
timezone = None
startTime = None
endTime = None
fileIndex = None
utcList = None #To select data in the utctime list
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
path = None
#List of Files
filenameList = None
datetimeList = None
#Hdf5 File
listMetaname = None
listMeta = None
listDataname = None
listData = None
listShapes = None
fp = None
#dataOut reconstruction
dataOut = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 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']
George Yong
Python 2to3, Spectra (all operations) working
r1167 if 'ext' in kwargs:
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 ext = kwargs['ext']
else:
ext = '.hdf5'
George Yong
Python 2to3, Spectra (all operations) working
r1167 if 'timezone' in kwargs:
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.timezone = kwargs['timezone']
else:
self.timezone = 'lt'
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
George Yong
Python 2to3, Spectra (all operations) working
r1167 print("[Reading] Searching files in offline mode ...")
Juan C. Espinoza
Change multiSchain by MPProject
r1052 pathList, filenameList = self.searchFilesOffLine(path, startDate=startDate, endDate=endDate,
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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):
George Yong
Python 2to3, Spectra (all operations) working
r1167 print("There is no files into the folder: %s"%(path))
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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
Juan C. Espinoza
Change multiSchain by MPProject
r1052 def searchFilesOffLine(self,
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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 == []:
George Yong
Python 2to3, Spectra (all operations) working
r1167 print("[Reading] No *%s files in %s from %s to %s)"%(ext, path,
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 datetime.datetime.combine(startDate,startTime).ctime(),
George Yong
Python 2to3, Spectra (all operations) working
r1167 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:
George Yong
Python 2to3, Spectra (all operations) working
r1167 print("[Reading] %d days were found in date range: %s - %s" %(len(dateList), startDate, endDate))
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 else:
George Yong
Python 2to3, Spectra (all operations) working
r1167 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:
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):
George Yong
Python 2to3, Spectra (all operations) working
r1167 print("[Reading] Any file was found int time range %s - %s" %(datetime.datetime.combine(startDate,startTime).ctime(), datetime.datetime.combine(endDate,endTime).ctime()))
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
George Yong
Python 2to3, Spectra (all operations) working
r1167 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 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)
startDate : fecha inicial del rango seleccionado en formato datetime.date
endDate : fecha final del rango seleccionado en formato datetime.date
startTime : tiempo inicial del rango seleccionado en formato datetime.time
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()
George Yong
Python 2to3, Spectra (all operations) working
r1167 raise IOError("The file %s can't be opened" %(filename))
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 #In case has utctime attribute
grp2 = grp1['utctime']
Juan C. Espinoza
Review decorator logic for ending process
r1193 # thisUtcTime = grp2.value[0] - 5*3600 #To convert to local time
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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)
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)):
Errors handling and gracefully terminate main process
r1241 raise schainpy.admin.SchainError("No more Files")
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 return 0
filename = self.filenameList[idFile]
filePointer = h5py.File(filename,'r')
self.filename = filename
self.fp = filePointer
George Yong
Python 2to3, Spectra (all operations) working
r1167 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.__setBlockList()
self.__readData()
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 filename = self.filenameList[0]
fp = h5py.File(filename,'r')
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 = []
George Yong
Python 2to3, Spectra (all operations) working
r1167 for item in list(gp.items()):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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 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
George Yong
Python 2to3, Spectra (all operations) working
r1167 for item in list(grp.items()):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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
nDim1 = shapes[2] #Dimension 1, number of Points or Parameters
nDim0 = shapes[3] #Dimension 2, number of samples or ranges
mode = shapes[4] #Mode of storing
blockList = self.blockList
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
Juan C. Espinoza
Review decorator logic for ending process
r1193 # 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.blockIndex==self.blocksPerFile:
if not( self.__setNextFileOffline() ):
self.dataOut.flagNoData = True
return 0
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.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
Juan C. Espinoza
Review decorator logic for ending process
r1193
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 @MPDecorator
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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
blocksPerFile: number of blocks that will be saved in per HDF5 format file
mode: selects the data stacking mode: '0' channels, '1' parameters, '3' table (for meteors)
metadataList: list of attributes that will be stored as metadata
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 ext = ".hdf5"
optchar = "D"
metaoptchar = "M"
metaFile = None
filename = None
path = None
setFile = None
fp = None
grp = None
ds = None
firsttime = True
#Configurations
blocksPerFile = None
blockIndex = None
dataOut = None
#Data Arrays
dataList = None
metadataList = None
dsList = None #List of dictionaries with dataset properties
tableDim = None
dtype = [('arrayName', 'S20'),('nDimensions', 'i'), ('dim2', 'i'), ('dim1', 'i'),('dim0', 'i'),('mode', 'b')]
currentDay = None
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
Juan C. Espinoza
Set default value for setType in ParamWriter
r1222 setType = None
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
Juan C. Espinoza
Review decorator logic for ending process
r1193 def __init__(self):
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
Review decorator logic for ending process
r1193 Operation.__init__(self)
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
Juan C. Espinoza
Review decorator logic for ending process
r1193 def setup(self, dataOut, path=None, blocksPerFile=10, metadataList=None, dataList=None, mode=None, setType=None):
José Chávez
paramter.py helper
r955 self.path = path
self.blocksPerFile = blocksPerFile
self.metadataList = metadataList
self.dataList = dataList
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.dataOut = dataOut
self.mode = mode
José Chávez
paramter.py helper
r955 if self.mode is not None:
self.mode = numpy.zeros(len(self.dataList)) + mode
else:
self.mode = numpy.ones(len(self.dataList))
Juan C. Espinoza
Review decorator logic for ending process
r1193
self.setType = setType
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
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 if dataAux is None:
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
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
Juan C. Espinoza
Bug in ParamWriter not saving numpy types (int, float)
r1195 if isinstance(dataAux, (int, float, numpy.integer, numpy.float)):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 dsDict['mode'] = 0
dsDict['nDim'] = 0
arrayDim[i,0] = 0
dsList.append(dsDict)
#Mode 2: meteors
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 elif self.mode[i] == 2:
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897 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
arrayDim[i,3] = dataAux.shape[-1]
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 arrayDim[i,4] = self.mode[i] #Mode the data was stored
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
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 arrayDim[i,4] = self.mode[i] #Mode the data was stored
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
self.dsList = dsList
self.tableDim = numpy.array(tableList, dtype = dtype0)
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.blockIndex = 0
timeTuple = time.localtime(dataOut.utctime)
self.currentDay = timeTuple.tm_yday
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:
Juan C. Espinoza
Review decorator logic for ending process
r1193 filesList = [k for k in filesList if k.startswith(self.metaoptchar)]
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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
Juan C. Espinoza
Add setType to ParamWriter
r986 if self.setType is None:
setFile += 1
file = '%s%4.4d%3.3d%03d%s' % (self.metaoptchar,
timeTuple.tm_year,
timeTuple.tm_yday,
setFile,
ext )
else:
setFile = timeTuple.tm_hour*60+timeTuple.tm_min
file = '%s%4.4d%3.3d%04d%s' % (self.metaoptchar,
timeTuple.tm_year,
timeTuple.tm_yday,
setFile,
ext )
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848
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):
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
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 )
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 ##filesList = [k for k in filesList if 'M' in k]
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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
Juan C. Espinoza
Review decorator logic for ending process
r1193 if self.setType is None:
Juan C. Espinoza
Add setType to ParamWriter
r986 setFile += 1
Juan C. Espinoza
Review decorator logic for ending process
r1193 file = '%s%4.4d%3.3d%03d%s' % (self.optchar,
Juan C. Espinoza
Add setType to ParamWriter
r986 timeTuple.tm_year,
timeTuple.tm_yday,
setFile,
ext )
else:
setFile = timeTuple.tm_hour*60+timeTuple.tm_min
Juan C. Espinoza
Review decorator logic for ending process
r1193 file = '%s%4.4d%3.3d%04d%s' % (self.optchar,
Juan C. Espinoza
Add setType to ParamWriter
r986 timeTuple.tm_year,
timeTuple.tm_yday,
setFile,
ext )
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848
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")
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(dsInfo['variable'], (1,1), maxshape=(1,self.blocksPerFile) , chunks = True, dtype=numpy.float64)
ds.append(ds0)
data.append([])
i += 1
continue
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']
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
José Chávez
cambiados los kwargs para cada operacion/unidad de procesamiento
r897
if dsInfo['nDim'] == 3:
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 shape = dsInfo['shape'].astype(int)
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:
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 shape = int(dsInfo['shape'])
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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
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
Juan C. Espinoza
Review decorator logic for ending process
r1193 log.log('creating file: {}'.format(filename), 'Writing')
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 self.filename = filename
self.ds = ds
self.data = data
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 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
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
Juan C. Espinoza
Review decorator logic for ending process
r1193 # elif nDim == 1:
# data[ind] = numpy.reshape(dataAux,(numpy.size(dataAux),1))
# ind += 1
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 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:
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
Juan C. Espinoza
Review decorator logic for ending process
r1193 def run(self, dataOut, path, blocksPerFile=10, metadataList=None, dataList=None, mode=None, setType=None):
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848
Juan C. Espinoza
Update from master
r1224 self.dataOut = dataOut
Julio Valdez
Changed name from jroIO_HDF5 to jroIO_param
r848 if not(self.isConfig):
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.setup(dataOut, path=path, blocksPerFile=blocksPerFile,
Juan C. Espinoza
Review decorator logic for ending process
r1193 metadataList=metadataList, dataList=dataList, mode=mode,
setType=setType)
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.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()
George Yong
Multiprocessing for writing Units(Spectral, Voltage and Parameters)
r1179 return
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
@MPDecorator
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 class ParameterReader(Reader, ProcessingUnit):
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 '''
Reads HDF5 format files
'''
def __init__(self):
ProcessingUnit.__init__(self)
self.dataOut = Parameters()
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.ext = ".hdf5"
self.optchar = "D"
self.timezone = "lt"
self.listMetaname = []
self.listMeta = []
self.listDataname = []
self.listData = []
self.listShapes = []
self.open_file = h5py.File
self.open_mode = 'r'
self.metadata = False
self.filefmt = "*%Y%j***"
self.folderfmt = "*%Y%j"
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
def setup(self, **kwargs):
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.set_kwargs(**kwargs)
if not self.ext.startswith('.'):
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.ext = '.{}'.format(self.ext)
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 if self.online:
log.log("Searching files in online mode...", self.name)
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 for nTries in range(self.nTries):
fullpath = self.searchFilesOnLine(self.path, self.startDate,
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.endDate, self.expLabel, self.ext, self.walk,
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.filefmt, self.folderfmt)
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 try:
fullpath = next(fullpath)
except:
fullpath = None
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 if fullpath:
break
log.warning(
'Waiting {} sec for a valid file in {}: try {} ...'.format(
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.delay, self.path, nTries + 1),
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.name)
time.sleep(self.delay)
if not(fullpath):
raise schainpy.admin.SchainError(
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 'There isn\'t any valid file in {}'.format(self.path))
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254
pathname, filename = os.path.split(fullpath)
self.year = int(filename[1:5])
self.doy = int(filename[5:8])
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.set = int(filename[8:11]) - 1
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 else:
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 log.log("Searching files in {}".format(self.path), self.name)
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.filenameList = self.searchFilesOffLine(self.path, self.startDate,
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.endDate, self.expLabel, self.ext, self.walk, self.filefmt, self.folderfmt)
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.setNextFile()
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 return
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 def readFirstHeader(self):
'''Read metadata and data'''
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.__readMetadata()
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 self.__readData()
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.__setBlockList()
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 self.blockIndex = 0
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 return
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
def __setBlockList(self):
'''
Selects the data within the times defined
self.fp
self.startTime
self.endTime
self.blockList
self.blocksPerFile
'''
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 startTime = self.startTime
endTime = self.endTime
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 index = self.listDataname.index('utctime')
thisUtcTime = self.listData[index]
self.interval = numpy.min(thisUtcTime[1:] - thisUtcTime[:-1])
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
if self.timezone == 'lt':
thisUtcTime -= 5*3600
Juan C. Espinoza
Fix blocklist value in ParameterReader
r1233 thisDatetime = datetime.datetime.fromtimestamp(thisUtcTime[0] + 5*3600)
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
thisDate = thisDatetime.date()
thisTime = thisDatetime.time()
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()
ind = numpy.where(numpy.logical_and(thisUtcTime >= startUtcTime, thisUtcTime < endUtcTime))[0]
self.blockList = ind
self.blocksPerFile = len(ind)
return
def __readMetadata(self):
'''
Reads Metadata
'''
listMetaname = []
listMetadata = []
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 if 'Metadata' in self.fp:
gp = self.fp['Metadata']
for item in list(gp.items()):
name = item[0]
if name=='variables':
table = gp[name][:]
listShapes = {}
for shapes in table:
listShapes[shapes[0].decode()] = numpy.array([shapes[1]])
else:
data = gp[name].value
listMetaname.append(name)
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 listMetadata.append(data)
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 elif self.metadata:
metadata = json.loads(self.metadata)
listShapes = {}
for tup in metadata:
name, values, dim = tup
if dim == -1:
listMetaname.append(name)
listMetadata.append(self.fp[values].value)
else:
listShapes[name] = numpy.array([dim])
else:
raise IOError('Missing Metadata group in file or metadata info')
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
self.listShapes = listShapes
self.listMetaname = listMetaname
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.listMeta = listMetadata
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
return
def __readData(self):
listdataname = []
listdata = []
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 if 'Data' in self.fp:
grp = self.fp['Data']
for item in list(grp.items()):
name = item[0]
listdataname.append(name)
dim = self.listShapes[name][0]
if dim == 0:
array = grp[name].value
else:
array = []
for i in range(dim):
array.append(grp[name]['table{:02d}'.format(i)].value)
array = numpy.array(array)
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 listdata.append(array)
elif self.metadata:
metadata = json.loads(self.metadata)
for tup in metadata:
name, values, dim = tup
listdataname.append(name)
if dim == -1:
continue
elif dim == 0:
array = self.fp[values].value
else:
array = []
for var in values:
array.append(self.fp[var].value)
array = numpy.array(array)
listdata.append(array)
else:
raise IOError('Missing Data group in file or metadata info')
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
self.listDataname = listdataname
self.listData = listdata
return
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 def getData(self):
for i in range(len(self.listMeta)):
setattr(self.dataOut, self.listMetaname[i], self.listMeta[i])
for j in range(len(self.listData)):
dim = self.listShapes[self.listDataname[j]][0]
if dim == 0:
setattr(self.dataOut, self.listDataname[j], self.listData[j][self.blockIndex])
else:
setattr(self.dataOut, self.listDataname[j], self.listData[j][:,self.blockIndex])
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.dataOut.paramInterval = self.interval
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 self.dataOut.flagNoData = False
self.blockIndex += 1
return
def run(self, **kwargs):
if not(self.isConfig):
self.setup(**kwargs)
self.isConfig = True
if self.blockIndex == self.blocksPerFile:
Update ParamReader to support diferent HDF5 files, fix Read/Write Madrigal files
r1254 self.setNextFile()
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
self.getData()
return
@MPDecorator
class ParameterWriter(Operation):
'''
HDF5 Writer, stores parameters data in HDF5 format files
path: path where the files will be stored
blocksPerFile: number of blocks that will be saved in per HDF5 format file
mode: selects the data stacking mode: '0' channels, '1' parameters, '3' table (for meteors)
metadataList: list of attributes that will be stored as metadata
dataList: list of attributes that will be stores as data
'''
ext = ".hdf5"
optchar = "D"
metaoptchar = "M"
metaFile = None
filename = None
path = None
setFile = None
fp = None
grp = None
ds = None
firsttime = True
#Configurations
blocksPerFile = None
blockIndex = None
dataOut = None
#Data Arrays
dataList = None
metadataList = None
dsList = None #List of dictionaries with dataset properties
tableDim = None
dtype = [('name', 'S20'),('nDim', 'i')]
currentDay = None
lastTime = None
def __init__(self):
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 Operation.__init__(self)
return
def setup(self, path=None, blocksPerFile=10, metadataList=None, dataList=None, setType=None):
self.path = path
self.blocksPerFile = blocksPerFile
self.metadataList = metadataList
self.dataList = dataList
self.setType = setType
tableList = []
dsList = []
for i in range(len(self.dataList)):
dsDict = {}
dataAux = getattr(self.dataOut, self.dataList[i])
dsDict['variable'] = self.dataList[i]
if dataAux is None:
continue
elif isinstance(dataAux, (int, float, numpy.integer, numpy.float)):
dsDict['nDim'] = 0
else:
dsDict['nDim'] = len(dataAux.shape)
dsDict['shape'] = dataAux.shape
dsDict['dsNumber'] = dataAux.shape[0]
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 dsList.append(dsDict)
tableList.append((self.dataList[i], dsDict['nDim']))
self.dsList = dsList
self.tableDim = numpy.array(tableList, dtype=self.dtype)
self.currentDay = self.dataOut.datatime.date()
def timeFlag(self):
currentTime = self.dataOut.utctime
timeTuple = time.localtime(currentTime)
dataDay = timeTuple.tm_yday
if self.lastTime is None:
self.lastTime = currentTime
self.currentDay = dataDay
return False
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 timeDiff = currentTime - self.lastTime
#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
def run(self, dataOut, path, blocksPerFile=10, metadataList=None, dataList=None, setType=None):
self.dataOut = dataOut
if not(self.isConfig):
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 self.setup(path=path, blocksPerFile=blocksPerFile,
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 metadataList=metadataList, dataList=dataList,
setType=setType)
self.isConfig = True
self.setNextFile()
self.putData()
return
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 def setNextFile(self):
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 ext = self.ext
path = self.path
setFile = self.setFile
timeTuple = time.localtime(self.dataOut.utctime)
subfolder = 'd%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
fullpath = os.path.join(path, subfolder)
if os.path.exists(fullpath):
filesList = os.listdir(fullpath)
filesList = [k for k in filesList if k.startswith(self.optchar)]
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
else:
setFile = -1
else:
setFile = -1 #inicializo mi contador de seteo
else:
os.makedirs(fullpath)
setFile = -1 #inicializo mi contador de seteo
if self.setType is None:
setFile += 1
file = '%s%4.4d%3.3d%03d%s' % (self.optchar,
timeTuple.tm_year,
timeTuple.tm_yday,
setFile,
ext )
else:
setFile = timeTuple.tm_hour*60+timeTuple.tm_min
file = '%s%4.4d%3.3d%04d%s' % (self.optchar,
timeTuple.tm_year,
timeTuple.tm_yday,
setFile,
ext )
self.filename = os.path.join( path, subfolder, file )
#Setting HDF5 File
self.fp = h5py.File(self.filename, 'w')
#write metadata
self.writeMetadata(self.fp)
#Write data
self.writeData(self.fp)
def writeMetadata(self, fp):
grp = fp.create_group("Metadata")
grp.create_dataset('variables', data=self.tableDim, dtype=self.dtype)
for i in range(len(self.metadataList)):
if not hasattr(self.dataOut, self.metadataList[i]):
log.warning('Metadata: `{}` not found'.format(self.metadataList[i]), self.name)
continue
value = getattr(self.dataOut, self.metadataList[i])
grp.create_dataset(self.metadataList[i], data=value)
return
def writeData(self, fp):
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 grp = fp.create_group("Data")
dtsets = []
data = []
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 for dsInfo in self.dsList:
if dsInfo['nDim'] == 0:
ds = grp.create_dataset(
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 dsInfo['variable'],
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 (self.blocksPerFile, ),
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 chunks=True,
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 dtype=numpy.float64)
dtsets.append(ds)
data.append((dsInfo['variable'], -1))
else:
sgrp = grp.create_group(dsInfo['variable'])
for i in range(dsInfo['dsNumber']):
ds = sgrp.create_dataset(
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279 'table{:02d}'.format(i),
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 (self.blocksPerFile, ) + dsInfo['shape'][1:],
chunks=True)
dtsets.append(ds)
data.append((dsInfo['variable'], i))
fp.flush()
Juan C. Espinoza
Add input queues for processing units and external operations
r1235 log.log('Creating file: {}'.format(fp.filename), self.name)
Modificación a kmamisr para ejecutarse en la versión 3, creación de scripts con terminación v3 para difereciarlos, se comentó la linea #720 de JroIO_param.py debido a que reiniciaba la lista de archivos, ocasionando la reescritura del archivo hdf5. Alguna otra modificación aparente es producto de algunas variaciones en espacios al usar la función print()
r1279
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232 self.ds = dtsets
self.data = data
self.firsttime = True
self.blockIndex = 0
return
def putData(self):
if (self.blockIndex == self.blocksPerFile) or self.timeFlag():
self.closeFile()
self.setNextFile()
for i, ds in enumerate(self.ds):
attr, ch = self.data[i]
if ch == -1:
ds[self.blockIndex] = getattr(self.dataOut, attr)
else:
ds[self.blockIndex] = getattr(self.dataOut, attr)[ch]
self.fp.flush()
self.blockIndex += 1
Juan C. Espinoza
Add input queues for processing units and external operations
r1235 log.log('Block No. {}/{}'.format(self.blockIndex, self.blocksPerFile), self.name)
Juan C. Espinoza
ParameterReader unit and ParameterWriter operation added
r1232
return
def closeFile(self):
if self.blockIndex != self.blocksPerFile:
for ds in self.ds:
ds.resize(self.blockIndex, axis=0)
self.fp.flush()
self.fp.close()
def close(self):
self.closeFile()