schainPlot.py
411 lines
| 11.3 KiB
| text/x-python
|
PythonLexer
|
r133 | import numpy | |
|
r139 | import datetime | |
|
r150 | import time | |
import os | |||
|
r134 | from schainPlotLib import Driver | |
|
r133 | ||
class Figure: | |||
|
r153 | ||
|
r133 | __isDriverOpen = False | |
__isFigureOpen = False | |||
__isConfig = False | |||
|
r158 | __counter = 0 | |
|
r135 | drvObj = None | |
|
r153 | driver = None | |
|
r133 | idfigure = None | |
nframes = None | |||
|
r134 | wintitle = None | |
|
r133 | colormap = None | |
overplot = None | |||
|
r153 | colorbar = None | |
frameObjList = [] | |||
xw = None | |||
yw = None | |||
|
r135 | xmin = None | |
xmax = None | |||
|
r139 | ymin = None | |
ymax = None | |||
|
r153 | ||
|
r135 | minvalue = None | |
maxvalue = None | |||
|
r139 | deltax = None | |
deltay = None | |||
|
r153 | ||
|
r139 | figuretitle = "" | |
xrangestep = None | |||
|
r133 | ||
|
r141 | def __init__(self,idfigure, nframes, wintitle, xw=600, yw=800, overplot=0, driver='plplot', colormap=None, colorbar= True, *args): | |
|
r153 | self.__isDriverOpen = False | |
self.__isFigureOpen = False | |||
self.__isConfig = False | |||
|
r158 | self.__counter = 0 | |
|
r153 | ||
|
r141 | self.drvObj = Driver(driver, idfigure, xw, yw, wintitle, overplot, colormap, colorbar) | |
self.driver = driver | |||
|
r133 | self.idfigure = idfigure | |
|
r141 | self.nframes = nframes | |
self.wintitle = wintitle | |||
self.colormap = colormap | |||
|
r133 | self.overplot = overplot | |
|
r135 | self.colorbar = colorbar | |
|
r153 | ||
self.xw = xw | |||
self.yw = yw | |||
self.frameObjList = [] | |||
|
r135 | self.drvObj.driver.setFigure() | |
|
r139 | self.drvObj.driver.setColormap(colormap) | |
|
r135 | ||
|
r133 | def __openDriver(self): | |
|
r153 | ||
|
r135 | self.drvObj.driver.openDriver() | |
|
r133 | ||
|
r154 | def __newPage(self): | |
|
r153 | ||
|
r154 | ||
self.drvObj.driver.openPage() | |||
|
r133 | nrows, ncolumns = self.getSubplots() | |
|
r139 | self.drvObj.driver.setFigTitle(self.figuretitle) | |
|
r135 | self.drvObj.driver.setSubPlots(nrows, ncolumns) | |
|
r154 | ||
def __closePage(self): | |||
self.drvObj.driver.closeFigure() | |||
|
r153 | def selectFigure(self): | |
self.drvObj.driver.selectFigure() | |||
|
r135 | def __isOutOfXRange(self,x): | |
|
r141 | try: | |
if ((x>=self.xmin) and (x<self.xmax)): | |||
return 0 | |||
except: | |||
|
r139 | return 0 | |
|
r141 | ||
|
r135 | return 1 | |
|
r139 | def changeXRange(self,x): | |
pass | |||
|
r135 | def __refresh(self): | |
self.drvObj.driver.refresh() | |||
def createFrames(self): | |||
|
r154 | ||
self.frameObjList = [] | |||
|
r135 | raise ValueError, "No implemented" | |
|
r150 | def save(self,filename): | |
|
r153 | ||
|
r150 | self.drvObj.driver.save(filename) | |
|
r158 | def plot1DArray(self, data1D, x=None, channelList=None, xmin=None, xmax=None, minvalue=None, maxvalue=None, figuretitle=None, save=False, gpath='./', ratio=1): | |
|
r133 | ||
nx, ny = data1D.shape | |||
if channelList == None: | |||
|
r134 | channelList = range(nx) | |
|
r133 | ||
if x == None: | |||
x = numpy.arange(data1D.size) | |||
|
r135 | ||
|
r138 | if figuretitle == None: | |
self.figuretitle = "" | |||
|
r135 | else: | |
|
r138 | self.figuretitle = figuretitle | |
|
r135 | ||
|
r133 | if not(self.__isDriverOpen): | |
self.__openDriver() | |||
self.__isDriverOpen = True | |||
if not(self.__isConfig): | |||
|
r135 | self.xmin = xmin | |
self.xmax = xmax | |||
self.minvalue = minvalue | |||
self.maxvalue = maxvalue | |||
if self.xmin == None: self.xmin = numpy.min(x) | |||
if self.xmax == None: self.xmax = numpy.max(x) | |||
if self.minvalue == None: self.minvalue = numpy.min(data1D) | |||
if self.maxvalue == None: self.maxvalue = numpy.max(data1D) | |||
|
r133 | ||
|
r135 | self.createFrames() | |
|
r133 | self.__isConfig = True | |
|
r156 | ||
|
r133 | ||
|
r153 | self.selectFigure() | |
|
r155 | self.__newPage() | |
|
r153 | ||
|
r156 | ||
|
r158 | for channel in range(len(channelList)): | |
|
r133 | frameObj = self.frameObjList[channel] | |
|
r135 | frameObj.init(xmin=self.xmin, | |
xmax=self.xmax, | |||
ymin=self.minvalue, | |||
ymax=self.maxvalue, | |||
minvalue=self.minvalue, | |||
maxvalue=self.maxvalue) | |||
|
r133 | ||
|
r158 | for channel in range(len(channelList)): | |
|
r135 | dataCh = data1D[channel,:] | |
frameObj = self.frameObjList[channel] | |||
frameObj.plot(x, dataCh) | |||
|
r156 | ||
|
r135 | self.__refresh() | |
|
r133 | ||
|
r150 | if save: | |
|
r158 | if self.__counter == 0: | |
path = gpath | |||
now = datetime.datetime.now() | |||
file = "plot_img%02d_%d_%d.png"%(self.idfigure, time.mktime(now.timetuple()), now.microsecond) | |||
filename = os.path.join(path,file) | |||
self.save(filename) | |||
self.__counter += 1 | |||
if self.__counter == ratio: | |||
self.__counter = 0 | |||
|
r150 | ||
|
r155 | self.__closePage() | |
|
r138 | ||
def plotPcolor(self,data, | |||
|
r139 | x=None, | |
y=None, | |||
channelList=None, | |||
xmin=None, | |||
xmax=None, | |||
ymin=None, | |||
ymax=None, | |||
minvalue=None, | |||
maxvalue=None, | |||
figuretitle=None, | |||
|
r150 | xrangestep=None, | |
deltax=None, | |||
|
r139 | save=False, | |
|
r141 | gpath='./', | |
|
r158 | ratio=1, | |
|
r156 | cleardata=False, | |
|
r141 | *args): | |
|
r139 | ||
|
r138 | ||
if figuretitle == None: | |||
self.figuretitle = "" | |||
else: | |||
self.figuretitle = figuretitle | |||
if not(self.__isDriverOpen): | |||
self.__openDriver() | |||
self.__isDriverOpen = True | |||
if not(self.__isConfig): | |||
|
r150 | self.setParms(data,x,y,xmin,xmax,ymin,ymax,minvalue,maxvalue,xrangestep,deltax) | |
|
r138 | ||
self.createFrames() | |||
self.__isConfig = True | |||
|
r139 | if (self.__isOutOfXRange(x)): | |
|
r138 | ||
|
r139 | if not(self.changeXRange(x)): | |
return 0 | |||
|
r156 | ||
|
r155 | self.__closePage() | |
|
r156 | self.__isFigureOpen = False | |
|
r154 | ||
self.selectFigure() | |||
|
r138 | ||
|
r139 | if not(self.__isFigureOpen): | |
|
r154 | self.__newPage() | |
|
r139 | self.__isFigureOpen = True | |
|
r158 | for channel in range(len(channelList)): | |
|
r141 | if len(args) != 0: value = args[0][channel] | |
else: value = args | |||
|
r139 | frameObj = self.frameObjList[channel] | |
|
r141 | frameObj.init(self.xmin, | |
self.xmax, | |||
self.ymin, | |||
self.ymax, | |||
self.minvalue, | |||
self.maxvalue, | |||
self.deltax, | |||
self.deltay, | |||
self.colorbar, | |||
value) | |||
|
r154 | ||
|
r139 | ||
|
r158 | for channel in range(len(channelList)): | |
|
r139 | dataCh = data[channel,:] | |
frameObj = self.frameObjList[channel] | |||
frameObj.plot(x, y, dataCh) | |||
|
r141 | ||
|
r139 | self.__refresh() | |
|
r158 | ||
if save: | |||
if self.__counter == 0: | |||
path = gpath | |||
now = datetime.datetime.now() | |||
file = "pcolor_img%02d_%d_%d.png"%(self.idfigure, time.mktime(now.timetuple()), now.microsecond) | |||
filename = os.path.join(path,file) | |||
self.save(filename) | |||
self.__counter += 1 | |||
if self.__counter == ratio: | |||
self.__counter = 0 | |||
|
r156 | if cleardata == True: | |
|
r154 | self.__closePage() | |
|
r141 | self.__isFigureOpen = False | |
|
r154 | ||
|
r139 | ||
|
r138 | ||
|
r133 | ||
|
r135 | class Frame: | |
|
r153 | ||
drvObj = None | |||
idFrame = None | |||
|
r135 | nplots = None | |
|
r133 | plotObjList = [] | |
title = "" | |||
|
r139 | ||
|
r135 | def __init__(self,drvObj, idframe): | |
|
r153 | ||
|
r135 | self.drvObj = drvObj | |
|
r133 | self.idframe = idframe | |
|
r153 | nplots = None | |
self.plotObjList = [] | |||
|
r135 | self.createPlots() | |
|
r133 | ||
|
r135 | def createPlots(self): | |
raise ValueError, "No implemented" | |||
|
r133 | ||
|
r135 | def getScreenPosMainPlot(self): | |
raise ValueError, "No implemented" | |||
|
r139 | def getScreenPosGraph1(self): | |
raise ValueError, "No implemented" | |||
|
r135 | def getScreenPos(self, nplot): | |
|
r133 | ||
if nplot == 0: | |||
|
r135 | xi, yi, xw, yw = self.getScreenPosMainPlot() | |
|
r139 | ||
if nplot == 1: | |||
xi, yi, xw, yw = self.getScreenPosGraph1() | |||
|
r133 | return xi, yi, xw, yw | |
|
r135 | ||
|
r141 | def init(self, xmin, xmax, ymin, ymax, minvalue, maxvalue, deltax=None, deltay=None, colorbar=False, *args): | |
|
r135 | ||
|
r133 | for plotObj in self.plotObjList: | |
|
r141 | plotObj.setBox(xmin, xmax, ymin, ymax, minvalue, maxvalue, deltax, deltay, colorbar, *args) | |
plotObj.plotBox() | |||
|
r139 | ||
|
r133 | ||
class Plot: | |||
|
r153 | ||
drvObj = None | |||
idframe = None | |||
idplot = None | |||
xi = None | |||
yi = None | |||
xw = None | |||
yw = None | |||
|
r133 | title = "" | |
|
r135 | xlabel = "" | |
ylabel = "" | |||
xaxisastime = None | |||
timefmt = None | |||
xopt = "" | |||
yopt = "" | |||
xpos = None | |||
ypos = None | |||
szchar = None | |||
idframe = None | |||
idplot = None | |||
|
r141 | colorbar = None | |
cbxpos = None | |||
cbypos = None | |||
|
r135 | ||
def __init__(self, drvObj, idframe, idplot, xi, yi, xw, yw): | |||
|
r153 | ||
|
r135 | self.drvObj = drvObj | |
self.idframe = idframe | |||
self.idplot = idplot | |||
|
r133 | self.xi = xi | |
self.yi = yi | |||
self.xw = xw | |||
self.yw = yw | |||
|
r141 | ||
def plotBox(self): | |||
|
r135 | ||
self.drvObj.driver.plotBox(self.idframe, | |||
self.xpos, | |||
self.ypos, | |||
self.xmin, | |||
self.xmax, | |||
self.ymin, | |||
self.ymax, | |||
self.minvalue, | |||
self.maxvalue, | |||
self.xopt, | |||
self.yopt, | |||
self.szchar, | |||
self.xaxisastime, | |||
self.timefmt) | |||
|
r150 | self.drvObj.driver.setPlotLabels(self.idframe, self.xlabel, self.ylabel, self.title) | |
|
r141 | ||
if self.colorbar: | |||
self.drvObj.driver.plotColorbar(self.minvalue, self.maxvalue, self.cbxpos,self.cbypos) | |||
|
r139 | ||
def plotPcolor(self, x, y, z, deltax, deltay, getGrid): | |||
self.drvObj.driver.pcolor(self.idframe, | |||
self.xpos, | |||
self.ypos, | |||
z, | |||
x, | |||
y, | |||
self.xmin, | |||
self.xmax, | |||
self.ymin, | |||
self.ymax, | |||
self.minvalue, | |||
self.maxvalue, | |||
deltax, | |||
deltay, | |||
getGrid, | |||
self.xaxisastime, | |||
self.timefmt) | |||
|
r135 | ||
|
r161 | def plotBasicLine(self,x, y, color, xopt='bcst', yopt='bcst'): | |
|
r135 | """ | |
Inputs: | |||
x: | |||
y: | |||
color: | |||
""" | |||
|
r161 | self.drvObj.driver.basicLine(self.idframe, self.xpos, self.ypos, x, y, self.xmin, self.xmax, self.ymin, self.ymax, color, xopt=xopt, yopt=yopt) | |
|
r135 |