diff --git a/.gitignore b/.gitignore index f287ae7..d63b165 100644 --- a/.gitignore +++ b/.gitignore @@ -101,4 +101,8 @@ ENV/ .project .pydevproject +# vscode + +.vscode + schainpy/scripts/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 500bc70..9b1c9b9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "python.linting.pylintEnabled": true + "python.linting.pylintEnabled": true, + "git.ignoreLimitWarning": true } \ No newline at end of file diff --git a/schainpy/model/data/jroheaderIO.py b/schainpy/model/data/jroheaderIO.py index 4e88ab1..a869f36 100644 --- a/schainpy/model/data/jroheaderIO.py +++ b/schainpy/model/data/jroheaderIO.py @@ -132,18 +132,17 @@ class BasicHeader(Header): def read(self, fp): + self.length = 0 try: if hasattr(fp, 'read'): - print 'fromfile' header = numpy.fromfile(fp, BASIC_STRUCTURE,1) else: - print 'fromstring' header = numpy.fromstring(fp, BASIC_STRUCTURE,1) except Exception, e: print "BasicHeader: " print e return 0 - + self.size = int(header['nSize'][0]) self.version = int(header['nVersion'][0]) self.dataBlock = int(header['nDataBlockId'][0]) @@ -155,7 +154,8 @@ class BasicHeader(Header): if self.size < 24: return 0 - + + self.length = header.nbytes return 1 def write(self, fp): @@ -200,13 +200,20 @@ class SystemHeader(Header): self.pciDioBusWidth = pciDioBusWith def read(self, fp): - - startFp = fp.tell() - + self.length = 0 try: - header = numpy.fromfile(fp,SYSTEM_STRUCTURE,1) + startFp = fp.tell() except Exception, e: - print "System Header: " + e + startFp = None + pass + + try: + if hasattr(fp, 'read'): + header = numpy.fromfile(fp, SYSTEM_STRUCTURE,1) + else: + header = numpy.fromstring(fp, SYSTEM_STRUCTURE,1) + except Exception, e: + print "System Header: " + str(e) return 0 self.size = header['nSize'][0] @@ -216,16 +223,19 @@ class SystemHeader(Header): self.adcResolution = header['nADCResolution'][0] self.pciDioBusWidth = header['nPCDIOBusWidth'][0] - endFp = self.size + startFp - if fp.tell() > endFp: - sys.stderr.write("Warning %s: Size value read from System Header is lower than it has to be\n" %fp.name) - return 0 + if startFp is not None: + endFp = self.size + startFp - if fp.tell() < endFp: - sys.stderr.write("Warning %s: Size value read from System Header size is greater than it has to be\n" %fp.name) - return 0 + if fp.tell() > endFp: + sys.stderr.write("Warning %s: Size value read from System Header is lower than it has to be\n" %fp.name) + return 0 + + if fp.tell() < endFp: + sys.stderr.write("Warning %s: Size value read from System Header size is greater than it has to be\n" %fp.name) + return 0 + self.length = header.nbytes return 1 def write(self, fp): @@ -302,13 +312,21 @@ class RadarControllerHeader(Header): self.fClock = 0.15/(deltaHeight*1e-6) #0.15Km / (height * 1u) def read(self, fp): - - - startFp = fp.tell() + self.length = 0 try: - header = numpy.fromfile(fp,RADAR_STRUCTURE,1) + startFp = fp.tell() except Exception, e: - print "RadarControllerHeader: " + e + startFp = None + pass + + try: + if hasattr(fp, 'read'): + header = numpy.fromfile(fp, RADAR_STRUCTURE,1) + else: + header = numpy.fromstring(fp, RADAR_STRUCTURE,1) + self.length += header.nbytes + except Exception, e: + print "RadarControllerHeader: " + str(e) return 0 size = int(header['nSize'][0]) @@ -329,23 +347,64 @@ class RadarControllerHeader(Header): self.rangeTxA = header['sRangeTxA'][0] self.rangeTxB = header['sRangeTxB'][0] - samplingWindow = numpy.fromfile(fp,SAMPLING_STRUCTURE,self.nWindows) - + try: + if hasattr(fp, 'read'): + samplingWindow = numpy.fromfile(fp, SAMPLING_STRUCTURE, self.nWindows) + else: + samplingWindow = numpy.fromstring(fp[self.length:], SAMPLING_STRUCTURE, self.nWindows) + self.length += samplingWindow.nbytes + except Exception, e: + print "RadarControllerHeader: " + str(e) + return 0 self.nHeights = int(numpy.sum(samplingWindow['nsa'])) self.firstHeight = samplingWindow['h0'] self.deltaHeight = samplingWindow['dh'] self.samplesWin = samplingWindow['nsa'] + + + + try: + if hasattr(fp, 'read'): + self.Taus = numpy.fromfile(fp, ' endFp: - sys.stderr.write("Warning %s: Size value read from Radar Controller header is lower than it has to be\n" %fp.name) -# return 0 - - if fp.tell() < endFp: - sys.stderr.write("Warning %s: Size value read from Radar Controller header is greater than it has to be\n" %fp.name) + if startFp is not None: + endFp = size + startFp + if fp.tell() != endFp: + # fp.seek(endFp) + print "%s: Radar Controller Header size is not consistent: from data [%d] != from header field [%d]" %(fp.name, fp.tell()-startFp, size) + # return 0 + + if fp.tell() > endFp: + sys.stderr.write("Warning %s: Size value read from Radar Controller header is lower than it has to be\n" %fp.name) + # return 0 + + if fp.tell() < endFp: + sys.stderr.write("Warning %s: Size value read from Radar Controller header is greater than it has to be\n" %fp.name) + return 1 def write(self, fp): @@ -512,15 +571,23 @@ class ProcessingHeader(Header): self.flag_cspc = False self.flag_decode = False self.flag_deflip = False - + self.length = 0 def read(self, fp): - - startFp = fp.tell() + self.length = 0 + try: + startFp = fp.tell() + except Exception, e: + startFp = None + pass try: - header = numpy.fromfile(fp,PROCESSING_STRUCTURE,1) + if hasattr(fp, 'read'): + header = numpy.fromfile(fp, PROCESSING_STRUCTURE, 1) + else: + header = numpy.fromstring(fp, PROCESSING_STRUCTURE, 1) + self.length += header.nbytes except Exception, e: - print "ProcessingHeader: " + e + print "ProcessingHeader: " + str(e) return 0 size = int(header['nSize'][0]) @@ -534,14 +601,31 @@ class ProcessingHeader(Header): self.nIncohInt = int(header['nIncoherentIntegrations'][0]) self.totalSpectra = int(header['nTotalSpectra'][0]) - samplingWindow = numpy.fromfile(fp,SAMPLING_STRUCTURE,self.nWindows) + try: + if hasattr(fp, 'read'): + samplingWindow = numpy.fromfile(fp, SAMPLING_STRUCTURE, self.nWindows) + else: + samplingWindow = numpy.fromstring(fp[self.length:], SAMPLING_STRUCTURE, self.nWindows) + self.length += samplingWindow.nbytes + except Exception, e: + print "ProcessingHeader: " + str(e) + return 0 self.nHeights = int(numpy.sum(samplingWindow['nsa'])) self.firstHeight = float(samplingWindow['h0'][0]) self.deltaHeight = float(samplingWindow['dh'][0]) self.samplesWin = samplingWindow['nsa'][0] - self.spectraComb = numpy.fromfile(fp,'u1',2*self.totalSpectra) + + try: + if hasattr(fp, 'read'): + self.spectraComb = numpy.fromfile(fp, 'u1', 2*self.totalSpectra) + else: + self.spectraComb = numpy.fromstring(fp[self.length:], 'u1', 2*self.totalSpectra) + self.length += self.spectraComb.nbytes + except Exception, e: + print "ProcessingHeader: " + str(e) + return 0 if ((self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE) == PROCFLAG.DEFINE_PROCESS_CODE): self.nCode = int(numpy.fromfile(fp,' 0: self.flag_cspc = True - endFp = size + startFp - if fp.tell() > endFp: - sys.stderr.write("Warning: Processing header size is lower than it has to be") - return 0 - - if fp.tell() < endFp: - sys.stderr.write("Warning: Processing header size is greater than it is considered") + + if startFp is not None: + endFp = size + startFp + if fp.tell() > endFp: + sys.stderr.write("Warning: Processing header size is lower than it has to be") + return 0 + + if fp.tell() < endFp: + sys.stderr.write("Warning: Processing header size is greater than it is considered") return 1 diff --git a/schainpy/model/graphics/jroplot_voltage.py b/schainpy/model/graphics/jroplot_voltage.py index a9f3993..927b819 100644 --- a/schainpy/model/graphics/jroplot_voltage.py +++ b/schainpy/model/graphics/jroplot_voltage.py @@ -13,8 +13,8 @@ class Scope(Figure): isConfig = None - def __init__(self): - + def __init__(self, **kwargs): + Figure.__init__(self, **kwargs) self.isConfig = False self.WIDTH = 300 self.HEIGHT = 200 diff --git a/schainpy/model/io/jroIO_base.py b/schainpy/model/io/jroIO_base.py index 47f0b08..1ebc6b2 100644 --- a/schainpy/model/io/jroIO_base.py +++ b/schainpy/model/io/jroIO_base.py @@ -994,9 +994,9 @@ class JRODataReader(JRODataIO): self.__isFirstTimeOnline = 0 def __setNewBlock(self): - if self.server is None: - if self.fp == None: - return 0 + #if self.server is None: + if self.fp == None: + return 0 # if self.online: # self.__jumpToLastBlock() @@ -1013,23 +1013,23 @@ class JRODataReader(JRODataIO): else: return 1 print 'xxxx' - if self.server is None: - currentSize = self.fileSize - self.fp.tell() - neededSize = self.processingHeaderObj.blockSize + self.basicHeaderSize - if (currentSize >= neededSize): - self.basicHeaderObj.read(self.fp) - self.lastUTTime = self.basicHeaderObj.utc - return 1 - else: - self.basicHeaderObj.read(self.zHeader) + #if self.server is None: + currentSize = self.fileSize - self.fp.tell() + neededSize = self.processingHeaderObj.blockSize + self.basicHeaderSize + if (currentSize >= neededSize): + self.basicHeaderObj.read(self.fp) self.lastUTTime = self.basicHeaderObj.utc return 1 + # else: + # self.basicHeaderObj.read(self.zHeader) + # self.lastUTTime = self.basicHeaderObj.utc + # return 1 if self.__waitNewBlock(): self.lastUTTime = self.basicHeaderObj.utc return 1 - if self.server is None: - if not(self.setNextFile()): - return 0 + #if self.server is None: + if not(self.setNextFile()): + return 0 deltaTime = self.basicHeaderObj.utc - self.lastUTTime # self.lastUTTime = self.basicHeaderObj.utc @@ -1290,7 +1290,7 @@ class JRODataReader(JRODataIO): self.server = address self.context = zmq.Context() self.receiver = self.context.socket(zmq.PULL) - self.receiver.bind(self.server) + self.receiver.connect(self.server) time.sleep(0.5) print '[Starting] ReceiverData from {}'.format(self.server) else: @@ -1503,8 +1503,10 @@ class JRODataReader(JRODataIO): server=server, verbose=verbose) self.isConfig = True - print 'hola' - self.getData() + if server is None: + self.getData() + else: + self.getFromServer() class JRODataWriter(JRODataIO): diff --git a/schainpy/model/io/jroIO_voltage.py b/schainpy/model/io/jroIO_voltage.py index 8362cb7..9d1dec2 100644 --- a/schainpy/model/io/jroIO_voltage.py +++ b/schainpy/model/io/jroIO_voltage.py @@ -11,6 +11,8 @@ from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation from schainpy.model.data.jroheaderIO import PROCFLAG, BasicHeader, SystemHeader, RadarControllerHeader, ProcessingHeader from schainpy.model.data.jrodata import Voltage import zmq +import tempfile +from StringIO import StringIO # from _sha import blocksize class VoltageReader(JRODataReader, ProcessingUnit): @@ -216,17 +218,17 @@ class VoltageReader(JRODataReader, ProcessingUnit): """ print 'READ BLOCK' - if self.server is not None: - self.zBlock = self.receiver.recv() - self.zHeader = self.zBlock[:24] - self.zDataBlock = self.zBlock[24:] - junk = numpy.fromstring(self.zDataBlock, numpy.dtype([('real',' \ No newline at end of file + \ No newline at end of file