From 5a0951cb35e42a2fff4abdef33d13ebe07b11aae 2012-09-20 19:48:55 From: Daniel Valdez Date: 2012-09-20 19:48:55 Subject: [PATCH] Version con Lectura de Pdata y RawData operando correctamente,tambien la Escritura de Rawdata. Aun se estan realizando cambios en la Escritura de Pdata --- diff --git a/schainpy2/Data/JROData.py b/schainpy2/Data/JROData.py index f0e513d..4b52876 100644 --- a/schainpy2/Data/JROData.py +++ b/schainpy2/Data/JROData.py @@ -45,6 +45,13 @@ class JROData: nBaud = None code = None + + flagDecodeData = True #asumo q la data esta decodificada + + flagDeflipData = True #asumo q la data esta sin flip + + flagShiftFFT = False + def __init__(self): diff --git a/schainpy2/IO/JRODataIO.py b/schainpy2/IO/JRODataIO.py index 210cd9f..47a639f 100644 --- a/schainpy2/IO/JRODataIO.py +++ b/schainpy2/IO/JRODataIO.py @@ -488,6 +488,8 @@ class JRODataWriter(JRODataIO): blocksPerFile = None + nWriteBlocks = 0 + def __init__(self, dataOutObj=None): raise ValueError, "Not implemented" @@ -521,8 +523,8 @@ class JRODataWriter(JRODataIO): # CALCULAR PARAMETROS - sizeLongHeader = 0#XXXX - self.basicHeaderObj.size = 24 + sizeLongHeader + sizeLongHeader = self.systemHeaderObj.size + self.radarControllerHeaderObj.size + self.processingHeaderObj.size + self.basicHeaderObj.size = self.basicHeaderSize + sizeLongHeader self.__writeBasicHeader() self.__wrSystemHeader() @@ -541,7 +543,7 @@ class JRODataWriter(JRODataIO): if fp == None: fp = self.fp - self.dataOutObj.basicHeaderObj.write(fp) + self.basicHeaderObj.write(fp) def __wrSystemHeader(self, fp=None): @@ -554,7 +556,7 @@ class JRODataWriter(JRODataIO): if fp == None: fp = self.fp - self.dataOutObj.systemHeaderObj.write(fp) + self.systemHeaderObj.write(fp) def __wrRadarControllerHeader(self, fp=None): @@ -567,7 +569,7 @@ class JRODataWriter(JRODataIO): if fp == None: fp = self.fp - self.dataOutObj.radarControllerHeaderObj.write(fp) + self.radarControllerHeaderObj.write(fp) def __wrProcessingHeader(self, fp=None): @@ -580,7 +582,7 @@ class JRODataWriter(JRODataIO): if fp == None: fp = self.fp - self.dataOutObj.processingHeaderObj.write(fp) + self.processingHeaderObj.write(fp) def setNextFile(self): @@ -648,6 +650,8 @@ class JRODataWriter(JRODataIO): self.setFile = setFile self.flagIsNewFile = 1 + self.getDataHeader() + print 'Writing the file: %s'%self.filename self.__writeFirstHeader() @@ -732,18 +736,12 @@ class JRODataWriter(JRODataIO): self.blocksPerFile = blocksPerFile + if not(self.setNextFile()): + print "There isn't a next file" + return 0 - - - - self.getDataHeader() - self.setBlockDimension() - if not( self.setNextFile() ): - print "There isn't a next file" - return 0 - return 1 diff --git a/schainpy2/IO/JROHeader.py b/schainpy2/IO/JROHeader.py index cf3645b..8dc735e 100644 --- a/schainpy2/IO/JROHeader.py +++ b/schainpy2/IO/JROHeader.py @@ -341,9 +341,9 @@ class ProcessingHeader(Header): self.deltaHeight = 0 self.samplesWin = 0 self.spectraComb = 0 - self.nCode = 0 - self.code = 0 - self.nBaud = 0 + self.nCode = None + self.code = None + self.nBaud = None self.shif_fft = False self.flag_dc = False self.flag_cspc = False diff --git a/schainpy2/IO/SpectraIO.py b/schainpy2/IO/SpectraIO.py index 3fe513f..2f54c04 100644 --- a/schainpy2/IO/SpectraIO.py +++ b/schainpy2/IO/SpectraIO.py @@ -203,12 +203,12 @@ class SpectraReader(JRODataReader): self.nRdPairs = 0 self.rdPairList = [] - for i in range( 0, self.processingHeaderObj.totalSpectra*2, 2 ): + for i in range(0, self.processingHeaderObj.totalSpectra*2, 2): if self.processingHeaderObj.spectraComb[i] == self.processingHeaderObj.spectraComb[i+1]: - self.nRdChannels = self.nRdChannels + 1 #par de canales iguales + self.nRdChannels = self.nRdChannels + 1 #par de canales iguales else: self.nRdPairs = self.nRdPairs + 1 #par de canales diferentes - self.rdPairList.append( (self.processingHeaderObj.spectraComb[i], self.processingHeaderObj.spectraComb[i+1]) ) + self.rdPairList.append((self.processingHeaderObj.spectraComb[i], self.processingHeaderObj.spectraComb[i+1])) pts2read = self.processingHeaderObj.nHeights * self.processingHeaderObj.profilesPerBlock @@ -369,6 +369,8 @@ class SpectraReader(JRODataReader): self.dataOutObj.dataUtcTime = self.basicHeaderObj.utc #+ self.profileIndex * self.ippSeconds + self.dataOutObj.flagShiftFFT = self.processingHeaderObj.shif_fft + # self.profileIndex += 1 self.dataOutObj.systemHeaderObj = self.systemHeaderObj.copy() @@ -385,11 +387,29 @@ class SpectraWriter(JRODataWriter): de los datos siempre se realiza por bloques. """ + ext = ".pdata" + + optchar = "P" shape_spc_Buffer = None + shape_cspc_Buffer = None + shape_dc_Buffer = None - dataOutObj = None + + data_spc = None + + data_cspc = None + + data_dc = None + + wrPairList = [] + + nWrPairs = 0 + + nWrChannels = 0 + +# dataOutObj = None def __init__(self, dataOutObj=None): """ @@ -411,50 +431,55 @@ class SpectraWriter(JRODataWriter): raise ValueError, "in SpectraReader, dataOutObj must be an Spectra class object" self.dataOutObj = dataOutObj - - self.ext = ".pdata" - - self.optchar = "P" - - self.shape_spc_Buffer = None - self.shape_cspc_Buffer = None - self.shape_dc_Buffer = None - - self.data_spc = None - self.data_cspc = None - self.data_dc = None - - #################################### - - self.fp = None - self.nWriteBlocks = 0 + self.nTotalBlocks = 0 - self.flagIsNewFile = 1 + self.nWrChannels = self.dataOutObj.nChannels - self.nTotalBlocks = 0 +# if len(pairList) > 0: +# self.wrPairList = pairList +# +# self.nWrPairs = len(pairList) - self.flagIsNewBlock = 0 + self.wrPairList = self.dataOutObj.pairList - self.flagNoMoreFiles = 0 - - self.setFile = None + self.nWrPairs = self.dataOutObj.nPairs - self.dtype = None - self.path = None - self.noMoreFiles = 0 - self.filename = None - - self.basicHeaderObj = BasicHeader() - - self.systemHeaderObj = SystemHeader() - - self.radarControllerHeaderObj = RadarControllerHeader() - - self.processingHeaderObj = ProcessingHeader() + +# self.data_spc = None +# self.data_cspc = None +# self.data_dc = None + +# self.fp = None + +# self.flagIsNewFile = 1 +# +# self.nTotalBlocks = 0 +# +# self.flagIsNewBlock = 0 +# +# self.flagNoMoreFiles = 0 +# +# self.setFile = None +# +# self.dtype = None +# +# self.path = None +# +# self.noMoreFiles = 0 +# +# self.filename = None +# +# self.basicHeaderObj = BasicHeader() +# +# self.systemHeaderObj = SystemHeader() +# +# self.radarControllerHeaderObj = RadarControllerHeader() +# +# self.processingHeaderObj = ProcessingHeader() def hasAllDataInBuffer(self): @@ -571,4 +596,153 @@ class SpectraWriter(JRODataWriter): #print 'Process finished' return 0 - return 1 \ No newline at end of file + return 1 + + + def __getProcessFlags(self): + + processFlags = 0 + + dtype0 = numpy.dtype([('real',' 1: + processFlags += PROCFLAG.INCOHERENT_INTEGRATION + + if self.dataOutObj.data_dc != None: + processFlags += PROCFLAG.SAVE_CHANNELS_DC + + return processFlags + + + def __getBlockSize(self): + ''' + Este metodos determina el cantidad de bytes para un bloque de datos de tipo Spectra + ''' + + dtype0 = numpy.dtype([('real','= self.processingHeaderObj.profilesPerBlock: @@ -423,14 +435,17 @@ class VoltageWriter(JRODataWriter): self.profileIndex = 0 self.setNextFile() + if self.profileIndex == 0: + self.getBasicHeader() + self.datablock[:,self.profileIndex,:] = self.dataOutObj.data self.profileIndex += 1 if self.hasAllDataInBuffer(): #if self.flagIsNewFile: - self.getDataHeader() self.writeNextBlock() +# self.getDataHeader() if self.flagNoMoreFiles: #print 'Process finished' @@ -438,7 +453,7 @@ class VoltageWriter(JRODataWriter): return 1 - def __getProcessFlag(self): + def __getProcessFlags(self): processFlags = 0 @@ -462,7 +477,7 @@ class VoltageWriter(JRODataWriter): for index in range(len(dtypeList)): - if dtypeList == self.dataOutObj.dtype: + if self.dataOutObj.dtype == dtypeList[index]: dtypeValue = datatypeValueList[index] break @@ -474,12 +489,19 @@ class VoltageWriter(JRODataWriter): if self.dataOutObj.flagDeflipData: processFlags += PROCFLAG.DEFLIP_DATA + if self.dataOutObj.code != None: + processFlags += PROCFLAG.DEFINE_PROCESS_CODE + if self.dataOutObj.nCohInt > 1: processFlags += PROCFLAG.COHERENT_INTEGRATION + + return processFlags def __getBlockSize(self): - + ''' + Este metodos determina el cantidad de bytes para un bloque de datos de tipo Voltage + ''' dtype0 = numpy.dtype([('real',' change this line + + if ((timeInterval==None) and (N==None)): + print 'N = None ; timeInterval = None' + sys.exit(0) + elif timeInterval == None: + self.timeFlag = False + else: + self.timeFlag = True + + + def exe(self,data,timeOfData): + """ + data + + timeOfData [seconds] + """ + + if self.timeFlag: + if self.timeOut == None: + self.timeOut = timeOfData + self.timeIntervalInSeconds + + if timeOfData < self.timeOut: + if self.buffer == None: + self.buffer = data + else: + self.buffer = self.buffer + data + self.integ_counter += 1 + else: + self.exitCondition = True + + else: + if self.integ_counter < self.nIncohInt: + if self.buffer == None: + self.buffer = data + else: + self.buffer = self.buffer + data + + self.integ_counter += 1 + + if self.integ_counter == self.nIncohInt: + self.exitCondition = True + + if self.exitCondition: + self.data = self.buffer + self.navg = self.integ_counter + self.isReady = True + self.buffer = None + self.timeOut = None + self.integ_counter = 0 + self.exitCondition = False + + if self.timeFlag: + self.buffer = data + self.timeOut = timeOfData + self.timeIntervalInSeconds + else: + self.isReady = False + \ No newline at end of file diff --git a/schainpy2/testSchainExp.py b/schainpy2/testSchainExp.py index cc46307..6dff19e 100644 --- a/schainpy2/testSchainExp.py +++ b/schainpy2/testSchainExp.py @@ -21,16 +21,24 @@ class TestSChain(): def setValues(self): self.path = "/Users/danielangelsuarezmunoz/Data/EW_Drifts" + self.startDate = datetime.date(2011,11,28) + self.endDate = datetime.date(2011,11,30) +# self.path = "/Users/danielangelsuarezmunoz/Data/Imaging_rawdata" +# self.startDate = datetime.date(2011,10,4) +# self.endDate = datetime.date(2011,10,4) + + # Probando los escritos por Signal Chain + self.path = "/Users/danielangelsuarezmunoz/Data/testWR" self.startDate = datetime.date(2011,11,28) self.endDate = datetime.date(2011,11,30) self.startTime = datetime.time(0,0,0) self.endTime = datetime.time(23,59,59) - self.wrpath = "/Users/jro/Documents/RadarData/wr_data" + self.wrpath = "/Users/danielangelsuarezmunoz/Data/testWR" self.profilesPerBlock = 40 - self.blocksPerFile = 50 + self.blocksPerFile = 50 def createObjects(self): @@ -56,16 +64,17 @@ class TestSChain(): while(True): self.readerObj.getData() - self.voltObjProc.init() - - self.voltObjProc.writeData(self.wrpath,self.profilesPerBlock,self.blocksPerFile) +# self.voltObjProc.init() +# +# self.voltObjProc.writeData(self.wrpath,self.profilesPerBlock,self.blocksPerFile) if self.readerObj.flagNoMoreFiles: break if self.readerObj.flagIsNewBlock: - print 'Block No %04d, Time: %s' %(self.readerObj.nTotalBlocks, - datetime.datetime.fromtimestamp(self.readerObj.basicHeaderObj.utc),) +# print 'Block No %04d, Time: %s' %(self.readerObj.nTotalBlocks, datetime.datetime.fromtimestamp(self.readerObj.basicHeaderObj.utc),) + print 'Block No %04d, Time: %s' %(self.readerObj.nTotalBlocks, + datetime.datetime.utcfromtimestamp(self.readerObj.basicHeaderObj.utc + self.readerObj.basicHeaderObj.miliSecond/1000.0),) if __name__ == '__main__': diff --git a/schainpy2/testSchainSpecExp.py b/schainpy2/testSchainSpecExp.py index c71eb25..530ac56 100644 --- a/schainpy2/testSchainSpecExp.py +++ b/schainpy2/testSchainSpecExp.py @@ -5,11 +5,10 @@ import time, datetime path = os.path.split(os.getcwd())[0] sys.path.append(path) -from Data.Voltage import Voltage + from Data.Spectra import Spectra -from IO.VoltageIO import * from IO.SpectraIO import * -from Processing.VoltageProcessor import * +from Processing.SpectraProcessor import * @@ -26,19 +25,24 @@ class TestSChain: self.path = "/Users/danielangelsuarezmunoz/Data/EW_Drifts" self.path = "/Users/danielangelsuarezmunoz/Data/IMAGING" - self.wrpath = "/Users/jro/Documents/RadarData/wr_data" - self.startDate = datetime.date(2012,3,1) self.endDate = datetime.date(2012,3,30) self.startTime = datetime.time(0,0,0) self.endTime = datetime.time(14,1,1) + + # paramatros para Escritura de Pdata + self.wrpath = "/Users/danielangelsuarezmunoz/Data/testWR_pdata" + self.profilesPerBlock = 16 + self.blocksPerFile = 5 +# self.pairList = [(0,1),(0,2)] + def createObjects(self): self.readerObj = SpectraReader() - self.voltObj1 = self.readerObj.setup( + self.specObj1 = self.readerObj.setup( path = self.path, startDate = self.startDate, endDate = self.endDate, @@ -46,6 +50,10 @@ class TestSChain: endTime = self.endTime, expLabel = '', online = 0) + # new lines + self.specObjProc = SpectraProcessor() + + self.specObj2 = self.specObjProc.setup(dataInObj = self.specObj1) @@ -55,13 +63,17 @@ class TestSChain: while(True): self.readerObj.getData() + + self.specObjProc.init() + + self.specObjProc.writeData(self.wrpath,self.profilesPerBlock,self.blocksPerFile) if self.readerObj.flagNoMoreFiles: break if self.readerObj.flagIsNewBlock: print 'Block No %04d, Time: %s' %(self.readerObj.nTotalBlocks, - datetime.datetime.fromtimestamp(self.readerObj.basicHeaderObj.utc),) + datetime.datetime.fromtimestamp(self.readerObj.basicHeaderObj.utc)) if __name__ == '__main__':