diff --git a/schainpy/Graphics/SpectraPlot.py b/schainpy/Graphics/SpectraPlot.py index ca32bc6..3742ad5 100644 --- a/schainpy/Graphics/SpectraPlot.py +++ b/schainpy/Graphics/SpectraPlot.py @@ -130,7 +130,7 @@ class Spectrum(): data = 10.*numpy.log10(self.m_Spectra.data_spc) #data.shape = Channels x Heights x Profiles - data = numpy.transpose( data, (0,2,1) ) +# data = numpy.transpose( data, (0,2,1) ) #data.shape = Channels x Profiles x Heights nChan, nX, nY = numpy.shape(data) diff --git a/schainpy/Graphics/VoltagePlot.py b/schainpy/Graphics/VoltagePlot.py index b7be1bc..a94e6c6 100644 --- a/schainpy/Graphics/VoltagePlot.py +++ b/schainpy/Graphics/VoltagePlot.py @@ -70,13 +70,13 @@ class Osciloscope(): myXlabel = "" myYlabel = "" - for i in range(nChan): + for chan in range(nChan): if titleList != None: - myTitle = titleList[i] - myXlabel = xlabelList[i] - myYlabel = ylabelList[i] + myTitle = titleList[chan] + myXlabel = xlabelList[chan] + myYlabel = ylabelList[chan] - self.__addGraph(i+1, title=myTitle, xlabel=myXlabel, ylabel=myYlabel, XAxisAsTime=XAxisAsTime) + self.__addGraph(chan+1, title=myTitle, xlabel=myXlabel, ylabel=myYlabel, XAxisAsTime=XAxisAsTime) self.nGraphs = nChan self.__isPlotConfig = True @@ -118,11 +118,11 @@ class Osciloscope(): if ymax == None: ymax = numpy.nanmax(abs(data)) plplot.plbop() - for i in range(self.nGraphs): - y = data[:,i] + for chan in range(self.nGraphs): + y = data[chan,:] - self.graphObjList[i].iniSubpage() - self.graphObjList[i].plotComplexData(x, y, xmin, xmax, ymin, ymax, 8, type) + self.graphObjList[chan].iniSubpage() + self.graphObjList[chan].plotComplexData(x, y, xmin, xmax, ymin, ymax, 8, type) plplot.plflush() plplot.pleop() diff --git a/schainpy/IO/VoltageIO.py b/schainpy/IO/VoltageIO.py index 54943d4..afbfe40 100644 --- a/schainpy/IO/VoltageIO.py +++ b/schainpy/IO/VoltageIO.py @@ -177,6 +177,7 @@ class VoltageReader(JRODataReader): print "Data file %s is invalid" % self.filename return 0 + junk = numpy.transpose(junk, (2,0,1)) self.datablock = junk['real'] + junk['imag']*1j self.datablockIndex = 0 @@ -249,7 +250,7 @@ class VoltageReader(JRODataReader): self.m_DataObj.flagNoData = False self.m_DataObj.flagResetProcessing = self.flagResetProcessing - self.m_DataObj.data = self.datablock[self.datablockIndex,:,:] + self.m_DataObj.data = self.datablock[:,self.datablockIndex,:] self.m_DataObj.idProfile = self.idProfile self.datablockIndex += 1 @@ -319,7 +320,10 @@ class VoltageWriter( JRODataWriter ): self.m_ProcessingHeader.numHeights, self.m_SystemHeader.numChannels ) - self.datablock = numpy.zeros(self.shapeBuffer, numpy.dtype('complex')) + self.datablock = numpy.zeros(self.m_SystemHeader.numChannels, + self.m_ProcessingHeader.profilesPerBlock, + self.m_ProcessingHeader.numHeights, + numpy.dtype('complex')) def writeBlock(self): @@ -337,8 +341,10 @@ class VoltageWriter( JRODataWriter ): """ data = numpy.zeros( self.shapeBuffer, self.dataType ) - data['real'] = self.datablock.real - data['imag'] = self.datablock.imag + junk = numpy.transpose(self.datablock, (1,2,0)) + + data['real'] = junk.real + data['imag'] = junk.imag data = data.reshape( (-1) ) @@ -375,7 +381,7 @@ class VoltageWriter( JRODataWriter ): self.datablockIndex = 0 self.setNextFile() - self.datablock[self.datablockIndex,:,:] = self.m_DataObj.data + self.datablock[:,self.datablockIndex,:] = self.m_DataObj.data self.datablockIndex += 1 diff --git a/schainpy/Processing/SpectraProcessor.py b/schainpy/Processing/SpectraProcessor.py index d7af4d9..8dcdbf3 100644 --- a/schainpy/Processing/SpectraProcessor.py +++ b/schainpy/Processing/SpectraProcessor.py @@ -65,35 +65,35 @@ class SpectraProcessor: def getFft(self): if self.buffer == None: - nheis = self.spectraInObj.data.shape[0] - nchannel = self.spectraInObj.data.shape[1] + nheis = self.spectraInObj.data.shape[1] + nchannel = self.spectraInObj.data.shape[0] npoints = self.spectraOutObj.nPoints - self.buffer = numpy.zeros((nchannel,nheis,npoints),dtype='complex') - - data = numpy.transpose(self.spectraInObj.data) - self.buffer[:,:,self.ptsId] = data + self.buffer = numpy.zeros((nchannel,npoints,nheis),dtype='complex') + + self.buffer[:,self.ptsId,:] = self.spectraInObj.data self.ptsId += 1 self.spectraOutObj.flagNoData = True if self.ptsId >= self.spectraOutObj.nPoints: - data_spc = numpy.fft.fft(self.buffer,axis=2) + data_spc = numpy.fft.fft(self.buffer,axis=1) self.ptsId = 0 self.buffer = None #calculo de self-spectra self.spectraOutObj.data_spc = numpy.abs(data_spc * numpy.conjugate(data_spc)) - - #calculo de cross-spectra #self.m_Spectra.data_cspc = self.__data_cspc - #escribiendo dc #self.m_Spectra.data_dc = self.__data_dc - self.spectraOutObj.flagNoData = False - + + self.spectraOutObj.heights = self.spectraInObj.heights + self.spectraOutObj.m_BasicHeader = self.spectraInObj.m_BasicHeader.copy() + self.spectraOutObj.m_ProcessingHeader = self.spectraInObj.m_ProcessingHeader.copy() + self.spectraOutObj.m_RadarControllerHeader = self.spectraInObj.m_RadarControllerHeader.copy() + self.spectraOutObj.m_SystemHeader = self.spectraInObj.m_SystemHeader.copy() def addWriter(self,wrpath): objWriter = SpectraWriter(self.spectraOutObj) @@ -101,9 +101,12 @@ class SpectraProcessor: self.writerList.append(objWriter) - def addPlotter(self): + def addPlotter(self, index=None): + + if index==None: + index = self.plotterIndex - plotObj = Spectrum(self.spectraOutObj,self.plotterIndex) + plotObj = Spectrum(self.spectraOutObj, index) self.plotterList.append(plotObj) @@ -124,12 +127,12 @@ class SpectraProcessor: self.writerIndex += 1 - def plotData(self,xmin=None, xmax=None, ymin=None, ymax=None, winTitle=''): + def plotData(self,xmin=None, xmax=None, ymin=None, ymax=None, winTitle='', index=None): if self.spectraOutObj.flagNoData: return 0 if len(self.plotterList) <= self.plotterIndex: - self.addPlotter() + self.addPlotter(index) self.plotterList[self.plotterIndex].plotData(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,winTitle=winTitle) diff --git a/schainpy/Processing/VoltageProcessor.py b/schainpy/Processing/VoltageProcessor.py index f27562a..ddafb0e 100644 --- a/schainpy/Processing/VoltageProcessor.py +++ b/schainpy/Processing/VoltageProcessor.py @@ -164,7 +164,7 @@ class Decoder: self.setCodeFft = False def exe(self, data, ndata=None, type = 0): - if ndata == None: ndata = data.shape[0] + if ndata == None: ndata = data.shape[1] if type == 0: self.convolutionInFreq(data,ndata) @@ -179,9 +179,9 @@ class Decoder: self.codeIndex += 1 - fft_data = numpy.fft.fft(data, axis=0) + fft_data = numpy.fft.fft(data, axis=1) fft_code = numpy.conj(numpy.fft.fft(newcode)) - fft_code = fft_code.reshape(len(fft_code),1) + fft_code = fft_code.reshape(1,len(fft_code)) conv = fft_data.copy() conv.fill(0) @@ -190,7 +190,7 @@ class Decoder: # for i in range(ndata): # conv[i,:] = fft_data[i,:]*fft_code[i] - self.data = numpy.fft.ifft(conv,axis=0) + self.data = numpy.fft.ifft(conv,axis=1) self.flag = True if self.profCounter == self.nCode: @@ -206,7 +206,7 @@ class Decoder: self.codeIndex += 1 conv = data.copy() for i in range(nchannel): - conv[:,i] = numpy.correlate(data[:,i], newcode, 'same') + conv[i,:] = numpy.correlate(data[i,:], newcode, 'same') self.data = conv self.flag = True diff --git a/schainpy/TestDataSChain.py b/schainpy/TestDataSChain.py index 3fa0112..f35febb 100644 --- a/schainpy/TestDataSChain.py +++ b/schainpy/TestDataSChain.py @@ -28,9 +28,11 @@ class TestSChain(): def setValues(self): - self.path = "/home/valentin/Tmp/RAWDATA" - self.startDateTime = datetime.datetime(2009,11,2,00,00,0) - self.endDateTime = datetime.datetime(2009,11,30,18,10,0) + #self.path = "/home/valentin/Tmp/RAWDATA" + self.path = "/home/dsuarez/Projects" + #self.wrpath = "/home/dsuarez/Projects/testWR" + self.startDateTime = datetime.datetime(2007,5,1,15,49,0) + self.endDateTime = datetime.datetime(2007,5,1,16,0,0) def createObjects(self): diff --git a/schainpy/TestSVoltageChain.py b/schainpy/TestSVoltageChain.py index 1143e49..7483ba0 100644 --- a/schainpy/TestSVoltageChain.py +++ b/schainpy/TestSVoltageChain.py @@ -9,7 +9,13 @@ import time, datetime from Model.Voltage import Voltage from IO.VoltageIO import * -from Graphics.VoltagePlot import Osciloscope +#from Graphics.VoltagePlot import Osciloscope + +from Model.Spectra import Spectra +from IO.SpectraIO import * + +from Processing.VoltageProcessor import * +from Processing.SpectraProcessor import * class TestSChain(): @@ -17,43 +23,80 @@ class TestSChain(): self.setValues() self.createObjects() self.testSChain() - pass + def setValues( self ): - self.path = "/home/valentin/Tmp/VOLTAGE" #1 + self.path = "/home/dsuarez/Projects" #1 #self.path = "/home/valentin/Tmp/VOLTAGE2" #2 - self.startDateTime = datetime.datetime(2011,10,4,00,00,0) - self.endDateTime = datetime.datetime(2011,10,31,23,59,59) +# self.startDateTime = datetime.datetime(2007,5,1,15,49,0) +# self.endDateTime = datetime.datetime(2007,5,1,23,0,0) + + self.startDateTime = datetime.datetime(2011,10,4,0,0,0) + self.endDateTime = datetime.datetime(2011,10,4,0,20,0) + self.N = 2 + self.npts = 4 def createObjects( self ): self.Obj = Voltage() + self.OutObj = Voltage() self.readerObj = VoltageReader(self.Obj) - self.plotObj = Osciloscope(self.Obj) + self.procObj = VoltageProcessor(self.Obj, self.OutObj) + + self.spectraObj = Spectra() + self.specProcObj = SpectraProcessor(self.OutObj, self.spectraObj,self.npts) + + + #self.plotObj = Osciloscope(self.Obj) if not(self.readerObj.setup( self.path, self.startDateTime, self.endDateTime, expLabel='', online =0) ): sys.exit(0) + +# if not(self.readerObj.setup(self.path, self.startDateTime, self.endDateTime)): +# sys.exit(0) def testSChain( self ): ini = time.time() while(True): - if self.readerObj.getData(): - self.plotObj.plotData(idProfile=0, type='power' ) + self.readerObj.getData() - if self.readerObj.flagNoMoreFiles: - break + self.procObj.init() + self.procObj.plotData(idProfile = 1, type='power',winTitle='figura 1') + + self.procObj.decoder(type=0) + +# self.procObj.plotData(idProfile = 1, type='iq', xmin=0, xmax=100,winTitle='figura 2') +# +# self.procObj.integrator(self.N) + + self.procObj.plotData(idProfile = 1, type='power',winTitle='figura 3') + + self.specProcObj.init() + + self.specProcObj.integrator(2) + + self.specProcObj.plotData(winTitle='Spectra 1', index=2) + +# if self.readerObj.getData(): +# self.plotObj.plotData(idProfile=0, type='power' ) +# +# +# if self.readerObj.flagNoMoreFiles: +# break +# if self.readerObj.flagIsNewBlock: print 'Block No %04d, Time: %s' %(self.readerObj.nReadBlocks, datetime.datetime.fromtimestamp(self.readerObj.m_BasicHeader.utc),) + # fin = time.time() # print 'Tiempo de un bloque leido y escrito: [%6.5f]' %(fin - ini) # ini = time.time() #time.sleep(0.5) - self.plotObj.end() +# self.plotObj.end() if __name__ == '__main__': TestSChain() \ No newline at end of file