VoltageProcessor.py
220 lines
| 6.7 KiB
| text/x-python
|
PythonLexer
|
r126 | ''' | ||
$Author$ | ||||
$Id$ | ||||
''' | ||||
|
r122 | import os | ||
import sys | ||||
import numpy | ||||
|
r136 | import datetime | ||
|
r122 | |||
path = os.path.split(os.getcwd())[0] | ||||
sys.path.append(path) | ||||
|
r137 | from Data.JROData import Voltage | ||
|
r123 | from IO.VoltageIO import VoltageWriter | ||
|
r136 | from Graphics2.schainPlotTypes import ScopeFigure | ||
|
r122 | |||
class VoltageProcessor: | ||||
|
r137 | |||
|
r122 | dataInObj = None | ||
dataOutObj = None | ||||
integratorObjIndex = None | ||||
writerObjIndex = None | ||||
integratorObjList = None | ||||
writerObjList = None | ||||
def __init__(self): | ||||
self.integratorObjIndex = None | ||||
self.writerObjIndex = None | ||||
|
r134 | self.plotObjIndex = None | ||
|
r122 | self.integratorObjList = [] | ||
self.writerObjList = [] | ||||
|
r134 | self.plotObjList = [] | ||
|
r122 | |||
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 | ||||
|
r134 | self.plotObjIndex = 0 | ||
|
r123 | |||
if not(self.dataInObj.flagNoData): | ||||
self.dataOutObj.copy(self.dataInObj) | ||||
|
r122 | # No necesita copiar en cada init() los atributos de dataInObj | ||
# la copia deberia hacerse por cada nuevo bloque de datos | ||||
|
r134 | |||
def addScope(self, idfigure, nframes, wintitle, driver): | ||||
if idfigure==None: | ||||
idfigure = self.plotObjIndex | ||||
scopeObj = ScopeFigure(idfigure, nframes, wintitle, driver) | ||||
self.plotObjList.append(scopeObj) | ||||
def plotScope(self, | ||||
idfigure=None, | ||||
minvalue=None, | ||||
maxvalue=None, | ||||
xmin=None, | ||||
xmax=None, | ||||
wintitle='', | ||||
driver='plplot', | ||||
save=False, | ||||
gpath=None, | ||||
titleList=None, | ||||
xlabelList=None, | ||||
ylabelList=None, | ||||
type="power"): | ||||
if self.dataOutObj.flagNoData: | ||||
return 0 | ||||
nframes = len(self.dataOutObj.channelList) | ||||
if len(self.plotObjList) <= self.plotObjIndex: | ||||
self.addScope(idfigure, nframes, wintitle, driver) | ||||
|
r136 | |||
if type=="power": | ||||
data1D = self.dataOutObj.data * numpy.conjugate(self.dataOutObj.data) | ||||
data1D = data1D.real | ||||
if type =="iq": | ||||
data1D = self.dataOutObj.data | ||||
thisDatetime = datetime.datetime.fromtimestamp(self.dataOutObj.dataUtcTime) | ||||
dateTime = "%s"%(thisDatetime.strftime("%d-%b-%Y %H:%M:%S")) | ||||
date = "%s"%(thisDatetime.strftime("%d-%b-%Y")) | ||||
figureTitle = "Scope Plot Radar Data: " + date | ||||
|
r134 | |||
|
r136 | plotObj = self.plotObjList[self.plotObjIndex] | ||
|
r134 | |||
|
r136 | plotObj.plot1DArray(data1D, | ||
self.dataOutObj.heightList, | ||||
self.dataOutObj.channelList, | ||||
xmin, | ||||
xmax, | ||||
minvalue, | ||||
maxvalue, | ||||
figureTitle, | ||||
save, | ||||
gpath) | ||||
|
r134 | self.plotObjIndex += 1 | ||
|
r122 | |||
def addIntegrator(self,N,timeInterval): | ||||
objCohInt = CoherentIntegrator(N,timeInterval) | ||||
self.integratorObjList.append(objCohInt) | ||||
|
r126 | def addWriter(self, wrpath, blocksPerFile, profilesPerBlock): | ||
|
r134 | writerObj = VoltageWriter(self.dataOutObj) | ||
writerObj.setup(wrpath,blocksPerFile,profilesPerBlock) | ||||
self.writerObjList.append(writerObj) | ||||
|
r123 | |||
|
r126 | def writeData(self, wrpath, blocksPerFile, profilesPerBlock): | ||
|
r123 | |||
if self.dataOutObj.flagNoData: | ||||
return 0 | ||||
if len(self.writerObjList) <= self.writerObjIndex: | ||||
|
r126 | self.addWriter(wrpath, blocksPerFile, profilesPerBlock) | ||
|
r123 | |||
self.writerObjList[self.writerObjIndex].putData() | ||||
self.writerObjIndex += 1 | ||||
|
r122 | 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) | ||||
|
r134 | |||
|
r122 | |||
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 | ||||