From 87d92e5aecc6fd91c204a3fbcb362f0a14fb0115 2012-12-11 13:34:20 From: Daniel Valdez Date: 2012-12-11 13:34:20 Subject: [PATCH] Adicion de la carpeta test donde se encuentra la aplicacion de prueba para los experimentos EWDrifts y Faraday Se modifica la clase RTIFromNoise en jroplot y se agregan nuevos metodos en figure.py y mpldriver.py, este tipo de grafico aun no se ha finalizado. --- diff --git a/schainpy/model/graphics/figure.py b/schainpy/model/graphics/figure.py index 09f90d5..95da714 100644 --- a/schainpy/model/graphics/figure.py +++ b/schainpy/model/graphics/figure.py @@ -293,7 +293,35 @@ class Axes: self.__driver.pmultiline(self.plot, x, y, xlabel=xlabel, ylabel=ylabel, title=title) + + def pmultilineyaxis(self, x, y, + xmin=None, xmax=None, + ymin=None, ymax=None, + xlabel='', ylabel='', + title='', + **kwargs): + if self.__firsttime: + + if xmin == None: xmin = numpy.nanmin(x) + if xmax == None: xmax = numpy.nanmax(x) + if ymin == None: ymin = numpy.nanmin(y) + if ymax == None: ymax = numpy.nanmax(y) + + self.plot = self.__driver.createPmultilineYAxis(self.ax, x, y, + xmin, xmax, + ymin, ymax, + xlabel=xlabel, + ylabel=ylabel, + title=title, + **kwargs) + self.__firsttime = False + return + + self.__driver.pmultilineyaxis(self.plot, x, y, xlabel=xlabel, + ylabel=ylabel, + title=title) + def pcolor(self, x, y, z, xmin=None, xmax=None, ymin=None, ymax=None, diff --git a/schainpy/model/graphics/mpldriver.py b/schainpy/model/graphics/mpldriver.py index c0dd4cc..6c8d635 100644 --- a/schainpy/model/graphics/mpldriver.py +++ b/schainpy/model/graphics/mpldriver.py @@ -151,7 +151,7 @@ def createPmultiline(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', tit """ lines = ax.plot(x.T, y) - leg = ax.legend(lines, legendlabels, loc='upper left') + leg = ax.legend(lines, legendlabels, loc='upper right') leg.get_frame().set_alpha(0.5) ax.set_xlim([xmin,xmax]) ax.set_ylim([ymin,ymax]) @@ -199,6 +199,73 @@ def pmultiline(iplot, x, y, xlabel='', ylabel='', title=''): for i in range(len(ax.lines)): line = ax.lines[i] line.set_data(x[i,:],y) + +def createPmultilineYAxis(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', legendlabels=None, + ticksize=9, xtick_visible=True, ytick_visible=True, + nxticks=4, nyticks=10, marker='^', markersize=8, linestyle="solid", + grid=None, XAxisAsTime=False): + + """ + + Input: + grid : None, 'both', 'x', 'y' + """ + + lines = ax.plot(x, y.T, marker=marker,markersize=markersize,linestyle=linestyle) + leg = ax.legend(lines, legendlabels, bbox_to_anchor=(1.05, 1), loc='upper right', numpoints=1, handlelength=1.5, \ + handletextpad=0.5, borderpad=0.2, labelspacing=0.2, borderaxespad=0.) + + ax.set_xlim([xmin,xmax]) + ax.set_ylim([ymin,ymax]) + printLabels(ax, xlabel, ylabel, title) + +# xtickspos = numpy.arange(nxticks)*int((xmax-xmin)/(nxticks)) + int(xmin) +# ax.set_xticks(xtickspos) + + for tick in ax.get_xticklabels(): + tick.set_visible(xtick_visible) + + for tick in ax.xaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + for tick in ax.get_yticklabels(): + tick.set_visible(ytick_visible) + + for tick in ax.yaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + iplot = ax.lines[-1] + + if '0.' in matplotlib.__version__[0:2]: + print "The matplotlib version has to be updated to 1.1 or newer" + return iplot + + if '1.0.' in matplotlib.__version__[0:4]: + print "The matplotlib version has to be updated to 1.1 or newer" + return iplot + + if grid != None: + ax.grid(b=True, which='major', axis=grid) + + matplotlib.pyplot.tight_layout() + + if XAxisAsTime: + + func = lambda x, pos: ('%s') %(datetime.datetime.utcfromtimestamp(x).strftime("%H:%M:%S")) + ax.xaxis.set_major_formatter(FuncFormatter(func)) + ax.xaxis.set_major_locator(LinearLocator(7)) + + return iplot + +def pmultilineinyaxis(iplot, x, y, xlabel='', ylabel='', title=''): + + ax = iplot.get_axes() + + printLabels(ax, xlabel, ylabel, title) + + for i in range(len(ax.lines)): + line = ax.lines[i] + line.set_data(x,y[i,:]) def createPcolor(ax, x, y, z, xmin, xmax, ymin, ymax, zmin, zmax, xlabel='', ylabel='', title='', ticksize = 9, diff --git a/schainpy/model/jroplot.py b/schainpy/model/jroplot.py index 0760306..cf7187a 100644 --- a/schainpy/model/jroplot.py +++ b/schainpy/model/jroplot.py @@ -841,24 +841,22 @@ class RTIfromNoise(Figure): __isConfig = None __nsubplots = None - - WIDTHPROF = None - HEIGHTPROF = None - PREFIX = 'rti' + + PREFIX = 'rtinoise' def __init__(self): - self.__timerange = 24*60*60 + self.timerange = 24*60*60 self.__isConfig = False self.__nsubplots = 1 - self.WIDTH = 800 + self.WIDTH = 820 self.HEIGHT = 200 def getSubplots(self): ncol = 1 - nrow = self.nplots + nrow = 1 return nrow, ncol @@ -872,50 +870,21 @@ class RTIfromNoise(Figure): self.createFigure(idfigure = idfigure, wintitle = wintitle, - widthplot = self.WIDTH + self.WIDTHPROF, - heightplot = self.HEIGHT + self.HEIGHTPROF) + widthplot = self.WIDTH, + heightplot = self.HEIGHT) nrow, ncol = self.getSubplots() self.addAxes(nrow, ncol, 0, 0, 1, 1) - - - - def __getTimeLim(self, x, xmin, xmax): - - thisdatetime = datetime.datetime.fromtimestamp(numpy.min(x)) - thisdate = datetime.datetime.combine(thisdatetime.date(), datetime.time(0,0,0)) - - #################################################### - #If the x is out of xrange - if xmax < (thisdatetime - thisdate).seconds/(60*60.): - xmin = None - xmax = None - - if xmin == None: - td = thisdatetime - thisdate - xmin = td.seconds/(60*60.) - - if xmax == None: - xmax = xmin + self.__timerange/(60*60.) - - mindt = thisdate + datetime.timedelta(0,0,0,0,0, xmin) - tmin = time.mktime(mindt.timetuple()) - - maxdt = thisdate + datetime.timedelta(0,0,0,0,0, xmax) - tmax = time.mktime(maxdt.timetuple()) - - self.__timerange = tmax - tmin - - return tmin, tmax - + def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True', - xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None, + xmin=None, xmax=None, ymin=None, ymax=None, timerange=None, save=False, figpath='./', figfile=None): if channelList == None: channelIndexList = dataOut.channelIndexList + channelList = dataOut.channelList else: channelIndexList = [] for channel in channelList: @@ -924,16 +893,13 @@ class RTIfromNoise(Figure): channelIndexList.append(dataOut.channelList.index(channel)) if timerange != None: - self.__timerange = timerange + self.timerange = timerange tmin = None tmax = None x = dataOut.getTimeRange() y = dataOut.getHeiRange() - x1 = dataOut.datatime -# z = 10.*numpy.log10(dataOut.data_spc[channelIndexList,:,:]) -# avg = numpy.average(z, axis=1) - + noise = dataOut.getNoise() thisDatetime = dataOut.datatime @@ -941,43 +907,45 @@ class RTIfromNoise(Figure): xlabel = "Velocity (m/s)" ylabel = "Range (Km)" - if not self.__isConfig: - nplots = len(channelIndexList) + nplots = 1 self.setup(idfigure=idfigure, nplots=nplots, wintitle=wintitle, showprofile=showprofile) - tmin, tmax = self.__getTimeLim(x, xmin, xmax) - if ymin == None: ymin = numpy.nanmin(y) - if ymax == None: ymax = numpy.nanmax(y) - if zmin == None: zmin = numpy.nanmin(avg)*0.9 - if zmax == None: zmax = numpy.nanmax(avg)*0.9 + tmin, tmax = self.getTimeLim(x, xmin, xmax) + if ymin == None: ymin = numpy.nanmin(noise) + if ymax == None: ymax = numpy.nanmax(noise) + self.name = thisDatetime.strftime("%Y%m%d_%H%M%S") self.__isConfig = True - + self.setWinTitle(title) - for i in range(self.nplots): - title = "Channel %d: %s" %(dataOut.channelList[i], thisDatetime.strftime("%d-%b-%Y %H:%M:%S")) - axes = self.axesList[i*self.__nsubplots] - z = avg[i].reshape((1,-1)) - axes.pcolor(x, y, z, - xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax, - xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True, - ticksize=9, cblabel='', cbsize="1%") - + + title = "RTI Noise %s" %(thisDatetime.strftime("%d-%b-%Y")) + + legendlabels = ["channel %d"%idchannel for idchannel in channelList] + axes = self.axesList[0] + xdata = x[0:1] + ydata = noise[channelIndexList].reshape(-1,1) + axes.pmultilineyaxis(x=xdata, y=ydata, + xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, + xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid", + XAxisAsTime=True + ) + self.draw() if save: - date = thisDatetime.strftime("%Y%m%d") + if figfile == None: - figfile = self.getFilename(name = date) + figfile = self.getFilename(name = self.name) self.saveFigure(figpath, figfile) diff --git a/schainpy/test/EWDriftsApp.py b/schainpy/test/EWDriftsApp.py new file mode 100644 index 0000000..b7408da --- /dev/null +++ b/schainpy/test/EWDriftsApp.py @@ -0,0 +1,95 @@ +import os, sys + +path = os.path.split(os.getcwd())[0] +sys.path.append(path) + +from controller import * + +desc = "EWDrifts Experiment Test" +filename = "ewdrifts.xml" + +controllerObj = Project() + +controllerObj.setup(id = '191', name='test01', description=desc) + +readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage', + path='/Users/dsuarez/Remote/EW_DRIFTS_Sep2012', + startDate='2011/01/01', + endDate='2012/12/31', + startTime='00:00:00', + endTime='23:59:59', + online=0, + walk=0) + +procUnitConfObj0 = controllerObj.addProcUnit(datatype='Voltage', inputId=readUnitConfObj.getId()) + +opObj11 = procUnitConfObj0.addOperation(name='ProfileSelector', optype='other') +opObj11.addParameter(name='profileRangeList', value='0,127', format='intlist') + +opObj11 = procUnitConfObj0.addOperation(name='filterByHeights') +opObj11.addParameter(name='window', value='3', format='int') + +opObj11 = procUnitConfObj0.addOperation(name='Decoder', optype='other') + +procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj0.getId()) +procUnitConfObj1.addParameter(name='nFFTPoints', value='128', format='int') +procUnitConfObj1.addParameter(name='pairsList', value='(0,1),(2,3)', format='pairslist') + +opObj11 = procUnitConfObj1.addOperation(name='IncohInt', optype='other') +opObj11.addParameter(name='n', value='10', format='float') +#opObj11.addParameter(name='timeInterval', value='0.33', format='float') + +opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='other') +opObj11.addParameter(name='idfigure', value='1', format='int') +opObj11.addParameter(name='wintitle', value='SpectraPlot', format='str') +#opObj11.addParameter(name='channelList', value='0,6', format='intlist') +opObj11.addParameter(name='zmin', value='30', format='int') +opObj11.addParameter(name='zmax', value='120', format='int') +opObj11.addParameter(name='showprofile', value='1', format='int') + + +#opObj11 = procUnitConfObj1.addOperation(name='RTIfromNoise', optype='other') +#opObj11.addParameter(name='idfigure', value='2', format='int') +#opObj11.addParameter(name='timerange', value='10', format='int') +#opObj11.addParameter(name='ymin', value='20', format='int') +#opObj11.addParameter(name='ymax', value='120', format='int') + +opObj11 = procUnitConfObj1.addOperation(name='ProfilePlot', optype='other') +opObj11.addParameter(name='idfigure', value='2', format='int') +#opObj11.addParameter(name='wintitle', value='Prof', format='str') +opObj11.addParameter(name='xmin', value='30', format='int') +opObj11.addParameter(name='xmax', value='120', format='int') + +opObj11 = procUnitConfObj1.addOperation(name='CrossSpectraPlot', optype='other') +opObj11.addParameter(name='idfigure', value='3', format='int') +opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str') +opObj11.addParameter(name='zmin', value='30', format='int') +opObj11.addParameter(name='zmax', value='120', format='int') +#opObj11.addParameter(name='pairsList', value='(0,2)', format='pairslist') + +opObj11 = procUnitConfObj1.addOperation(name='RTIPlot', optype='other') +opObj11.addParameter(name='idfigure', value='4', format='int') +opObj11.addParameter(name='wintitle', value='RTIPLot', format='str') +opObj11.addParameter(name='zmin', value='30', format='int') +opObj11.addParameter(name='zmax', value='120', format='int') +opObj11.addParameter(name='timerange', value='3600', format='int') +opObj11.addParameter(name='showprofile', value='1', format='int') +opObj11.addParameter(name='save', value='1', format='bool') +opObj11.addParameter(name='figpath', value='/Users/dsuarez/Pictures', format='str') + +opObj11 = procUnitConfObj1.addOperation(name='CoherenceMap', optype='other') +opObj11.addParameter(name='idfigure', value='5', format='int') +#opObj11.addParameter(name='pairsList', value='(0,2)', format='pairslist') +opObj11.addParameter(name='timerange', value='300', format='int') +opObj11.addParameter(name='showprofile', value='1', format='int') + +print "Escribiendo el archivo XML" +controllerObj.writeXml(filename) +print "Leyendo el archivo XML" +controllerObj.readXml(filename) + +controllerObj.createObjects() +controllerObj.connectObjects() +controllerObj.run() + + \ No newline at end of file diff --git a/schainpy/test/FaradayApp.py b/schainpy/test/FaradayApp.py new file mode 100644 index 0000000..25b6032 --- /dev/null +++ b/schainpy/test/FaradayApp.py @@ -0,0 +1,62 @@ +import os, sys + +path = os.path.split(os.getcwd())[0] +sys.path.append(path) + +from controller import * + +desc = "Faraday Experiment Test" +filename = "faraday.xml" + +controllerObj = Project() + +controllerObj.setup(id = '191', name='test01', description=desc) + +path = '' + +readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage', + path=path, + startDate='2011/01/01', + endDate='2012/12/31', + startTime='00:00:00', + endTime='23:59:59', + online=0, + walk=0) + +procUnitConfObj0 = controllerObj.addProcUnit(datatype='Voltage', inputId=readUnitConfObj.getId()) + +opObj11 = procUnitConfObj0.addOperation(name='ProfileSelector', optype='other') +opObj11.addParameter(name='profileRangeList', value='0,127', format='intlist') + +opObj11 = procUnitConfObj0.addOperation(name='filterByHeights') +opObj11.addParameter(name='window', value='3', format='int') + +opObj11 = procUnitConfObj0.addOperation(name='Decoder', optype='other') + +opObj11 = procUnitConfObj0.addOperation(name='deFlip') + +procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj0.getId()) +procUnitConfObj1.addParameter(name='nFFTPoints', value='128', format='int') +procUnitConfObj1.addParameter(name='pairsList', value='(0,1)', format='pairslist') + +opObj11 = procUnitConfObj1.addOperation(name='IncohInt', optype='other') +opObj11.addParameter(name='n', value='10', format='float') +#opObj11.addParameter(name='timeInterval', value='0.33', format='float') + +opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='other') +opObj11.addParameter(name='idfigure', value='1', format='int') +opObj11.addParameter(name='wintitle', value='SpectraPlot', format='str') +opObj11.addParameter(name='zmin', value='30', format='int') +opObj11.addParameter(name='zmax', value='120', format='int') +opObj11.addParameter(name='showprofile', value='1', format='int') + + +print "Escribiendo el archivo XML" +controllerObj.writeXml(filename) +print "Leyendo el archivo XML" +controllerObj.readXml(filename) + +controllerObj.createObjects() +controllerObj.connectObjects() +controllerObj.run() + diff --git a/schainpy/test/ImagingApp.py b/schainpy/test/ImagingApp.py new file mode 100644 index 0000000..e741c26 --- /dev/null +++ b/schainpy/test/ImagingApp.py @@ -0,0 +1,83 @@ +import sys + +from controller import * + +desc = "Imaging Experiment Test" +filename = "imaging.xml" + +controllerObj = Project() + +controllerObj.setup(id = '191', name='test01', description=desc) + +readUnitConfObj = controllerObj.addReadUnit(datatype='Spectra', + path='/Users/dsuarez/Remote/IMAGING/D2012080', + startDate='2011/01/01', + endDate='2012/12/31', + startTime='00:00:00', + endTime='23:59:59', + online=0, + walk=0) + +procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=readUnitConfObj.getId()) + +#opObj11 = procUnitConfObj0.addOperation(name='selectChannels') +#opObj11.addParameter(name='channelList', value='0,2,6', format='intlist') + + +## +#procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj0.getId()) +#procUnitConfObj1.addParameter(name='nFFTPoints', value='32', format='int') +#procUnitConfObj1.addParameter(name='pairsList', value='(0,1)', format='pairslist') + +opObj11 = procUnitConfObj1.addOperation(name='IncohInt', optype='other') +opObj11.addParameter(name='n', value='2', format='int') + +opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='other') +opObj11.addParameter(name='idfigure', value='1', format='int') +opObj11.addParameter(name='wintitle', value='SpectraPlot', format='str') +#opObj11.addParameter(name='channelList', value='0,6', format='intlist') +opObj11.addParameter(name='zmin', value='30', format='int') +opObj11.addParameter(name='zmax', value='120', format='int') +opObj11.addParameter(name='showprofile', value='1', format='int') + +opObj11 = procUnitConfObj1.addOperation(name='ProfilePlot', optype='other') +opObj11.addParameter(name='idfigure', value='2', format='int') +opObj11.addParameter(name='wintitle', value='O', format='str') +opObj11.addParameter(name='xmin', value='30', format='int') +opObj11.addParameter(name='xmax', value='120', format='int') + + + +#opObj11 = procUnitConfObj0.addOperation(name='CrossSpectraPlot', optype='other') +#opObj11.addParameter(name='idfigure', value='3', format='int') +#opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str') +#opObj11.addParameter(name='zmin', value='30', format='int') +#opObj11.addParameter(name='zmax', value='120', format='int') +#opObj11.addParameter(name='pairsList', value='(0,2)', format='pairslist') + +#opObj11 = procUnitConfObj1.addOperation(name='RTIPlot', optype='other') +#opObj11.addParameter(name='idfigure', value='4', format='int') +#opObj11.addParameter(name='wintitle', value='RTIPLot', format='str') +#opObj11.addParameter(name='zmin', value='30', format='int') +#opObj11.addParameter(name='zmax', value='120', format='int') +#opObj11.addParameter(name='timerange', value='3600', format='int') +#opObj11.addParameter(name='showprofile', value='1', format='int') +#opObj11.addParameter(name='save', value='1', format='bool') +#opObj11.addParameter(name='figpath', value='/Users/dsuarez/Pictures', format='str') + +#opObj11 = procUnitConfObj0.addOperation(name='CoherencePlot', optype='other') +#opObj11.addParameter(name='idfigure', value='5', format='int') +#opObj11.addParameter(name='pairsList', value='(0,2)', format='pairslist') +#opObj11.addParameter(name='timerange', value='300', format='int') +#opObj11.addParameter(name='showprofile', value='1', format='int') + +print "Escribiendo el archivo XML" +controllerObj.writeXml(filename) +print "Leyendo el archivo XML" +controllerObj.readXml(filename) + +controllerObj.createObjects() +controllerObj.connectObjects() +controllerObj.run() + + \ No newline at end of file