import numpy import datetime import time from schainPlot import * class CrossSpc(Figure): overplot = 0 xw = 900 yw = 650 showprofile = False signalA = None signalB = None coherence = None phase = None def __init__(self, idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile): Figure.__init__(self,idfigure, nframes, wintitle, self.xw, self.yw, self.overplot, driver, colormap, colorbar) self.showprofile = showprofile self.signalA = None self.signalB = None self.coherence = None self.phase = None def getSubplots(self): nrows = self.nframes ncolumns = 1 return nrows, ncolumns def setParms(self, data, x, y, xmin, xmax, ymin, ymax, minvalue, maxvalue, *args): if xmin == None: xmin = numpy.min(x) if xmax == None: xmax = numpy.max(x) if ymin == None: ymin = numpy.min(y) if ymax == None: ymax = numpy.max(y) if minvalue == None: minvalue = 20. if maxvalue == None: maxvalue = 90. self.signalA = self.data[0] self.signalB = self.data[1] self.coherence = self.data[2] self.phase = self.data[3] self.xmin = xmin self.xmax = xmax self.minrange = ymin self.maxrange = ymax self.ymin = ymin self.ymax = ymax self.minvalue = minvalue self.maxvalue = maxvalue def changeXRange(self, *args): pass def createFrames(self): self.frameObjList = [] for frame in range(self.nframes): frameObj = CrossSpcFrame(self.drvObj,frame + 1, self.colorbar, self.showprofile) self.frameObjList.append(frameObj) class CrossSpcFrame(Frame): xi = None xw = None yi = None yw = None alpha = None def __init__(self): self.drvObj = drvObj self.idframe = idframe self.nplots = 4 if showprofile: self.nplots += 4 self.colorbar = colorbar self.showprofile = showprofile self.xi = 0. self.xw = 0. self.yi = 0. self.yw = 0. self.alpha = 1. self.createPlots() def createPlots(self): plotObjList = [] idplot = 0 counter_plot = 0 for i in range(self.nplots): xi, yi, xw, yw = self.getScreenPos(idplot) plotObj = SpcPlot(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, self.colorbar) plotObjList.append(plotObj) if self.showprofile: xi, yi, xw, yw = self.getScreenPosGraph1(idplot) type = "pwbox" title = "" xlabel = "dB" ylabel = "" idplot += 1 plotObj = Plot1D(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel) plotObjList.append(plotObj) idplot += 1 self.plotObjList = plotObjList # def getScreenPos(self,idplot): # pass def getScreenPos(self, diplot): xi = self.xi xw = self.xw if self.showprofile: width = 0.55 xw += width self.xi = 0.15 + idplot*self.alpha if self.showprofile: width = 0.55 self.xw += width else: width = 0.65 self.xw += width if self.colorbar: self.xw = self.xw - 0.06 self.alpha = self.xw yi = 0.20; yw = 0.75 return xi, yi, xw, yw def getScreenPosGraph1(self): if self.colorbar: xi = self.xw + 0.08 else: xi = self.xw + 0.05 xw = xi + 0.2 self.alpha = xw if self.colorbar: self.xi = 0.65 + 0.08 else: self.xi = 0.75 + 0.05 xw = xi + 0.2 yi = 0.2; yw = 0.75 return xi, yi, xw, yw def plot(self,x, y, data): plotObj = self.plotObjList[0] plotObj.plot(x,y,data) if self.showprofile: plotObj = self.plotObjList[1] avg_data = numpy.average(data, axis=0) plotObj.plot(avg_data,y) class SpcFigure(Figure): overplot = 0 xw = 900 yw = 650 showprofile = False def __init__(self, idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile): Figure.__init__(self,idfigure, nframes, wintitle, self.xw, self.yw, self.overplot, driver, colormap, colorbar) self.showprofile = showprofile def getSubplots(self): ncolumns = int(numpy.sqrt(self.nframes)+0.9) nrows = int(self.nframes*1./ncolumns + 0.9) return nrows, ncolumns def setParms(self, data, x, y, xmin, xmax, ymin, ymax, minvalue, maxvalue, *args): if xmin == None: xmin = numpy.min(x) if xmax == None: xmax = numpy.max(x) if ymin == None: ymin = numpy.min(y) if ymax == None: ymax = numpy.max(y) if minvalue == None: minvalue = 20. if maxvalue == None: maxvalue = 90. self.xmin = xmin self.xmax = xmax self.minrange = ymin self.maxrange = ymax self.ymin = ymin self.ymax = ymax self.minvalue = minvalue self.maxvalue = maxvalue def changeXRange(self, *args): pass def createFrames(self): self.frameObjList = [] for frame in range(self.nframes): frameObj = SpcFrame(self.drvObj,frame + 1, self.colorbar, self.showprofile) self.frameObjList.append(frameObj) class SpcFrame(Frame): def __init__(self,drvObj,idframe,colorbar,showprofile): self.drvObj = drvObj self.idframe = idframe self.nplots = 1 if showprofile: self.nplots += 1 self.colorbar = colorbar self.showprofile = showprofile self.createPlots() def createPlots(self): plotObjList = [] idplot = 0 xi, yi, xw, yw = self.getScreenPos(idplot) plotObj = SpcPlot(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, self.colorbar) plotObjList.append(plotObj) if self.showprofile: idplot = 1 xi, yi, xw, yw = self.getScreenPos(idplot) type = "pwbox" title = "" xlabel = "dB" ylabel = "" szchar = 0.70 plotObj = Plot1D(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel, szchar) plotObjList.append(plotObj) self.plotObjList = plotObjList def getScreenPosMainPlot(self): xi = 0.10 if self.showprofile: xw = 0.62 else: xw = 0.9 if self.colorbar: xw = xw - 0.06 yi = 0.1; yw = 0.87 return xi, yi, xw, yw def getScreenPosGraph1(self): if self.colorbar: xi = 0.65 + 0.08 else: xi = 0.75 + 0.05 xw = xi + 0.2 yi = 0.1; yw = 0.87 return xi, yi, xw, yw def plot(self,x, y, data): plotObj = self.plotObjList[0] plotObj.plot(x,y,data) if self.showprofile: plotObj = self.plotObjList[1] avg_data = numpy.average(data, axis=0) plotObj.plot(avg_data,y) class SpcPlot(Plot): getGrid = True def __init__(self, drvObj, idframe, idplot, xi, yi, xw, yw, colorbar): self.drvObj = drvObj self.idframe = idframe self.idplot = idplot self.xi = xi self.yi = yi self.xw = xw self.yw = yw self.colorbar = colorbar if self.colorbar: cbxi = xw + 0.03 cbxw = cbxi + 0.03 cbyi = yi cbyw = yw self.cbxpos = [cbxi,cbxw] self.cbypos = [cbyi,cbyw] self.xpos = [self.xi,self.xw] self.ypos = [self.yi,self.yw] self.xaxisastime = False self.timefmt = None self.xopt = "bcnst" self.yopt = "bcnstv" self.szchar = 0.7 self.strforchannel = "Channel %d"%self.idframe self.xlabel = "m/s" self.ylabel = "Range (Km)" def setBox(self, xmin, xmax, ymin, ymax, minvalue, maxvalue, *args): self.xmin = xmin self.xmax = xmax self.ymin = ymin self.ymax = ymax self.minvalue = minvalue self.maxvalue = maxvalue self.colorbar = args[2] self.title = "%s - %s"%(self.strforchannel,args[3]) def plot(self, x, y, data): z = data deltax = None deltay = None self.plotPcolor(x, y, z, deltax, deltay, self.getGrid) self.getGrid = False class RTIFigure(Figure): overplot = 1 xw = 700 yw = 650 showprofile = False starttime = None endtime = None minrange = None maxrange = None minvalue = None maxvalue = None xrangestepinsecs = None timefmt=None def __init__(self, idfigure, nframes, wintitle, driver, colormap="br_green", colorbar= True, showprofile=False): Figure.__init__(self,idfigure, nframes, wintitle, self.xw, self.yw, self.overplot, driver, colormap, colorbar) self.showprofile = showprofile def getSubplots(self): nrows = self.nframes ncolumns = 1 return nrows, ncolumns def setParms(self, data, x, y, xmin, xmax, ymin, ymax, minvalue, maxvalue, xrangestep, deltax): self.starttime = xmin self.endtime = xmax cdatetime = datetime.datetime.utcfromtimestamp(x) mindatetime = datetime.datetime(cdatetime.year,cdatetime.month,cdatetime.day,self.starttime.hour,self.starttime.minute,self.starttime.second) maxdatetime = mindatetime + datetime.timedelta(seconds=xrangestep) self.xrangestepinsecs = xrangestep xmin = time.mktime(mindatetime.timetuple()) xmax = time.mktime(maxdatetime.timetuple()) if self.xrangestepinsecs<=60.: self.timefmt="%H:%M:%S" if self.xrangestepinsecs>0. and self.xrangestepinsecs<=1200.: self.timefmt="%H:%M:%S" if self.xrangestepinsecs>1200. and self.xrangestepinsecs<=86400.: self.timefmt="%H:%M" if self.xrangestepinsecs>86400.: self.timefmt="%y:%m:%d:%H" if ymin == None: ymin = numpy.min(y) if ymax == None: ymax = numpy.max(y) if minvalue == None: minvalue = 0. if maxvalue == None: maxvalue = 50. self.xmin = xmin self.xmax = xmax self.minrange = ymin self.maxrange = ymax self.ymin = ymin self.ymax = ymax self.minvalue = minvalue self.maxvalue = maxvalue self.xrangestep = xrangestep self.deltax = deltax def changeXRange(self,x): cdatetime = datetime.datetime.utcfromtimestamp(x) if ((cdatetime.time()>=self.starttime) and (cdatetime.time()= self.xmaxpos: self.xminpos = currenttime self.xmaxpos = currenttime + self.deltax x = [currenttime] y = range z = numpy.reshape(data, (1,-1)) getGrid = True self.plotPcolor(x, y, z, self.deltax, self.deltay, getGrid) class ScopeFigure(Figure): overplot = 0 xw = 700 yw = 650 colorbar = None def __init__(self,idfigure,nframes,wintitle,driver): colormap = None colorbar = False Figure.__init__(self,idfigure, nframes, wintitle, self.xw, self.yw, self.overplot, driver, colormap, colorbar) def getSubplots(self): nrows = self.nframes ncolumns = 1 return nrows, ncolumns def createFrames(self): self.frameObjList = [] for frame in range(self.nframes): frameObj = ScopeFrame(self.drvObj,frame + 1) self.frameObjList.append(frameObj) class ScopeFrame(Frame): xlabel = "" ylabel = "" title = "" szchar = 1.1 def __init__(self,drvObj,idframe): self.drvObj = drvObj self.idframe = idframe self.nplots = 1 self.createPlots() # Frame.__init__(self, drvObj, idframe) def getScreenPosMainPlot(self):#cada Frame determina las coordenadas de los plots xi = 0.08; xw = 0.9 yi = 0.20; yw = 0.75 return xi,yi,xw,yw def createPlots(self): plotObjList = [] for idplot in range(self.nplots): xi, yi, xw, yw = self.getScreenPos(idplot) type = "scopebox" title = "Channel %d"%self.idframe xlabel = "range (Km)" ylabel = "intensity" plotObj = Plot1D(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel, self.szchar) plotObjList.append(plotObj) self.plotObjList = plotObjList def plot(self, x, y, z=None): for plotObj in self.plotObjList: plotObj.plot(x, y) class Plot1D(Plot): # type, title, xlabel, ylabel def __init__(self, drvObj, idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel, szchar): self.drvObj = drvObj self.idframe = idframe self.idplot = idplot self.xi = xi self.yi = yi self.xw = xw self.yw = yw self.xpos = [self.xi,self.xw] self.ypos = [self.yi,self.yw] self.xaxisastime = False self.timefmt = None self.xopt = "bcnst" self.yopt = "bcnstv" self.szchar = szchar self.type = type self.title = title self.xlabel = xlabel self.ylabel = ylabel def setBox(self, xmin, xmax, ymin, ymax, minvalue, maxvalue, *args): if self.type == "pwbox": self.xmin = minvalue self.xmax = maxvalue self.ymin = ymin self.ymax = ymax self.minvalue = minvalue self.maxvalue = maxvalue self.xopt = "bcnstg" self.yopt = "bcmstv" else: self.xmin = xmin self.xmax = xmax self.ymin = ymin self.ymax = ymax self.minvalue = minvalue self.maxvalue = maxvalue self.colorbar = False def plot(self,x,y): if y.dtype == "complex128": color="blue" self.plotBasicLine(x, y.real, color) color="red" self.plotBasicLine(x, y.imag, color) else: color="blue" self.plotBasicLine(x, y, color)