|
|
'''
|
|
|
Created on Feb 7, 2012
|
|
|
|
|
|
@author $Author$
|
|
|
@version $Id$
|
|
|
'''
|
|
|
|
|
|
import os, sys
|
|
|
import numpy
|
|
|
import datetime
|
|
|
import plplot
|
|
|
|
|
|
path = os.path.split(os.getcwd())[0]
|
|
|
sys.path.append(path)
|
|
|
|
|
|
from Graphics.BaseGraph import *
|
|
|
from Model.Spectra import Spectra
|
|
|
|
|
|
class Spectrum():
|
|
|
|
|
|
def __init__(self, Spectra, index=0):
|
|
|
|
|
|
"""
|
|
|
|
|
|
Inputs:
|
|
|
|
|
|
type: "power" ->> Potencia
|
|
|
"iq" ->> Real + Imaginario
|
|
|
"""
|
|
|
|
|
|
self.__isPlotConfig = False
|
|
|
|
|
|
self.__isPlotIni = False
|
|
|
|
|
|
self.__xrange = None
|
|
|
|
|
|
self.__yrange = None
|
|
|
|
|
|
self.nGraphs = 0
|
|
|
|
|
|
self.indexPlot = index
|
|
|
|
|
|
self.graphObjList = []
|
|
|
|
|
|
self.m_Spectra = Spectra
|
|
|
|
|
|
|
|
|
def __addGraph(self, subpage, title="", xlabel="", ylabel="", showColorbar=False, showPowerProfile=True, XAxisAsTime=False):
|
|
|
|
|
|
graphObj = ColorPlot()
|
|
|
graphObj.setup(subpage,
|
|
|
title,
|
|
|
xlabel,
|
|
|
ylabel,
|
|
|
showColorbar=showColorbar,
|
|
|
showPowerProfile=showPowerProfile,
|
|
|
XAxisAsTime=XAxisAsTime)
|
|
|
|
|
|
self.graphObjList.append(graphObj)
|
|
|
|
|
|
|
|
|
def setup(self, titleList=None, xlabelList=None, ylabelList=None, showColorbar=False, showPowerProfile=True, XAxisAsTime=False):
|
|
|
|
|
|
nChan = int(self.m_Spectra.m_SystemHeader.numChannels)
|
|
|
channels = range(nChan)
|
|
|
|
|
|
myXlabel = "Radial Velocity (m/s)"
|
|
|
myYlabel = "Range (km)"
|
|
|
|
|
|
for i in channels:
|
|
|
if titleList != None:
|
|
|
myTitle = titleList[i]
|
|
|
myXlabel = xlabelList[i]
|
|
|
myYlabel = ylabelList[i]
|
|
|
|
|
|
# if self.m_Spectra.m_NoiseObj != None:
|
|
|
# noise = '%4.2fdB' %(self.m_Spectra.m_NoiseObj[i])
|
|
|
# else:
|
|
|
noise = '--'
|
|
|
|
|
|
myTitle = "Channel: %d - Noise: %s" %(i, noise)
|
|
|
|
|
|
self.__addGraph(i+1,
|
|
|
title=myTitle,
|
|
|
xlabel=myXlabel,
|
|
|
ylabel=myYlabel,
|
|
|
showColorbar=showColorbar,
|
|
|
showPowerProfile=showPowerProfile,
|
|
|
XAxisAsTime=XAxisAsTime)
|
|
|
|
|
|
self.nGraphs = nChan
|
|
|
self.__isPlotConfig = True
|
|
|
|
|
|
def iniPlot(self, winTitle=""):
|
|
|
|
|
|
nx = int(numpy.sqrt(self.nGraphs)+1)
|
|
|
#ny = int(self.nGraphs/nx)
|
|
|
|
|
|
plplot.plsstrm(self.indexPlot)
|
|
|
plplot.plparseopts([winTitle], plplot.PL_PARSE_FULL)
|
|
|
plplot.plsetopt("geometry", "%dx%d" %(300*nx, 240*nx))
|
|
|
plplot.plsdev("xwin")
|
|
|
plplot.plscolbg(255,255,255)
|
|
|
plplot.plscol0(1,0,0,0)
|
|
|
plplot.plinit()
|
|
|
plplot.plspause(False)
|
|
|
plplot.pladv(0)
|
|
|
plplot.plssub(nx, nx)
|
|
|
|
|
|
self.__nx = nx
|
|
|
self.__ny = nx
|
|
|
self.__isPlotIni = True
|
|
|
|
|
|
|
|
|
def plotData(self, xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None, titleList=None, xlabelList=None, ylabelList=None, showColorbar=False, showPowerProfile=True, XAxisAsTime=False, winTitle="Spectra"):
|
|
|
|
|
|
if not(self.__isPlotConfig):
|
|
|
self.setup(titleList,
|
|
|
xlabelList,
|
|
|
ylabelList,
|
|
|
showColorbar,
|
|
|
showPowerProfile,
|
|
|
XAxisAsTime)
|
|
|
|
|
|
if not(self.__isPlotIni):
|
|
|
self.iniPlot(winTitle)
|
|
|
|
|
|
plplot.plsstrm(self.indexPlot)
|
|
|
|
|
|
data = 10.*numpy.log10(self.m_Spectra.data_spc)
|
|
|
|
|
|
nX, nY, nChan = numpy.shape(data)
|
|
|
|
|
|
x = numpy.arange(nX)
|
|
|
y = self.m_Spectra.heights
|
|
|
|
|
|
thisDatetime = datetime.datetime.fromtimestamp(self.m_Spectra.m_BasicHeader.utc)
|
|
|
txtDate = "Self Spectra - Date: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
|
|
|
|
|
|
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(abs(data))
|
|
|
if zmax == None: zmax = numpy.nanmax(abs(data))
|
|
|
|
|
|
plplot.plbop()
|
|
|
|
|
|
plplot.plssub(self.__nx, self.__ny)
|
|
|
for i in range(self.nGraphs):
|
|
|
self.graphObjList[i].iniSubpage()
|
|
|
self.graphObjList[i].plotData(data[i,:,:],
|
|
|
x,
|
|
|
y,
|
|
|
xmin=xmin,
|
|
|
xmax=xmax,
|
|
|
ymin=ymin,
|
|
|
ymax=ymax,
|
|
|
zmin=zmin,
|
|
|
zmax=zmax)
|
|
|
|
|
|
plplot.plssub(1,0)
|
|
|
plplot.pladv(0)
|
|
|
plplot.plvpor(0., 1., 0., 1.)
|
|
|
plplot.plmtex("t",-1., 0.5, 0.5, txtDate)
|
|
|
plplot.plflush()
|
|
|
plplot.pleop()
|
|
|
|
|
|
def end(self):
|
|
|
plplot.plend()
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
pass
|