##// END OF EJS Templates
Se agregó la opción de shift al calcular la transformada de Fourier
Se agregó la opción de shift al calcular la transformada de Fourier

File last commit:

r73:ea60e7ccc5aa
r74:2ede70f6309a
Show More
SpectraPlot.py
177 lines | 5.5 KiB | text/x-python | PythonLexer
'''
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)
#data.shape = Channels x Heights x Profiles
# data = numpy.transpose( data, (0,2,1) )
#data.shape = Channels x Profiles x Heights
nChan, nX, nY = 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