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')