From 9c86bf89cb54c46d9ee6775fec01381f0ef9dda8 2012-02-06 17:21:54 From: Daniel Valdez Date: 2012-02-06 17:21:54 Subject: [PATCH] Cambios realizados a la Clase VoltageReader: se ordenaron los metodos y atributos. Esta version contiene un bug en la lectura de datos --- diff --git a/schainpy/IO/TestReader.py b/schainpy/IO/TestReader.py index e71911b..828aafc 100644 --- a/schainpy/IO/TestReader.py +++ b/schainpy/IO/TestReader.py @@ -11,8 +11,8 @@ import time objReader = VoltageReader.VoltageReader() path = '/Users/danielangelsuarezmunoz/Documents/Projects' -startDateTime = datetime.datetime(2007,1,1,16,0,0) -endDateTime = datetime.datetime(2007,12,1,17,1,0) +startDateTime = datetime.datetime(2007,5,1,0,0,0) +endDateTime = datetime.datetime(2007,5,1,23,59,0) set = None expLabel = '' ext = '*.r' @@ -25,7 +25,7 @@ print time.time() - t0 while(not(objReader.noMoreFiles)): objReader.getData() - #print objReader.objStructShortHeader.dataBlock + print objReader.objBasicHeader.dataBlock #print time.localtime(objReader.objStructShortHeader.universalTime) \ No newline at end of file diff --git a/schainpy/IO/VoltageReader.py b/schainpy/IO/VoltageReader.py index 78621cf..d6d9eb2 100644 --- a/schainpy/IO/VoltageReader.py +++ b/schainpy/IO/VoltageReader.py @@ -50,7 +50,7 @@ class PROCFLAG: DATAARRANGE_MASK = numpy.uint32(0x00007000) ACQ_SYS_MASK = numpy.uint32(0x001C0000) -class StructShortHeader(): +class BasicHeader(): size = 0 version = 0 @@ -88,7 +88,7 @@ class StructShortHeader(): return 1 -class StructSystemHeader(): +class SystemHeader(): size = 0 numSamples = 0 numProfiles = 0 @@ -108,11 +108,18 @@ class StructSystemHeader(): pass def read(self, fp): + header = numpy.fromfile(fp,self.struct,1) + self.size = header['nSize'][0] + self.numSamples = header['nNumSamples'][0] + self.numProfiles = header['nNumProfiles'][0] + self.numChannels = header['nNumChannels'][0] + self.adcResolution = header['nADCResolution'][0] + self.pciDioBusWidth = header['nPCDIOBusWidth'][0] return 1 -class StructRadarController(): +class RadarControllerHeader(): size = 0 expType = 0 nTx = 0 @@ -155,10 +162,31 @@ class StructRadarController(): pass def read(self, fp): + header = numpy.fromfile(fp,self.struct,1) + self.size = header['nSize'][0] + self.expType = header['nExpType'][0] + self.nTx = header['nNTx'][0] + self.ipp = header['fIpp'][0] + self.txA = header['fTxA'][0] + self.txB = header['fTxB'][0] + self.numWindows = header['nNumWindows'][0] + self.numTaus = header['nNumTaus'][0] + self.codeType = header['nCodeType'][0] + self.line6Function = header['nLine6Function'][0] + self.line5Fuction = header['nLine5Function'][0] + self.fClock = header['fClock'][0] + self.prePulseBefore = header['nPrePulseBefore'][0] + self.prePulserAfter = header['nPrePulseAfter'][0] + self.rangeIpp = header['sRangeIPP'][0] + self.rangeTxA = header['sRangeTxA'][0] + self.rangeTxB = header['sRangeTxB'][0] + # jump Dynamic Radar Controller Header + jumpHeader = self.size - 116 + fp.seek(fp.tell() + jumpHeader) return 1 -class StructProcessing(): +class ProcessingHeader(): size = 0 dataType = 0 blockSize = 0 @@ -196,6 +224,28 @@ class StructProcessing(): pass def read(self, fp): + header = numpy.fromfile(fp,self.struct,1) + self.size = header['nSize'][0] + self.dataType = header['nDataType'][0] + self.blockSize = header['nSizeOfDataBlock'][0] + self.profilesPerBlock = header['nProfilesperBlock'][0] + self.dataBlocksPerFile = header['nDataBlocksperFile'][0] + self.numWindows = header['nNumWindows'][0] + self.processFlags = header['nProcessFlags'] + self.coherentInt = header['nCoherentIntegrations'][0] + self.incoherentInt = header['nIncoherentIntegrations'][0] + self.totalSpectra = header['nTotalSpectra'][0] + self.samplingWindow = numpy.fromfile(fp,self.structSamplingWindow,self.numWindows) + self.numHeights = numpy.sum(self.samplingWindow['nsa']) + self.firstHeight = self.samplingWindow['h0'] + self.deltaHeight = self.samplingWindow['dh'] + self.samplesWin = self.samplingWindow['nsa'] + self.spectraComb = numpy.fromfile(fp,'u1',2*self.totalSpectra) + if self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE == PROCFLAG.DEFINE_PROCESS_CODE: + self.numCode = numpy.fromfile(fp,'= objShortHeader.utc)): + fp.close() + + if not ((startUTSeconds <= objBasicHeader.utc) and (endUTSeconds >= objBasicHeader.utc)): return 0 return 1 @@ -405,18 +417,17 @@ class VoltageReader(DataReader): if fp == None: fp = self.__fp - self.objStructShortHeader.read(fp) + self.objBasicHeader.read(fp) - def __readFirstHeader(self): self.__readBasicHeader() self.__rdSystemHeader() self.__rdRadarControllerHeader() self.__rdProcessingHeader() - self.firstHeaderSize = self.objStructShortHeader.size + self.firstHeaderSize = self.objBasicHeader.size - data_type=int(numpy.log2((self.objStructProcessing.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR)) + data_type=int(numpy.log2((self.objProcessingHeader.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR)) if data_type == 0: tmp=numpy.dtype([('real','= neededSize): @@ -495,7 +504,7 @@ class VoltageReader(DataReader): self.__setNextFile() self.__readFirstHeader() - deltaTime = self.objStructShortHeader.utc - self.__lastUTTime # check this + deltaTime = self.objBasicHeader.utc - self.__lastUTTime # check this if deltaTime > self.__maxTimeStep: self.__flagResetProcessing = 1 @@ -508,11 +517,11 @@ class VoltageReader(DataReader): seteado a 0 """ - pts2read = self.objStructProcessing.profilesPerBlock*self.objStructProcessing.numHeights*self.objStructSystemHeader.numChannels + pts2read = self.objProcessingHeader.profilesPerBlock*self.objProcessingHeader.numHeights*self.objSystemHeader.numChannels data = numpy.fromfile(self.__fp,self.__dataType,pts2read) - data = data.reshape((self.objStructProcessing.profilesPerBlock, self.objStructProcessing.numHeights, self.objStructSystemHeader.numChannels)) + data = data.reshape((self.objProcessingHeader.profilesPerBlock, self.objProcessingHeader.numHeights, self.objSystemHeader.numChannels)) self.__buffer = data @@ -524,10 +533,10 @@ class VoltageReader(DataReader): self.__readBlock() - self.__lastUTTime = self.objStructShortHeader.utc + self.__lastUTTime = self.objBasicHeader.utc def __hasNotDataInBuffer(self): - if self.__buffer_id >= self.objStructProcessing.profilesPerBlock: + if self.__buffer_id >= self.objProcessingHeader.profilesPerBlock: return 1 return 0 @@ -587,6 +596,6 @@ class VoltageReader(DataReader): self.endDoy = endDateTime.timetuple().tm_yday #call fillHeaderValues() - to Data Object - self.__listOfPath = pathList + self.__pathList = pathList self.filenameList = filenameList self.online = online