##// END OF EJS Templates
En jrodata.py no se considera el factor para el caso del filtro en alturas, por el momento solo se realiza la suma de los valores sin ninguna division o normalizacion de este resultado, verficar en jroprocessing.py....
En jrodata.py no se considera el factor para el caso del filtro en alturas, por el momento solo se realiza la suma de los valores sin ninguna division o normalizacion de este resultado, verficar en jroprocessing.py. En jrodataIO.py y jroheaderIO.py se hacen correcciones para la escritura de datos formato pdata. En jroplot.py se agrega variable habilitar o deshabilitar la normalizacion de los datos, por defecto considera la normalizacion

File last commit:

r169:661bb8af254a
r268:43faa0eea275
Show More
Controller.py
276 lines | 8.7 KiB | text/x-python | PythonLexer
'''
Created on June 5, 2012
$Author$
$Id$
'''
import os
import sys
import datetime
import ConfigParser
path = os.path.split(os.getcwd())[0]
sys.path.append(path)
from Model.Voltage import Voltage
from IO.VoltageIO import *
from Model.Spectra import Spectra
from IO.SpectraIO import *
from Processing.VoltageProcessor import *
from Processing.SpectraProcessor import *
class Operation:
def __init__(self,name,parameters):
self.name = name
self.parameters = []
parametersList = parameters.split(',')
nparms = len(parametersList)/2
for id in range(nparms):
parmtype = parametersList[id*2]
value = parametersList[id*2+1]
if value == 'None':
value = None
else:
if parmtype == 'int':
value = int(value)
elif parmtype == 'float':
value = float(value)
elif parmtype == 'str':
value = str(value)
elif parmtype == 'datetime':
value = value.split('-'); value = numpy.asarray(value,dtype=numpy.int32)
value = datetime.datetime(value[0],value[1],value[2],value[3],value[4],value[5])
else:
value = None
self.parameters.append(value)
class ExecUnit:
def __init__(self,):
self.id = None
self.type = None
self.execObjIn = None
self.execObjOut = None
self.execProcObj = None
self.input = None
self.operationList = []
self.flagSetIO = False
def setIO(self):
self.execProcObj.setIO(self.execObjIn,self.execObjOut)
self.flagSetIO = True
def Pfunction(self,name):
def setup(*args):
inputs = args[0]
if self.type == 'VoltageReader':
path = inputs[0]
startDateTime = inputs[1]
endDateTime = inputs[2]
set = inputs[3]
expLabel = inputs[4]
ext = inputs[5]
online = inputs[6]
return self.execProcObj.setup(path,startDateTime,endDateTime,set,expLabel,ext,online)
if self.type == 'Voltage':
return self.execProcObj.setup()
if self.type == 'Spectra':
nFFTPoints = inputs[0]
pairList = inputs[1]
return self.execProcObj.setup(nFFTPoints,pairList)
def getData(*args):
return self.execProcObj.getData()
def init(*args):
inputs = args[0]
parm1 = inputs[0]
if self.type == 'Voltage':
return self.execProcObj.init()
if self.type == 'Spectra':
return self.execProcObj.init()
def plotData(*args):
inputs = args[0]
if self.type == 'Voltage':
xmin = inputs[0]
xmax = inputs[1]
ymin = inputs[2]
ymax = inputs[3]
type = inputs[4]
winTitle = inputs[5]
index = inputs[6]
return self.execProcObj.plotData(xmin,xmax,ymin,ymax,type,winTitle,index)
if self.type == 'Spectra':
xmin = inputs[0]
xmax = inputs[1]
ymin = inputs[2]
ymax = inputs[3]
winTitle = inputs[4]
index = inputs[5]
return self.execProcObj.plotData(xmin,xmax,ymin,ymax,winTitle,index)
def integrator(*args):
inputs = args[0]
N = inputs[0]
timeInterval = inputs[1]
self.execProcObj.integrator(N, timeInterval)
pfuncDict = { "setup": setup,
"getdata": getData,
"init": init,
"plotdata": plotData,
"integrator": integrator}
return pfuncDict[name]
def run(self):
nopers = len(self.operationList)
for idOper in range(nopers):
operObj = self.operationList[idOper]
self.Pfunction(operObj.name)(operObj.parameters)
class Controller:
def __init__(self):
self.sectionList = None
self.execUnitList = None
self.execObjList = None
self.readConfigFile()
self.createObjects()
self.setupOjects()
self.start()
def readConfigFile(self, filename='experiment.cfg'):
parser = ConfigParser.SafeConfigParser()
parser.read(filename)
self.sectionList = parser.sections()
self.execUnitList = []
for section_name in self.sectionList:
itemList = parser.items(section_name)
self.execUnitList.append(itemList)
print
def createObjects(self):
self.execObjList = []
for itemList in self.execUnitList:
execObj = ExecUnit()
for item in itemList:
name, value = item[0], item[1]
if name == 'id':
execObj.id = int(value)
continue
if name == 'type':
execObj.type = value
if value == 'VoltageReader':
execObj.execObjOut = Voltage()
execObj.execProcObj = VoltageReader(execObj.execObjOut)
if value == 'SpectraReader':
execObj.execObjOut = Spectra()
execObj.execProcObj = SpectraReader(execObj.execObjOut)
if value == 'CorrelationReader':
execObj.execObjOut = Correlation()
execObj.execProcObj = CorrelationReader(execObj.execObjOut)
if value == 'Voltage':
execObj.execProcObj = VoltageProcessor()
execObj.execObjOut = Voltage()
if value == 'Spectra':
execObj.execProcObj = SpectraProcessor()
execObj.execObjOut = Spectra()
if value == 'Correlation':
execObj.execProcObj = CorrelationProcessor()
execObj.execObjOut = Correlation()
elif name == 'input':
execObj.input = int(value)
else:
operObj = Operation(name,value)
if name != 'setup':
execObj.operationList.append(operObj)
else:
execObj.Pfunction(name)(operObj.parameters)
del(operObj)
self.execObjList.append(execObj)
del(execObj)
def setupOjects(self):
for objIndex in range(len(self.execObjList)):
currExecObj = self.execObjList[objIndex]
if not(currExecObj.type in ['VoltageReader','SpectraReader','CorrelationReader']):
idSearch = currExecObj.input
for objIndex2 in range(len(self.execObjList)):
lastExecObj = self.execObjList[objIndex2] # este objeto si puede ser un readerl
if lastExecObj.id == idSearch and currExecObj.flagSetIO == False:
currExecObj.execObjIn = lastExecObj.execObjOut
currExecObj.setIO()
def start(self):
while(True):
for indexObj in range(len(self.execObjList)):
ExecObj = self.execObjList[indexObj]
ExecObj.run()
readExecObj = self.execObjList[0] # se asume que el primer elemento es un Reader
if readExecObj.execProcObj.flagNoMoreFiles:
break
if readExecObj.execProcObj.flagIsNewBlock:
print 'Block No %04d, Time: %s' %(readExecObj.execProcObj.nTotalBlocks,
datetime.datetime.fromtimestamp(readExecObj.execProcObj.m_BasicHeader.utc),)
if __name__ == '__main__':
Controller()