##// END OF EJS Templates
Timezone is taken from data and not from PC
Timezone is taken from data and not from PC

File last commit:

r169:661bb8af254a
r565:9a975da57daf
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()