diff --git a/schainpy/model/io/jroIO_digitalRF.py b/schainpy/model/io/jroIO_digitalRF.py
index 5bca03e..92aeb98 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
+import timeit
from profilehooks import coverage, profile
from fractions import Fraction
@@ -19,6 +20,7 @@ from schainpy.model.data.jroheaderIO import RadarControllerHeader, SystemHeader
from schainpy.model.data.jrodata import Voltage
from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation
from time import time
+
import cPickle
try:
import digital_rf
@@ -79,7 +81,7 @@ class DigitalRFReader(ProcessingUnit):
self.dataOut.heightList = self.__firstHeigth + numpy.arange(self.__nSamples, dtype = numpy.float)*self.__deltaHeigth
- self.dataOut.channelList = self.__channelList
+ self.dataOut.channelList = range(self.__num_subchannels)
self.dataOut.blocksize = self.dataOut.getNChannels() * self.dataOut.getNHeights()
@@ -223,12 +225,19 @@ class DigitalRFReader(ProcessingUnit):
top_properties = self.digitalReadObj.get_properties(channelNameList[channelList[0]])
+
+
+
+
+
+ self.__num_subchannels = top_properties['num_subchannels']
self.__sample_rate = 1.0 * top_properties['sample_rate_numerator'] / top_properties['sample_rate_denominator']
# self.__samples_per_file = top_properties['samples_per_file'][0]
self.__deltaHeigth = 1e6*0.15/self.__sample_rate ## why 0.15?
this_metadata_file = self.digitalReadObj.get_digital_metadata(channelNameList[channelList[0]])
+ print this_metadata_file
metadata_bounds = this_metadata_file.get_bounds()
self.fixed_metadata_dict = this_metadata_file.read(metadata_bounds[0])[metadata_bounds[0]] ## GET FIRST HEADER
self.__processingHeader = self.fixed_metadata_dict['processingHeader']
@@ -345,7 +354,7 @@ class DigitalRFReader(ProcessingUnit):
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
- self.__data_buffer = numpy.zeros((self.__nChannels, 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
@@ -413,28 +422,29 @@ class DigitalRFReader(ProcessingUnit):
dataOk = False
for thisChannelName in self.__channelNameList: ##TODO VARIOS CHANNELS?
- try:
- result = self.digitalReadObj.read_vector_c81d(self.__thisUnixSample,
- self.__samples_to_read,
- thisChannelName)
- except IOError, e:
- #read next profile
- self.__flagDiscontinuousBlock = True
- print "[Reading] %s" %datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), e
- break
+ for indexSubchannel in range(self.__num_subchannels):
+ try:
+ result = self.digitalReadObj.read_vector_c81d(self.__thisUnixSample,
+ self.__samples_to_read,
+ thisChannelName, sub_channel=indexSubchannel)
+ except IOError, e:
+ #read next profile
+ self.__flagDiscontinuousBlock = True
+ 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)
- 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)
+ break
- self.__data_buffer[indexChannel,:] = result*volt_scale
+ self.__data_buffer[indexSubchannel,:] = result*volt_scale
- indexChannel += 1
+ indexChannel += 1
- dataOk = True
+ dataOk = True
self.__utctime = self.__thisUnixSample/self.__sample_rate
@@ -601,12 +611,12 @@ class DigitalRFWriter(Operation):
compression_level = 1
checksum = False
is_complex = True
- num_subchannels = 2
+ num_subchannels = len(dataOut.channelList)
is_continuous = True
marching_periods = False
self.digitalWriteObj = digital_rf.DigitalRFWriter(path, self.__dtype, 100,
- 1000, start_global_index,
+ 100, start_global_index,
sample_rate_numerator, sample_rate_denominator, uuid, compression_level, checksum,
is_complex, num_subchannels, is_continuous, marching_periods)
@@ -620,6 +630,8 @@ class DigitalRFWriter(Operation):
self.isConfig = True
self.currentSample = 0
+ self.oldAverage = 0
+ self.count = 0
return
def writeMetadata(self):
@@ -638,7 +650,14 @@ class DigitalRFWriter(Operation):
for channel in self.dataOut.channelList:
self.arr_data[i][channel]['r'] = self.dataOut.data[channel][i].real
self.arr_data[i][channel]['i'] = self.dataOut.data[channel][i].imag
+ t0 = time()
self.digitalWriteObj.rf_write(self.arr_data)
+ 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)
+ self.count = self.count + 1.0
+ if self.oldAverage is None: self.oldAverage = self.executionTime
+
return
def run(self, dataOut, frequency=49.92e6, path=None, **kwargs):
@@ -661,6 +680,7 @@ class DigitalRFWriter(Operation):
def close(self):
print '[Writing] - Closing files '
+ print 'Average of writing to digital rf format is ', self.oldAverage * 1000
try:
self.digitalWriteObj.close()
except:
diff --git a/schainpy/scripts/schain.xml b/schainpy/scripts/schain.xml
index 5c1e9a9..4df59cd 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