##// END OF EJS Templates
Se agrego el ID de identificacion para cada clase del controlador....
Se agrego el ID de identificacion para cada clase del controlador. Se agrego el parametro inputId a la Unidad de Procesamiento (UP)

File last commit:

r169:661bb8af254a
r195:7a77d1c4b33f
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()