diff --git a/schainpy/model/data/jroheaderIO.py b/schainpy/model/data/jroheaderIO.py index f6d5d0b..68b7c46 100644 --- a/schainpy/model/data/jroheaderIO.py +++ b/schainpy/model/data/jroheaderIO.py @@ -7,6 +7,9 @@ import numpy import copy import datetime +SPEED_OF_LIGHT = 299792458 +SPEED_OF_LIGHT = 3e8 + BASIC_STRUCTURE = numpy.dtype([ ('nSize',' 0: fp.seek(jumpFp) @@ -337,6 +342,7 @@ class RadarControllerHeader(Header): return 1 def write(self, fp): + headerTuple = (self.size, self.expType, self.nTx, @@ -358,9 +364,6 @@ class RadarControllerHeader(Header): header = numpy.array(headerTuple,RADAR_STRUCTURE) header.tofile(fp) - #dynamic = self.dynamic - #dynamic.tofile(fp) - sampleWindowTuple = (self.firstHeight,self.deltaHeight,self.samplesWin) samplingWindow = numpy.array(sampleWindowTuple,SAMPLING_STRUCTURE) samplingWindow.tofile(fp) @@ -390,18 +393,18 @@ class RadarControllerHeader(Header): tempx = tempx.astype('u4') tempx.tofile(fp) - if self.line5Function == RCfunction.FLIP: - self.flip1.tofile(fp) - - if self.line6Function == RCfunction.FLIP: - self.flip2.tofile(fp) +# if self.line5Function == RCfunction.FLIP: +# self.flip1.tofile(fp) +# +# if self.line6Function == RCfunction.FLIP: +# self.flip2.tofile(fp) return 1 def get_ippSeconds(self): ''' ''' - ippSeconds = 2.0 * 1000 * self.ipp / self.__C + ippSeconds = 2.0 * 1000 * self.ipp / SPEED_OF_LIGHT return ippSeconds @@ -409,11 +412,27 @@ class RadarControllerHeader(Header): ''' ''' - self.ipp = ippSeconds * self.__C / (2.0*1000) + self.ipp = ippSeconds * SPEED_OF_LIGHT / (2.0*1000) + + return + + def get_size(self): + + self.__size = 116 + 12*self.nWindows + 4*self.numTaus + + if self.codeType != 0: + self.__size += 4 + 4 + 4*self.nCode*numpy.ceil(self.nBaud/32.) + + return self.__size + + def set_size(self, value): + + self.__size = value return ippSeconds = property(get_ippSeconds, set_ippSeconds) + size = property(get_size, set_size) class ProcessingHeader(Header): @@ -581,6 +600,7 @@ class nCodeType: CODE_BINARY28=17 class PROCFLAG: + COHERENT_INTEGRATION = numpy.uint32(0x00000001) DECODE_DATA = numpy.uint32(0x00000002) SPECTRA_CALC = numpy.uint32(0x00000004) @@ -615,4 +635,45 @@ class PROCFLAG: OPERATION_MASK = numpy.uint32(0x0000003F) DATATYPE_MASK = numpy.uint32(0x00000FC0) DATAARRANGE_MASK = numpy.uint32(0x00007000) - ACQ_SYS_MASK = numpy.uint32(0x001C0000) \ No newline at end of file + ACQ_SYS_MASK = numpy.uint32(0x001C0000) + +dtype0 = numpy.dtype([('real',' %s" %(self.basicHeaderObj.dataBlock+1, + self.processingHeaderObj.dataBlocksPerFile, + self.dataOut.datatime.ctime()) return 1 def __readFirstHeader(self): @@ -1128,7 +1140,8 @@ class JRODataReader(JRODataIO): sys.exit(-1) -# self.updateDataHeader() + self.getBasicHeader() + if last_set != None: self.dataOut.last_block = last_set * self.processingHeaderObj.dataBlocksPerFile + self.basicHeaderObj.dataBlock return @@ -1183,7 +1196,10 @@ class JRODataReader(JRODataIO): def printNumberOfBlock(self): if self.flagIsNewBlock: - print "[Reading] Block No. %04d, Total blocks %04d -> %s" %(self.basicHeaderObj.dataBlock, self.nTotalBlocks, self.dataOut.datatime.ctime()) + print "[Reading] Block No. %d/%d -> %s" %(self.basicHeaderObj.dataBlock+1, + self.processingHeaderObj.dataBlocksPerFile, + self.dataOut.datatime.ctime()) + self.dataOut.blocknow = self.basicHeaderObj.dataBlock def printInfo(self): @@ -1248,6 +1264,36 @@ class JRODataWriter(JRODataIO): raise ValueError, "No implemented" + def getProcessFlags(self): + + processFlags = 0 + + dtype_index = get_dtype_index(self.dtype) + procflag_dtype = get_procflag_dtype(dtype_index) + + processFlags += procflag_dtype + + if self.dataOut.flagDecodeData: + processFlags += PROCFLAG.DECODE_DATA + + if self.dataOut.flagDeflipData: + processFlags += PROCFLAG.DEFLIP_DATA + + if self.dataOut.code is not None: + processFlags += PROCFLAG.DEFINE_PROCESS_CODE + + if self.dataOut.nCohInt > 1: + processFlags += PROCFLAG.COHERENT_INTEGRATION + + if self.dataOut.type == "Spectra": + if self.dataOut.nIncohInt > 1: + processFlags += PROCFLAG.INCOHERENT_INTEGRATION + + if self.dataOut.data_dc is not None: + processFlags += PROCFLAG.SAVE_CHANNELS_DC + + return processFlags + def setBasicHeader(self): self.basicHeaderObj.size = self.basicHeaderSize #bytes @@ -1301,7 +1347,7 @@ class JRODataWriter(JRODataIO): self.radarControllerHeaderObj.write(self.fp) self.processingHeaderObj.write(self.fp) - self.dtype = self.dataOut.dtype + def __setNewBlock(self): """ @@ -1339,7 +1385,9 @@ class JRODataWriter(JRODataIO): return 0 self.writeBlock() - + + print "[Writing] Block No. %d/%d" %(self.blockIndex, self.processingHeaderObj.dataBlocksPerFile) + return 1 def setNextFile(self): @@ -1409,20 +1457,27 @@ class JRODataWriter(JRODataIO): self.setFirstHeader() - print '[Writing] file: %s'%self.filename + print '[Writing] Opening file: %s'%self.filename self.__writeFirstHeader() return 1 - def setup(self, dataOut, path, blocksPerFile, profilesPerBlock=64, set=0, ext=None): + def setup(self, dataOut, path, blocksPerFile, profilesPerBlock=64, set=0, ext=None, datatype=2): """ Setea el tipo de formato en la cual sera guardada la data y escribe el First Header Inputs: - path : el path destino en el cual se escribiran los files a crear - format : formato en el cual sera salvado un file - set : el setebo del file + path : directory where data will be saved + profilesPerBlock : number of profiles per block + set : file set + datatype : An integer number that defines data type: + 0 : int8 (1 byte) + 1 : int16 (2 bytes) + 2 : int32 (4 bytes) + 3 : int64 (8 bytes) + 4 : float (4 bytes) + 5 : double (8 bytes) Return: 0 : Si no realizo un buen seteo @@ -1446,6 +1501,12 @@ class JRODataWriter(JRODataIO): self.dataOut = dataOut + #By default + self.dtype = self.dataOut.dtype + + if datatype is not None: + self.dtype = get_numpy_dtype(datatype) + if not(self.setNextFile()): print "[Writing] There isn't a next file" return 0 diff --git a/schainpy/model/io/jroIO_spectra.py b/schainpy/model/io/jroIO_spectra.py index 084108f..fb858a0 100644 --- a/schainpy/model/io/jroIO_spectra.py +++ b/schainpy/model/io/jroIO_spectra.py @@ -273,7 +273,8 @@ class SpectraReader(JRODataReader, ProcessingUnit): cspc = numpy.roll( cspc, shift, axis=2 ) # self.processingHeaderObj.shif_fft = True - + + #Dimensions : nChannels, nProfiles, nSamples spc = numpy.transpose( spc, (0,2,1) ) self.data_spc = spc @@ -298,6 +299,8 @@ class SpectraReader(JRODataReader, ProcessingUnit): def getFirstHeader(self): + self.getBasicHeader() + self.dataOut.systemHeaderObj = self.systemHeaderObj.copy() self.dataOut.radarControllerHeaderObj = self.radarControllerHeaderObj.copy() @@ -599,89 +602,27 @@ class SpectraWriter(JRODataWriter, Operation): return 1 - - def __getProcessFlags(self): - - processFlags = 0 - - dtype0 = numpy.dtype([('real',' 1: - processFlags += PROCFLAG.INCOHERENT_INTEGRATION - - if self.dataOut.data_dc is not 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',' 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','