##// END OF EJS Templates
En jrodata.py no se considera el factor para el caso del filtro en alturas, por el momento solo se realiza la suma de los valores sin ninguna division o normalizacion de este resultado, verficar en jroprocessing.py....
En jrodata.py no se considera el factor para el caso del filtro en alturas, por el momento solo se realiza la suma de los valores sin ninguna division o normalizacion de este resultado, verficar en jroprocessing.py. En jrodataIO.py y jroheaderIO.py se hacen correcciones para la escritura de datos formato pdata. En jroplot.py se agrega variable habilitar o deshabilitar la normalizacion de los datos, por defecto considera la normalizacion

File last commit:

r169:661bb8af254a
r268:43faa0eea275
Show More
CorrelationProcessor.py
146 lines | 4.3 KiB | text/x-python | PythonLexer
'''
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