diff --git a/schaincli/templates.py b/schaincli/templates.py index 9f1efde..29ad580 100644 --- a/schaincli/templates.py +++ b/schaincli/templates.py @@ -30,7 +30,7 @@ rti.addParameter(name='wr_period', value='5', format='int') rti.addParameter(name='exp_code', value='22', format='int') -controller.start() +project.start() ''' multiprocess = '''from schainpy.controller import Project, MPProject diff --git a/schainpy/model/data/jrodata.py b/schainpy/model/data/jrodata.py index 5cf58e6..b751aae 100644 --- a/schainpy/model/data/jrodata.py +++ b/schainpy/model/data/jrodata.py @@ -15,41 +15,43 @@ from schainpy import cSchain def getNumpyDtype(dataTypeCode): if dataTypeCode == 0: - numpyDtype = numpy.dtype([('real',' startUTCSecond*self.__sample_rate: - startUTCSecond = start_index/self.__sample_rate + if start_index > startUTCSecond * self.__sample_rate: + startUTCSecond = start_index / self.__sample_rate if not endUTCSecond: - endUTCSecond = end_index/self.__sample_rate + endUTCSecond = end_index / self.__sample_rate - if end_index < endUTCSecond*self.__sample_rate: - endUTCSecond = end_index/self.__sample_rate + if end_index < endUTCSecond * self.__sample_rate: + endUTCSecond = end_index / self.__sample_rate if not nSamples: if not ippKm: raise ValueError, "[Reading] nSamples or ippKm should be defined" - nSamples = int(ippKm / (1e6*0.15/self.__sample_rate)) + nSamples = int(ippKm / (1e6 * 0.15 / self.__sample_rate)) channelBoundList = [] channelNameListFiltered = [] for thisIndexChannel in channelList: - thisChannelName = channelNameList[thisIndexChannel] - start_index, end_index = self.digitalReadObj.get_bounds(thisChannelName) + thisChannelName = channelNameList[thisIndexChannel] + start_index, end_index = self.digitalReadObj.get_bounds( + thisChannelName) channelBoundList.append((start_index, end_index)) channelNameListFiltered.append(thisChannelName) self.profileIndex = 0 - self.i= 0 + self.i = 0 self.__delay = delay - + self.__codeType = codeType self.__nCode = nCode self.__nBaud = nBaud @@ -369,36 +387,44 @@ class DigitalRFReader(ProcessingUnit): self.__channelNameList = channelNameListFiltered self.__channelBoundList = channelBoundList self.__nSamples = nSamples - self.__samples_to_read = long(nSamples) # FIJO: AHORA 40 + self.__samples_to_read = long(nSamples) # FIJO: AHORA 40 self.__nChannels = len(self.__channelList) self.__startUTCSecond = startUTCSecond self.__endUTCSecond = endUTCSecond - self.__timeInterval = 1.0 * self.__samples_to_read/self.__sample_rate # Time interval + self.__timeInterval = 1.0 * self.__samples_to_read / \ + self.__sample_rate # Time interval if online: - # self.__thisUnixSample = int(endUTCSecond*self.__sample_rate - 4*self.__samples_to_read) + # self.__thisUnixSample = int(endUTCSecond*self.__sample_rate - 4*self.__samples_to_read) startUTCSecond = numpy.floor(endUTCSecond) - self.__thisUnixSample = long(startUTCSecond*self.__sample_rate) - self.__samples_to_read ## por que en el otro metodo lo primero q se hace es sumar samplestoread + # por que en el otro metodo lo primero q se hace es sumar samplestoread + self.__thisUnixSample = long( + startUTCSecond * self.__sample_rate) - self.__samples_to_read - self.__data_buffer = numpy.zeros((self.__num_subchannels, self.__samples_to_read), dtype = numpy.complex) + self.__data_buffer = numpy.zeros( + (self.__num_subchannels, self.__samples_to_read), dtype=numpy.complex) self.__setFileHeader() self.isConfig = True - print "[Reading] Digital RF Data was found from %s to %s " %( - datetime.datetime.utcfromtimestamp(self.__startUTCSecond - self.__timezone), - datetime.datetime.utcfromtimestamp(self.__endUTCSecond - self.__timezone) - ) - - print "[Reading] Starting process from %s to %s" %(datetime.datetime.utcfromtimestamp(startUTCSecond - self.__timezone), - datetime.datetime.utcfromtimestamp(endUTCSecond - self.__timezone) - ) + print "[Reading] Digital RF Data was found from %s to %s " % ( + datetime.datetime.utcfromtimestamp( + self.__startUTCSecond - self.__timezone), + datetime.datetime.utcfromtimestamp( + self.__endUTCSecond - self.__timezone) + ) + + print "[Reading] Starting process from %s to %s" % (datetime.datetime.utcfromtimestamp(startUTCSecond - self.__timezone), + datetime.datetime.utcfromtimestamp( + endUTCSecond - self.__timezone) + ) self.oldAverage = None self.count = 0 self.executionTime = 0 + def __reload(self): # print # print "%s not in range [%s, %s]" %( @@ -413,18 +439,21 @@ class DigitalRFReader(ProcessingUnit): except: self.digitalReadObj.reload() - start_index, end_index = self.digitalReadObj.get_bounds(self.__channelNameList[self.__channelList[0]]) + start_index, end_index = self.digitalReadObj.get_bounds( + self.__channelNameList[self.__channelList[0]]) - if start_index > self.__startUTCSecond*self.__sample_rate: - self.__startUTCSecond = 1.0*start_index/self.__sample_rate + if start_index > self.__startUTCSecond * self.__sample_rate: + self.__startUTCSecond = 1.0 * start_index / self.__sample_rate - if end_index > self.__endUTCSecond*self.__sample_rate: - self.__endUTCSecond = 1.0*end_index/self.__sample_rate + if end_index > self.__endUTCSecond * self.__sample_rate: + self.__endUTCSecond = 1.0 * end_index / self.__sample_rate print - print "[Reading] New timerange found [%s, %s] " %( - datetime.datetime.utcfromtimestamp(self.__startUTCSecond - self.__timezone), - datetime.datetime.utcfromtimestamp(self.__endUTCSecond - self.__timezone) - ) + print "[Reading] New timerange found [%s, %s] " % ( + datetime.datetime.utcfromtimestamp( + self.__startUTCSecond - self.__timezone), + datetime.datetime.utcfromtimestamp( + self.__endUTCSecond - self.__timezone) + ) return True @@ -434,12 +463,14 @@ class DigitalRFReader(ProcessingUnit): t0 = time() toExecute() self.executionTime = time() - t0 - if self.oldAverage is None: self.oldAverage = self.executionTime - self.oldAverage = (self.executionTime + self.count*self.oldAverage) / (self.count + 1.0) + if self.oldAverage is None: + self.oldAverage = self.executionTime + self.oldAverage = (self.executionTime + self.count * + self.oldAverage) / (self.count + 1.0) self.count = self.count + 1.0 return - def __readNextBlock(self, seconds=30, volt_scale = 1): + def __readNextBlock(self, seconds=30, volt_scale=1): ''' ''' @@ -447,21 +478,21 @@ class DigitalRFReader(ProcessingUnit): self.__flagDiscontinuousBlock = False self.__thisUnixSample += self.__samples_to_read - if self.__thisUnixSample + 2*self.__samples_to_read > self.__endUTCSecond*self.__sample_rate: + if self.__thisUnixSample + 2 * self.__samples_to_read > self.__endUTCSecond * self.__sample_rate: print "[Reading] There are no more data into selected time-range" if self.__online: self.__reload() else: return False - if self.__thisUnixSample + 2*self.__samples_to_read > self.__endUTCSecond*self.__sample_rate: + if self.__thisUnixSample + 2 * self.__samples_to_read > self.__endUTCSecond * self.__sample_rate: return False - self.__thisUnixSample -= self.__samples_to_read + self.__thisUnixSample -= self.__samples_to_read indexChannel = 0 dataOk = False - for thisChannelName in self.__channelNameList: ##TODO VARIOS CHANNELS? + for thisChannelName in self.__channelNameList: # TODO VARIOS CHANNELS? for indexSubchannel in range(self.__num_subchannels): try: t0 = time() @@ -469,47 +500,48 @@ class DigitalRFReader(ProcessingUnit): self.__samples_to_read, thisChannelName, sub_channel=indexSubchannel) self.executionTime = time() - t0 - if self.oldAverage is None: self.oldAverage = self.executionTime - self.oldAverage = (self.executionTime + self.count*self.oldAverage) / (self.count + 1.0) + if self.oldAverage is None: + self.oldAverage = self.executionTime + self.oldAverage = ( + self.executionTime + self.count * self.oldAverage) / (self.count + 1.0) self.count = self.count + 1.0 - + except IOError, e: - #read next profile + # read next profile self.__flagDiscontinuousBlock = True - print "[Reading] %s" %datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), e + print "[Reading] %s" % datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), e break if result.shape[0] != self.__samples_to_read: self.__flagDiscontinuousBlock = True - print "[Reading] %s: Too few samples were found, just %d/%d samples" %(datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), - result.shape[0], - self.__samples_to_read) + print "[Reading] %s: Too few samples were found, just %d/%d samples" % (datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), + result.shape[0], + self.__samples_to_read) break - self.__data_buffer[indexSubchannel,:] = result*volt_scale + self.__data_buffer[indexSubchannel, :] = result * volt_scale indexChannel += 1 dataOk = True - - self.__utctime = self.__thisUnixSample/self.__sample_rate + + self.__utctime = self.__thisUnixSample / self.__sample_rate if not dataOk: return False - print "[Reading] %s: %d samples <> %f sec" %(datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), - self.__samples_to_read, - self.__timeInterval) + print "[Reading] %s: %d samples <> %f sec" % (datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), + self.__samples_to_read, + self.__timeInterval) self.__bufferIndex = 0 return True def __isBufferEmpty(self): - return self.__bufferIndex > self.__samples_to_read - self.__nSamples #40960 - 40 + return self.__bufferIndex > self.__samples_to_read - self.__nSamples # 40960 - 40 def getData(self, seconds=30, nTries=5): - ''' This method gets the data from files and put the data into the dataOut object @@ -535,7 +567,7 @@ class DigitalRFReader(ProcessingUnit): while True: if self.__readNextBlock(): break - if self.__thisUnixSample > self.__endUTCSecond*self.__sample_rate: + if self.__thisUnixSample > self.__endUTCSecond * self.__sample_rate: return False if self.__flagDiscontinuousBlock: @@ -549,11 +581,13 @@ class DigitalRFReader(ProcessingUnit): if err_counter > nTries: return False - print '[Reading] waiting %d seconds to read a new block' %seconds + print '[Reading] waiting %d seconds to read a new block' % seconds sleep(seconds) - self.dataOut.data = self.__data_buffer[:,self.__bufferIndex:self.__bufferIndex+self.__nSamples] - self.dataOut.utctime = (self.__thisUnixSample + self.__bufferIndex)/self.__sample_rate + self.dataOut.data = self.__data_buffer[:, + self.__bufferIndex:self.__bufferIndex + self.__nSamples] + self.dataOut.utctime = ( + self.__thisUnixSample + self.__bufferIndex) / self.__sample_rate self.dataOut.flagNoData = False self.dataOut.flagDiscontinuousBlock = self.__flagDiscontinuousBlock self.dataOut.profileIndex = self.profileIndex @@ -583,12 +617,11 @@ class DigitalRFReader(ProcessingUnit): return # print self.profileIndex - def run(self, **kwargs): ''' This method will be called many times so here you should put all your code ''' - + if not self.isConfig: self.setup(**kwargs) #self.i = self.i+1 @@ -596,6 +629,7 @@ class DigitalRFReader(ProcessingUnit): return + class DigitalRFWriter(Operation): ''' classdocs @@ -607,7 +641,7 @@ class DigitalRFWriter(Operation): ''' Operation.__init__(self, **kwargs) self.metadata_dict = {} - self.dataOut = None + self.dataOut = None self.dtype = None def setHeader(self): @@ -624,7 +658,7 @@ class DigitalRFWriter(Operation): self.metadata_dict['flagDataAsBlock'] = self.dataOut.flagDataAsBlock self.metadata_dict['useLocalTime'] = self.dataOut.useLocalTime self.metadata_dict['nCohInt'] = self.dataOut.nCohInt - + return def setup(self, dataOut, path, frequency, fileCadence, dirCadence, metadataCadence, set=0, metadataFile='metadata', ext='.h5'): @@ -636,7 +670,7 @@ class DigitalRFWriter(Operation): self.setHeader() self.__ippSeconds = dataOut.ippSeconds self.__deltaH = dataOut.getDeltaH() - self.__sample_rate = 1e6*0.15/self.__deltaH + self.__sample_rate = 1e6 * 0.15 / self.__deltaH self.__dtype = dataOut.dtype if len(dataOut.dtype) == 2: self.__dtype = dataOut.dtype[0] @@ -644,16 +678,18 @@ class DigitalRFWriter(Operation): self.__nProfiles = dataOut.nProfiles self.__blocks_per_file = dataOut.processingHeaderObj.dataBlocksPerFile - self.arr_data = arr_data = numpy.ones((self.__nSamples, len(self.dataOut.channelList)), dtype=[('r', self.__dtype), ('i', self.__dtype)]) + self.arr_data = arr_data = numpy.ones((self.__nSamples, len( + self.dataOut.channelList)), 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 + file_cadence_millisecs = long( + 1.0 * self.__blocks_per_file * self.__nProfiles * self.__nSamples / self.__sample_rate) * 1000 sub_cadence_secs = file_cadence_millisecs / 500 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 = dataOut.utctime * self.__sample_rate - + uuid = 'prueba' compression_level = 1 checksum = False @@ -663,45 +699,47 @@ class DigitalRFWriter(Operation): marching_periods = False self.digitalWriteObj = digital_rf.DigitalRFWriter(path, self.__dtype, dirCadence, - fileCadence, start_global_index, - sample_rate_numerator, sample_rate_denominator, uuid, compression_level, checksum, - is_complex, num_subchannels, is_continuous, marching_periods) - + fileCadence, 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, dirCadence, 1, ##236, file_cadence_millisecs / 1000 - sample_rate_numerator, sample_rate_denominator, - metadataFile) + self.digitalMetadataWriteObj = digital_rf.DigitalMetadataWriter(metadata_dir, dirCadence, 1, # 236, file_cadence_millisecs / 1000 + sample_rate_numerator, sample_rate_denominator, + metadataFile) self.isConfig = True self.currentSample = 0 self.oldAverage = 0 self.count = 0 return - + def writeMetadata(self): print '[Writing] - Writing metadata' start_idx = self.__sample_rate * self.dataOut.utctime - - self.metadata_dict['processingHeader'] = self.dataOut.processingHeaderObj.getAsDict() - self.metadata_dict['radarControllerHeader'] = self.dataOut.radarControllerHeaderObj.getAsDict() - self.metadata_dict['systemHeader'] = self.dataOut.systemHeaderObj.getAsDict() + + self.metadata_dict['processingHeader'] = self.dataOut.processingHeaderObj.getAsDict( + ) + self.metadata_dict['radarControllerHeader'] = self.dataOut.radarControllerHeaderObj.getAsDict( + ) + self.metadata_dict['systemHeader'] = self.dataOut.systemHeaderObj.getAsDict( + ) self.digitalMetadataWriteObj.write(start_idx, self.metadata_dict) return - def timeit(self, toExecute): t0 = time() toExecute() self.executionTime = time() - t0 - if self.oldAverage is None: self.oldAverage = self.executionTime - self.oldAverage = (self.executionTime + self.count*self.oldAverage) / (self.count + 1.0) + if self.oldAverage is None: + self.oldAverage = self.executionTime + self.oldAverage = (self.executionTime + self.count * + self.oldAverage) / (self.count + 1.0) self.count = self.count + 1.0 return - def writeData(self): for i in range(self.dataOut.systemHeaderObj.nSamples): for channel in self.dataOut.channelList: @@ -710,9 +748,9 @@ class DigitalRFWriter(Operation): def f(): return self.digitalWriteObj.rf_write(self.arr_data) self.timeit(f) - + return - + def run(self, dataOut, frequency=49.92e6, path=None, fileCadence=100, dirCadence=25, metadataCadence=1, **kwargs): ''' This method will be called many times so here you should put all your code @@ -722,14 +760,15 @@ class DigitalRFWriter(Operation): # print dataOut.__dict__ self.dataOut = dataOut if not self.isConfig: - self.setup(dataOut, path, frequency, fileCadence, dirCadence, metadataCadence, **kwargs) + self.setup(dataOut, path, frequency, fileCadence, + dirCadence, metadataCadence, **kwargs) self.writeMetadata() self.writeData() - + ## self.currentSample += 1 - ## if self.dataOut.flagDataAsBlock or self.currentSample == 1: - ## self.writeMetadata() + # if self.dataOut.flagDataAsBlock or self.currentSample == 1: + # self.writeMetadata() ## if self.currentSample == self.__nProfiles: self.currentSample = 0 def close(self): @@ -739,7 +778,7 @@ class DigitalRFWriter(Operation): self.digitalWriteObj.close() except: pass - + # raise if __name__ == '__main__': @@ -748,4 +787,4 @@ if __name__ == '__main__': while True: readObj.run(path='/home/jchavez/jicamarca/mocked_data/') # readObj.printInfo() - # readObj.printNumberOfBlock() + # readObj.printNumberOfBlock() diff --git a/schainpy/model/proc/jroproc_voltage.py b/schainpy/model/proc/jroproc_voltage.py index 61c6ed9..9dbece2 100644 --- a/schainpy/model/proc/jroproc_voltage.py +++ b/schainpy/model/proc/jroproc_voltage.py @@ -616,7 +616,6 @@ class Decoder(Operation): def __convolutionInTime(self, data): code = self.code[self.__profIndex] - for i in range(self.__nChannels): self.datadecTime[i,:] = numpy.correlate(data[i,:], code, mode='full')[self.nBaud-1:] @@ -666,7 +665,6 @@ class Decoder(Operation): code = dataOut.code else: code = numpy.array(code).reshape(nCode,nBaud) - self.setup(code, osamp, dataOut) self.isConfig = True