|
|
"""
|
|
|
Created on Feb 7, 2012
|
|
|
|
|
|
@autor $Author$
|
|
|
@version $Id$
|
|
|
|
|
|
"""
|
|
|
import os
|
|
|
import numpy
|
|
|
import sys
|
|
|
import time
|
|
|
import datetime
|
|
|
import time
|
|
|
import plplot
|
|
|
|
|
|
|
|
|
def cmap1_init(colormap="gray"):
|
|
|
|
|
|
if colormap == None:
|
|
|
return
|
|
|
|
|
|
ncolor = None
|
|
|
rgb_lvl = None
|
|
|
|
|
|
# Routine for defining a specific color map 1 in HLS space.
|
|
|
# if gray is true, use basic grayscale variation from half-dark to light.
|
|
|
# otherwise use false color variation from blue (240 deg) to red (360 deg).
|
|
|
|
|
|
# Independent variable of control points.
|
|
|
i = numpy.array((0., 1.))
|
|
|
if colormap=="gray":
|
|
|
ncolor = 256
|
|
|
# Hue for control points. Doesn't matter since saturation is zero.
|
|
|
h = numpy.array((0., 0.))
|
|
|
# Lightness ranging from half-dark (for interest) to light.
|
|
|
l = numpy.array((0.5, 1.))
|
|
|
# Gray scale has zero saturation
|
|
|
s = numpy.array((0., 0.))
|
|
|
|
|
|
# number of cmap1 colours is 256 in this case.
|
|
|
plplot.plscmap1n(ncolor)
|
|
|
# Interpolate between control points to set up cmap1.
|
|
|
plplot.plscmap1l(0, i, h, l, s)
|
|
|
|
|
|
return None
|
|
|
|
|
|
if colormap == 'jet':
|
|
|
ncolor = 256
|
|
|
pos = numpy.zeros((ncolor))
|
|
|
r = numpy.zeros((ncolor))
|
|
|
g = numpy.zeros((ncolor))
|
|
|
b = numpy.zeros((ncolor))
|
|
|
|
|
|
for i in range(ncolor):
|
|
|
if(i <= 35.0/100*(ncolor-1)): rf = 0.0
|
|
|
elif (i <= 66.0/100*(ncolor-1)): rf = (100.0/31)*i/(ncolor-1) - 35.0/31
|
|
|
elif (i <= 89.0/100*(ncolor-1)): rf = 1.0
|
|
|
else: rf = (-100.0/22)*i/(ncolor-1) + 111.0/22
|
|
|
|
|
|
if(i <= 12.0/100*(ncolor-1)): gf = 0.0
|
|
|
elif(i <= 38.0/100*(ncolor-1)): gf = (100.0/26)*i/(ncolor-1) - 12.0/26
|
|
|
elif(i <= 64.0/100*(ncolor-1)): gf = 1.0
|
|
|
elif(i <= 91.0/100*(ncolor-1)): gf = (-100.0/27)*i/(ncolor-1) + 91.0/27
|
|
|
else: gf = 0.0
|
|
|
|
|
|
if(i <= 11.0/100*(ncolor-1)): bf = (50.0/11)*i/(ncolor-1) + 0.5
|
|
|
elif(i <= 34.0/100*(ncolor-1)): bf = 1.0
|
|
|
elif(i <= 65.0/100*(ncolor-1)): bf = (-100.0/31)*i/(ncolor-1) + 65.0/31
|
|
|
else: bf = 0
|
|
|
|
|
|
r[i] = rf
|
|
|
g[i] = gf
|
|
|
b[i] = bf
|
|
|
|
|
|
pos[i] = float(i)/float(ncolor-1)
|
|
|
|
|
|
|
|
|
plplot.plscmap1n(ncolor)
|
|
|
plplot.plscmap1l(1, pos, r, g, b)
|
|
|
|
|
|
|
|
|
|
|
|
if colormap=="br_green":
|
|
|
ncolor = 256
|
|
|
# Hue ranges from blue (240 deg) to red (0 or 360 deg)
|
|
|
h = numpy.array((240., 0.))
|
|
|
# Lightness and saturation are constant (values taken from C example).
|
|
|
l = numpy.array((0.6, 0.6))
|
|
|
s = numpy.array((0.8, 0.8))
|
|
|
|
|
|
# number of cmap1 colours is 256 in this case.
|
|
|
plplot.plscmap1n(ncolor)
|
|
|
# Interpolate between control points to set up cmap1.
|
|
|
plplot.plscmap1l(0, i, h, l, s)
|
|
|
|
|
|
return None
|
|
|
|
|
|
if colormap=="tricolor":
|
|
|
ncolor = 3
|
|
|
# Hue ranges from blue (240 deg) to red (0 or 360 deg)
|
|
|
h = numpy.array((240., 0.))
|
|
|
# Lightness and saturation are constant (values taken from C example).
|
|
|
l = numpy.array((0.6, 0.6))
|
|
|
s = numpy.array((0.8, 0.8))
|
|
|
|
|
|
# number of cmap1 colours is 256 in this case.
|
|
|
plplot.plscmap1n(ncolor)
|
|
|
# Interpolate between control points to set up cmap1.
|
|
|
plplot.plscmap1l(0, i, h, l, s)
|
|
|
|
|
|
return None
|
|
|
|
|
|
if colormap == 'rgb' or colormap == 'rgb666':
|
|
|
|
|
|
color_sz = 6
|
|
|
ncolor = color_sz*color_sz*color_sz
|
|
|
pos = numpy.zeros((ncolor))
|
|
|
r = numpy.zeros((ncolor))
|
|
|
g = numpy.zeros((ncolor))
|
|
|
b = numpy.zeros((ncolor))
|
|
|
ind = 0
|
|
|
for ri in range(color_sz):
|
|
|
for gi in range(color_sz):
|
|
|
for bi in range(color_sz):
|
|
|
r[ind] = ri/(color_sz-1.0)
|
|
|
g[ind] = gi/(color_sz-1.0)
|
|
|
b[ind] = bi/(color_sz-1.0)
|
|
|
pos[ind] = ind/(ncolor-1.0)
|
|
|
ind += 1
|
|
|
rgb_lvl = [6,6,6] #Levels for RGB colors
|
|
|
|
|
|
if colormap == 'rgb676':
|
|
|
ncolor = 6*7*6
|
|
|
pos = numpy.zeros((ncolor))
|
|
|
r = numpy.zeros((ncolor))
|
|
|
g = numpy.zeros((ncolor))
|
|
|
b = numpy.zeros((ncolor))
|
|
|
ind = 0
|
|
|
for ri in range(8):
|
|
|
for gi in range(8):
|
|
|
for bi in range(4):
|
|
|
r[ind] = ri/(6-1.0)
|
|
|
g[ind] = gi/(7-1.0)
|
|
|
b[ind] = bi/(6-1.0)
|
|
|
pos[ind] = ind/(ncolor-1.0)
|
|
|
ind += 1
|
|
|
rgb_lvl = [6,7,6] #Levels for RGB colors
|
|
|
|
|
|
if colormap == 'rgb685':
|
|
|
ncolor = 6*8*5
|
|
|
pos = numpy.zeros((ncolor))
|
|
|
r = numpy.zeros((ncolor))
|
|
|
g = numpy.zeros((ncolor))
|
|
|
b = numpy.zeros((ncolor))
|
|
|
ind = 0
|
|
|
for ri in range(8):
|
|
|
for gi in range(8):
|
|
|
for bi in range(4):
|
|
|
r[ind] = ri/(6-1.0)
|
|
|
g[ind] = gi/(8-1.0)
|
|
|
b[ind] = bi/(5-1.0)
|
|
|
pos[ind] = ind/(ncolor-1.0)
|
|
|
ind += 1
|
|
|
rgb_lvl = [6,8,5] #Levels for RGB colors
|
|
|
|
|
|
if colormap == 'rgb884':
|
|
|
ncolor = 8*8*4
|
|
|
pos = numpy.zeros((ncolor))
|
|
|
r = numpy.zeros((ncolor))
|
|
|
g = numpy.zeros((ncolor))
|
|
|
b = numpy.zeros((ncolor))
|
|
|
ind = 0
|
|
|
for ri in range(8):
|
|
|
for gi in range(8):
|
|
|
for bi in range(4):
|
|
|
r[ind] = ri/(8-1.0)
|
|
|
g[ind] = gi/(8-1.0)
|
|
|
b[ind] = bi/(4-1.0)
|
|
|
pos[ind] = ind/(ncolor-1.0)
|
|
|
ind += 1
|
|
|
rgb_lvl = [8,8,4] #Levels for RGB colors
|
|
|
|
|
|
if ncolor == None:
|
|
|
raise ValueError, "The colormap selected is not valid"
|
|
|
|
|
|
plplot.plscmap1n(ncolor)
|
|
|
plplot.plscmap1l(1, pos, r, g, b)
|
|
|
|
|
|
return rgb_lvl
|
|
|
|
|
|
def setColormap(colormap="jet"):
|
|
|
cmap1_init(colormap)
|
|
|
|
|
|
def savePlplot(indexPlot,filename,ncol,nrow,width,height):
|
|
|
curr_strm = plplot.plgstrm()
|
|
|
save_strm = plplot.plmkstrm()
|
|
|
plplot.plsetopt("geometry", "%dx%d"%(width*ncol,height*nrow))
|
|
|
plplot.plsdev("pngcairo")
|
|
|
plplot.plsfnam(filename)
|
|
|
plplot.plcpstrm(curr_strm,0)
|
|
|
plplot.plreplot()
|
|
|
plplot.plend1()
|
|
|
plplot.plsstrm(indexPlot)
|
|
|
print ''
|
|
|
|
|
|
|
|
|
def initPlplot(indexPlot,ncol,nrow,winTitle,width,height):
|
|
|
plplot.plsstrm(indexPlot)
|
|
|
plplot.plparseopts([winTitle],plplot.PL_PARSE_FULL)
|
|
|
plplot.plsetopt("geometry", "%dx%d"%(width*ncol,height*nrow))
|
|
|
plplot.plsdev("xwin")
|
|
|
plplot.plscolbg(255,255,255)
|
|
|
plplot.plscol0(1,0,0,0)
|
|
|
plplot.plinit()
|
|
|
plplot.plspause(False)
|
|
|
plplot.plssub(ncol,nrow)
|
|
|
|
|
|
def clearData(objGraph):
|
|
|
objGraph.plotBox(objGraph.xrange[0], objGraph.xrange[1], objGraph.yrange[0], objGraph.yrange[1], "bc", "bc")
|
|
|
|
|
|
objGraph.setColor(15) #Setting Line Color to White
|
|
|
|
|
|
if objGraph.datatype == "complex":
|
|
|
objGraph.basicXYPlot(objGraph.xdata,objGraph.ydata.real)
|
|
|
objGraph.basicXYPlot(objGraph.xdata,objGraph.ydata.imag)
|
|
|
|
|
|
if objGraph.datatype == "real":
|
|
|
objGraph.basicXYPlot(objGraph.xdata,objGraph.ydata)
|
|
|
|
|
|
objGraph.setColor(1) #Setting Line Color to Black
|
|
|
# objGraph.setLineStyle(2)
|
|
|
# objGraph.plotBox(objGraph.xrange[0], objGraph.xrange[1], objGraph.yrange[0], objGraph.yrange[1], "bcntg", "bc")
|
|
|
# objGraph.setLineStyle(1)
|
|
|
|
|
|
def setStrm(indexPlot):
|
|
|
plplot.plsstrm(indexPlot)
|
|
|
|
|
|
def plFlush():
|
|
|
plplot.plflush()
|
|
|
|
|
|
def setPlTitle(pltitle,color):
|
|
|
setSubpages(1, 0)
|
|
|
plplot.pladv(0)
|
|
|
plplot.plvpor(0., 1., 0., 1.)
|
|
|
|
|
|
if color == "black":
|
|
|
plplot.plcol0(1)
|
|
|
if color == "white":
|
|
|
plplot.plcol0(15)
|
|
|
|
|
|
plplot.plmtex("t",-1., 0.5, 0.5, pltitle)
|
|
|
|
|
|
def setSubpages(ncol,nrow):
|
|
|
plplot.plssub(ncol,nrow)
|
|
|
|
|
|
class BaseGraph:
|
|
|
__name = None
|
|
|
__xpos = None
|
|
|
__ypos = None
|
|
|
__subplot = None
|
|
|
__xg = None
|
|
|
__yg = None
|
|
|
xdata = None
|
|
|
ydata = None
|
|
|
getGrid = True
|
|
|
xaxisIsTime = False
|
|
|
deltax = None
|
|
|
xmin = None
|
|
|
xmax = None
|
|
|
def __init__(self,name,subplot,xpos,ypos,xlabel,ylabel,title,szchar,xrange,yrange,zrange=None,deltax=1.0):
|
|
|
self.setName(name)
|
|
|
self.setScreenPos(xpos, ypos)
|
|
|
self.setLabels(xlabel,ylabel,title)
|
|
|
self.setSubPlot(subplot)
|
|
|
self.setSizeOfChar(szchar)
|
|
|
self.setXYZrange(xrange,yrange,zrange)
|
|
|
self.getGrid = True
|
|
|
self.xaxisIsTime = False
|
|
|
self.deltax = deltax
|
|
|
|
|
|
def setXYZrange(self,xrange,yrange,zrange):
|
|
|
self.xrange = xrange
|
|
|
self.yrange = yrange
|
|
|
self.zrange = zrange
|
|
|
|
|
|
def setName(self, name):
|
|
|
self.__name = name
|
|
|
|
|
|
def setScreenPos(self,xpos,ypos):
|
|
|
self.__xpos = xpos
|
|
|
self.__ypos = ypos
|
|
|
|
|
|
def setXYData(self,xdata=None,ydata=None,datatype="real"):
|
|
|
if((xdata != None) and (ydata != None)):
|
|
|
self.xdata = xdata
|
|
|
self.ydata = ydata
|
|
|
self.datatype = datatype
|
|
|
|
|
|
if((self.xdata == None) and (self.ydata == None)):
|
|
|
return None
|
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
def setLabels(self,xlabel=None,ylabel=None,title=None):
|
|
|
if xlabel != None: self.xlabel = xlabel
|
|
|
if ylabel != None: self.ylabel = ylabel
|
|
|
if title != None: self.title = title
|
|
|
|
|
|
def setSubPlot(self,subplot):
|
|
|
self.__subplot = subplot
|
|
|
|
|
|
def setSizeOfChar(self,szchar):
|
|
|
self.__szchar = szchar
|
|
|
|
|
|
def setLineStyle(self,style):
|
|
|
plplot.pllsty(style)
|
|
|
|
|
|
def setColor(self,color):
|
|
|
plplot.plcol0(color)
|
|
|
|
|
|
def setXAxisAsTime(self,value=False):
|
|
|
self.xaxisIsTime = value
|
|
|
|
|
|
def basicLineTimePlot(self, x, y, xmin=None, xmax=None, ymin=None, ymax=None, colline=1):
|
|
|
|
|
|
if xmin == None: xmin = x[0]
|
|
|
if xmax == None: xmax = x[-1]
|
|
|
if ymin == None: ymin = y[0]
|
|
|
if ymax == None: ymax = y[-1]
|
|
|
|
|
|
plplot.plcol0(colline)
|
|
|
plplot.plline(x, y)
|
|
|
plplot.plcol0(1)
|
|
|
|
|
|
def basicXYPlot(self, x, y, xmin=None, xmax=None, ymin=None, ymax=None):
|
|
|
|
|
|
if xmin == None: xmin = x[0]
|
|
|
if xmax == None: xmax = x[-1]
|
|
|
if ymin == None: ymin = y[0]
|
|
|
if ymax == None: ymax = y[-1]
|
|
|
|
|
|
plplot.plline(x, y)
|
|
|
|
|
|
def basicPcolorPlot(self, data, x, y, xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None):
|
|
|
"""
|
|
|
"""
|
|
|
if xmin == None: xmin = x[0]
|
|
|
if xmax == None: xmax = x[-1]
|
|
|
if ymin == None: ymin = y[0]
|
|
|
if ymax == None: ymax = y[-1]
|
|
|
if zmin == None: zmin = numpy.nanmin(data)
|
|
|
if zmax == None: zmax = numpy.nanmax(data)
|
|
|
|
|
|
plplot.plimage(data,
|
|
|
float(x[0]),
|
|
|
float(x[-1]),
|
|
|
float(y[0]),
|
|
|
float(y[-1]),
|
|
|
float(zmin),
|
|
|
float(zmax),
|
|
|
float(xmin),
|
|
|
float(xmax),
|
|
|
float(ymin),
|
|
|
float(ymax)
|
|
|
)
|
|
|
|
|
|
def __getBoxpltr(self, x, y, deltax=None, deltay=None):
|
|
|
|
|
|
if not(len(x)>0 and len(y)>0):
|
|
|
raise ValueError, "x axis and y axis are empty"
|
|
|
|
|
|
if deltax == None: deltax = x[-1] - x[-2]
|
|
|
if deltay == None: deltay = y[-1] - y[-2]
|
|
|
|
|
|
x1 = numpy.append(x, x[-1] + deltax)
|
|
|
y1 = numpy.append(y, y[-1] + deltay)
|
|
|
|
|
|
xg = (numpy.multiply.outer(x1, numpy.ones(len(y1))))
|
|
|
yg = (numpy.multiply.outer(numpy.ones(len(x1)), y1))
|
|
|
|
|
|
self.__xg = xg
|
|
|
self.__yg = yg
|
|
|
|
|
|
return xg, yg
|
|
|
|
|
|
|
|
|
def advPcolorPlot(self, data, x, y, xmin=None, xmax=None, ymin=None, ymax=None, zmin=0., zmax=0., deltax=1.0, deltay=None, getGrid = True):
|
|
|
if getGrid:
|
|
|
xg, yg = self.__getBoxpltr(x, y, deltax, deltay)
|
|
|
else:
|
|
|
xg = self.__xg
|
|
|
yg = self.__yg
|
|
|
|
|
|
plplot.plimagefr(data,
|
|
|
float(xmin),
|
|
|
float(xmax),
|
|
|
float(ymin),
|
|
|
float(ymax),
|
|
|
0.,
|
|
|
0.,
|
|
|
float(zmin),
|
|
|
float(zmax),
|
|
|
plplot.pltr2,
|
|
|
xg,
|
|
|
yg)
|
|
|
|
|
|
|
|
|
def colorbarPlot(self, xmin=0., xmax=1., ymin=0., ymax=1.):
|
|
|
data = numpy.arange(256)
|
|
|
data = numpy.reshape(data, (1,-1))
|
|
|
|
|
|
plplot.plimage(data,
|
|
|
float(xmin),
|
|
|
float(xmax),
|
|
|
float(ymin),
|
|
|
float(ymax),
|
|
|
0.,
|
|
|
255.,
|
|
|
float(xmin),
|
|
|
float(xmax),
|
|
|
float(ymin),
|
|
|
float(ymax))
|
|
|
|
|
|
def plotBox(self, xmin, xmax, ymin, ymax, xopt, yopt, nolabels=False):
|
|
|
|
|
|
plplot.plschr(0.0,self.__szchar-0.05)
|
|
|
plplot.pladv(self.__subplot)
|
|
|
plplot.plvpor(self.__xpos[0], self.__xpos[1], self.__ypos[0], self.__ypos[1])
|
|
|
plplot.plwind(float(xmin), # self.xrange[0]
|
|
|
float(xmax), # self.xrange[1]
|
|
|
float(ymin), # self.yrange[0]
|
|
|
float(ymax) # self.yrange[1]
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if self.xaxisIsTime:
|
|
|
plplot.pltimefmt("%H:%M")
|
|
|
timedelta = (xmax - xmin + 1)/8.
|
|
|
plplot.plbox(xopt, timedelta, 3, yopt, 0.0, 0)
|
|
|
else:
|
|
|
plplot.plbox(xopt, 0.0, 0, yopt, 0.0, 0)
|
|
|
|
|
|
|
|
|
if not(nolabels):
|
|
|
plplot.pllab(self.xlabel, self.ylabel, self.title)
|
|
|
|
|
|
|
|
|
def delLabels(self):
|
|
|
self.setColor(15) #Setting Line Color to White
|
|
|
plplot.pllab(self.xlabel, self.ylabel, self.title)
|
|
|
self.setColor(1) #Setting Line Color to Black
|
|
|
|
|
|
|
|
|
|
|
|
def plotImage(self,x,y,z,xrange,yrange,zrange):
|
|
|
xi = x[0]
|
|
|
xf = x[-1]
|
|
|
yi = y[0]
|
|
|
yf = y[-1]
|
|
|
|
|
|
plplot.plimage(z,
|
|
|
float(xi),
|
|
|
float(xf),
|
|
|
float(yi),
|
|
|
float(yf),
|
|
|
float(zrange[0]),
|
|
|
float(zrange[1]),
|
|
|
float(xi),
|
|
|
float(xf),
|
|
|
float(yrange[0]),
|
|
|
yrange[1])
|
|
|
|
|
|
class LinearPlot:
|
|
|
linearObjDic = {}
|
|
|
__xpos = None
|
|
|
__ypos = None
|
|
|
def __init__(self,indexPlot,nsubplot,winTitle):
|
|
|
self.width = 700
|
|
|
self.height = 150
|
|
|
ncol = 1
|
|
|
nrow = nsubplot
|
|
|
initPlplot(indexPlot,ncol,nrow,winTitle,self.width,self.height)
|
|
|
|
|
|
|
|
|
def setFigure(self,indexPlot):
|
|
|
setStrm(indexPlot)
|
|
|
|
|
|
def setPosition(self):
|
|
|
|
|
|
xi = 0.07; xf = 0.9 #0.8,0.7,0.5
|
|
|
yi = 0.15; yf = 0.8
|
|
|
|
|
|
xpos = [xi,xf]
|
|
|
ypos = [yi,yf]
|
|
|
|
|
|
self.__xpos = xpos
|
|
|
self.__ypos = ypos
|
|
|
|
|
|
return xpos,ypos
|
|
|
|
|
|
def refresh(self):
|
|
|
plFlush()
|
|
|
|
|
|
def setup(self,subplot,xmin,xmax,ymin,ymax,title,xlabel,ylabel):
|
|
|
szchar = 1.10
|
|
|
name = "linear"
|
|
|
key = name + "%d"%subplot
|
|
|
xrange = [xmin,xmax]
|
|
|
yrange = [ymin,ymax]
|
|
|
|
|
|
xpos,ypos = self.setPosition()
|
|
|
linearObj = BaseGraph(name,subplot,xpos,ypos,xlabel,ylabel,title,szchar,xrange,yrange)
|
|
|
linearObj.plotBox(linearObj.xrange[0], linearObj.xrange[1], linearObj.yrange[0], linearObj.yrange[1], "bcnst", "bcnstv")
|
|
|
self.linearObjDic[key] = linearObj
|
|
|
|
|
|
def plot(self,subplot,x,y,type="power"):
|
|
|
name = "linear"
|
|
|
key = name + "%d"%subplot
|
|
|
|
|
|
linearObj = self.linearObjDic[key]
|
|
|
linearObj.plotBox(linearObj.xrange[0], linearObj.xrange[1], linearObj.yrange[0], linearObj.yrange[1], "bcst", "bcst")
|
|
|
|
|
|
if linearObj.setXYData() != None:
|
|
|
clearData(linearObj)
|
|
|
|
|
|
else:
|
|
|
if type.lower() == 'power':
|
|
|
linearObj.setXYData(x,abs(y),"real")
|
|
|
if type.lower() == 'iq':
|
|
|
linearObj.setXYData(x,y,"complex")
|
|
|
|
|
|
if type.lower() == 'power':
|
|
|
colline = 9
|
|
|
linearObj.basicLineTimePlot(x, abs(y), xmin, xmax, ymin, ymax, colline)
|
|
|
linearObj.setXYData(x,abs(y),"real")
|
|
|
|
|
|
if type.lower() == 'iq':
|
|
|
colline = 9
|
|
|
linearObj.basicLineTimePlot(x=x, y=y.real, colline=colline)
|
|
|
colline = 13
|
|
|
linearObj.basicLineTimePlot(x=x, y=y.imag, colline=colline)
|
|
|
|
|
|
linearObj.setXYData(x,y,"complex")
|
|
|
|
|
|
linearObj.plotBox(linearObj.xrange[0], linearObj.xrange[1], linearObj.yrange[0], linearObj.yrange[1], "bcst", "bcst")
|
|
|
|
|
|
|
|
|
# linearObj.plotBox(linearObj.xrange[0], linearObj.xrange[1], linearObj.yrange[0], linearObj.yrange[1], "bc", "bc")
|
|
|
# linearObj.basicXYPlot(data,y)
|
|
|
# linearObj.setXYData(data,y)
|
|
|
|
|
|
|
|
|
|
|
|
class SpectraPlot:
|
|
|
pcolorObjDic = {}
|
|
|
colorbarObjDic = {}
|
|
|
pwprofileObjDic = {}
|
|
|
showColorbar = None
|
|
|
showPowerProfile = None
|
|
|
XAxisAsTime = None
|
|
|
width = None
|
|
|
height = None
|
|
|
__spcxpos = None
|
|
|
__spcypos = None
|
|
|
__cmapxpos = None
|
|
|
__cmapypos = None
|
|
|
__profxpos = None
|
|
|
__profypos = None
|
|
|
__lastTitle = None
|
|
|
|
|
|
def __init__(self,indexPlot,nsubplot,winTitle,colormap,showColorbar,showPowerProfile,XAxisAsTime):
|
|
|
self.width = 460
|
|
|
self.height = 300
|
|
|
self.showColorbar = showColorbar
|
|
|
self.showPowerProfile = showPowerProfile
|
|
|
self.XAxisAsTime = XAxisAsTime
|
|
|
|
|
|
nrow = 2
|
|
|
if (nsubplot%2)==0:
|
|
|
ncol = nsubplot/nrow
|
|
|
else:
|
|
|
ncol = int(nsubplot)/nrow + 1
|
|
|
|
|
|
initPlplot(indexPlot,ncol,nrow,winTitle,self.width,self.height)
|
|
|
setColormap(colormap)
|
|
|
self.ncol = ncol
|
|
|
self.nrow = nrow
|
|
|
|
|
|
def setFigure(self,indexPlot):
|
|
|
setStrm(indexPlot)
|
|
|
|
|
|
def setSpectraPos(self): #modificar valores de acuerdo al colorbar y pwprofile
|
|
|
if self.showPowerProfile: xi = 0.09; xf = 0.6 #0.075
|
|
|
else: xi = 0.15; xf = 0.8 #0.8,0.7,0.5
|
|
|
yi = 0.15; yf = 0.80
|
|
|
|
|
|
xpos = [xi,xf]
|
|
|
ypos = [yi,yf]
|
|
|
|
|
|
self.__spcxpos = xpos
|
|
|
self.__spcypos = ypos
|
|
|
|
|
|
return xpos,ypos
|
|
|
|
|
|
def setColorbarScreenPos(self):
|
|
|
|
|
|
xi = self.__spcxpos[1] + 0.03; xf = xi + 0.03
|
|
|
yi = self.__spcypos[0]; yf = self.__spcypos[1]
|
|
|
|
|
|
xpos = [xi,xf]
|
|
|
ypos = [yi,yf]
|
|
|
|
|
|
self.__cmapxpos = xpos
|
|
|
self.__cmapypos = ypos
|
|
|
|
|
|
return xpos,ypos
|
|
|
|
|
|
def setPowerprofileScreenPos(self):
|
|
|
|
|
|
xi = self.__cmapxpos[1] + 0.07; xf = xi + 0.25
|
|
|
yi = self.__spcypos[0]; yf = self.__spcypos[1]
|
|
|
|
|
|
xpos = [xi,xf]
|
|
|
ypos = [yi,yf]
|
|
|
|
|
|
self.__profxpos = [xi,xf]
|
|
|
self.__profypos = [yi,yf]
|
|
|
|
|
|
return xpos,ypos
|
|
|
|
|
|
def setup(self,subplot,xmin,xmax,ymin,ymax,zmin,zmax,title,xlabel,ylabel):
|
|
|
# Config Spectra plot
|
|
|
szchar = 0.7
|
|
|
name = "spc"
|
|
|
key = name + "%d"%subplot
|
|
|
xrange = [xmin,xmax]
|
|
|
yrange = [ymin,ymax]
|
|
|
zrange = [zmin,zmax]
|
|
|
|
|
|
xpos,ypos = self.setSpectraPos()
|
|
|
pcolorObj = BaseGraph(name,subplot,xpos,ypos,xlabel,ylabel,title,szchar,xrange,yrange,zrange)
|
|
|
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], "bcnst", "bcnstv")
|
|
|
self.pcolorObjDic[key] = pcolorObj
|
|
|
|
|
|
# Config Colorbar
|
|
|
if self.showColorbar:
|
|
|
szchar = 0.65
|
|
|
name = "colorbar"
|
|
|
key = name + "%d"%subplot
|
|
|
|
|
|
xpos,ypos = self.setColorbarScreenPos()
|
|
|
xrange = [0.,1.]
|
|
|
yrange = [zmin,zmax]
|
|
|
cmapObj = BaseGraph(name,subplot,xpos,ypos,"","","dB",szchar,xrange,yrange)
|
|
|
cmapObj.plotBox(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1], "bc", "bcm")
|
|
|
cmapObj.colorbarPlot(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1])
|
|
|
cmapObj.plotBox(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1], "bc", "bcmtsv")
|
|
|
self.colorbarObjDic[key] = cmapObj
|
|
|
|
|
|
# Config Power profile
|
|
|
if self.showPowerProfile:
|
|
|
szchar = 0.55
|
|
|
name = "pwprofile"
|
|
|
key = name + "%d"%subplot
|
|
|
|
|
|
xpos,ypos = self.setPowerprofileScreenPos()
|
|
|
xrange = [zmin,zmax]
|
|
|
yrange = [ymin,ymax]
|
|
|
powObj = BaseGraph(name,subplot,xpos,ypos,"dB","","Power Profile",szchar,xrange,yrange)
|
|
|
powObj.setLineStyle(2)
|
|
|
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bcntg", "bc")
|
|
|
powObj.setLineStyle(1)
|
|
|
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bc", "bc")
|
|
|
self.pwprofileObjDic[key] = powObj
|
|
|
|
|
|
def printTitle(self,pltitle):
|
|
|
if self.__lastTitle != None:
|
|
|
setPlTitle(self.__lastTitle,"white")
|
|
|
|
|
|
self.__lastTitle = pltitle
|
|
|
|
|
|
setPlTitle(pltitle,"black")
|
|
|
|
|
|
setSubpages(self.ncol,self.nrow)
|
|
|
|
|
|
def plot(self,subplot,x,y,z,subtitle):
|
|
|
# Spectra plot
|
|
|
|
|
|
name = "spc"
|
|
|
key = name + "%d"%subplot
|
|
|
|
|
|
# newx = [x[0],x[-1]]
|
|
|
pcolorObj = self.pcolorObjDic[key]
|
|
|
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], "bcst", "bcst")
|
|
|
pcolorObj.delLabels()
|
|
|
pcolorObj.setLabels(title=subtitle)
|
|
|
|
|
|
deltax = None; deltay = None
|
|
|
|
|
|
pcolorObj.advPcolorPlot(z,
|
|
|
x,
|
|
|
y,
|
|
|
xmin=pcolorObj.xrange[0],
|
|
|
xmax=pcolorObj.xrange[1],
|
|
|
ymin=pcolorObj.yrange[0],
|
|
|
ymax=pcolorObj.yrange[1],
|
|
|
zmin=pcolorObj.zrange[0],
|
|
|
zmax=pcolorObj.zrange[1],
|
|
|
deltax=deltax,
|
|
|
deltay=deltay,
|
|
|
getGrid=pcolorObj.getGrid)
|
|
|
|
|
|
pcolorObj.getGrid = False
|
|
|
|
|
|
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], "bcst", "bcst")
|
|
|
|
|
|
# Power Profile
|
|
|
if self.showPowerProfile:
|
|
|
power = numpy.average(z, axis=0)
|
|
|
name = "pwprofile"
|
|
|
key = name + "%d"%subplot
|
|
|
powObj = self.pwprofileObjDic[key]
|
|
|
|
|
|
if powObj.setXYData() != None:
|
|
|
clearData(powObj)
|
|
|
powObj.setLineStyle(2)
|
|
|
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bcntg", "bc")
|
|
|
powObj.setLineStyle(1)
|
|
|
else:
|
|
|
powObj.setXYData(power,y)
|
|
|
|
|
|
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bc", "bc")
|
|
|
powObj.basicXYPlot(power,y)
|
|
|
powObj.setXYData(power,y)
|
|
|
|
|
|
def savePlot(self,indexPlot,path):
|
|
|
|
|
|
now = datetime.datetime.now().timetuple()
|
|
|
file = "spc_img%02d_%03d_%02d%02d%02d"%(indexPlot,now[7],now[3],now[4],now[5])
|
|
|
filename = os.path.join(path,file+".png")
|
|
|
savePlplot(indexPlot,filename,self.ncol,self.nrow,self.width,self.height)
|
|
|
|
|
|
|
|
|
|
|
|
def refresh(self):
|
|
|
plFlush()
|
|
|
|
|
|
class RtiPlot:
|
|
|
|
|
|
pcolorObjDic = {}
|
|
|
colorbarObjDic = {}
|
|
|
pwprofileObjDic = {}
|
|
|
showColorbar = None
|
|
|
showPowerProfile = None
|
|
|
XAxisAsTime = None
|
|
|
widht = None
|
|
|
height = None
|
|
|
__rtixpos = None
|
|
|
__rtiypos = None
|
|
|
__cmapxpos = None
|
|
|
__cmapypos = None
|
|
|
__profxpos = None
|
|
|
__profypos = None
|
|
|
|
|
|
def __init__(self,indexPlot,nsubplot,winTitle,colormap,showColorbar,showPowerProfile,XAxisAsTime):
|
|
|
self.width = 700
|
|
|
self.height = 150
|
|
|
self.showColorbar = showColorbar
|
|
|
self.showPowerProfile = showPowerProfile
|
|
|
self.XAxisAsTime = XAxisAsTime
|
|
|
|
|
|
ncol = 1
|
|
|
nrow = nsubplot
|
|
|
initPlplot(indexPlot,ncol,nrow,winTitle,self.width,self.height)
|
|
|
setColormap(colormap)
|
|
|
|
|
|
def setFigure(self,indexPlot):
|
|
|
setStrm(indexPlot)
|
|
|
|
|
|
def setRtiScreenPos(self):
|
|
|
|
|
|
if self.showPowerProfile: xi = 0.07; xf = 0.65
|
|
|
else: xi = 0.07; xf = 0.9
|
|
|
yi = 0.15; yf = 0.80
|
|
|
|
|
|
xpos = [xi,xf]
|
|
|
ypos = [yi,yf]
|
|
|
|
|
|
self.__rtixpos = xpos
|
|
|
self.__rtiypos = ypos
|
|
|
|
|
|
return xpos,ypos
|
|
|
|
|
|
def setColorbarScreenPos(self):
|
|
|
|
|
|
xi = self.__rtixpos[1] + 0.03; xf = xi + 0.03
|
|
|
|
|
|
yi = self.__rtiypos[0]; yf = self.__rtiypos[1]
|
|
|
|
|
|
xpos = [xi,xf]
|
|
|
ypos = [yi,yf]
|
|
|
|
|
|
self.__cmapxpos = xpos
|
|
|
self.__cmapypos = ypos
|
|
|
|
|
|
return xpos,ypos
|
|
|
|
|
|
def setPowerprofileScreenPos(self):
|
|
|
|
|
|
xi = self.__cmapxpos[1] + 0.05; xf = xi + 0.20
|
|
|
|
|
|
yi = self.__rtiypos[0]; yf = self.__rtiypos[1]
|
|
|
|
|
|
xpos = [xi,xf]
|
|
|
ypos = [yi,yf]
|
|
|
|
|
|
self.__profxpos = [xi,xf]
|
|
|
self.__profypos = [yi,yf]
|
|
|
|
|
|
return xpos,ypos
|
|
|
|
|
|
def setup(self,subplot,xmin,xmax,ymin,ymax,zmin,zmax,title,xlabel,ylabel,timedata,timezone="lt",npoints=100):
|
|
|
# Config Rti plot
|
|
|
szchar = 1.10
|
|
|
name = "rti"
|
|
|
key = name + "%d"%subplot
|
|
|
|
|
|
# xmin, xmax --> minHour, max Hour : valores que definen el ejex x=[horaInicio,horaFinal]
|
|
|
thisDateTime = datetime.datetime.fromtimestamp(timedata)
|
|
|
startDateTime = datetime.datetime(thisDateTime.year,thisDateTime.month,thisDateTime.day,xmin,0,0)
|
|
|
endDateTime = datetime.datetime(thisDateTime.year,thisDateTime.month,thisDateTime.day,xmax,59,59)
|
|
|
deltaTime = 0
|
|
|
if timezone == "lt":
|
|
|
deltaTime = time.timezone
|
|
|
startTimeInSecs = time.mktime(startDateTime.timetuple()) - deltaTime
|
|
|
endTimeInSecs = time.mktime(endDateTime.timetuple()) - deltaTime
|
|
|
|
|
|
xrange = [startTimeInSecs,endTimeInSecs]
|
|
|
totalTimeInXrange = endTimeInSecs - startTimeInSecs + 1.
|
|
|
deltax = totalTimeInXrange / npoints
|
|
|
|
|
|
yrange = [ymin,ymax]
|
|
|
zrange = [zmin,zmax]
|
|
|
|
|
|
xpos,ypos = self.setRtiScreenPos()
|
|
|
pcolorObj = BaseGraph(name,subplot,xpos,ypos,xlabel,ylabel,title,szchar,xrange,yrange,zrange,deltax)
|
|
|
if self.XAxisAsTime:
|
|
|
pcolorObj.setXAxisAsTime(self.XAxisAsTime)
|
|
|
xopt = "bcnstd"
|
|
|
yopt = "bcnstv"
|
|
|
else:
|
|
|
xopt = "bcnst"
|
|
|
yopt = "bcnstv"
|
|
|
|
|
|
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], xopt, yopt)
|
|
|
self.pcolorObjDic[key] = pcolorObj
|
|
|
|
|
|
|
|
|
# Config Colorbar
|
|
|
if self.showColorbar:
|
|
|
szchar = 0.9
|
|
|
name = "colorbar"
|
|
|
key = name + "%d"%subplot
|
|
|
|
|
|
xpos,ypos = self.setColorbarScreenPos()
|
|
|
xrange = [0.,1.]
|
|
|
yrange = [zmin,zmax]
|
|
|
cmapObj = BaseGraph(name,subplot,xpos,ypos,"","","dB",szchar,xrange,yrange)
|
|
|
cmapObj.plotBox(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1], "bc", "bcm")
|
|
|
cmapObj.colorbarPlot(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1])
|
|
|
cmapObj.plotBox(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1], "bc", "bcmtsv")
|
|
|
self.colorbarObjDic[key] = cmapObj
|
|
|
|
|
|
|
|
|
# Config Power profile
|
|
|
if self.showPowerProfile:
|
|
|
szchar = 0.8
|
|
|
name = "pwprofile"
|
|
|
key = name + "%d"%subplot
|
|
|
|
|
|
xpos,ypos = self.setPowerprofileScreenPos()
|
|
|
xrange = [zmin,zmax]
|
|
|
yrange = [ymin,ymax]
|
|
|
powObj = BaseGraph(name,subplot,xpos,ypos,"dB","","Power Profile",szchar,xrange,yrange)
|
|
|
powObj.setLineStyle(2)
|
|
|
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bcntg", "bc")
|
|
|
powObj.setLineStyle(1)
|
|
|
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bc", "bc")
|
|
|
self.pwprofileObjDic[key] = powObj
|
|
|
|
|
|
|
|
|
def plot(self,subplot,x,y,z):
|
|
|
# RTI plot
|
|
|
name = "rti"
|
|
|
key = name + "%d"%subplot
|
|
|
|
|
|
data = numpy.reshape(z, (1,-1))
|
|
|
data = numpy.abs(data)
|
|
|
data = 10*numpy.log10(data)
|
|
|
newx = [x,x+1]
|
|
|
|
|
|
pcolorObj = self.pcolorObjDic[key]
|
|
|
|
|
|
if pcolorObj.xaxisIsTime:
|
|
|
xopt = "bcstd"
|
|
|
yopt = "bcst"
|
|
|
else:
|
|
|
xopt = "bcst"
|
|
|
yopt = "bcst"
|
|
|
|
|
|
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], xopt, yopt)
|
|
|
|
|
|
deltax = pcolorObj.deltax
|
|
|
deltay = None
|
|
|
|
|
|
if pcolorObj.xmin == None and pcolorObj.xmax == None:
|
|
|
pcolorObj.xmin = x
|
|
|
pcolorObj.xmax = x
|
|
|
|
|
|
if x >= pcolorObj.xmax:
|
|
|
xmin = x
|
|
|
xmax = x + deltax
|
|
|
x = [x]
|
|
|
pcolorObj.advPcolorPlot(data,
|
|
|
x,
|
|
|
y,
|
|
|
xmin=xmin,
|
|
|
xmax=xmax,
|
|
|
ymin=pcolorObj.yrange[0],
|
|
|
ymax=pcolorObj.yrange[1],
|
|
|
zmin=pcolorObj.zrange[0],
|
|
|
zmax=pcolorObj.zrange[1],
|
|
|
deltax=deltax,
|
|
|
deltay=deltay,
|
|
|
getGrid=pcolorObj.getGrid)
|
|
|
|
|
|
pcolorObj.xmin = xmin
|
|
|
pcolorObj.xmax = xmax
|
|
|
|
|
|
|
|
|
# Power Profile
|
|
|
if self.showPowerProfile:
|
|
|
data = numpy.reshape(data,(numpy.size(data)))
|
|
|
name = "pwprofile"
|
|
|
key = name + "%d"%subplot
|
|
|
powObj = self.pwprofileObjDic[key]
|
|
|
|
|
|
if powObj.setXYData() != None:
|
|
|
clearData(powObj)
|
|
|
powObj.setLineStyle(2)
|
|
|
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bcntg", "bc")
|
|
|
powObj.setLineStyle(1)
|
|
|
else:
|
|
|
powObj.setXYData(data,y)
|
|
|
|
|
|
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bc", "bc")
|
|
|
powObj.basicXYPlot(data,y)
|
|
|
powObj.setXYData(data,y)
|
|
|
|
|
|
def refresh(self):
|
|
|
plFlush()
|