''' Created on Feb 7, 2012 @author $Author$ @version $Id$ ''' import os, sys import numpy path = os.path.split(os.getcwd())[0] sys.path.append(path) from Model.Correlation import Correlation from IO.CorrelationIO import CorrelationWriter #from Graphics.CorrelationPlot import Correlator from Model.Voltage import Voltage from Model.Spectra import Spectra class CorrelationProcessor: ''' classdocs ''' integratorIndex = None writerIndex = None plotterIndex = None lagsList = None nLags = None tauList = None pairList = None indexTau = None def __init__(self,dataInObj, dataOutObj=None): ''' Constructor ''' self.dataInObj = dataInObj if dataOutObj == None: self.dataOutObj = Correlation() else: self.dataOutObj = dataOutObj self.indexTau = 0 self.buffer = None def init(self,pairList=None,tauList=None): self.integratorIndex = 0 self.writerIndex = 0 self.plotterIndex = 0 self.pairList = pairList self.tauList = tauList if ( isinstance(self.dataInObj, Voltage) ): self.__getCorrelation() if ( isinstance(self.dataInObj, Spectra) ): sys.exit(0) if ( isinstance(self.dataInObj, Correlation) ): sel.__getCopy() def __getCorrelation(self): if self.dataInObj.flagNoData: return 0 if self.tauList == None: # se lee el tauList desde el archivo flip = None if self.dataInObj.m_RadarControllerHeader.flip1 != None: flip = self.dataInObj.m_RadarControllerHeader.flip1 if self.dataInObj.m_RadarControllerHeader.flip2 != None: flip = self.dataInObj.m_RadarControllerHeader.flip2 if flip == None: flip = 2 print 'flip is None --> flip = %d '%flip ntaus = self.dataInObj.m_RadarControllerHeader.numTaus taus = self.dataInObj.m_RadarControllerHeader.Taus.reshape(ntaus/flip,flip) index = 0 self.tauList = taus[:,index] print 'tauList is None --> tauList = obj.m_RadarControllerHeader.Taus[:,%d]'%index self.nLags = len(self.tauList) if self.pairList == None: self.pairList = [(0,0)] # por defecto calcula la AutoCorrelacion de una canal self.dataOutObj.tauList = self.tauList self.dataOutObj.nLags = self.nLags self.dataOutObj.pairList = self.pairList if self.buffer == None: nhei = self.dataInObj.nHeights npairList = len(self.pairList) self.buffer = numpy.zeros((self.nLags,nhei,npairList),dtype='complex') bufferZ = numpy.zeros((npairList,self.dataInObj.nHeights),dtype='complex') indexHeight = self.tauList[self.indexTau] / self.dataInObj.m_ProcessingHeader.deltaHeight countPair = 0 # make (signalA*signalB'), where signalA: channel without delay, signalB: channel with delay, for pair in self.pairList: bufferZ[countPair,0:self.dataInObj.nHeights-indexHeight] = self.dataInObj.data[pair[1],indexHeight:self.dataInObj.nHeights] signalA = self.dataInObj.data[pair[0],:] signalB = bufferZ[countPair,:] data = signalA * numpy.conjugate(signalB) self.buffer[self.indexTau,:,countPair] = data countPair += 1 # change index Tau and lagCounter self.indexTau += 1 if self.indexTau >= self.nLags: self.indexTau = 0 self.dataOutObj.data = self.buffer self.buffer = None self.dataOutObj.flagNoData = False else: self.dataOutObj.flagNoData = True def addIntegrator(self): pass def addWriter(self): pass def addPlotter(self): pass class Integrator(): def __init__(self): pass