|
|
import os
|
|
|
import sys
|
|
|
import numpy
|
|
|
|
|
|
path = os.path.split(os.getcwd())[0]
|
|
|
sys.path.append(path)
|
|
|
|
|
|
from Data.Voltage import Voltage
|
|
|
|
|
|
|
|
|
class VoltageProcessor:
|
|
|
dataInObj = None
|
|
|
dataOutObj = None
|
|
|
integratorObjIndex = None
|
|
|
writerObjIndex = None
|
|
|
integratorObjList = None
|
|
|
writerObjList = None
|
|
|
|
|
|
def __init__(self):
|
|
|
self.integratorObjIndex = None
|
|
|
self.writerObjIndex = None
|
|
|
self.integratorObjList = []
|
|
|
self.writerObjList = []
|
|
|
|
|
|
def setup(self,dataInObj=None,dataOutObj=None):
|
|
|
self.dataInObj = dataInObj
|
|
|
|
|
|
if self.dataOutObj == None:
|
|
|
dataOutObj = Voltage()
|
|
|
|
|
|
self.dataOutObj = dataOutObj
|
|
|
|
|
|
return self.dataOutObj
|
|
|
|
|
|
def init(self):
|
|
|
self.integratorObjIndex = 0
|
|
|
self.writerObjIndex = 0
|
|
|
# No necesita copiar en cada init() los atributos de dataInObj
|
|
|
# la copia deberia hacerse por cada nuevo bloque de datos
|
|
|
|
|
|
def addIntegrator(self,N,timeInterval):
|
|
|
objCohInt = CoherentIntegrator(N,timeInterval)
|
|
|
self.integratorObjList.append(objCohInt)
|
|
|
|
|
|
def addWriter(self):
|
|
|
pass
|
|
|
|
|
|
def integrator(self, N=None, timeInterval=None):
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
if len(self.integratorObjList) <= self.integratorObjIndex:
|
|
|
self.addIntegrator(N,timeInterval)
|
|
|
|
|
|
myCohIntObj = self.integratorObjList[self.integratorObjIndex]
|
|
|
myCohIntObj.exe(data=self.dataOutObj.data,timeOfData=None)
|
|
|
|
|
|
pass
|
|
|
|
|
|
def writeData(self):
|
|
|
pass
|
|
|
|
|
|
class CoherentIntegrator:
|
|
|
|
|
|
integ_counter = None
|
|
|
data = None
|
|
|
navg = None
|
|
|
buffer = None
|
|
|
nCohInt = None
|
|
|
|
|
|
def __init__(self, N=None,timeInterval=None):
|
|
|
|
|
|
self.data = None
|
|
|
self.navg = None
|
|
|
self.buffer = None
|
|
|
self.timeOut = None
|
|
|
self.exitCondition = False
|
|
|
self.isReady = False
|
|
|
self.nCohInt = N
|
|
|
self.integ_counter = 0
|
|
|
if timeInterval!=None:
|
|
|
self.timeIntervalInSeconds = timeInterval * 60. #if (type(timeInterval)!=integer) -> change this line
|
|
|
|
|
|
if ((timeInterval==None) and (N==None)):
|
|
|
raise ValueError, "N = None ; timeInterval = None"
|
|
|
|
|
|
if timeInterval == None:
|
|
|
self.timeFlag = False
|
|
|
else:
|
|
|
self.timeFlag = True
|
|
|
|
|
|
def exe(self, data, timeOfData):
|
|
|
|
|
|
if self.timeFlag:
|
|
|
if self.timeOut == None:
|
|
|
self.timeOut = timeOfData + self.timeIntervalInSeconds
|
|
|
|
|
|
if timeOfData < self.timeOut:
|
|
|
if self.buffer == None:
|
|
|
self.buffer = data
|
|
|
else:
|
|
|
self.buffer = self.buffer + data
|
|
|
self.integ_counter += 1
|
|
|
else:
|
|
|
self.exitCondition = True
|
|
|
|
|
|
else:
|
|
|
if self.integ_counter < self.nCohInt:
|
|
|
if self.buffer == None:
|
|
|
self.buffer = data
|
|
|
else:
|
|
|
self.buffer = self.buffer + data
|
|
|
|
|
|
self.integ_counter += 1
|
|
|
|
|
|
if self.integ_counter == self.nCohInt:
|
|
|
self.exitCondition = True
|
|
|
|
|
|
if self.exitCondition:
|
|
|
self.data = self.buffer
|
|
|
self.navg = self.integ_counter
|
|
|
self.isReady = True
|
|
|
self.buffer = None
|
|
|
self.timeOut = None
|
|
|
self.integ_counter = 0
|
|
|
self.exitCondition = False
|
|
|
|
|
|
if self.timeFlag:
|
|
|
self.buffer = data
|
|
|
self.timeOut = timeOfData + self.timeIntervalInSeconds
|
|
|
else:
|
|
|
self.isReady = False
|
|
|
|
|
|
|
|
|
|