diff --git a/schainpy/model/data/jroamisr.py b/schainpy/model/data/jroamisr.py index 0eeb60e..c675433 100644 --- a/schainpy/model/data/jroamisr.py +++ b/schainpy/model/data/jroamisr.py @@ -1,5 +1,12 @@ import numpy +class Beam: + def __init__(self): + self.codeList = [] + self.azimuthList = [] + self.zenithList = [] + + class AMISR: def __init__(self): self.flagNoData = True @@ -51,6 +58,10 @@ class AMISR: self.npulseByFrame = None + self.profileIndex = None + + self.beam = Beam() + def copy(self, inputObj=None): if inputObj == None: @@ -58,8 +69,14 @@ class AMISR: for key in inputObj.__dict__.keys(): self.__dict__[key] = inputObj.__dict__[key] + + def getNHeights(self): + + return len(self.heightList) def isEmpty(self): - return self.flagNoData \ No newline at end of file + return self.flagNoData + + nHeights = property(getNHeights, "I'm the 'nHeights' property.") \ No newline at end of file diff --git a/schainpy/model/data/jrodata.py b/schainpy/model/data/jrodata.py index a028e52..1491ba6 100644 --- a/schainpy/model/data/jrodata.py +++ b/schainpy/model/data/jrodata.py @@ -89,6 +89,12 @@ def hildebrand_sekhon(data, navg): stdv = numpy.sqrt((sumq - lnoise**2)/(j - 1)) return lnoise +class Beam: + def __init__(self): + self.codeList = [] + self.azimuthList = [] + self.zenithList = [] + class GenericData(object): flagNoData = True @@ -193,6 +199,8 @@ class JROData(GenericData): zenith = None + beam = Beam() + def __init__(self): raise ValueError, "This class has not been implemented" @@ -735,6 +743,4 @@ class Fits: noise = property(getNoise, "I'm the 'nHeights' property.") datatime = property(getDatatime, "I'm the 'datatime' property") ltctime = property(getltctime, "I'm the 'ltctime' property") - - ltctime = property(getltctime, "I'm the 'ltctime' property") diff --git a/schainpy/model/graphics/jroplot_spectra.py b/schainpy/model/graphics/jroplot_spectra.py index dbb877d..1abfc73 100644 --- a/schainpy/model/graphics/jroplot_spectra.py +++ b/schainpy/model/graphics/jroplot_spectra.py @@ -166,6 +166,9 @@ class SpectraPlot(Figure): for i in range(self.nplots): str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S")) title = "Channel %d: %4.2fdB: %s" %(dataOut.channelList[i]+1, noisedB[i], str_datetime) + if len(dataOut.beam.codeList) != 0: + title = "Ch%d:%4.2fdB,%2.2f,%2.2f:%s" %(dataOut.channelList[i]+1, noisedB[i], dataOut.beam.azimuthList[i], dataOut.beam.zenithList[i], str_datetime) + axes = self.axesList[i*self.__nsubplots] axes.pcolor(x, y, zdB[i,:,:], xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax, diff --git a/schainpy/model/graphics/mpldriver.py b/schainpy/model/graphics/mpldriver.py index 691b4cb..7ac5267 100644 --- a/schainpy/model/graphics/mpldriver.py +++ b/schainpy/model/graphics/mpldriver.py @@ -77,7 +77,7 @@ def printLabels(ax, xlabel, ylabel, title): ax.set_xlabel(xlabel, size=11) ax.set_ylabel(ylabel, size=11) - ax.set_title(title, size=12) + ax.set_title(title, size=8) def createPline(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', ticksize=9, xtick_visible=True, ytick_visible=True, diff --git a/schainpy/model/io/jroIO_amisr.py b/schainpy/model/io/jroIO_amisr.py index 1a0537b..1d74ba0 100644 --- a/schainpy/model/io/jroIO_amisr.py +++ b/schainpy/model/io/jroIO_amisr.py @@ -600,7 +600,7 @@ class AMISRReader(ProcessingUnit): self.dataOut.data = numpy.reshape(self.datablock[self.profileIndex,:],(1,-1)) self.dataOut.utctime = self.radacTimeByFrame[self.profileIndex] - + self.dataOut.profileIndex = self.profileIndex self.dataOut.flagNoData = False self.profileIndex += 1 diff --git a/schainpy/model/proc/jroproc_amisr.py b/schainpy/model/proc/jroproc_amisr.py index 780ebe1..cd70f72 100644 --- a/schainpy/model/proc/jroproc_amisr.py +++ b/schainpy/model/proc/jroproc_amisr.py @@ -1,7 +1,7 @@ ''' @author: Daniel Suarez ''' - +import numpy from jroproc_base import ProcessingUnit, Operation from model.data.jroamisr import AMISR @@ -88,4 +88,43 @@ class BeamSelector(Operation): else: raise ValueError, "BeamSelector needs beam value" - return 0 \ No newline at end of file + return 0 + +class ProfileToChannels(Operation): + + def __init__(self): + self.__isConfig = False + self.__counter_chan = 0 + self.buffer = None + + + def run(self, dataOut): + + dataOut.flagNoData = True + + if not(self.__isConfig): + nchannels = len(dataOut.beamRangeDict.keys()) + nsamples = dataOut.nHeights + self.buffer = numpy.zeros((nchannels, nsamples), dtype = 'complex128') + self.__isConfig = True + + for i in range(self.buffer.shape[0]): + if dataOut.profileIndex in dataOut.beamRangeDict[i]: + self.buffer[i,:] = dataOut.data + if len(dataOut.beam.codeList) < self.buffer.shape[0]: + beamInfo = dataOut.beamCodeDict[i] + dataOut.beam.codeList.append(beamInfo[0]) + dataOut.beam.azimuthList.append(beamInfo[1]) + dataOut.beam.zenithList.append(beamInfo[2]) + break + + self.__counter_chan += 1 + + if self.__counter_chan >= self.buffer.shape[0]: + self.__counter_chan = 0 + dataOut.data = self.buffer.copy() + dataOut.channelList = range(self.buffer.shape[0]) + self.__isConfig = False + dataOut.flagNoData = False + pass + \ No newline at end of file diff --git a/schainpy/model/proc/jroproc_spectra.py b/schainpy/model/proc/jroproc_spectra.py index 97a6ed3..58e9ea4 100644 --- a/schainpy/model/proc/jroproc_spectra.py +++ b/schainpy/model/proc/jroproc_spectra.py @@ -53,6 +53,10 @@ class SpectraProc(ProcessingUnit): self.dataOut.azimuth = self.dataIn.azimuth self.dataOut.zenith = self.dataIn.zenith + self.dataOut.beam.codeList = self.dataIn.beam.codeList + self.dataOut.beam.azimuthList = self.dataIn.beam.azimuthList + self.dataOut.beam.zenithList = self.dataIn.beam.zenithList + def __getFft(self): """ Convierte valores de Voltaje a Spectra diff --git a/schainpy/model/proc/jroproc_voltage.py b/schainpy/model/proc/jroproc_voltage.py index 5f6cb3d..9f4f625 100644 --- a/schainpy/model/proc/jroproc_voltage.py +++ b/schainpy/model/proc/jroproc_voltage.py @@ -44,6 +44,10 @@ class VoltageProc(ProcessingUnit): self.dataOut.azimuth = self.dataIn.azimuth self.dataOut.zenith = self.dataIn.zenith + + self.dataOut.beam.codeList = self.dataIn.beam.codeList + self.dataOut.beam.azimuthList = self.dataIn.beam.azimuthList + self.dataOut.beam.zenithList = self.dataIn.beam.zenithList # # pass# # diff --git a/schainpy/test/amisr_proc.py b/schainpy/test/amisr_proc.py index 0c9a9e3..5839c7a 100644 --- a/schainpy/test/amisr_proc.py +++ b/schainpy/test/amisr_proc.py @@ -15,13 +15,13 @@ controllerObj.setup(id = '191', name='test01', description=desc) path = os.path.join(os.environ['HOME'],'Development/amisr/data') -#path = os.path.join(os.environ['HOME'],'Documents/amisr') +path = '/media/administrator/KINGSTON/amisr' figpath = os.path.join(os.environ['HOME'],'Pictures/amisr') readUnitConfObj = controllerObj.addReadUnit(datatype='AMISRReader', path=path, - startDate='2014/01/06', - endDate='2014/12/06', + startDate='2014/10/21', + endDate='2014/10/21', startTime='00:00:00', endTime='23:59:59', walk=1, @@ -32,38 +32,47 @@ procUnitAMISRBeam0 = controllerObj.addProcUnit(datatype='AMISRProc', inputId=rea opObj11 = procUnitAMISRBeam0.addOperation(name='PrintInfo', optype='other') +#Reshaper +opObj11 = procUnitAMISRBeam0.addOperation(name='ProfileToChannels', optype='other') + + #Beam Selector -opObj11 = procUnitAMISRBeam0.addOperation(name='BeamSelector', optype='other') -opObj11.addParameter(name='beam', value='0', format='int') +#opObj11 = procUnitAMISRBeam0.addOperation(name='BeamSelector', optype='other') +#opObj11.addParameter(name='beam', value='0', format='int') #Voltage Processing Unit procUnitConfObjBeam0 = controllerObj.addProcUnit(datatype='VoltageProc', inputId=procUnitAMISRBeam0.getId()) #Coherent Integration opObj11 = procUnitConfObjBeam0.addOperation(name='CohInt', optype='other') -opObj11.addParameter(name='n', value='128', format='int') +opObj11.addParameter(name='n', value='8', format='int') #Spectra Unit Processing, getting spectras with nProfiles and nFFTPoints procUnitConfObjSpectraBeam0 = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjBeam0.getId()) procUnitConfObjSpectraBeam0.addParameter(name='nFFTPoints', value=32, format='int') procUnitConfObjSpectraBeam0.addParameter(name='nProfiles', value=32, format='int') +#RemoveDc +opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='removeDC') + #Noise Estimation opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='getNoise') -opObj11.addParameter(name='minHei', value='100', format='float') -opObj11.addParameter(name='maxHei', value='300', format='float') +opObj11.addParameter(name='minHei', value='5', format='float') +opObj11.addParameter(name='maxHei', value='20', format='float') #SpectraPlot opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='SpectraPlot', optype='other') opObj11.addParameter(name='id', value='100', format='int') opObj11.addParameter(name='wintitle', value='AMISR Beam 0', format='str') +opObj11.addParameter(name='zmin', value='30', format='int') +opObj11.addParameter(name='zmax', value='80', format='int') #RTIPlot -title0 = 'RTI AMISR Beam 0' -opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='RTIPlot', optype='other') -opObj11.addParameter(name='id', value='200', format='int') -opObj11.addParameter(name='wintitle', value=title0, format='str') -opObj11.addParameter(name='showprofile', value='0', format='int') -#Setting RTI time using xmin,xmax -opObj11.addParameter(name='xmin', value='15', format='int') -opObj11.addParameter(name='xmax', value='23', format='int') +#title0 = 'RTI AMISR Beam 0' +#opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='RTIPlot', optype='other') +#opObj11.addParameter(name='id', value='200', format='int') +#opObj11.addParameter(name='wintitle', value=title0, format='str') +#opObj11.addParameter(name='showprofile', value='0', format='int') +##Setting RTI time using xmin,xmax +#opObj11.addParameter(name='xmin', value='15', format='int') +#opObj11.addParameter(name='xmax', value='23', format='int') #Setting dB range with zmin, zmax #opObj11.addParameter(name='zmin', value='45', format='int') #opObj11.addParameter(name='zmax', value='70', format='int')