From ea5ace19bd59dbf81ff03405827bdf1dd26ed320 2017-07-14 15:42:00 From: Jose Chavez Date: 2017-07-14 15:42:00 Subject: [PATCH] agregado metodos a header class --- diff --git a/schainpy/model/data/jroheaderIO.py b/schainpy/model/data/jroheaderIO.py index a869f36..cb8b7a5 100644 --- a/schainpy/model/data/jroheaderIO.py +++ b/schainpy/model/data/jroheaderIO.py @@ -7,6 +7,7 @@ import sys import numpy import copy import datetime +import inspect SPEED_OF_LIGHT = 299792458 SPEED_OF_LIGHT = 3e8 @@ -82,6 +83,9 @@ class Header(object): def write(self): raise NotImplementedError + + def getAllowedArgs(self): + return inspect.getargspec(self.__init__).args def printInfo(self): @@ -115,6 +119,7 @@ class BasicHeader(Header): dstFlag = None errorCount = None datatime = None + structure = BASIC_STRUCTURE __LOCALTIME = None def __init__(self, useLocalTime=True): @@ -189,7 +194,8 @@ class SystemHeader(Header): nChannels = None adcResolution = None pciDioBusWidth = None - + structure = SYSTEM_STRUCTURE + def __init__(self, nSamples=0, nProfiles=0, nChannels=0, adcResolution=14, pciDioBusWith=0): self.size = 24 @@ -198,7 +204,7 @@ class SystemHeader(Header): self.nChannels = nChannels self.adcResolution = adcResolution self.pciDioBusWidth = pciDioBusWith - + def read(self, fp): self.length = 0 try: @@ -264,7 +270,7 @@ class RadarControllerHeader(Header): rangeIpp = None rangeTxA = None rangeTxB = None - + structure = RADAR_STRUCTURE __size = None def __init__(self, expType=2, nTx=1, @@ -540,15 +546,18 @@ class ProcessingHeader(Header): nCohInt = None nIncohInt = None totalSpectra = None - + structure = PROCESSING_STRUCTURE flag_dc = None flag_cspc = None - def __init__(self): + def __init__(self, dtype=0, blockSize=0, profilesPerBlock=0, dataBlocksPerFile=0, nWindows=0,processFlags=0, nCohInt=0, + nIncohInt=0, totalSpectra=0, nHeights=0, firstHeight=0, deltaHeight=0, samplesWin=0, spectraComb=0, nCode=0, + code=0, nBaud=None, shif_fft=False, flag_dc=False, flag_cspc=False, flag_decode=False, flag_deflip=False + ): # self.size = 0 - self.dtype = 0 - self.blockSize = 0 + self.dtype = dtype + self.blockSize = blockSize self.profilesPerBlock = 0 self.dataBlocksPerFile = 0 self.nWindows = 0 @@ -572,6 +581,7 @@ class ProcessingHeader(Header): self.flag_decode = False self.flag_deflip = False self.length = 0 + def read(self, fp): self.length = 0 try: diff --git a/schainpy/model/io/jroIO_digitalRF.py b/schainpy/model/io/jroIO_digitalRF.py index e6e4172..1bda8ac 100644 --- a/schainpy/model/io/jroIO_digitalRF.py +++ b/schainpy/model/io/jroIO_digitalRF.py @@ -7,6 +7,7 @@ Created on Jul 3, 2014 import os import datetime import numpy +from profilehooks import coverage from fractions import Fraction try: @@ -251,7 +252,6 @@ class DigitalRFReader(ProcessingUnit): self.__firstHeigth = 0 - try: codeType = self.fixed_metadata_dict['codeType'] except: @@ -386,7 +386,7 @@ class DigitalRFReader(ProcessingUnit): return False - def __readNextBlock(self, seconds=30, volt_scale = 218776): + def __readNextBlock(self, seconds=30, volt_scale = 1): ''' ''' @@ -550,32 +550,37 @@ class DigitalRFWriter(Operation): Operation.__init__(self, **kwargs) self.dataOut = None - def setup(self, dataIn, path, set=0, ext='.h5'): + def setup(self, dataOut, path, set=0, metadataFile='metadata', ext='.h5'): ''' In this method we should set all initial parameters. Input: - dataIn : Input data will also be outputa data + dataOut : Input data will also be outputa data ''' - self.__ippSeconds = dataIn.ippSeconds - self.__deltaH = dataIn.getDeltaH() + self.__ippSeconds = dataOut.ippSeconds + self.__deltaH = dataOut.getDeltaH() self.__sample_rate = 1e6*0.15/self.__deltaH - self.__dtype = dataIn.dtype - if len(dataIn.dtype) == 2: - self.__dtype = dataIn.dtype[0] - self.__nSamples = dataIn.systemHeaderObj.nSamples - self.__nProfiles = dataIn.nProfiles - self.__blocks_per_file = dataIn.processingHeaderObj.dataBlocksPerFile - - file_cadence_millisecs = 1.0 * self.__blocks_per_file * self.__nProfiles * self.__nSamples / self.__sample_rate * 1000 - sub_cadence_secs = 10 * file_cadence_millisecs + self.__dtype = dataOut.dtype + if len(dataOut.dtype) == 2: + self.__dtype = dataOut.dtype[0] + self.__nSamples = dataOut.systemHeaderObj.nSamples + self.__nProfiles = dataOut.nProfiles + self.__blocks_per_file = dataOut.processingHeaderObj.dataBlocksPerFile + self.arr_data = arr_data = numpy.ones((self.__nSamples, 1), dtype=[('r', self.__dtype), ('i', self.__dtype)]) + + file_cadence_millisecs = long(1.0 * self.__blocks_per_file * self.__nProfiles * self.__nSamples / self.__sample_rate * 1000) + sub_cadence_secs = file_cadence_millisecs + + #print file_cadence_millisecs + #print sub_cadence_secs + sample_rate_fraction = Fraction(self.__sample_rate).limit_denominator() sample_rate_numerator = long(sample_rate_fraction.numerator) sample_rate_denominator = long(sample_rate_fraction.denominator) - start_global_index = dataIn.utctime * self.__sample_rate - self.arr_data = arr_data = numpy.ones((self.__nSamples, 1), dtype=[('r', self.__dtype), ('i', self.__dtype)]) + start_global_index = dataOut.utctime * self.__sample_rate + uuid = 'prueba' compression_level = 1 checksum = False @@ -584,42 +589,59 @@ class DigitalRFWriter(Operation): is_continuous = True marching_periods = False - self.digitalWriteObj = digital_rf.DigitalRFWriter("/home/jchavez/jicamarca/mocked_data/voltage", self.__dtype, sub_cadence_secs, + self.digitalWriteObj = digital_rf.DigitalRFWriter(path, self.__dtype, sub_cadence_secs, file_cadence_millisecs, start_global_index, sample_rate_numerator, sample_rate_denominator, uuid, compression_level, checksum, is_complex, num_subchannels, is_continuous, marching_periods) + + metadata_dir = os.path.join(path, 'metadata') + os.system('mkdir %s' % (metadata_dir)) + + self.digitalMetadataWriteObj = digital_rf.DigitalMetadataWriter(metadata_dir, 236, file_cadence_millisecs / 1000, + sample_rate_numerator, sample_rate_denominator, + metadataFile) self.isConfig = True - + self.currentSample = 0 return - def run(self, dataIn, path=None, **kwargs): + @coverage + def run(self, dataOut, path=None, **kwargs): ''' This method will be called many times so here you should put all your code Inputs: - dataIn : object with the data + dataOut : object with the data ''' - - self.dataOut = dataIn + #print dataOut.__dict__ + self.dataOut = dataOut if not self.isConfig: - self.setup(dataIn, path, **kwargs) + self.setup(dataOut, path, **kwargs) samples = len(self.dataOut.data[0]) for i in range(samples): - self.arr_data[i]['r'] = dataIn.data[0][i].real - self.arr_data[i]['i'] = dataIn.data[0][i].imag - - if dataIn.flagNoData: - self.digitalWriteObj.close() - + self.arr_data[i]['r'] = dataOut.data[0][i].real + self.arr_data[i]['i'] = dataOut.data[0][i].imag self.digitalWriteObj.rf_write(self.arr_data) - + start_idx = self.__sample_rate * dataOut.utctime + metadata_dict = {} + metadata_dict['frequency'] = 49.92e6 + metadata_dict['blablabla'] = 49.92e6 + self.currentSample += 1 + if self.dataOut.flagDataAsBlock: + self.digitalMetadataWriteObj.write(start_idx, metadata_dict) + elif self.currentSample == 1: + print '[Writing] - Writing metadata' + self.digitalMetadataWriteObj.write(start_idx, metadata_dict) + if self.currentSample == self.__nProfiles: self.currentSample = 0 + def close(self): + print '[Writing] - Closing files ' + self.digitalWriteObj.close() #raise if __name__ == '__main__': @@ -628,4 +650,4 @@ if __name__ == '__main__': while True: readObj.run(path='/home/jchavez/jicamarca/mocked_data/') # readObj.printInfo() - readObj.printNumberOfBlock() + #readObj.printNumberOfBlock() diff --git a/schainpy/scripts/schain.xml b/schainpy/scripts/schain.xml index f394593..ba1be9d 100644 --- a/schainpy/scripts/schain.xml +++ b/schainpy/scripts/schain.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/schainpy/scripts/testDigitalRFWriter.py b/schainpy/scripts/testDigitalRFWriter.py index 72f3285..a75c7de 100644 --- a/schainpy/scripts/testDigitalRFWriter.py +++ b/schainpy/scripts/testDigitalRFWriter.py @@ -25,8 +25,12 @@ if __name__ == '__main__': procUnitConfObj0 = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId()) + # opObj11 = procUnitConfObj0.addOperation(name='Scope', optype='external') + # opObj11.addParameter(name='id', value='121', format='int') + # opObj11.addParameter(name='wintitle', value='Scope', format='str') + opObj10 = procUnitConfObj0.addOperation(name='DigitalRFWriter', optype='other') - opObj10.addParameter(name='path', value='/home/jchavez/jicamarca/data_sink/', format='str') + opObj10.addParameter(name='path', value='/home/jchavez/jicamarca/mocked_data/voltage', format='str') # opObj10.addParameter(name='minHei', value='0', format='float') # opObj10.addParameter(name='maxHei', value='8', format='float')