''' 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()